#pragma once #include #include "object.hpp" // TODO: make life cycle object class. // objects from that class can be created and destroyed only through factory // methods which create updates too. namespace game { enum class LifeCycle { Create, // something was created Modify, // something was modified (look at attributes) Destroy // something was destroyed }; // add all possible classes here // TODO: // there can be different things in here, like: enum class EventType { Explosion, Missile, Ship }; class StateUpdateEvent { public: StateUpdateEvent(LifeCycle cycle, EventType event, Object *object, bool changesContinuously=false) : m_lifeCycle(cycle), m_eventType(event) , m_object(object) , m_changesContinuously(changesContinuously) { } LifeCycle lifeCycle() const { return m_lifeCycle; } EventType eventType() const { return m_eventType; } bool changesContinuously() const { return m_changesContinuously; } Object* object() const { return m_object; } void setChangesContinuously(bool enable) { m_changesContinuously = enable; } //std::string description() const //{ // // TODO // return "StateUpdateEvent(" + lifeCycleToString(m_lifeCycle) + ", " + eventTypeToString(m_eventType) + ")"; //} //static std::string lifeCycleToString(LifeCycle lifeCycle) //{ // switch(lifeCycle) { // case LifeCycle::Create: return "create"; // case LifeCycle::Modify: return "modify"; // case LifeCycle::Destroy: return "destroy"; // default: return ""; // } //} //static std::string eventTypeToString(EventType eventType) //{ // switch(eventType) { // case EventType::Explosion: return "explosion"; // default: return ""; // } //} private: const LifeCycle m_lifeCycle; const EventType m_eventType; Object *m_object; bool m_changesContinuously; }; }