Preliminary version of player selection for Atlas. You can press any key 0-8 while the place object tool is active to place an object for that player, though the preview object will always be shown in white (Gaia) until I can figure out how to cleanly update its colour.
This was SVN commit r3444.
This commit is contained in:
parent
bbbb9e12af
commit
cff5dfae07
@ -109,6 +109,12 @@ protected:
|
||||
m_CurrentState = state;
|
||||
m_CurrentState->OnEnter(static_cast<T*>(this));
|
||||
}
|
||||
|
||||
State* GetState() const
|
||||
{
|
||||
return m_CurrentState;
|
||||
}
|
||||
|
||||
private:
|
||||
State* m_CurrentState;
|
||||
|
||||
|
@ -15,6 +15,7 @@ class PlaceObject : public StateDrivenTool<PlaceObject>
|
||||
|
||||
Position m_ScreenPos, m_ObjPos, m_Target;
|
||||
wxString m_ObjectID;
|
||||
static int m_Player;
|
||||
|
||||
public:
|
||||
PlaceObject()
|
||||
@ -29,9 +30,9 @@ public:
|
||||
+ (m_ScreenPos.type1.y-m_Target.type1.y)*(m_ScreenPos.type1.y-m_Target.type1.y);
|
||||
bool useTarget = (dragDistSq >= 16*16);
|
||||
if (preview)
|
||||
POST_MESSAGE(ObjectPreview(m_ObjectID.c_str(), m_ObjPos, useTarget, m_Target, g_DefaultAngle));
|
||||
POST_MESSAGE(ObjectPreview(m_ObjectID.c_str(), 0, m_ObjPos, useTarget, m_Target, g_DefaultAngle));
|
||||
else
|
||||
POST_COMMAND(CreateObject,(m_ObjectID.c_str(), m_ObjPos, useTarget, m_Target, g_DefaultAngle));
|
||||
POST_COMMAND(CreateObject,(m_ObjectID.c_str(), m_Player, m_ObjPos, useTarget, m_Target, g_DefaultAngle));
|
||||
}
|
||||
|
||||
virtual void Init(void* initData)
|
||||
@ -80,11 +81,15 @@ public:
|
||||
switch (dir)
|
||||
{
|
||||
case KEY_CHAR:
|
||||
if (evt.GetKeyCode() == WXK_ESCAPE)
|
||||
int key = evt.GetKeyCode();
|
||||
if (key == WXK_ESCAPE)
|
||||
{
|
||||
SetState(&Disabled);
|
||||
return true;
|
||||
}
|
||||
else if(key >= '0' && key <= '8') {
|
||||
m_Player = key - '0';
|
||||
}
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
@ -183,3 +188,5 @@ public:
|
||||
};
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(PlaceObject, StateDrivenTool<PlaceObject>);
|
||||
|
||||
int PlaceObject::m_Player = 1;
|
||||
|
@ -171,7 +171,7 @@ MESSAGEHANDLER(ObjectPreview)
|
||||
if (base) // (ignore errors)
|
||||
{
|
||||
g_PreviewUnit = g_UnitMan.CreateUnit(base->m_actorName, NULL);
|
||||
// TODO: set player (for colour)
|
||||
g_PreviewUnit->GetModel()->SetPlayerID(msg->player);
|
||||
// TODO: variations
|
||||
}
|
||||
}
|
||||
@ -219,10 +219,12 @@ BEGIN_COMMAND(CreateObject)
|
||||
CVector3D m_Pos;
|
||||
float m_Angle;
|
||||
int m_ID;
|
||||
int m_Player;
|
||||
|
||||
void Do()
|
||||
{
|
||||
m_Pos = GetUnitPos(d->pos);
|
||||
m_Player = d->player;
|
||||
|
||||
if (d->usetarget)
|
||||
{
|
||||
@ -260,8 +262,7 @@ BEGIN_COMMAND(CreateObject)
|
||||
LOG(ERROR, LOG_CATEGORY, "Failed to create entity of type '%ls'", name.c_str());
|
||||
else
|
||||
{
|
||||
// TODO: proper player ID
|
||||
ent->SetPlayer(g_Game->GetLocalPlayer());
|
||||
ent->SetPlayer(g_Game->GetPlayer(m_Player));
|
||||
|
||||
ent->m_actor->SetID(m_ID);
|
||||
}
|
||||
|
@ -100,6 +100,7 @@ QUERY(GetObjectsList,
|
||||
|
||||
MESSAGE(ObjectPreview,
|
||||
((std::wstring, id)) // or empty string => disable
|
||||
((int, player))
|
||||
((Position, pos))
|
||||
((bool, usetarget)) // true => use 'target' for orientation; false => use 'angle'
|
||||
((Position, target))
|
||||
@ -108,6 +109,7 @@ MESSAGE(ObjectPreview,
|
||||
|
||||
COMMAND(CreateObject, NOMERGE,
|
||||
((std::wstring, id))
|
||||
((int, player))
|
||||
((Position, pos))
|
||||
((bool, usetarget)) // true => use 'target' for orientation; false => use 'angle'
|
||||
((Position, target))
|
||||
|
Loading…
Reference in New Issue
Block a user