#include "events.h"
#include "eventsource.h"
#include "handle.h"
+#include "reflection.h"
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:
+ Reflection::Reflector &reflector;
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 &);
+ Stage(Reflection::Reflector &, DataFile::Collection &);
~Stage();
+ Reflection::Reflector &get_reflector() const { return reflector; }
DataFile::Collection &get_resources() const { return resources; }
PoolPool &get_pools() { return pools; }
EventBus &get_event_bus() { return event_bus; }
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);
};