Ykkrosh
d605cb39ec
Actor variation selection (though not saved to maps, so not very useful). Added more levels of complexity to the waiting-for-game-to-respond message pump, to fix reentrancy problems. Use number keys to assign player to selected unit. This was SVN commit r3913.
87 lines
2.4 KiB
C++
87 lines
2.4 KiB
C++
#ifndef _UNIT_H
|
|
#define _UNIT_H
|
|
|
|
#include <set>
|
|
|
|
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<CStrW>& 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<CStrW>& GetActorSelections() const { return m_ActorSelections; }
|
|
|
|
void SetActorSelections(const std::set<CStrW>& 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<CStrW> m_ActorSelections;
|
|
// entity-level selections for this unit
|
|
std::set<CStrW> m_EntitySelections;
|
|
|
|
void ReloadObject();
|
|
};
|
|
|
|
#endif
|