X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=bs%2Ffleet.cpp;h=3df0972e0584f0b3d4e541b0de0b9964237b0b19;hb=7311d423f454c500dbc60dd822007da3981b0d56;hp=a15fba36788628798d041ce50c4745585d590737;hpb=1b65d9ef6b9a5d8eb6aa241ed9693b7e6e74f910;p=hbs.git diff --git a/bs/fleet.cpp b/bs/fleet.cpp index a15fba3..3df0972 100644 --- a/bs/fleet.cpp +++ b/bs/fleet.cpp @@ -28,6 +28,7 @@ UnitList Fleet::s_Units; Fleet::Fleet() { m_iETA = 0; + m_iStays = 3; m_sRace = "Cathaar"; } @@ -201,6 +202,23 @@ void Fleet::setFleet(string unittype, int number, int tick = 0) m_Fleet[unittype][tick] = number; } +////////////////////////////////////////////////////////////////////////// +// +void Fleet::addFleet(std::string unittype, int number, int tick = 0) +{ + int earlier = 0; + int ticks = m_Fleet[unittype].size(); + + if (ticks != 0) + earlier = m_Fleet[unittype][ticks - 1]; + + for (int i = ticks; i <= tick; ++i) + { + m_Fleet[unittype].push_back(earlier); + } + m_Fleet[unittype][tick] += number; +} + ////////////////////////////////////////////////////////////////////////// // int Fleet::fleet(string unittype, int tick = 0) @@ -315,12 +333,12 @@ 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()) < stays) + if (( tick - (*i)->ETA()) >= 0 && (tick - (*i)->ETA()) < (*i)->stays()) { fl.push_back((*i)); cerr << "Using fleet " << (*i)->name() << " for tick " << tick << endl; } - else if ((*i)->name() == "Home Planet") + else if ((*i)->stays() < 0) fl.push_back((*i)); } return fl; @@ -572,10 +590,7 @@ void Fleet::addResource(std::string type, int number, int tick = 0) { int ticks = m_Resources[type].size(); - int latest = 0; - - if (ticks > 0) - latest = m_Resources[type][ticks - 1]; + int latest = resource(type, tick - 1); for (int i = ticks; i <= tick; ++i) m_Resources[type].push_back(latest); @@ -586,6 +601,9 @@ void Fleet::addResource(std::string type, int number, int tick = 0) // int Fleet::resource(std::string type, int tick = 0) const { + if (tick < 0) + return 0; + vectorconst* resource = 0; for (ResourceList::const_iterator i = m_Resources.begin(); i != m_Resources.end(); ++i) { @@ -610,6 +628,13 @@ int Fleet::resource(std::string type, int tick = 0) const return resource->at(tick); } +////////////////////////////////////////////////////////////////////////// +// +void Fleet::resetResources() +{ + m_Resources.clear() ; +} + ////////////////////////////////////////////////////////////////////////// // void Fleet::printFleet() @@ -654,6 +679,7 @@ void Fleet::distributeCappedRoids(std::vector fleets, int tick = 0) { string res = i->first; + cerr << "Distributing type: " << res << endl; for (vector::iterator j = i->second.begin(); j != i->second.end(); ++j) cout << (*j) << endl; @@ -678,9 +704,47 @@ void Fleet::distributeCappedRoids(std::vector fleets, int tick = 0) int lost = totcapped * part; cerr << (*j)->name() << " gaining " << lost << " " << res << " since it's " << part * 100 << "% of the whole score, and it had : " << fl1 << " score last tick.. compared to fleet total of: " << score(0) << endl; - (*j)->setResource(res, (*j)->resource(res,tick-1) + lost, tick); + + //(*j)->setResource(res, (*j)->resource(res,tick-1) + lost, tick); + (*j)->addResource(res,lost, tick); } } } +////////////////////////////////////////////////////////////////////////// +// +void Fleet::addFleet(std::map units, int tick = 0) +{ + for (map::iterator i = units.begin(); i != units.end(); ++i) + addFleet(i->first, i->second, tick); +} + +////////////////////////////////////////////////////////////////////////// +// +int Fleet::stays() const +{ + return m_iStays; +} +////////////////////////////////////////////////////////////////////////// +// +void Fleet::setStays(int ticks) +{ + m_iStays = ticks; +} + +////////////////////////////////////////////////////////////////////////// +// +void Fleet::calculateLostStealships(string unittype, std::map stolen, int tick = 1) +{ + int stealscore = 0; + for (map::iterator i = stolen.begin(); i != stolen.end(); ++i) + { + stealscore += stolen[i->first] * (s_Units[i->first].totRes() / 10.0); + } + + int lost = stealscore / (s_Units[unittype].totRes() / 10.0); + + cerr << "Lost " << lost << " " << unittype << " due to stealing ships worth: " << stealscore << endl; + killFleet(unittype, lost, tick); +}