#pragma once #include #include #include #include #include "StaticRegistry.h" #include "ModelInfo.h" class Entity; class EntityType : public virtual Framework::ReferenceCounter { private: const int id; const ModelInfo model; protected: EntityType(int id, ModelInfo model); virtual void loadSuperEntity(Entity* zEntity, Framework::StreamReader* zReader) const; virtual void saveSuperEntity(Entity* zEntity, Framework::StreamWriter* zWriter) const; virtual void createSuperEntity(Entity* zEntity) const; virtual Entity* createEntity(Framework::Vec3 position, int dimensionId, int entityId) const = 0; public: virtual Entity* loadEntity(Framework::StreamReader* zReader) const; virtual void saveEntity(Entity* zEntity, Framework::StreamWriter* zWriter) const; virtual Entity* createEntityAt(Framework::Vec3 position, int dimensionId) const; int getId() const; const ModelInfo& getModel() const; };