X-Git-Url: https://ruin.nu/git/?p=hbs.git;a=blobdiff_plain;f=bs%2Ffleet.cpp;fp=bs%2Ffleet.cpp;h=19bc3860ef51af974aee0f3c60b14542f58ecb42;hp=3df0972e0584f0b3d4e541b0de0b9964237b0b19;hb=924d4cd0f8c9c340c8ba6f2e5759fed8f0c83573;hpb=6ab17155b82923f4263f1c536133e657970239a4 diff --git a/bs/fleet.cpp b/bs/fleet.cpp index 3df0972..19bc386 100644 --- a/bs/fleet.cpp +++ b/bs/fleet.cpp @@ -223,10 +223,14 @@ void Fleet::addFleet(std::string unittype, int number, int tick = 0) // int Fleet::fleet(string unittype, int tick = 0) { + int ticks = m_Fleet[unittype].size(); if (ticks == 0) return 0; + if (tick < 0) + return m_Fleet[unittype][0]; + --ticks; if (ticks < tick) @@ -333,7 +337,9 @@ std::vector Fleet::calculateSide(std::vector fleets, int stays = vector fl; for (vector::iterator i = fleets.begin(); i != fleets.end(); ++i) { - if (( tick - (*i)->ETA()) >= 0 && (tick - (*i)->ETA()) < (*i)->stays()) + if ((*i)->stays() == 0) + continue; + else if (( tick - (*i)->ETA()) >= 0 && (tick - (*i)->ETA()) < (*i)->stays()) { fl.push_back((*i)); cerr << "Using fleet " << (*i)->name() << " for tick " << tick << endl; @@ -748,3 +754,50 @@ void Fleet::calculateLostStealships(string unittype, std::map cerr << "Lost " << lost << " " << unittype << " due to stealing ships worth: " << stealscore << endl; killFleet(unittype, lost, tick); } + +////////////////////////////////////////////////////////////////////////// +// +void Fleet::distributeStolenShips(std::map > stolen, std::vector fleets, int tick = 0) +{ + for(map >::iterator i = stolen.begin(); i != stolen.end(); ++i) + { + int totalstealers = 0; + for (vector::iterator j = fleets.begin(); j != fleets.end(); ++j) + totalstealers += (*j)->fleet(i->first, tick - 1); + + for (map::iterator j = i->second.begin(); j != i->second.end(); ++j) + { + for (vector::iterator k = fleets.begin(); k != fleets.end(); ++k) + { + int stolen = float ((*k)->fleet(i->first, tick - 1)) / totalstealers * j->second; + (*k)->addFleet(j->first, stolen, tick); + } + } + } +} + +////////////////////////////////////////////////////////////////////////// +// +void Fleet::calculateSalvage() +{ + for (FleetList::iterator i = m_Fleet.begin(); i != m_Fleet.end(); ++i) + { + + map res = s_Units[i->first].resources(); + + if (i->second.size() > 0) + cerr << endl << i->first << ": "; + + int tick = 0; + for (vector::iterator j = i->second.begin(); j != i->second.end(); ++j, ++tick) + { + int lostunits = fleet(i->first, tick - 1) - fleet(i->first, tick); + + if (lostunits <= 0) + continue; + cerr << "(" << tick << ":" << fleet(i->first, tick) << ") "; + for (map::iterator k = res.begin(); k != res.end(); ++k) + addResource(k->first, lostunits * k->second * 0.25, tick); + } + } +}