X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=bs%2Ffleet.cpp;h=7070dae6d2a719c3162c5d2113237fa4a84b4383;hb=bb4169deef42f91b6afa4c4561f9339fba040f01;hp=b4e4335a4c71486f7db35b461765b8ba31566f16;hpb=515395613c36c35c3797bc085f6d54a8ac7725d9;p=hbs.git diff --git a/bs/fleet.cpp b/bs/fleet.cpp index b4e4335..7070dae 100644 --- a/bs/fleet.cpp +++ b/bs/fleet.cpp @@ -139,8 +139,7 @@ void Fleet::setUnits(UnitList& units) << s_Units[(*i).first].ETA() << "\t" << s_Units[(*i).first].type() << endl; } - - */ +*/ } ////////////////////////////////////////////////////////////////////////// @@ -172,8 +171,13 @@ unsigned Fleet::score(int tick = 0) const for (FleetList::const_iterator i = m_Fleet.begin(); i != m_Fleet.end(); ++i) { - if (i->second.size() >= tick) - break; + int ticks = i->second.size(); + if (ticks == 0) + continue; + --ticks; + if ( ticks < tick) + tot_score += i->second[ticks] * s_Units[i->first].totRes() / 10; + else tot_score += i->second[tick] * s_Units[i->first].totRes() / 10; } @@ -461,7 +465,7 @@ void Fleet::takeEMP(std::string unittype, int number) for (map::iterator j = targets.begin(); j != targets.end(); ++j) { - int maxguns = (*j->second)/total * guns; + float maxguns = float((*j->second))/total * guns; cerr << "Now shooting at target: " << j->first << endl; double k = maxguns; @@ -513,11 +517,28 @@ void Fleet::killFleet(std::string unittype, int number, int tick = 0) void Fleet::setResource(std::string type, int number, int tick = 0) { - if (m_Resources[type].size() <= tick) + int ticks = m_Resources[type].size(); + for (int i = ticks; i <= tick; ++i) m_Resources[type].push_back(number); m_Resources[type][tick] = number; } +////////////////////////////////////////////////////////////////////////// +// +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]; + + for (int i = ticks; i <= tick; ++i) + m_Resources[type].push_back(latest); + m_Resources[type][tick] += number; +} + ////////////////////////////////////////////////////////////////////////// // int Fleet::resource(std::string type, int tick = 0) const @@ -581,3 +602,42 @@ void Fleet::blockFleet(std::string unittype, int number, int tick = 0) m_BlockedFleet[unittype].push_back(number); } } + +////////////////////////////////////////////////////////////////////////// +// +void Fleet::distributeCappedRoids(std::vector fleets, int tick = 0) +{ + for (ResourceList::iterator i = m_Resources.begin(); i != m_Resources.end(); ++i) + { + string res = i->first; + + cerr << "Distributing type: " << res << endl; + for (vector::iterator j = i->second.begin(); j != i->second.end(); ++j) + cout << (*j) << endl; + + if (m_Resources[res].size() < 2) + continue; + if (m_Resources[res][1] == 0) + continue; + + + int totcapped = resource(res,1) - resource(res, 0); + + + cerr << "Distributing type: " << res << " with a total gain of " << totcapped << " roids" << endl; + + cerr << "Total number of roids before: " << resource(res, 0) << " and after : " << resource(res, 1) << endl; + + for (vector::iterator j = fleets.begin(); j != fleets.end(); ++j) + { + unsigned fl1 = (*j)->score(tick - 1); + float part = float(fl1) / score(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)->addResource(res, lost, tick); + } + } +} + +