#pragma once

#include <ReferenceCounter.h>
#include <Reader.h>
#include <Vec3.h>

class Entity;

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 createSuperEntity( Entity* zEntity ) const;
    virtual Entity* createEntity() const = 0;

public:
    virtual Entity* loadEntity( Framework::StreamReader* zReader ) const;
    virtual void updateEntity( Entity* e, Framework::StreamReader* zReader ) const;

    int getId() const;
};