====== API игрового движка через DLL ====== Данная статья описывает публичный API, доступный через динамически подключаемые библиотеки (DLL). API разделён на две основные части: - ''me_crypto.h'' — функции криптографии и строковых преобразований. - ''me_engine.h'' — функции управления движком, окном, камерой и объектами. ====== Типы переменных ====== Все типы переменных в API перечислены в файле "sources/API/me_interface.h" // ... #define CONST const #define ME_DEF typedef #define ME_CALL __stdcall* #define ME_Int int #define ME_Bool bool #define ME_Char char #define ME_CharSign unsigned char* #define ME_Void void #define ME_String std::string #define ME_WString std::wstring #define ME_Size size_t #define ME_UInt unsigned int #define ME_Float float // ... ===== me_crypto ===== ==== MESplit ==== Разделяет строку на значения по указанному символу-разделителю. **Синтаксис:** size_t MESplit(CONST ME_String& txt, std::vector& strs, char ch) **Параметры:** * ''txt'' — входная строка. * ''strs'' — ссылка на вектор массив (результат: в массиве появятся разделенные строки). * ''ch'' — символ-разделитель. **Возвращает:** количество полученных подстрок. **Пример:** std::vector list; MESplit("a;b;c", list, ';'); std::cout << "a=" << list[0].c_str() << std::endl; std::cout << "b=" << list[1].c_str() << std::endl; std::cout << "c=" << list[2].c_str() << std::endl; ==== ReadFileME ==== Читает содержимое файла и возвращает его как строку. **Синтаксис:** ME_String ReadFileME(CONST ME_String& str) **Параметры:** * ''str'' — путь к файлу. **Возвращает:** содержимое файла в виде строки текст или ошибку "error". ==== getRegisterAccount ==== Возвращает уникальный идентификатор пользователя (User ID). **Синтаксис:** ME_String getRegisterAccount() **Возвращает:** строку с идентификатором пользователя. ==== ConvertToWSTR ==== Преобразует тип строки ''ME_String'' в ''ME_WString'''. **Синтаксис:** ME_WString ConvertToWSTR(const ME_String& str) **Параметры:** * ''str'' — входная строка. **Возвращает:** ME_WString. ==== ConvertToString ==== Преобразует тип строки ''ME_WString'' в ''ME_String''. **Синтаксис:** ME_String ConvertToString(const ME_WString& wstr) **Параметры:** * ''wstr'' — исходная ME_WString строка. **Возвращает:** строка ME_String. ==== ConvertToSign ==== Преобразует тип строки ''ME_String'' в ''ME_CharSign''. **Синтаксис:** ME_CharSign ConvertToSign(CONST ME_String& str) **Параметры:** * ''str'' — входная строка. **Возвращает:** ME_CharSign. ==== ToBase64 ==== Кодирует массив байтов в строку Base64. **Синтаксис:** ME_String ToBase64(ME_CharSign bytes_to_encode, ME_Size len, ME_Bool url) **Параметры:** * ''bytes_to_encode'' — ME_CharSign. * ''len'' — длина массива. * ''url'' — если "true", используется URL-безопасный вариант Base64. **Возвращает:** закодированная строка Base64. ==== ofBase64 ==== Декодирует строку Base64 обратно в ''ME_String''. **Синтаксис:** ME_String ofBase64(ME_String CONST& s, ME_Bool remove_linebreaks) **Параметры:** * **s** — строка ME_String в формате Base64. * **remove_linebreaks** — если "true", удаляются символы переноса строк перед декодированием. **Возвращает:** декодированная строка ME_String. ==== ToHex ==== Преобразует 32-битное целое число в шестнадцатеричную строку, представляя его как последовательность байтов в **младшем порядке (little-endian)**. Каждый байт кодируется двумя шестнадцатеричными символами в нижнем регистре без префикса `0x`. **Синтаксис:** ME_String ToHex(ME_UInt value) **Параметры:** * ''value'' — число для преобразования. * ''value'' — 32-битное целое число без знака для преобразования (тип ME_UInt). **Возвращает:** строка ME_String в формате HEX (без префикса "0x", в нижнем регистре). ==== ToMD5 ==== Вычисляет MD5-хеш от заданной строки ME_String. **Синтаксис:** ME_String ToMD5(ME_String str) **Параметры:** * ''str'' — исходная строка ME_String. **Возвращает:** MD5-хеш в виде 32-символьной шестнадцатеричной строки. ==== genMD5 ==== Генерирует случайный MD5-хеш. **Синтаксис:** ME_String genMD5() **Возвращает:** случайный MD5-хеш с типом ME_String. ===== me_engine ===== ==== meInitialize ==== Инициализирует игровой движок. **Синтаксис:** ME_Int meInitialize(CONST ME_Int mode) **Параметры:** * ''mode'' — режим инициализации (по умолчанию 0). * режим игры: 0 * режимы редактора: 1, 2 **Возвращает:** 0 при успехе. ==== meExit ==== Завершает работу движка. **Синтаксис:** ME_Void meExit() ==== meSetWindow ==== Устанавливает окно для рендеринга. **Синтаксис:** ME_Int meSetWindow(HWND hWnd, ME_Int width, ME_Int height, ME_Bool noDops) **Параметры:** * ''hWnd'' — указывается дескриптор окна Windows. * ''width'', ''height'' — размеры клиентской области. * ''noDops'' — если "true", то происходит изменения размера как для редактора карт. **Возвращает:** ME_Int: успешно = 0, если неудачно = 1. ==== meSetFullscreen ==== Переключает полноэкранный режим. **Синтаксис:** ME_Void meSetFullscreen(ME_Bool fullscreen = true) **Параметры:** * ''fullscreen'' — (по умолчанию "true") для включения полноэкранного режима. ==== meSetSceneCallBack ==== Устанавливает callback-функцию для обработки событий сцены. Работает только при полностью запущеном игровом движке в режиме редактора. **Синтаксис:** ME_Int meSetSceneCallBack(EditorSceneCallback callback) **Параметры:** * ''callback'' — указатель на функцию типа "EditorSceneCallback". **Тип callback:** ME_Void(ME_CALL EditorSceneCallback)(CONST ME_Char* id, ME_Int action) **Возвращает:** ME_Int: успешно = 0, если неудачно = 1. ==== meLoadLevel ==== Загружает или очищает текущий уровень. **Синтаксис:** ME_Int meLoadLevel(CONST ME_Char* name) **Параметры:** * ''name'' — имя уровня. * если "nullptr" — очищает текущий уровень. * если функция "meLoadLevel" запускается в режиме редактора, и указанного уровня не существует, то возвращает 1. **Возвращает:** ME_Int: 0 обычно. ==== meGetHWND ==== Возвращает дескриптор окна, используемого движком. **Синтаксис:** HWND meGetHWND() **Возвращает:** ''HWND'' дескриптор окна или "NULL". ==== meCameraAt ==== Телепортирует камеру в заданную точку. **Синтаксис:** ME_Int meCameraAt(ME_Float x, ME_Float y, ME_Float z) **Параметры:** * ''x'', ''y'', ''z'' — координаты позиции камеры. **Возвращает:** ME_Int: успешно = 0, если неудачно = 1. ==== meGetCameraAt ==== Получает текущие координаты и направление камеры. **Синтаксис:** ME_Int meGetCameraAt(ME_Float& x, ME_Float& y, ME_Float& z, ME_Float& yaw) **Параметры:** * ''x'', ''y'', ''z'' — указываются ссылки куда будут записаны координаты камеры. * ''yaw'' — угол поворота камеры в радианах. **Возвращает:** ME_Int: успешно = 0, если неудачно = 1. ==== GetObjectAt ==== Возвращает список объектов в заданной области. **Синтаксис:** CONST ME_Char* GetObjectAt(ME_Float x, ME_Float y, ME_Float z, ME_Int radius) **Параметры:** * ''x'', ''y'', ''z'' — центр области. Если все нули — используется позиция камеры. * ''radius'' — радиус поиска (в условных единицах). **Возвращает:** строка с идентификаторами объектов (разделённых символом ";"), иначе пустая строка. ==== meSetPos ==== Устанавливает позицию окна на экране. (работает в режиме редактора) **Синтаксис:** ME_Void meSetPos(ME_Int x, ME_Int y) **Параметры:** * ''x'', ''y'' — координаты левого верхнего угла окна. ==== meIsOpen ==== Проверяет, открыто ли окно игрового движка. **Синтаксис:** ME_Bool meIsOpen() **Возвращает:** "true", если окно открыто и активно. ==== meBoolAction ==== Выполняет логическое действие (вкл/выкл) над системными функциями. **Синтаксис:** ME_Bool meBoolAction(meActions type, ME_Int set = -1) **Параметры:** * ''type'' — тип действия (см. "enum class meActions"): * ''UI_FPS'' — отображение FPS. **(устарело)** * ''UI_FULLSCREEN'' — полноэкранный режим. **(устарело)** * ''VM_LIGHTS'' — показывать освещение. **(устарело)** * ''VW_WIREFRAME'' — каркасный режим отображения мира. * ''VM_ACT'' — включение или отключение рендера (пауза). * **set** — если "0" = выкл, "1" = вкл, иначе переключает текущее состояние. * ''VM_TOOLS'' — показ технических объектов редактора. * ''set'' — применяется только для ''VM_ACT''. **Возвращает:** ME_Bool: новое состояние ("true"/"false"). ==== meImgStream ==== Выполняет создание скриншота **Синтаксис:** ME_Void meImgStream(ME_Bool answer) **Параметры:** * ''answer'' — аргумент остался от старой реализации, но его нужно указывать "true" ==== meImgData ==== Возвращает последний сделанный скриншот с помощью функции "meImgStream" в формате Base64. **Синтаксис:** CONST ME_Char* meImgData() **Возвращает:** строка Base64 с изображением png, либо пустая строка. ==== meGetTitle ==== Возвращает заголовок окна (Windows). **Синтаксис:** LPWSTR meGetTitle() **Возвращает:** LPWSTR строка. ==== meGetTitleScript ==== Возвращает заголовок окна который был присвоен с помощью скрипта. **Синтаксис:** CONST ME_Char* meGetTitleScript() **Возвращает:** ME_Char строка. ==== meWindowHide ==== Скрывает или показывает окно игрового движка. **Синтаксис:** ME_Void meWindowHide(ME_Bool visible) **Параметры:** * ''visible'' — "true" для отображения, "false" для скрытия. ==== meClickCamera ==== Включает/отключает управление камерой нажатием мыши. **Синтаксис:** ME_Void meClickCamera(ME_Bool enabled) **Параметры:** * **enabled** — `true` для включения режима управлением камеры (камеру поворачивать можно с помощью нажатия мыши). ==== meWindowState ==== Устанавливает состояние окна (свёрнуто, развёрнуто и т.д.). **Синтаксис:** ME_Void meWindowState(ME_Int mode) **Параметры:** * ''mode'' — код состояния: * если 1 - показать окно * если 0 - скрыть окно ==== mePauseEditor ==== Режим редактора на паузе или активен. **Синтаксис:** ME_Void mePauseEditor(ME_Bool paused) **Параметры:** * ''paused'' — "true" для паузы. ==== meManipulate ==== Выполняет манипуляции с объектами сцены (в режиме редактора). **Синтаксис:** ME_Void meManipulate(ME_Int type, CONST ME_Char* arguments) **Параметры:** * ''type'' — тип манипуляции. * ''arguments'' — строка с параметрами, указывается в формате "<под тип>;<параметры для манипуляции>". **Работа с параметрами** [''type'' = 0 — Взаимодействие с объектами, ''type'' = 1 — Взаимодействие с миром] ^ ''type'' ^ ''<подтип>'' ^ описание ^ формат ^ | 0 | 1 | режим выделения (если = -1, убрать выделение) | 1;<группа>; | | 0 | 2 | изменение оси вращения | 2;<цифра: X = 0, Y = 1, Z = 2> | | 0 | 3 | новый или изменить объект подгрузить из файла objects.json | 3; | | 0 | 5 | удалить объект | 5; | | 0 | 6 | удалить группу вместе с объектами | 6;<группа | | 0 | 7 | создать новую группу с названием | 7;<название группы>| | 0 | 8 | обновить трансформацию у объекта | 8; | | 1 | 1 | ambient | 1;0.1 | | 1 | 2 | _color | 2;0.5;0.5;0.5 | | 1 | 3 | sunColor | 3;0.75;0.901961;1.0 | | 1 | 4 | sunLight | 4;0.6 | | 1 | 5 | sunRadiosity | 5;0.6 | | 1 | 6 | sunDiffuseColor | 6;0.5;0.5;0.5 | | 1 | 7 | diffuseFraction | 7;0.583333 | | 1 | 8 | sunDirection | 8;-30.0;42.0;0.0 | | 1 | 9 | sunIsPrimaryLight | 9;1 | | 1 | 10 | radiosityScale | 10;0.8 | | 1 | 11 | contrastGain | 11;1.0 | | 1 | 12 | shadowIsOutdoor | 12;1 | | 1 | 13 | shadowSize | 13;2.0 | | 1 | 14 | shadowOpacity | 14;0.5 | ==== meGetObjData ==== Получает трансформацию объекта: позицию, поворот, масштаб. **Синтаксис:** CONST ME_Char* meGetObjData(ME_Int type, CONST ME_Char* id) **Параметры:** * ''type'' — группа объектов. * если знаем группу в которой состоит объект, указываем (обычно начинается с нуля). * если не знаем в какой существует объект группе, указываем "-1". * ''id'' — идентификатор объекта. **Возвращает:** ME_Char*: строка с данными в формате, \\ например: "position.x;position.y;position.z;rotation.x;rotation.y;rotation.z;scale.x;scale.y;scale.z" \\ или пустой ответ: "0;0;0;0;0;0;0;0;0". ===== Примечания ===== - Все типы `ME_*` (например, `ME_String`, `ME_Int`, `ME_Bool`) определены в ''me_interface.h''. - На Windows используется ''HWND'', ''LPWSTR'' и другие типы Windows API. - Для использования API необходимо подключить соответствующие заголовочные файлы и линковать с DLL движка.