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