#ifndef _UNIT_H #define _UNIT_H #include class CModel; class CObjectEntry; class CEntity; class CSkeletonAnim; class CStr8; class CStrW; ///////////////////////////////////////////////////////////////////////////////////////////// // CUnit: simple "actor" definition - defines a sole object within the world class CUnit { public: CUnit(CObjectEntry* object, CEntity* entity, const std::set& actorSelections); // destructor ~CUnit(); // get unit's template object; never NULL CObjectEntry* GetObject() { return m_Object; } // get unit's model data; never NULL CModel* GetModel() { return m_Model; } // get actor's entity; can be NULL CEntity* GetEntity() { return m_Entity; } // Put here as it conveniently references both the model and the ObjectEntry void ShowAmmunition(); void HideAmmunition(); // Sets the animation a random one matching 'name'. If none is found, // sets to idle instead. Applies recursively to props. bool SetRandomAnimation(const CStr8& name, bool once = false, float speed = 0.0f); // Returns a random animation matching 'name'. If none is found, // returns idle instead. CSkeletonAnim* GetRandomAnimation(const CStr8& name); // Sets the entity-selection, and updates the unit to use the new // actor variation. void SetEntitySelection(const CStrW& selection); // Returns whether the currently active animation is one of the ones // matching 'name'. bool IsPlayingAnimation(const CStr8& name); // Set player ID of this unit void SetPlayerID(int id); // Get player ID of this unit int GetPlayerID() { return m_PlayerID; } int GetID() const { return m_ID; } void SetID(int id) { m_ID = id; } const std::set& GetActorSelections() const { return m_ActorSelections; } void SetActorSelections(const std::set& selections); private: // object from which unit was created CObjectEntry* m_Object; // object model representation CModel* m_Model; // the entity that this actor represents, if any CEntity* m_Entity; // player id of this unit (only used for graphical effects) int m_PlayerID; // unique (per map) ID number for units created in the editor, as a // permanent way of referencing them. -1 for non-editor units. int m_ID; // actor-level selections for this unit std::set m_ActorSelections; // entity-level selections for this unit std::set m_EntitySelections; void ReloadObject(); }; #endif