]> ruin.nu Git - hbs.git/blobdiff - bs/planet.cpp
started to work on the battle report.. almost there =)
[hbs.git] / bs / planet.cpp
index c819323d76bde827bde8414b7b8c3b620ef2355c..e5aba8575eaed8c659ecc58a4818ec31d2debc2c 100644 (file)
@@ -154,6 +154,8 @@ void Planet::runBattle(std::vector<Fleet*> friendly, std::vector<Fleet*> hostile
        for (vector<Fleet*>::iterator i = hostile.begin(); i != hostile.end(); ++i)
                (*i)->resetTicks();
 
+       m_Report.clear();
+
        for(int tick = 1; skipped < 20; ++tick)
        {
                //See who's in the battle at the current tick
@@ -237,35 +239,50 @@ void Planet::calcOneTick(Planet* friendly, Fleet* hostile, std::map<std::string,
        for (UnitList::iterator i = s_Units.begin(); i != s_Units.end(); ++i)
                unitsinit[i->second.initiative()] = i->first;
 
+       
+
        for (map<int, string>::iterator i = unitsinit.begin(); i != unitsinit.end(); ++i)
        {
                Fleet* hostiletemp = new Fleet(*hostile);
                Planet* friendlytemp = new Planet(*friendly);
                
                string unittype = i->second;
+               int init = i->first;
+
+               int freefriendly = friendly->freeFleet(unittype, 1);
+               int freehostile = hostile->freeFleet(unittype, 1);
+
+               if ( freefriendly <= 0 && freehostile <= 0)
+                       continue;
 
                //cerr << "Initiative: " << s_Units[unittype].initiative() << " with unit: " << unittype << endl;
+       
+               map<string, int> friendlyhits;
+               map<string, int> hostilehits;
 
                if (s_Units[unittype].type() == "EMP")  
                {
-                       hostiletemp->takeEMP(unittype, friendly->freeFleet(unittype, 1));
-                       friendlytemp->takeEMP(unittype, hostile->freeFleet(unittype, 1));
+                       hostiletemp->takeEMP(unittype, freefriendly, friendlyhits);
+                       friendlytemp->takeEMP(unittype, freehostile, hostilehits);
                }
                else if (s_Units[unittype].type() == "Steal")
                {
-                       hostiletemp->takeShoot(unittype, friendly->freeFleet(unittype, 1), stealfriendly[unittype]);
-                       friendlytemp->takeShoot(unittype, hostile->freeFleet(unittype, 1), stealhostile[unittype]);
+                       hostiletemp->takeShoot(unittype, freefriendly, stealfriendly[unittype]);
+                       friendlytemp->takeShoot(unittype, freehostile, stealhostile[unittype]);
+                       
+                       friendlyhits = stealfriendly[unittype];
+                       hostilehits = stealhostile[unittype];
 
                        friendlytemp->calculateLostStealships(unittype, stealfriendly[unittype], 1);
                        hostiletemp->calculateLostStealships(unittype, stealhostile[unittype], 1);
                }
                else
                {
-                       map<string, int> temp;
-                       hostiletemp->takeShoot(unittype, friendly->freeFleet(unittype, 1), temp);
-                       friendlytemp->takeShoot(unittype, hostile->freeFleet(unittype, 1), temp);
+                       hostiletemp->takeShoot(unittype, freefriendly, friendlyhits);
+                       friendlytemp->takeShoot(unittype, freehostile, hostilehits);
                }
 
+
                if (s_Units[unittype].type() == "Pod")
                {
                        //FIXME: Prolly need to recode the whole capping section for r7, due to multiple pods thingy
@@ -275,7 +292,7 @@ void Planet::calcOneTick(Planet* friendly, Fleet* hostile, std::map<std::string,
                        {
                                for (RoidList::iterator roid = m_Roids.begin(); roid != m_Roids.end(); ++roid)
                                {
-                                       int caproids = capping(tick) * roids(roid->first, tick - 1);
+                                       int caproids = int(capping(tick) * roids(roid->first, tick - 1));
                                        //int freepods = hostiletemp->freeFleet(unittype, 1);
                
                                        cerr << "Possible to steal " << caproids << " " << roid->first << " roids\n";
@@ -310,6 +327,10 @@ void Planet::calcOneTick(Planet* friendly, Fleet* hostile, std::map<std::string,
 
                        return;
                }
+               m_Report[tick][init]["Friendly"][unittype] = friendlyhits;
+               m_Report[tick][init]["Friendly"][unittype]["000"] = freefriendly;
+               m_Report[tick][init]["Hostile"][unittype] = hostilehits;
+               m_Report[tick][init]["Hostile"][unittype]["000"] = freehostile;
 
                //set the the objects so they point at the modified objects
                *friendly = *friendlytemp;
@@ -367,3 +388,10 @@ void Planet::setCapping(float capping, int tick)
        else
                m_Capping[tick] = 0;
 }
+
+//////////////////////////////////////////////////////////////////////////
+//
+ReportList Planet::report() const
+{
+       return m_Report;
+}