Собственно говоря за что отвечает файл mainmenu.c? Он отвечает за основной интерфейс в игре. Я буду разбирать файл из ПКМ. Этот урок так же подойдет тем, кто программирует и в К:ГПК. Суть везде одинаковая, но только, что в К:ГПК не много изменено меню на более реалистичное, будто заставка из игры. Я разделю этот урок на две части. В первой части будет разбор функции void InitInterface, а во второй буду перечислять функции и их предназначение...
//Устроенно таким методом, выбираем меню B_NEWGAME - запускается меню игры, (то есть сама игра.), выбираем меню B_CREDITS запускаются титры и так далее, и тому подобное... SetSelectable("B_NEWGAME",sti(InterfaceStates.Buttons.New.enable)); SetSelectable("B_RESUMEGAME",sti(InterfaceStates.Buttons.Resume.enable)); SetSelectable("B_LOAD",sti(InterfaceStates.Buttons.Load.enable)); SetSelectable("B_SAVE",sti(InterfaceStates.Buttons.Save.enable)); SetSelectable("B_FAQ",sti(InterfaceStates.Buttons.FAQ.enable)); SetSelectable("B_OPTIONS",sti(InterfaceStates.Buttons.Options.enable)); SetSelectable("B_CONTROLS",sti(InterfaceStates.Buttons.Controls.enable)); SetSelectable("B_CREDITS",sti(InterfaceStates.Buttons.Credits.enable)); SetSelectable("B_QUIT",sti(InterfaceStates.Buttons.Quit.enable)); SetSelectable("B_BETTAMODE",sti(InterfaceStates.Buttons.BettaMode.enable));
if(bSeaActive) SetSelectable("B_SAVE",false); //Запрет, в данном случае меню "B_SAVE" (сохранений) в море. "Запрет" осуществляется значением false. if(LAi_IsBoardingProcess()) SetSelectable("B_SAVE",false); //Запрет меню сейва во время абордажа
//секция BACKPICTURE. Такую секцию вы можете встретить в файле меню с расширением ini (файл конфигурации Windows). А именно mainmenu.ini Это изображение в ГМ (главное меню). В данном случае - это папка. SendMessage(&GameInterface,"lsls",MSG_INTERFACE_MSG_TO_NODE,"BACKPICTURE",3, "interfaces\mainback");
// надпись в меню. Например, версия игры, разработческий ник, всё, что угодно. 1-е состояние, true - есть, false - нет. 2-е название строки. 3-е без понятия... =( //4-е шрифт. 5-е цвет шрифта. 6-е положение по оси х. 7-е положение по оси у. 8-е выравние (как в Microsoft Office. Справа, слева, по центру). 9-е расстояние для предыдущего параметра CreateString(true,"Name",isUsersName,FONT_NORMAL,COLOR_NORMAL,20,430,SCRIPT_ALIGN_LEFT,0.5);
//Точно объяснить не смогу... Это процессы. --> SetEventHandler("InterfaceBreak","ProcessBreakExit",0); //процесс хода назад, что ли SetEventHandler("exitCancel","ProcessCancelExit",0); //процесс отмены SetEventHandler("ConfirmYes","ProcessDelete_yes",0); //процесс удаления - соглашение SetEventHandler("ConfirmNo","ProcessDelete_no",0); //процесс удаления - отрицание SetEventHandler("ResumeGamePress","ResumeGamePress",0); //процесс "Возобновить меню". Поясняю, например, в игре Вы вышли в меню, и что бы продолжить игру, Вы должны нажать клавишу Esc или "Продолжить игру". Этот процесс и отвечает за возобновлении игры SetEventHandler("QuitPress","QuitPress",0); //процесс выхода
SetEventHandler("UpPress","UpPress",0); //процесс подъёма вверх. То есть, перехода меню выбора наверх. Например, "Продолжить игру", благодаря этому процессу можно переместиться наверх => "Новая игра". Думаю, что вы поняли? :)) SetEventHandler("DownPress","DownPress",0); //тоже самое, что и в предыдущей строке, но только процесс перехода вниз. SetEventHandler("ievnt_command","ProcCommand",0); SetEventHandler("BreakExit","procBreakExit",0); SetEventHandler("CheckAgain","procCheckAgain",0); SetEventHandler("CheckCancel","procCheckCancel",0); //Процессы <--
string saveName; GameInterface.SavePath = "SAVE"; //Путь для сохранений. int ntmp; if( SendMessage(&GameInterface,"llee",MSG_INTERFACE_SAVE_FILE_FIND,0,&saveName,&ntmp)!=0 ) //Проверка. Если в SAVE есть файлы, то будет доступно меню "Загрузить игру". Если нет файлов, то будет доступна только новая игра { SetCurrentNode("B_LOAD"); } else { SetCurrentNode("B_NEWGAME"); SetSelectable("B_LOAD",false); }
//Меню из адд-она ВМЛ "Beta test mod" void BMPress() { IDoExit( RC_INTERFACE_DO_BETTAMODE, false ); }
//Запуск меню, но в данном случае, т.к. это не меню, а титры, видео по нажатию на на строку "Авторы". void CreditsPress() { SetEventHandler(EVENT_END_VIDEO,"LaunchMainMenu_afterVideo",0); bMainMenuLaunchAfterVideo = true; StartPostVideo("Credits_RU",1); }
//Выход из игры. void QuitPress() { ExitProgram(); }
//Вроде, это блокировка времени, что бы не играл трейлер. Когда время истечёт - запустится трейлер. Можно убрать void procTimeCalculate() { int n = sti(GameInterface.mainmenu.timeclock) - 1;
void LowStorageNext() { switch(confirmAction) { case "newgame": NewGameConfirm(); break; case "load": LoadPress(); break; case "save": SavePress(); break; case "FAQ": FAQPress(); break; case "options": OptionsPress(); break; case "controls": ControlsPress(); break; case "credits": CreditsPress(); break; case "BettaMode": BMPress(); break; } }
int tmpLangFileID = LanguageOpenFile("interface_strings.txt"); SetFormatedText("TEXTWINDOW",LanguageConvertString(tmpLangFileID,"Insert Disk Ok")); LanguageCloseFile(tmpLangFileID);
// Выход void procCheckCancel() { ExitProgram(); }
Всем спасибо за внимание! Надеюсь, что мой урок, хоть немного, но поможет Вам в освоении базовых команд интерфейса! :) P.S. подробнее о функциях я расскажу в уроке по созданию собственного интерфейса.
Автор: IvanCorsair29GL Что толку, если не можешь сделать мир лучше.