M.A.X.    Вы вошли как гость
Российский Клуб игроков M.A.X.
 
[Новости]   [Новичку]   [Энциклопедия]   [Документы]   [Файлы]   [Игроки]   [Архивы]   [Архив форума]  
[Новый сайт]   [M.A.X. Gold]   [Партии]  

 
 
 
Архив форума  МаксГолд
[Основной форум] [Голосования] [МаксГолд] [Off-Topic]
 


Итак  -  Artlav,  09.06.2010  15:33:30

Стейты меню - штука корявая, не спорю.
Они делятся на две группы:

//Настройка (zmnunum), касается только графики
MS_MULTIPLAYER=0;
MS_OPTIONS =1;
MS_CLANSELECT =2;
MS_BUYUPGRADE =3;
MS_LOADSAVE =4;
MS_LOAD =41;
MS_SAVE =42;
MS_SINGLE =5;
MS_PLAYERSETUP=6;
MS_MAPSELECT =7;
MS_MAINMENU =10;

//Игра (gmnunum), касается ядра и графики
MG_NOMENU =0;
MG_DEBUG =1;
MG_BUILD =2;
MG_XFER =3;
MG_DEPOT =4;
MG_BOOM =5;
MG_UPGRLAB =6;
MG_MINE =7;
MG_SAVELOAD =8;
MG_UNITINFO =9;
MG_UPGRMONEY =10;
MG_REPORT =13;

##1. Создать для них константы. Всё равно в коде во многих местах стоят коменты. С константами нагляднее намного.

Согласен, реализовано, подправлено.

##2. Номера сделать полностью уникальными. Не только в пределах стейтов, а вообще уникальными. Константы частично решают возложенную проблему, но уникальные id ещё лучше. По этому id можно сразу стейт определить. Я бы предложил 3х значный id - первая цифра номер стейта (сдвинуть их на 1, чтобы со 100 начиналась нумерация, то есть стейт ST_THEMENU будет 1, стейт ST_THEGAME будет 2 и так далее), а последние две цифры - это id диалога. Например Options будет 100+1=101, Boom будет 205.

Номера уникальные в пределах соответствующей половины игры, уже было, сломано, восстановлено.

##3. В функции calcmnuinfo, draw_framemnu, sdimenuok, onmnubtn и возможно другие добавить все эти константы вместо цифт и коментов.

Согласен, реализовано, подправлено.
Коменты всё равно не лишние.

##4. Разделить функции из пункта 3, а также draw_framemnu, draw_framedyn, draw_framebase и подобные, а также mg_msdown, onmnubtn, mg_keydown, mg_keyup и подобные по стейтам. Вызывать из оригиналов эти кусочки.

Согласен, буду ещё менять и дробить.

##5. Разделить обработчик кнопок ionmnubtn на обработчики по стейтам.

Этот обработчик эквивалентен событию onClick в Delphi, привязка идёт к кнопкам а не к стейтам, меню.
Получается конечно месиво, которое можно разбить на части но не по стейтам.


И последнее - к изменениям таких масштабов лучше не приступать без предварительного согласования, а то есть вероятность взаимной аннигиляции проделанного труда.