--- a/QTfrontend/team.cpp Sun Nov 25 01:13:51 2012 +0400
+++ b/QTfrontend/team.cpp Sun Nov 25 22:17:11 2012 +0400
@@ -29,119 +29,91 @@
#include "hwform.h"
#include "DataManager.h"
-HWTeam::HWTeam(const QString & teamname) :
- QObject(0)
- , m_difficulty(0)
- , m_numHedgehogs(4)
- , m_isNetTeam(false)
- , m_team(NULL)
+HWTeam::HWTeam(const QString & teamname, QObject *parent) :
+ QObject(parent)
{
- m_name = teamname;
- OldTeamName = m_name;
+ flib_team team;
+ bzero(&team, sizeof(team));
+ team.name = teamname.toUtf8().data();
+ team.grave = "Statue";
+ team.fort = "Plane";
+ team.voicepack = "Default";
+ team.flag = "hedgewars";
+
for (int i = 0; i < HEDGEHOGS_PER_TEAM; i++)
{
- m_hedgehogs.append(HWHog());
- m_hedgehogs[i].Name = (QLineEdit::tr("hedgehog %1").arg(i+1));
- m_hedgehogs[i].Hat = "NoHat";
+ team.hogs[i].name = QLineEdit::tr("hedgehog %1").arg(i+1).toUtf8().data();
+ team.hogs[i].hat = "NoHat";
}
- m_grave = "Statue";
- m_fort = "Plane";
- m_voicepack = "Default";
- m_flag = "hedgewars";
+
+ m_oldTeamName = teamname;
+
+ QVector<flib_binding> binds(BINDS_NUMBER);
for(int i = 0; i < BINDS_NUMBER; i++)
{
- m_binds.append(BindAction());
- m_binds[i].action = cbinds[i].action;
- m_binds[i].strbind = cbinds[i].strbind;
+ binds[i].action = cbinds[i].action.toUtf8().data();
+ binds[i].binding = cbinds[i].strbind.toUtf8().data();
}
- m_rounds = 0;
- m_wins = 0;
- m_campaignProgress = 0;
- m_color = 0;
+ team.bindings = binds.data();
+ team.bindingCount = binds.size();
+
+ team.remoteDriven = false;
+ team.hogsInGame = 4;
+
+ m_team = flib_team_copy(&team);
}
-HWTeam::HWTeam(const QStringList& strLst) :
- QObject(0)
- , m_numHedgehogs(4)
- , m_isNetTeam(true)
- , m_team(NULL)
+HWTeam::HWTeam(const QStringList& strLst, QObject *parent) :
+ QObject(parent)
{
// net teams are configured from QStringList
if(strLst.size() != 23) throw HWTeamConstructException();
- m_name = strLst[0];
- m_grave = strLst[1];
- m_fort = strLst[2];
- m_voicepack = strLst[3];
- m_flag = strLst[4];
- m_owner = strLst[5];
- m_difficulty = strLst[6].toUInt();
- for(int i = 0; i < HEDGEHOGS_PER_TEAM; i++)
- {
- m_hedgehogs.append(HWHog());
- m_hedgehogs[i].Name=strLst[i * 2 + 7];
- m_hedgehogs[i].Hat=strLst[i * 2 + 8];
-// Somehow claymore managed an empty hat. Until we figure out how, this should avoid a repeat
-// Checking net teams is probably pointless, but can't hurt.
- if (m_hedgehogs[i].Hat.isEmpty()) m_hedgehogs[i].Hat = "NoHat";
- }
- m_rounds = 0;
- m_wins = 0;
- m_campaignProgress = 0;
- m_color = 0;
-}
+ flib_team team;
+ bzero(&team, sizeof(team));
+ team.name = strLst[0].toUtf8().data();
+ m_oldTeamName = strLst[0];
+ team.grave = strLst[1].toUtf8().data();
+ team.fort = strLst[2].toUtf8().data();
+ team.voicepack = strLst[3].toUtf8().data();
+ team.flag = strLst[4].toUtf8().data();
+ team.ownerName = strLst[5].toUtf8().data();
+ int difficulty = strLst[6].toUInt();
-HWTeam::HWTeam() :
- QObject(0)
- , m_difficulty(0)
- , m_numHedgehogs(4)
- , m_isNetTeam(false)
- , m_team(NULL)
-{
- m_name = QString("Team");
for (int i = 0; i < HEDGEHOGS_PER_TEAM; i++)
{
- m_hedgehogs.append(HWHog());
- m_hedgehogs[i].Name.sprintf("hedgehog %d", i);
- m_hedgehogs[i].Hat = "NoHat";
+ team.hogs[i].name = strLst[i * 2 + 7].toUtf8().data();
+
+ QString hat = strLst[i * 2 + 8];
+ if (hat.isEmpty())
+ team.hogs[i].hat = "NoHat";
+ else
+ team.hogs[i].hat = hat.toUtf8().data();
+
+ team.hogs[i].difficulty = difficulty;
}
- m_grave = QString("Simple"); // default
- m_fort = QString("Island"); // default
- m_voicepack = "Default";
- m_flag = "hedgewars";
+ m_oldTeamName = strLst[0];
+ QVector<flib_binding> binds(BINDS_NUMBER);
for(int i = 0; i < BINDS_NUMBER; i++)
{
- m_binds.append(BindAction());
- m_binds[i].action = cbinds[i].action;
- m_binds[i].strbind = cbinds[i].strbind;
+ binds[i].action = cbinds[i].action.toUtf8().data();
+ binds[i].binding = cbinds[i].strbind.toUtf8().data();
}
- m_rounds = 0;
- m_wins = 0;
- m_campaignProgress = 0;
- m_color = 0;
+ team.bindings = binds.data();
+ team.bindingCount = binds.size();
+
+ team.remoteDriven = true;
+ team.hogsInGame = 4;
+
+ m_team = flib_team_copy(&team);
}
+
HWTeam::HWTeam(const HWTeam & other) :
- QObject(0)
- , OldTeamName(other.OldTeamName)
- , m_name(other.m_name)
- , m_grave(other.m_grave)
- , m_fort(other.m_fort)
- , m_flag(other.m_flag)
- , m_voicepack(other.m_voicepack)
- , m_hedgehogs(other.m_hedgehogs)
- , m_difficulty(other.m_difficulty)
- , m_binds(other.m_binds)
+ QObject(other.parent())
+ , m_oldTeamName(other.m_oldTeamName)
, m_team(flib_team_copy(other.m_team))
- , m_numHedgehogs(other.m_numHedgehogs)
- , m_color(other.m_color)
- , m_isNetTeam(other.m_isNetTeam)
- , m_owner(other.m_owner)
- , m_campaignProgress(other.m_campaignProgress)
- , m_rounds(other.m_rounds)
- , m_wins(other.m_wins)
-// , AchievementProgress(other.AchievementProgress)
{
}
@@ -150,23 +122,8 @@
{
if(this != &other)
{
- OldTeamName = other.OldTeamName;
- m_name = other.m_name;
- m_grave = other.m_grave;
- m_fort = other.m_fort;
- m_flag = other.m_flag;
- m_voicepack = other.m_voicepack;
- m_hedgehogs = other.m_hedgehogs;
- m_difficulty = other.m_difficulty;
- m_binds = other.m_binds;
- m_numHedgehogs = other.m_numHedgehogs;
- m_color = other.m_color;
- m_isNetTeam = other.m_isNetTeam;
- m_owner = other.m_owner;
- m_campaignProgress = other.m_campaignProgress;
- m_rounds = other.m_rounds;
- m_wins = other.m_wins;
- m_color = other.m_color;
+ m_oldTeamName = other.m_oldTeamName;
+ m_team = flib_team_copy(other.m_team);
}
return *this;
@@ -180,143 +137,59 @@
bool HWTeam::loadFromFile()
{
+ QString name = QString::fromUtf8(m_team->name);
+
if(m_team)
flib_team_destroy(m_team);
- m_team = flib_team_from_ini(QString("/config/Teams/%1.hwt").arg(m_name).toUtf8().constData());
+ m_team = flib_team_from_ini(QString("/config/Teams/%1.hwt").arg(name).toUtf8().data());
- /*
- QSettings teamfile(QString("physfs://config/Teams/%1.hwt").arg(m_name), QSettings::IniFormat, 0);
- teamfile.setIniCodec("UTF-8");
- m_name = teamfile.value("Team/Name", m_name).toString();
- m_grave = teamfile.value("Team/Grave", "Statue").toString();
- m_fort = teamfile.value("Team/Fort", "Plane").toString();
- m_voicepack = teamfile.value("Team/Voicepack", "Default").toString();
- m_flag = teamfile.value("Team/Flag", "hedgewars").toString();
- m_difficulty = teamfile.value("Team/Difficulty", 0).toInt();
- m_rounds = teamfile.value("Team/Rounds", 0).toInt();
- m_wins = teamfile.value("Team/Wins", 0).toInt();
- m_campaignProgress = teamfile.value("Team/CampaignProgress", 0).toInt();
- for(int i = 0; i < HEDGEHOGS_PER_TEAM; i++)
- {
- QString hh = QString("Hedgehog%1/").arg(i);
- m_hedgehogs[i].Name = teamfile.value(hh + "Name", QString("hedgehog %1").arg(i+1)).toString();
- m_hedgehogs[i].Hat = teamfile.value(hh + "Hat", "NoHat").toString();
- m_hedgehogs[i].Rounds = teamfile.value(hh + "Rounds", 0).toInt();
- m_hedgehogs[i].Kills = teamfile.value(hh + "Kills", 0).toInt();
- m_hedgehogs[i].Deaths = teamfile.value(hh + "Deaths", 0).toInt();
- m_hedgehogs[i].Suicides = teamfile.value(hh + "Suicides", 0).toInt();
- }
- for(int i = 0; i < BINDS_NUMBER; i++)
- m_binds[i].strbind = teamfile.value(QString("Binds/%1").arg(m_binds[i].action), cbinds[i].strbind).toString();
- for(int i = 0; i < MAX_ACHIEVEMENTS; i++)
- if(achievements[i][0][0])
- AchievementProgress[i] = teamfile.value(QString("Achievements/%1").arg(achievements[i][0]), 0).toUInt();
- else
- break;*/
return m_team != NULL;
}
bool HWTeam::fileExists()
{
- QFile f(QString("physfs://config/Teams/%1.hwt").arg(m_name));
+ QFile f(QString("physfs://config/Teams/%1.hwt").arg(name()));
return f.exists();
}
bool HWTeam::deleteFile()
{
- if(m_isNetTeam)
+ if(m_team->remoteDriven)
return false;
- QFile cfgfile(QString("physfs://config/Teams/%1.hwt").arg(m_name));
+
+ QFile cfgfile(QString("physfs://config/Teams/%1.hwt").arg(name()));
cfgfile.remove();
return true;
}
bool HWTeam::saveToFile()
{
- if (OldTeamName != m_name)
+ if (m_oldTeamName != name())
{
- QFile cfgfile(QString("physfs://config/Teams/%1.hwt").arg(OldTeamName));
+ QFile cfgfile(QString("physfs://config/Teams/%1.hwt").arg(m_oldTeamName));
cfgfile.remove();
- OldTeamName = m_name;
+ m_oldTeamName = name();
}
- QSettings teamfile(QString("physfs://config/Teams/%1.hwt").arg(m_name), QSettings::IniFormat, 0);
- teamfile.setIniCodec("UTF-8");
- teamfile.setValue("Team/Name", m_name);
- teamfile.setValue("Team/Grave", m_grave);
- teamfile.setValue("Team/Fort", m_fort);
- teamfile.setValue("Team/Voicepack", m_voicepack);
- teamfile.setValue("Team/Flag", m_flag);
- teamfile.setValue("Team/Difficulty", m_difficulty);
- teamfile.setValue("Team/Rounds", m_rounds);
- teamfile.setValue("Team/Wins", m_wins);
- teamfile.setValue("Team/CampaignProgress", m_campaignProgress);
- for(int i = 0; i < HEDGEHOGS_PER_TEAM; i++)
- {
- QString hh = QString("Hedgehog%1/").arg(i);
- teamfile.setValue(hh + "Name", m_hedgehogs[i].Name);
- teamfile.setValue(hh + "Hat", m_hedgehogs[i].Hat);
- teamfile.setValue(hh + "Rounds", m_hedgehogs[i].Rounds);
- teamfile.setValue(hh + "Kills", m_hedgehogs[i].Kills);
- teamfile.setValue(hh + "Deaths", m_hedgehogs[i].Deaths);
- teamfile.setValue(hh + "Suicides", m_hedgehogs[i].Suicides);
- }
- for(int i = 0; i < BINDS_NUMBER; i++)
- teamfile.setValue(QString("Binds/%1").arg(m_binds[i].action), m_binds[i].strbind);
- for(int i = 0; i < MAX_ACHIEVEMENTS; i++)
- if(achievements[i][0][0])
- teamfile.setValue(QString("Achievements/%1").arg(achievements[i][0]), AchievementProgress[i]);
- else
- break;
- return true;
+
+ return flib_team_to_ini(QString("physfs://config/Teams/%1.hwt").arg(name()).toUtf8(), m_team) == 0;
}
-QStringList HWTeam::teamGameConfig(quint32 InitHealth) const
-{
- QStringList sl;
- if (m_isNetTeam)
- {
- sl.push_back(QString("eaddteam %3 %1 %2").arg(qcolor().rgb() & 0xffffff).arg(m_name).arg(QString(QCryptographicHash::hash(m_owner.toUtf8(), QCryptographicHash::Md5).toHex())));
- sl.push_back("erdriven");
- }
- else sl.push_back(QString("eaddteam %3 %1 %2").arg(qcolor().rgb() & 0xffffff).arg(m_name).arg(playerHash));
-
- sl.push_back(QString("egrave " + m_grave));
- sl.push_back(QString("efort " + m_fort));
- sl.push_back(QString("evoicepack " + m_voicepack));
- sl.push_back(QString("eflag " + m_flag));
-
- if (!m_isNetTeam)
- for(int i = 0; i < BINDS_NUMBER; i++)
- if(!m_binds[i].strbind.isEmpty())
- sl.push_back(QString("ebind " + m_binds[i].strbind + " " + m_binds[i].action));
-
- for (int t = 0; t < m_numHedgehogs; t++)
- {
- sl.push_back(QString("eaddhh %1 %2 %3")
- .arg(QString::number(m_difficulty),
- QString::number(InitHealth),
- m_hedgehogs[t].Name));
- sl.push_back(QString("ehat %1")
- .arg(m_hedgehogs[t].Hat));
- }
- return sl;
-}
bool HWTeam::isNetTeam() const
{
- return m_isNetTeam;
+ return m_team->remoteDriven;
}
bool HWTeam::operator==(const HWTeam& t1) const
{
- return m_name==t1.m_name;
+ return qstrcmp(m_team->name, t1.m_team->name) == 0;
}
bool HWTeam::operator<(const HWTeam& t1) const
{
- return m_name<t1.m_name; // if names are equal - test if it is net team
+ return qstrcmp(m_team->name, t1.m_team->name) < 0; // if names are equal - test if it is net team
}
@@ -326,27 +199,45 @@
// name
QString HWTeam::name() const
{
- return m_name;
+ return QString::fromUtf8(m_team->name);
}
+
void HWTeam::setName(const QString & name)
{
- m_name = name;
+ free(m_team->name);
+
+ m_team->name = qstrdup(name.toUtf8().constData());
+}
+
+QString HWTeam::hedgehogName(int index) const
+{
+ return QString::fromUtf8(m_team->hogs[index].name);
}
-// single hedgehog
-const HWHog & HWTeam::hedgehog(unsigned int idx) const
+QString HWTeam::hedgehogHat(int index) const
{
- return m_hedgehogs[idx];
+ return QString::fromUtf8(m_team->hogs[index].hat);
}
-void HWTeam::setHedgehog(unsigned int idx, HWHog hh)
+
+void HWTeam::setHedgehogName(int index, const QString & name)
{
- m_hedgehogs[idx] = hh;
+ free(m_team->hogs[index].name);
+
+ m_team->hogs[index].name = qstrdup(name.toUtf8().constData());
}
+void HWTeam::setHedgehogHat(int index, const QString & hat)
+{
+ free(m_team->hogs[index].hat);
+
+ m_team->hogs[index].hat = qstrdup(hat.toUtf8().constData());
+}
+
+
// owner
QString HWTeam::owner() const
{
- return m_owner;
+ return QString::fromUtf8(m_team->ownerName);
}
@@ -354,105 +245,121 @@
// difficulty
unsigned int HWTeam::difficulty() const
{
- return m_difficulty;
+ return m_team->hogs[0].difficulty;
}
+
void HWTeam::setDifficulty(unsigned int level)
{
- m_difficulty = level;
+ for(int i = 0; i < HEDGEHOGS_PER_TEAM; ++i)
+ m_team->hogs[i].difficulty = level;
}
// color
int HWTeam::color() const
{
- return m_color;
+ return m_team->colorIndex;
}
QColor HWTeam::qcolor() const
{
- return DataManager::instance().colorsModel()->item(m_color)->data().value<QColor>();
+ return DataManager::instance().colorsModel()->item(m_team->colorIndex)->data().value<QColor>();
}
void HWTeam::setColor(int color)
{
- m_color = color % DataManager::instance().colorsModel()->rowCount();
+ m_team->colorIndex = color % DataManager::instance().colorsModel()->rowCount();
}
// binds
QString HWTeam::keyBind(unsigned int idx) const
{
- return m_binds[idx].strbind;
+ return QString::fromUtf8(m_team->bindings[idx].binding);
}
+
void HWTeam::bindKey(unsigned int idx, const QString & key)
{
- m_binds[idx].strbind = key;
+ free(m_team->bindings[idx].binding);
+
+ m_team->bindings[idx].binding = qstrdup(key.toUtf8().constData());
}
// flag
-void HWTeam::setFlag(const QString & flag)
+void HWTeam::setFlag(const QString & flag)
{
- m_flag = flag;
+ free(m_team->flag);
+
+ m_team->flag = strdup(flag.toUtf8().constData());
}
+
QString HWTeam::flag() const
{
- return m_flag;
+ return QString::fromUtf8(m_team->flag);
}
// fort
-void HWTeam::setFort(const QString & fort)
+void HWTeam::setFort(const QString & fort)
{
- m_fort = fort;
+ free(m_team->fort);
+
+ m_team->fort = strdup(fort.toUtf8().constData());
}
+
QString HWTeam::fort() const
{
- return m_fort;
+ return QString::fromUtf8(m_team->fort);
}
// grave
void HWTeam::setGrave(const QString & grave)
{
- m_grave = grave;
+ free(m_team->grave);
+
+ m_team->grave = strdup(grave.toUtf8().constData());
}
+
QString HWTeam::grave() const
{
- return m_grave;
+ return QString::fromUtf8(m_team->grave);
}
// voicepack - getter/setter
void HWTeam::setVoicepack(const QString & voicepack)
{
- m_voicepack = voicepack;
+ free(m_team->voicepack);
+
+ m_team->voicepack = strdup(voicepack.toUtf8().constData());
}
+
QString HWTeam::voicepack() const
{
- return m_voicepack;
+ return QString::fromUtf8(m_team->voicepack);
}
// campaignProgress - getter
unsigned int HWTeam::campaignProgress() const
{
- return m_campaignProgress;
-};
+ return m_team->campaignProgress;
+}
// amount of hedgehogs
unsigned char HWTeam::numHedgehogs() const
{
- return m_numHedgehogs;
+ return m_team->hogsInGame;
}
+
void HWTeam::setNumHedgehogs(unsigned char num)
{
- m_numHedgehogs = num;
+ m_team->hogsInGame = num;
}
-
-
// rounds+wins - incrementors
void HWTeam::incRounds()
{
- m_rounds++;
+ m_team->rounds++;
}
void HWTeam::incWins()
{
- m_wins++;
+ m_team->wins++;
}