1
0
forked from 0ad/0ad

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:
Matei 2006-01-29 23:38:19 +00:00
parent bbbb9e12af
commit cff5dfae07
4 changed files with 22 additions and 6 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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);
}

View File

@ -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))