Сначала скину макет того, как я себе представлял редактор, далее распишу, что хотел реализовать.
Скрины (много) [Показать]
Кратко про то, что я делал и было уже реализовано:
1. Редактор называется Text Draw Engine. Сокращённо получается TDE, как самая популярная программа для редактирования.
2. При входе в редактор выбор Создать / Загрузить проект. Далее внизу отображается меню, которое можно передвинуть нажав на троеточие слева. В этом меню отображаются только те кнопки, которые доступны на данный момент. То есть если никакой TD не выбран, доступно только управление нынешними (кнопка с тремя полосками) и создать TD.
3. В создании TD доступно всего 3 типа Текст, Бокс (спрайт), Модель. Именно боксы я не включал в список, так как никогда ими не пользовался, а лимита спрайтов в 100 шт никогда не достигал (даже при создании своего инвентаря, где я упёрся в лимит локальных TD). При выборе определённого типа, доступны только те элементы управления, которые влияют на сам TD, если это текст, нет ничего, что будет связано с моделью и т.п. (именно в скринах недоделан этот тип по кнопкам, остальные типы более менее готовы были).
4. Я всё делал исключительно на Pawn, то есть весь интерфейс - это PlayerText, а создаваемые TD - Text. Перемещение элементов, изменение размера или вращение делал на стрелочки, это в разы удобнее, чем использовать мышку. Также я сделал в правой части параметры для стрелок - шаг изменения (1, 5, 0.5) и возможность удерживать клавишу для изменения или единое нажатие. Казалось бы, где это может быть нужно? Но при использовании TDE я всегда сталкивался с тем, что мне необходимо двинуть элемент чуть в сторону и делать это с помощью мыши - ужас как не удобно.
5. Главное, что необходимо реализовать, это отображение нынешней позиции, размера, углов и т.д. в этом меню. Невозможно работать в TDE, когда необходимо узнать позицию/размер, для этого необходимо выбирать и двигать элемент. Так же хотел сделать с цветом, но это ещё не реализовал.
6. Также я сделал защиту от выхода за пределы рабочей области. То есть при движении стрелками или прямое указание размера не могло выйти за 0.0/640.0 / 0.0/448.0
Теперь о той концепции, которую я хотел реализовать.
1. Каждый TD - этой отдельный слой, как в Photoshop. То есть работа с ним происходит подобным образом.
2. Возможность выгрузить проект в фоновый режим. Что это? Я создал какой-то фон из TD, например бэкграунд инвентаря, где расположены основные элементы управления, далее выгружаю его, как отдельный проект, который будет отображаться на экране, но с ним никак нельзя взаимодействовать. Все последующие TD создаются в новом проекте. Сейчас, чтобы подобное сделать в TDE, нужно создавать копию файла (в projects), удалять лишние строки, загружать эту версию и работать с ней. При этом возможность как-то задеть тот самый бэк остаётся, что критично для больших систем.
3. Ключевой момент, это возможность создавать Группу и Компонент. Как это реализовано, можно посмотреть в Google SketchUp. Попробую в кратце объяснить.
- Группа, создаётся несколько TD, через меню выбираем какие необходимы, выбираем "Объединить в группу", это единый элемент, переместив один TD, за ним будут тянуться все остальные сохраняя смещения относительно друг друга. Копируя группу, она сохраняет все параметры, становясь отдельным элементом.
- Компонент, подобен Группе, только при копировании это не является отдельным элементом, а является "ссылкой" на основной элемент (они все связаны между собой, нет отдельно основного, редактировать можно любой). Компонент можно перемещать отдельно друг от друга, но если какой-то TD изменить в компоненте, это изменение коснётся всех связанных компонентов (копий). То есть, если я делаю инвентарь, мне достаточно сделать 1 слот, расставив текст, модель, и т.д. далее, я объединяю это в компонент и копирую. Теперь, если мне необходимо поправить что-то, достаточно это изменить в одном слоте, а не менять в каждом. Вопрос не в том, что в коде всё создаётся через цикл, а в том, что многое необходимо сделать визуально, чтобы было от чего отталкиваться, а не подгонять потом кодом.
4. Ещё что хотелось реализовать, это динамические функции внутри редактора, берём пример выше (инвентарь - слоты). В самом редакторе сделать возможность создать сетку из элементов, указав расстояние по X и Y между элементами. Если это группа/элемент, указать расстояние между ними, далее редактор сам создаёт копию элементов. В любой момент можно изменить количество строк/столбцов. Ещё одна из функций, это подобно ProgressBar, чтобы я мог из редактора задать min и max размеры для TD, которые могут быть.
5. SMART экспорт. Всё что выше описано, экспортировать сразу в код таким образом, чтобы это имело свои макросы, константы, переменные и функции. Грубо говоря, готовый код.
Возможно, что-то упустил из того, что сам хотел сделать, нигде не записывал, всё держу в голове

Если что, допишу.
Поэтому если и делать новый TDE, то делать сразу крутой и полезный. Лично я не сделал такое, только потому что нет понимая - нужно это людям или нет, а также не разбирал подробно моменты экспорта, что ставило в тупик, сделав всю работу, смогу ли я это перенести в txt файл, чтобы это потом работало в pwn/inc файле
Если действительно захочешь что-то подобное реализовать и нужна будет помощь - пиши, обязательно помогу
Сообщение отредактировал M I S T E V: 07 июля 2025 - 21:22