Справочник публичного API
Класс Scene
-
class Scene
Основной класс сцены, объединяющий менеджеры сущностей, компонентов и систем
Координирует работу всех подсистем ECS (Entity-Component-System)
Public Functions
-
Scene() = default
-
Entity createEntity()
Создает новую сущность на сцене
- Результат:
Идентификатор созданной сущности
-
bool destroyEntity(Entity entityId)
Удаляет сущность со сцены
Удаляет все компоненты сущности перед ее уничтожением
- Параметры:
entityId – Идентификатор сущности для удаления
- Результат:
true если сущность успешно удалена
-
void enableSystem(SystemId systemId)
Включает систему на сцене
- Параметры:
systemId – Идентификатор системы для включения
-
void disableSystem(SystemId systemId)
Выключает систему на сцене
- Параметры:
systemId – Идентификатор системы для выключения
-
inline void update()
Обновляет все активные системы сцены
См. также
-
template<typename T>
inline bool addComponent(Entity entityId, T component) Добавляет компонент к сущности на сцене
- Параметры шаблона:
T – Тип компонента
- Параметры:
entityId – Идентификатор сущности
component – Компонент для добавления
- Результат:
true если компонент успешно добавлен
-
template<typename T>
inline bool removeComponent(Entity entityId) Удаляет компонент у сущности на сцене
- Параметры шаблона:
T – Тип компонента
- Параметры:
entityId – Идентификатор сущности
- Результат:
true если компонент существовал и был удален
-
template<typename T>
inline T *getComponent(Entity entityId) Получает компонент сущности
- Параметры шаблона:
T – Тип компонента
- Параметры:
entityId – Идентификатор сущности
- Результат:
Указатель на компонент или nullptr если не найден
-
template<typename T>
inline std::set<Entity> &getEntitiesWith() Получает все сущности, имеющие компонент указанного типа
- Параметры шаблона:
T – Тип компонента
- Результат:
Ссылка на множество сущностей с компонентом
-
template<typename ...ComponentTypes>
inline std::set<Entity> getEntitiesWithAll() Получает сущности, имеющие все указанные типы компонентов
- Параметры шаблона:
ComponentTypes – Типы компонентов для поиска
- Результат:
Множество сущностей, содержащих все запрошенные компоненты
-
template<typename T, typename ...Args>
inline SystemId registerSystem(Args&&... args) Регистрирует новую систему на сцене
- Параметры шаблона:
T – Тип системы (должен наследоваться от ISystem)
Args – Типы аргументов для конструктора системы
- Параметры:
args – Аргументы для передачи в конструктор системы
- Результат:
Идентификатор зарегистрированной системы
-
template<typename T>
inline void setResource(T resource) Устанавливает или заменяет глобальный ресурс на сцене
Ресурсы представляют собой глобальные данные, доступные всем системам. Каждый тип ресурса может существовать только в одном экземпляре на сцене.
Пример:
// Установка стандартных ресурсов scene.setResource<Time>(Time{}); scene.setResource<Input>(Input{}); scene.setResource<Config>(Config{1920, 1080, "My Game"}); // Замена ресурса scene.setResource<Config>(loadConfigFromFile("settings.cfg"));
См. также
- Параметры шаблона:
T – Тип ресурса
- Параметры:
resource – Объект ресурса для установки
-
template<typename T>
inline T *getResource() Получает глобальный ресурс сцены
Обеспечивает доступ к глобальным данным сцены. Возвращаемый указатель можно использовать для модификации ресурса.
Пример:
// В системе времени if (auto* time = scene.getResource<Time>()) { time->update(deltaTime); } // В системе ввода if (auto* input = scene.getResource<Input>()) { if (input->isKeyPressed(KEY_SPACE)) { jump(); } }
См. также
- Параметры шаблона:
T – Тип запрашиваемого ресурса
- Результат:
Указатель на ресурс или nullptr если ресурс не найден
-
template<typename T>
inline const T *getResource() const Получает константный глобальный ресурс сцены
Предназначен для безопасного доступа только для чтения к глобальным ресурсам сцены. Используется в константных контекстах.
Пример:
// В константном методе рендеринга void render(const Scene& scene) { if (const auto* config = scene.getResource<Config>()) { setResolution(config->width, config->height); } }
См. также
- Параметры шаблона:
T – Тип запрашиваемого ресурса
- Результат:
Константный указатель на ресурс или nullptr если ресурс не найден
-
template<typename T>
inline bool hasResource() const Проверяет наличие глобального ресурса на сцене
Быстрая проверка существования ресурса без его загрузки.
Пример:
// Ленивая инициализация ресурса if (!scene.hasResource<Audio>()) { scene.setResource<Audio>(Audio{}); scene.getResource<Audio>()->initialize(); }
См. также
- Параметры шаблона:
T – Тип проверяемого ресурса
- Результат:
true если ресурс существует, false в противном случае
-
template<typename T>
inline bool removeResource() Удаляет глобальный ресурс со сцены
Освобождает память, занимаемую ресурсом. Последующие вызовы getResource() для этого типа вернут nullptr.
Пример:
// Удаление временного ресурса scene.removeResource<DebugOverlay>(); // Удаление при перезагрузке scene.removeResource<Config>(); scene.setResource<Config>(loadNewConfig());
См. также
- Параметры шаблона:
T – Тип удаляемого ресурса
- Результат:
true если ресурс был удален, false если ресурс не существовал
-
Scene() = default
Стандартные ресурсы:
-
struct InputResource
Ресурс для управления состоянием ввода
Хранит состояния всех клавиш, кнопок мыши и информацию о движении мыши
Public Functions
-
inline void disableAllKey()
Скролл мыши по вертикали
Сбрасывает все состояния ввода в пассивное состояние
-
inline CodeState getKeyState(KeyCode keycode)
Получает состояние указанной клавиши
- Параметры:
keycode – Код клавиши для проверки
- Результат:
Текущее состояние клавиши
-
inline CodeState getMouseState(MouseCode mousecode)
Получает состояние указанной кнопки мыши
- Параметры:
mousecode – Код кнопки мыши для проверки
- Результат:
Текущее состояние кнопки мыши
-
inline void updateKeyStates()
Обновляет состояния клавиш и кнопок мыши
Преобразует состояния DOWN->HELD и UP->PASSIVE
-
inline void resetStuckKeys()
Исправляет «залипшие» клавиши
Иногда события отпускания могут не приходить поэтому данный метод проверяет состояния HELD клавиш и сбрасывает их, если физическая клавиша больше не нажата
-
inline void disableKey(KeyCode key)
Отключает указанную клавишу (переводит в состояние UP)
- Параметры:
key – Код клавиши для отключения
-
inline void enableKey(KeyCode key)
Включает указанную клавишу (переводит в состояние DOWN)
- Параметры:
key – Код клавиши для включения
-
inline void disableMouseKey(MouseCode key)
Отключает указанную кнопку мыши (переводит в состояние UP)
- Параметры:
key – Код кнопки мыши для отключения
-
inline void enableMouseKey(MouseCode key)
Включает указанную кнопку мыши (переводит в состояние DOWN)
- Параметры:
key – Код кнопки мыши для включения
-
inline double getMouseDeltaX() const
Вычисляет смещение мыши по X с предыдущего кадра
- Результат:
Разница между текущей и предыдущей позицией мыши по X
-
inline double getMouseDeltaY() const
Вычисляет смещение мыши по Y с предыдущего кадра
- Результат:
Разница между текущей и предыдущей позицией мыши по Y
Public Members
-
double mouseX = 0.0
Состояния кнопок мыши
-
double mouseY = 0.0
Текущая позиция мыши по X.
-
double mouseXPrevious = 0.0
Текущая позиция мыши по Y.
-
double mouseYPrevious = 0.0
Позиция мыши по X в предыдущем кадре
-
double mouseScrollX = 0.0
Позиция мыши по Y в предыдущем кадре
-
double mouseScrollY = 0.0
Скролл мыши по горизонтали
-
inline void disableAllKey()
-
struct TimeResource
Стандартный ресурс для управления игровым временем
Предоставляет как масштабируемое (игровое) время, так и реальное (немасштабируемое) время. Масштабируемое время используется для игровой логики, реальное - для системных операций.
Public Functions
-
inline void update(double_t rawDeltaTime)
Масштаб времени (1.0 = нормальная скорость)
Обновляет временные значения
- Параметры:
rawDeltaTime – Сырое время прошедшее с предыдущего кадра
-
inline void setScale(double scale)
Устанавливает масштаб времени
- Параметры:
scale – Новый масштаб (1.0 = нормальная скорость)
-
inline void pause()
Приостанавливает время (устанавливает масштаб в 0)
-
inline void resume()
Возобновляет время (устанавливает масштаб в 1.0)
-
inline void togglePause()
Переключает паузу
-
inline bool isPaused() const
Проверяет, остановлено ли время
- Результат:
true если время приостановлено (timeScale == 0)
-
inline void reset(bool keepScale = true)
Сбрасывает накопленное время
- Параметры:
keepScale – Сохранять ли текущий масштаб времени
Public Members
-
double_t time = 0.0
Изменение времени за кадр с учетом timeScale.
-
double_t unscaledDeltaTime = 0.0
Накопленное время с учетом timeScale.
-
double_t unscaledTime = 0.0
Реальное изменение времени за кадр
-
double timeScale = 1.0
Реальное накопленное время
-
inline void update(double_t rawDeltaTime)
Стандартные компоненты:
-
struct TransformComponent
-
struct CameraComponent
Public Members
-
Look look = {0.0f, 0.0f, 0.0f}
Флаг активности камеры (только одна активная камера в сцене)
-
float fovy = 45.0f
Направление взгляда камеры в мировом пространстве
-
float aspect = 16.f / 9.f
Угол обзора по вертикали (Field of View Y) в градусах
-
float zNear = 0.1f
Соотношение сторон (ширина/высота) viewport’а
-
float zFar = 10.0f
Ближняя плоскость отсечения (в единицах мира)
-
bool useCurrentWindowAspect = true
Дальняя плоскость отсечения (в единицах мира)
-
Look look = {0.0f, 0.0f, 0.0f}
-
struct MeshComponent
-
struct TextureComponent
Системы
-
class ISystem
Базовый интерфейс для всех систем
Системы должны наследоваться от этого интерфейса и реализовывать метод update
Subclassed by prism::scene::InputSystem, prism::scene::RenderSystem, prism::scene::TimeSystem
Public Functions
-
inline virtual void start()
Первоначальная настройка системы, не обязательно реализовывать
Вызывается один раз на первом кадре для первоначальнго создания динамических обьектов, запонения значений и т.д
-
virtual void update() = 0
Обновление состояния системы
Вызывается каждый кадр для обновления логики системы
-
inline virtual void start()
Стандартные системы:
-
class RenderSystem : public prism::scene::ISystem
Public Functions
-
virtual void update() override
Обновление состояния системы
Вызывается каждый кадр для обновления логики системы
-
virtual void update() override
-
class InputSystem : public prism::scene::ISystem
Система обработки ввода пользователя
Обрабатывает события клавиатуры, мыши, обновляет состояние ввода и окна. Наследуется от ISystem и интегрируется в главный цикл обновления сцены.
Public Functions
-
inline InputSystem(Scene *scene)
Конструктор системы ввода
- Параметры:
scene – Указатель на родительскую сцену
-
virtual void start() override
Инициализация системы ввода
Вызывается при старте системы, сбрасывает все состояния ввода
-
virtual void update() override
Основное обновление системы ввода
Обрабатывает все события SDL, обновляет состояния клавиш и мыши. Вызывается каждый кадр в главном цикле обновления.
-
inline InputSystem(Scene *scene)
-
class TimeSystem : public prism::scene::ISystem
Система управления временем и дельта-временем
Отслеживает время между кадрами, вычисляет дельта-время и обновляет временные ресурсы сцены. Критически важна для обеспечения плавной и независимой от частоты кадров симуляции.
Public Functions
-
inline TimeSystem(Scene *scene)
Конструктор системы времени
- Параметры:
scene – Указатель на родительскую сцену
-
virtual void start() override
Инициализация системы времени
Инициализирует начальное временное состояние системы
-
virtual void update() override
Вычисляет дельта-время между кадрами и обновляет TimeResource
-
inline TimeSystem(Scene *scene)