/
Zamar_Terrier
/
TigorEngine
Обзор
Документация
Войти
/
Zamar_Terrier
/
TigorEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/Objects/gameObject.c
179 строк
6 KB
Zamar_Terrier
Офигенное обновление движка
31 июл 2026, 21:03
Верифицирован
31 июл 2026, 21:03
1682686
Код
Авторство
О чём код?
#include "Objects/gameObject.h" #include "TigorEngine.h" #include "Core/e_device.h" #include "tigor.h" extern TEngine engine; /** * @brief Устанавливает функцию инициализации объекта игры * @param go Указатель на объект игры * @param func Указатель на функцию инициализации */ void GameObjectSetInitFunc(GameObject *go, void *func) { go->InitPoint = func; } /** * @brief Устанавливает функцию обновления объекта игры * @param go Указатель на объект игры * @param func Указатель на функцию обновления */ void GameObjectSetUpdateFunc(GameObject *go, void *func) { go->UpdatePoint = func; } /** * @brief Устанавливает функцию отрисовки объекта игры * @param go Указатель на объект игры * @param func Указатель на функцию отрисовки */ void GameObjectSetDrawFunc(GameObject *go, void *func) { go->DrawPoint = func; } /** * @brief Устанавливает функцию очистки объекта игры * @param go Указатель на объект игры * @param func Указатель на функцию очистки */ void GameObjectSetCleanFunc(GameObject *go, void *func) { go->CleanPoint = func; } /** * @brief Устанавливает функцию пересоздания объекта игры * @param go Указатель на объект игры * @param func Указатель на функцию пересоздания */ void GameObjectSetRecreateFunc(GameObject *go, void *func) { go->RecreatePoint = func; } /** * @brief Устанавливает функцию уничтожения объекта игры * @param go Указатель на объект игры * @param func Указатель на функцию уничтожения */ void GameObjectSetDestroyFunc(GameObject *go, void *func) { go->DestroyPoint = func; } /** * @brief Устанавливает функцию инициализации шейдера объекта игры * @param go Указатель на объект игры * @param func Указатель на функцию инициализации шейдера */ void GameObjectSetShaderInitFunc(GameObject *go, void *func) { go->ShaderInitPoint = func; } /** * @brief Инициализирует объект игры * @param go Указатель на объект игры */ void GameObjectInit(GameObject* go) { if(go == NULL) return; tigor_status_t result = tigor_mutex_trylock(go->mutex); if(APR_STATUS_IS_EBUSY(result)) return; if(go->flags & TIGOR_GAME_OBJECT_FLAG_INIT) { GameObjectUnlock(go); return; } if(go->InitPoint != NULL) go->InitPoint(go); GameObjectUnlock(go); } /** * @brief Обновляет состояние объекта игры * @param go Указатель на объект игры */ void GameObjectUpdate(GameObject* go) { if(go == NULL || go->UpdatePoint == NULL) return; go->UpdatePoint(go); } /** * @brief Отрисовывает объект игры * @param go Указатель на объект игры */ void GameObjectDraw(GameObject* go) { if(go == NULL) return; // Инициализация при необходимости if(!(go->flags & TIGOR_GAME_OBJECT_FLAG_INIT) && (go->flags & TIGOR_GAME_OBJECT_FLAG_PREINIT)) { GameObjectInit(go); } else if(!(go->flags & TIGOR_GAME_OBJECT_FLAG_INIT)) { return; } else if(engine.framebufferwasResized && !(go->flags & TIGOR_GAME_OBJECT_FLAG_RECREATED)) { GameObjectRecreate(go); } tigor_status_t result = tigor_mutex_trylock(go->mutex); if(APR_STATUS_IS_EBUSY(result)) return; GameObjectUpdate(go); if(go->DrawPoint != NULL) { go->DrawPoint(go); } GameObjectUnlock(go); go->flags &= ~(TIGOR_GAME_OBJECT_FLAG_RECREATED); } /** * @brief Очищает ресурсы объекта игры * @param go Указатель на объект игры */ void GameObjectClean(GameObject* go) { if(go == NULL) return; if(go->CleanPoint != NULL) go->CleanPoint(go); } /** * @brief Пересоздает объект игры * @param go Указатель на объект игры */ void GameObjectRecreate(GameObject* go) { if(go == NULL) return; if(go->RecreatePoint != NULL) go->RecreatePoint(go); } /** * @brief Уничтожает объект игры и освобождает ресурсы * @param go Указатель на объект игры */ void GameObjectDestroy(GameObject* go) { if(go == NULL) return; TEngineDeviceWaitIdle(); if(go->DestroyPoint != NULL) go->DestroyPoint(go); } /** * @brief Инициализирует шейдеры объекта игры * @param go Указатель на объект игры */ void GameObjectShaderInit(GameObject* go) { if(go == NULL) return; tigor_mutex_lock(engine.global_shader_mutex); if(go->ShaderInitPoint != NULL) go->ShaderInitPoint(go); tigor_mutex_unlock(engine.global_shader_mutex); } /** * @brief Блокирует объект игры для многопоточного доступа * @param go Указатель на объект игры */ void GameObjectLock(GameObject* go) { tigor_mutex_lock(go->mutex); } /** * @brief Разблокирует объект игры после многопоточного доступа * @param go Указатель на объект игры */ void GameObjectUnlock(GameObject* go) { tigor_mutex_unlock(go->mutex); }