]> ruin.nu Git - hbs.git/blobdiff - bs/bsdoc.cpp
added code so you lose ships if you steal..
[hbs.git] / bs / bsdoc.cpp
index 1c6e60bf24f4f31cfe50e29bbb66e983ecc77ba8..462dc75e89177eef3aed62488869e6f1da80a9c3 100644 (file)
@@ -17,6 +17,8 @@
 
 #include "bsdoc.h"
 
+#include "planet.h"
+
 using namespace std;
 
 BSDoc::BSDoc()
@@ -39,12 +41,14 @@ bool BSDoc::save()
 
 bool BSDoc::saveAs(const QString &filename)
 {
+       QString test = filename;
   return true;
 }
 
 bool BSDoc::load(const QString &filename)
 {
-  emit documentChanged();
+  QString test = filename;
+       emit documentChanged();
   return true;
 }
 
@@ -58,8 +62,16 @@ bool BSDoc::isModified() const
 
 int BSDoc::newBattle(QString name)
 {
-       m_Battles[name]["Friendly"]["Home Planet"];
-       m_Battles[name]["Hostile"];
+       m_Battles[name]["Friendly"]["Home Planet"] = new Planet();;
+       m_Battles[name]["Friendly"]["Home Fleet"] = new Fleet();
+       m_Battles[name]["Hostile"]["Evil guy"] = new Fleet();
+
+       m_Battles[name]["Friendly"]["Home Planet"]->setName("Home Planet");
+       m_Battles[name]["Friendly"]["Home Fleet"]->setName("Home Fleet");
+       m_Battles[name]["Friendly"]["Home Fleet"]->setRace("Terran");
+       m_Battles[name]["Friendly"]["Home Fleet"]->setStays(-1);
+       m_Battles[name]["Hostile"]["Evil guy"]->setName("Evil guy");
+       m_Battles[name]["Hostile"]["Evil guy"]->setETA(1);
 
        modified = true;
        emit documentChanged();
@@ -69,24 +81,24 @@ int BSDoc::newBattle(QString name)
 /////////////////////////////////////////////////////////////////////////
 //
 
-const std::map<QString, std::map<QString, std::map<QString, Fleet> > >& BSDoc::battles() const
+const BattleList& BSDoc::battles() const
 {
        return m_Battles;
 }
 
 //////////////////////////////////////////////////////////////////////////
 //
-Fleet BSDoc::specificFleet(QString battle, QString group, QString fleet) const
+const Fleet* BSDoc::specificFleet(QString battle, QString group, QString fleet) const
 {
-       for (map<QString, map<QString, map<QString, Fleet> > >::const_iterator i = m_Battles.begin(); i != m_Battles.end(); ++i)
+       for (BattleList::const_iterator i = m_Battles.begin(); i != m_Battles.end(); ++i)
        {
                if (i->first == battle)
                {
-                       for (map<QString, map<QString, Fleet> >::const_iterator j = i->second.begin(); j != i->second.end(); j++)
+                       for (map<QString, map<QString, Fleet*> >::const_iterator j = i->second.begin(); j != i->second.end(); j++)
                        {
                                if (j->first == group)
                                {
-                                       for (map<QString, Fleet>::const_iterator k = j->second.begin(); k != j->second.end(); ++k)
+                                       for (map<QString, Fleet*>::const_iterator k = j->second.begin(); k != j->second.end(); ++k)
                                        {
                                                if (k->first == fleet)
                                                {
@@ -97,7 +109,65 @@ Fleet BSDoc::specificFleet(QString battle, QString group, QString fleet) const
                        }
                }
        }
-       return Fleet();
+       return '\0';
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSDoc::changeFleet(QString battle, QString group, QString fleet, const Fleet* fl)
+{
+       delete m_Battles[battle][group][fleet];
+
+       const Planet* planet = 0;
+       if((planet = dynamic_cast<const Planet*>(fl)))
+       {
+                       m_Battles[battle][group][fleet] = new Planet(*planet);
+       }
+       else
+       {
+               m_Battles[battle][group][fleet] = new Fleet(*fl);
+       }
+       emit documentChanged();
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSDoc::newFleet(QString battle, QString group, QString fleet, Fleet* fl)
+{
+       m_Battles[battle][group][fleet] = fl;
+       emit documentChanged();
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+void BSDoc::removeFleet(QString battle, QString group, QString fleet)
+{
+       delete m_Battles[battle][group][fleet];
+       m_Battles[battle][group].erase(fleet);
+       emit documentChanged();
 }
 
+//////////////////////////////////////////////////////////////////////////
+//
+void BSDoc::runBattleSimulation()
+{
+       for(BattleList::iterator i = m_Battles.begin(); i != m_Battles.end(); ++i)
+       {
+               map<QString, vector<Fleet*> > battle;
+               for (map<QString, map<QString, Fleet*> >::iterator j = i->second.begin(); j != i->second.end(); ++j)
+               {
+                       for (map<QString, Fleet*>::iterator k = j->second.begin(); k != j->second.end(); ++k)
+                               battle[j->first].push_back(k->second);
+               }
+
+               Planet* pl = dynamic_cast<Planet*>(i->second["Friendly"]["Home Planet"]);
+
+               if (pl)
+               {
+                       pl->runBattle(battle["Friendly"], battle["Hostile"]);
+               }
+       }
 
+       emit documentChanged();
+}