Компромиссное решение проблемы с сохраняемыми кейвалюями
После размышлений и чтений предложений на форуме я пришёл вот к такому решению. Принципы решения такие:
1) Редактор ничего не должен удалять сам.
2) Юзер должен понимать, что что-то может пойти не так - и что именно.
3) Юзер должен иметь возможность удалить вручную, но быстро.
4) Это должно быть отменяемо.
Вот что получается. Предположим, что у нас есть (чужая) карта, на которой есть light, у которого есть поле "_light" в FGD, но автор карты задал поле "light" (ну может, это был некачественный конверт карты из волатилы?). В этом случае редактор ничего не сообщает. Мало ли, что было задумано?
Теперь отключим смарт-мод. Видим, что наше "левое" поле подсвечено светло-розовым. Я специально выбрал очень слабую подсветку, чтобы она не отвлекала во всяких мульти-менеджерах, но в то же время была заметна. Так подсвечиваются все поля, которые не найдены в FGD.
Теперь крутанём список энтитей и выберем light_environment. Вот тут уже редактор заподозрит неладное и выдаст жёлтый восклицательный знак: "у энтити есть поля, не прописанные в FGD!"
И без смарт-мода (обратите внимание - редактор удаляет дефолтовые поля, которые добавлял не сам юзер, а которые пришли из фгд; эта фича присутствует уже очень давно).
А чтобы почистить эти красные (т.е. пользовательские) поля, есть кнопка PURGE. Её нажатие - и есть волшебная палочка, которая всё исправляет.
Ну и конечно же, это действие можно отменить по Ctrl+Z (ну или в случае Дяди Миши, включить музыку).
Я думаю самое ценное - это проинформировать юзера. А что делать со всем этим говном, пусть он сам решает. Главное их не прятять ни в коем случае ни в каком из режимов. Вот корень всех бед - спрятанные поля.
thambs писал: Вообще не въехал в общий принцип по которому помечается розовым или жёлтым
Розовым в режиме отключенного смарта всегда помечаются все поля, которых нет в FGD. Восклицательный знак предупреждает пользователя, что у новой энтити есть поля, которых нет в FGD. Он появляется и в режиме смарта, и без него.
Цитата:
thambs писал: Восклицательный знак срабатывает только при смене класснэйма?
Да, только после смены класса. Если, не закрывая диалог, вернуть старый класс - он пропадает.
А эти "розовый" и "красный" можно поменять или сделать ярче через настройки редактора? Просто даже помимо дальтоников, есть огромный % людей со слабым цветовосприятием. Я например вообще не узнал бы, что там поля некоторые подсвечены, если бы в тексте не было написано.
qpAHToMAS
Нет, нельзя. Это не цвет, задаваемый в редакторе, это модифицируется системный цвет. Т.е. если у тебя будет контрастная цветовая тема с чёрной подложкой, то цвет будет тёмно-тёмно-красный, а не светло-розовый. Попробую придумать какую-нибудь опцию в VDKSettings.ini.
Цитата:
qpAHToMAS писал: Просто даже помимо дальтоников, есть огромный % людей со слабым цветовосприятием
Насчёт огромного процента - ты уверен? Потому как некоторые до сих пор настаивают на поддержке Windows XP с точно таким же аргументом - "огромный процент людей на ней до сих пор сидит".
Добавлено 13-11-2019 в 15:05:
Цитата:
Дядя Миша писал: Я так полагаю, что они еще не подсвечены, а это появится только после апдейта.
Да, апдейта ещё не было.
Так он, я так понял, на картинке не видит эту подсветку.
1) Исправлен баг: Джек не удаляет автоматически добавленные ключи энтитей, если смена класса проводилась через несуществующий класс. Оказывается, есть люди, которые меняют класс не из списка, а вводя его вручную. Представляете? Т.е. человек создавал func_breakable, скажем, затем удалял то, что написано после func_, и дописывал туда pu... (ну а дальше редактор подставлял). И в этом случае автоматические поля бреакабля перекочёвывали в пушабль, что иногда приводило к багам.
2) Параметр EpairsHighlightRed в VDKSettings.ini позволяет регулировать яркость подсветки. По дефолту он равен 0.1, что в случае светлой цветовой схемы и белого фона соответствует светло-розовому фону (зелёный и синий каналы умножаются на 0.9). Если поставить 0, то подсветки не будет вообще. Для тёмных схем формула чуть сложнее, там "вытягивается" красный компонент.
3) По реквесту сделал регулируемым число последних используемых текстур в списке: параметр MaxRecentShaders в VDKSettings.ini. Если поставить 0, то последние текстуры вообще не будут запоминаться.