Справочник публичного 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 если ресурс не существовал

Стандартные ресурсы:

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

CodeState mouseKeys[static_cast<int>(MouseCode::COUNT)]

Состояния клавиш клавиатуры

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

Скролл мыши по горизонтали

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

Реальное накопленное время

Стандартные компоненты:

struct TransformComponent

Public Members

Rotation rot

Позиция объекта в мировом пространстве

Scale scale

Вращение объекта вокруг осей

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

Дальняя плоскость отсечения (в единицах мира)

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

Обновление состояния системы

Вызывается каждый кадр для обновления логики системы

Public Members

bool enabled = true

Флаг активности системы.

Если true - система обновляется, если false - пропускается

bool started = false

Флаг был ли вызван старт системы.

Если true - система уже прошла первое обновление, если false - сначало будет вызван start() перед update()

Стандартные системы:

class RenderSystem : public prism::scene::ISystem

Public Functions

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, обновляет состояния клавиш и мыши. Вызывается каждый кадр в главном цикле обновления.

class TimeSystem : public prism::scene::ISystem

Система управления временем и дельта-временем

Отслеживает время между кадрами, вычисляет дельта-время и обновляет временные ресурсы сцены. Критически важна для обеспечения плавной и независимой от частоты кадров симуляции.

Public Functions

inline TimeSystem(Scene *scene)

Конструктор системы времени

Параметры:

scene – Указатель на родительскую сцену

virtual void start() override

Инициализация системы времени

Инициализирует начальное временное состояние системы

virtual void update() override

Вычисляет дельта-время между кадрами и обновляет TimeResource