#pragma once #include #include #include #include #include "StaticRegistry.h" class Entity; class Game; class EntityType : public virtual Framework::ReferenceCounter { private: const int id; protected: EntityType( int id ); 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, Game *zTarget ) const = 0; public: virtual Entity *loadEntity( Game *zTarget, Framework::StreamReader *zReader ) const; virtual void saveEntity( Entity *zEntity, Framework::StreamWriter *zWriter ) const; virtual Entity *createEntityAt( Framework::Vec3 position, int dimensionId, Game *zTarget ) const; int getId() const; };