#pragma once #include "tinyxml2.h" namespace RakNet { class BitStream; }; class Entity; /** * Component base class, provides methods for game loop updates, usage events and loading and saving to XML. */ class Component { public: Component(Entity* parent); virtual ~Component(); /** * Gets the owner of this component * @return the owner of this component */ Entity* GetParent() const; /** * Updates the component in the game loop * @param deltaTime time passed since last update */ virtual void Update(float deltaTime); /** * Event called when this component is being used, e.g. when some entity interacted with it * @param originator */ virtual void OnUse(Entity* originator); /** * Save data from this componennt to character XML * @param doc the document to write data to */ virtual void UpdateXml(tinyxml2::XMLDocument& doc); /** * Load base data for this component from character XML * @param doc the document to read data from */ virtual void LoadFromXml(const tinyxml2::XMLDocument& doc); virtual void Serialize(RakNet::BitStream& outBitStream, bool isConstruction); protected: /** * The entity that owns this component */ Entity* m_Parent; };