background image

class Scene

{

public:

Scene();

~Scene();

void on_start();

// Entity Management

Entity create_entity();

void destroy_entity(Entity entity);

// Component Management

template <typename T, typename... Args>

T &add_component(Entity entity, Args &&...args);

template <typename T>

T &get_component(Entity entity);

template <typename T>

std::shared_ptr<T> get_component_ptr(Entity entity);

template <typename T>

void remove_component(Entity entity);

template <typename T>

bool has_component(Entity entity);

void set_active_camera(Entity entity);

Orthographic_camera &get_active_camera();

bool has_active_camera();

Entity create_default_camera(float aspect_ratio = 1.0f);

void update_active_camera_aspect_ratio(float aspect_ratio);

void update(float delta_time);

void draw();

public:

std::vector<Entity> m_entities;

std::unordered_map<std::type_index, std::unordered_map<uint32_t, std::shared_ptr<void>>>

m_components;

private:

uint32_t m_next_entity_id = 1;

std::optional<Entity> m_active_camera_entity;

4.6.2

Κύκλος ζωής σκηνής

Κάθε σκηνή ακολουθεί συγκεκριμένο κύκλο ζωής:

1. Initialization

36