namespace Msp::Game {
+class Camera;
class Root;
class System;
{
public:
using EventSource = Game::EventSource<Events::EntityCreated, Events::EntityDestroyed,
- Events::ComponentCreated, Events::ComponentDestroyed>;
+ Events::ComponentCreated, Events::ComponentDestroyed, Events::CameraChanged>;
private:
DataFile::Collection &resources;
PoolPool pools;
EventBus event_bus;
EventSource event_source;
+ EventObserver event_observer;
/* Use unique_ptr because there's only one root per stage so it's pointless
to put it in a pool. */
std::unique_ptr<Root> root;
std::vector<std::unique_ptr<System>> systems;
+ Handle<Camera> active_camera;
public:
Stage(DataFile::Collection &);
template<typename T>
T *get_system() const;
+ void set_active_camera(Handle<Camera>);
+ Handle<Camera> get_active_camera() const { return active_camera; }
+
+ void synthesize_initial_events(EventObserver &);
+private:
+ void synthesize_initial_events(Handle<Entity>, EventObserver &);
+
+public:
void tick(Time::TimeDelta);
};