Load default player data from XML

This was SVN commit r3658.
This commit is contained in:
Ykkrosh 2006-03-18 04:38:41 +00:00
parent afae448b11
commit c2f13c689e
4 changed files with 56 additions and 32 deletions

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- List of default players for single-player maps -->
<players>
<player name="Gaia" rgb="255 255 255"/> <!-- white -->
<player name="Player 1" rgb="112 112 208"/> <!-- blue -->
<player name="Acumen" rgb="208 112 112"/> <!-- red -->
<player name="Boco the Insignificant" rgb="112 208 112"/> <!-- green -->
<player name="NoMonkey the Magnificent" rgb="208 208 112"/> <!-- yellow -->
<player name="Wijit" rgb="112 208 208"/> <!-- turquoise -->
<player name="Ykkrosh" rgb="208 112 208"/> <!-- purple -->
<player name="Code Monkey" rgb="208 160 112"/> <!-- orange -->
<player name="Clausewitz" rgb="160 160 160"/> <!-- grey -->
</players>

View File

@ -50,7 +50,10 @@ bool CUnit::SetRandomAnimation(const CStr& name, bool once, float speed)
CSkeletonAnim* anim = GetRandomAnimation(name);
if (anim)
{
m_Model->SetAnimation(anim, once, speed ? speed*anim->m_AnimDef->GetDuration() : 1000.f);
float actualSpeed = 1000.f;
if (speed && anim->m_AnimDef)
actualSpeed = speed * anim->m_AnimDef->GetDuration();
m_Model->SetAnimation(anim, once, actualSpeed);
return true;
}
else

View File

@ -81,7 +81,7 @@ public:
// Otherwise, complain.
else
{
LOG(WARNING, "gui", "add_color effect has some components >127 and some <127 - colours will be clamped");
LOG(WARNING, "gui", "add_color effect has some components above 127 and some below -127 - colours will be clamped");
m_Color = CColor(c.r+0.5f, c.g+0.5f, c.b+0.5f, c.a+0.5f);
m_Method = ADD_SIGNED;
}

View File

@ -5,6 +5,7 @@
#include "ConfigDB.h"
#include "Network/ServerSession.h"
#include "CLogger.h"
#include "ps/XML/Xeromyces.h"
using namespace std;
@ -197,36 +198,40 @@ CGameAttributes::CGameAttributes():
AddSynchedProperty(L"numSlots", &m_NumSlots, &CGameAttributes::OnNumSlotsUpdate);
AddSynchedProperty(L"losSetting", &m_LOSSetting);
m_Players.resize(9);
for (int i=0;i<9;i++)
m_Players[i]=new CPlayer(i);
m_Players[0]->SetName(L"Gaia");
m_Players[0]->SetColour(SPlayerColour(1.0f, 1.0f, 1.0f)); //White
m_Players[1]->SetName(L"Player 1");
m_Players[1]->SetColour(SPlayerColour(0.4375f, 0.4375f, 0.8125f)); // Blue
m_Players[2]->SetName(L"Acumen");
m_Players[2]->SetColour(SPlayerColour(0.8125f, 0.4375f, 0.4375f)); //Red
m_Players[3]->SetName(L"Boco the Insignificant");
m_Players[3]->SetColour(SPlayerColour(0.4375f, 0.8125f, 0.4375f)); //Green
m_Players[4]->SetName(L"NoMonkey the Magnificent");
m_Players[4]->SetColour(SPlayerColour(0.8125f, 0.8125f, 0.4375f)); //Yellow
m_Players[5]->SetName(L"Wijit");
m_Players[5]->SetColour(SPlayerColour(0.4375f, 0.8125f, 0.8125f)); //Turquoise
m_Players[6]->SetName(L"Ykkrosh");
m_Players[6]->SetColour(SPlayerColour(0.8125f, 0.4375f, 0.8125f)); //Purple
m_Players[7]->SetName(L"Code Monkey");
m_Players[7]->SetColour(SPlayerColour(0.8125f, 0.625f, 0.4375f)); //Orange
m_Players[8]->SetName(L"Clausewitz");
m_Players[8]->SetColour(SPlayerColour(0.625f, 0.625f, 0.625f)); //Gray
CXeromyces XeroFile;
if (XeroFile.Load("temp/players.xml") != PSRETURN_OK)
{
LOG(ERROR, "", "Failed to load players list (temp/players.xml)");
// Basic default players
m_Players.push_back(new CPlayer(0));
m_Players.back()->SetName(L"Gaia");
m_Players.back()->SetColour(SPlayerColour(1.0f, 1.0f, 1.0f));
m_Players.push_back(new CPlayer(1));
m_Players.back()->SetName(L"Player 1");
m_Players.back()->SetColour(SPlayerColour(0.4375f, 0.4375f, 0.8125f));
}
else
{
int at_name = XeroFile.getAttributeID("name");
int at_rgb = XeroFile.getAttributeID("rgb");
XMBElement root = XeroFile.getRoot();
XERO_ITER_EL(root, player)
{
XMBAttributeList attr = player.getAttributes();
m_Players.push_back(new CPlayer((int)m_Players.size()));
m_Players.back()->SetName(attr.getNamedItem(at_name));
std::stringstream str;
str << (CStr)attr.getNamedItem(at_rgb);
int r, g, b;
if (str >> r >> g >> b)
m_Players.back()->SetColour(SPlayerColour(r/255.0f, g/255.0f, b/255.0f));
}
}
std::vector<CPlayer *>::iterator it=m_Players.begin();
++it; // Skip Gaia - gaia doesn't account for a slot