Gratt
Модостроитель
- Регистрация
- 14 Ноя 2014
- Сообщения
- 3.301
- Благодарности
- 4.636
- Баллы
- 625
Русский English
* Перед началом ознакомиться с данной темой.
Создание проекта:
Запускаем Visual studio, выбираем 'Создать проект', либо зажимаем Ctrl + Shift + N.
В открывшемся окне находим шаблон плагина UnionPlugin_X_Xx для Visual C++.
Нажимаем ок и смотрим в окно обозревателя.
В нашем распоряжении находятся интерфейсы 4х версий ZenGin и несколько файлов исходного кода. Сейчас нам понадобится Application.cpp.
Открываем файл и видим несколько функций. Каждая будет вызываться автоматически при выполнении какого-либо игрового события:
- Game_Entry происходит при входе в главную функцию игры WinMain.
- Game_Init происходит при инициализации игровых ресурсов и входе в главное меню.
- Game_Exit происходит при корректном завершении игры.
- Game_Loop происходит при каждой перерисовке кадра во время игры.
- Game_SaveBegin происходит перед началом сохранения.
- Game_SaveEnd происходит после завершения сохранения.
- LoadBegin происходит перед любой загрузкой игры.
- LoadEnd происходит после любой загрузки игры.
- Game_LoadBegin_NewGame происходит перед загрузкой новой игры.
- Game_LoadEnd_NewGame происходит после загрузки новой игры.
- Game_LoadBegin_SaveGame происходит перед загрузкой сохраненной игры.
- Game_LoadEnd_SaveGame происходит после загрузки сохраненной игры.
- Game_LoadBegin_ChangeLevel происходит перед загрузкой другой локации.
- Game_LoadEnd_ChangeLevel происходит после загрузки другой локации.
- Game_LoadBegin_Trigger происходит перед загрузкой другой локации посредством триггера (перед вызовом Game_LoadBegin_ChangeLevel).
- Game_LoadEnd_Trigger происходит после загрузки другой локации посредством триггера (после вызова Game_LoadEnd_ChangeLevel)
- Game_Pause происходит когда игра ставится на паузу
- Game_Unpause происходит когда игра возобновляется
- Game_DefineExternals происходит перед инициализацией внешний скриптовых функций
Реализация программного кода:
Эти функции будут являться базовыми в написании любого плагина. Поэтому в рамках текущего туториала предлагаю проверить их работоспособность.
При входе в главное меню напишем сообщение с названием текущего плагина, версии Union и текущего движка.
Воспользуемся готовой функцией Game_Init.
C++:// Функция возвращает имя движка основываясь на его версию string GetEngineVersionName(TEngineVersion version) { switch( version ) { case Engine_G1: return "Gothic I Classic"; case Engine_G1A: return "Gothic I Addon"; case Engine_G2: return "Gothic II Classic"; case Engine_G2A: return "Gothic II Addon"; } return "Unknown"; } void Game_Init() { // Получаем указатель на текущий // плагин и получаем его имя. const CPlugin* plugin = CPlugin::GetCurrentPlugin(); string pluginName = plugin->GetName(); // Получаем экземпляр версии юниона // и преобразуем ее в текстовую строку. TVersion unionVersion = Union.GetUnionVersion(); string unionVersionName = unionVersion.ToString(); // Получаем версию движка и его имя TEngineVersion engineVersion = Union.GetEngineVersion(); string engineVersionName = GetEngineVersionName(engineVersion); // Выводим сообщение на экран Message::Info( string::Combine( "Plugin name: %s\nUnion version: %s\nEngine version: %s", pluginName, unionVersionName, engineVersionName ) ); }
Компиляция и запуск:
В конфигурации проекта устанавливаем Release. Собираем проект и добавляем его в ini файл. Запускаем игру и ждем загрузки меню.
Результат:
* Before the beginning, read this topic.
Creating a project:
Launch Visual studio, select 'Create project', or hold Ctrl + Shift + N.
In the window that opens, we find the plugin template UnionPlugin_X_Xx for Visual C ++.
Click ok and look in the browser window.
We have the interfaces of 4 versions of ZenGin and several source code files. Now we need Application.cpp.
Open the file and you can see several functions. Each will be called automatically when a game event is performed:
- Game_Entry occurs when initializing game resources and entering the main menu.
- Game_Init occurs when the game ends correctly.
- Game_Exit occurs every time the frame is redrawn during the game.
- Game_Loop happens before saving starts.
- Game_SaveBegin occurs before saving starts.
- Game_SaveEnd occurs after saving is completed.
- LoadBegin before any game loading.
- LoadEnd occurs after any loading of the game
- Game_LoadBegin_NewGame happens before loading a new game.
- Game_LoadEnd_NewGame happens after loading a new game.
- Game_LoadBegin_SaveGame happens before loading a saved game.
- Game_LoadEnd_SaveGame occurs after loading a saved game.
- Game_LoadBegin_ChangeLevel happens before loading another location.
- Game_LoadEnd_ChangeLevel occurs after loading another location.
- Game_LoadBegin_Trigger occurs before loading another location via a trigger (before calling Game_LoadBegin_ChangeLevel).
- Game_LoadEnd_Trigger occurs before loading another location via a trigger (after calling Game_LoadEnd_ChangeLevel)
- Game_Pause occurs when a game is paused.
- Game_Unpause occurs when the game resumes.
- Game_DefineExternals occurs before initializing external script functions.
Program code implementation:
These functions will be basic in writing any plugin. Therefore, within the framework of the current tutorial, I propose to check how they work.
When entering the main menu, we will output a message with the name of the current plugin, version of Union and the current engine.
We will use the Game_Init function.
C++:// The function returns the name of the engine based on its version. string GetEngineVersionName(TEngineVersion version) { switch( version ) { case Engine_G1: return "Gothic I Classic"; case Engine_G1A: return "Gothic I Addon"; case Engine_G2: return "Gothic II Classic"; case Engine_G2A: return "Gothic II Addon"; } return "Unknown"; } void Game_Init() { // We get a pointer to the current // plugin and get its name const CPlugin* plugin = CPlugin::GetCurrentPlugin(); string pluginName = plugin->GetName(); // Get the instance version of the union // and convert it to a text string. TVersion unionVersion = Union.GetUnionVersion(); string unionVersionName = unionVersion.ToString(); // Get the version of the engine and its name TEngineVersion engineVersion = Union.GetEngineVersion(); string engineVersionName = GetEngineVersionName(engineVersion); // Show a message on the screen Message::Info( string::Combine( "Plugin name: %s\nUnion version: %s\nEngine version: %s", pluginName, unionVersionName, engineVersionName ) ); }
Compilation and running:
In the project 'Configuration manager', set 'Release'. We collect the project and add it to the ini file. We start the game and wait for the menu to load.
Result:
Последнее редактирование модератором: