X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=bs%2Ffleet.cpp;h=73923b5c22449e43c8702fdf9b376be5a39c201a;hb=HEAD;hp=01ceb2b930e0cc70c3c6e24077822b18f892bd00;hpb=935b6de2d1428854d76acc20b1727eb4a30f9273;p=hbs.git diff --git a/bs/fleet.cpp b/bs/fleet.cpp index 01ceb2b..73923b5 100644 --- a/bs/fleet.cpp +++ b/bs/fleet.cpp @@ -380,55 +380,27 @@ void Fleet::takeShoot(std::string unittype, int number, std::map::iterator i = s_Units[unittype].target().begin(); i != s_Units[unittype].target().end(); ++i) + for (int count = 0; count < 3; ++count) { string ta = s_Units[unittype].target(count); - //cerr << "Shooting at target class: " << ta << endl; + while (gunsleft > 0) { - - map targets; - - for (UnitList::iterator j = s_Units.begin(); j != s_Units.end(); ++j) - { - if (m_Fleet[j->first].size() == 0) - continue; - - - if (m_Fleet[j->first].size() == 1 ) - m_Fleet[j->first].push_back(m_Fleet[j->first][0]); - - //cerr << "Target is class: " << j->second.type() << endl; - - if (m_Fleet[j->first][1] > 0 && ( ta == j->second.unitClass() || ta == "All")) - { - - // cerr << "Looking at target: " << j->first << endl; - targets[j->first] = &m_Fleet[j->first][1]; - } - } + int total = 0; + map targets = findTargets(ta,total, 0); if (targets.size() == 0) break; - int total = 0; - for (map::iterator j = targets.begin(); j != targets.end(); ++j) - total += (*j->second); - for (map::iterator j = targets.begin(); j != targets.end(); ++j) { float maxguns = float((*j->second))/total * guns; - //cerr << "Now shooting at target: " << j->first << endl; if (m_Armor[j->first] <= 0 || m_Armor[j->first] > s_Units[j->first].armor()) m_Armor[j->first] = s_Units[j->first].armor(); double k = maxguns; - //cerr << "Targets agility: " << s_Units[j->first].agility() << endl; - //cerr << "Weaponspeed: " << s_Units[unittype].weaponSpeed() << endl; while (k > 0) { @@ -439,8 +411,6 @@ void Fleet::takeShoot(std::string unittype, int number, std::mapfirst].agility(); k -= float(100)/(25 + wpsp - agil); - //cout << "Used " << blaha << " guns to hit with one shot.\n"; - //cout << "WPSP: " << wpsp << "\nAgil: " << agil << endl; m_Armor[j->first] -= s_Units[unittype].power(); if (m_Armor[j->first] <= 0) @@ -448,27 +418,9 @@ void Fleet::takeShoot(std::string unittype, int number, std::mapfirst] = s_Units[j->first].armor(); (*j->second)--; hitunits[j->first]++; - - //There is a chance that we're hitting a blocked ship. - /*Not anymore.. - if (m_BlockedFleet[j->first].size() >= 1) - { - int test = rand() % m_BlockedFleet[j->first][0]; - if (test == 1 - && m_BlockedFleet[j->first][0] > 0) - { - if (m_BlockedFleet[j->first].size() == 1) - m_BlockedFleet[j->first].push_back(m_BlockedFleet[j->first][0] - 1); - else if (m_BlockedFleet[j->first][1] > 0) - m_BlockedFleet[j->first][1]--; - } - } - */ } } - - //cerr << hitunits[j->first] << " units of type: " << j->first << "killed\n"; if (k <= 0) gunsleft -= maxguns; else @@ -486,57 +438,23 @@ void Fleet::takeEMP(std::string unittype, int number, std::map if (guns == 0) return; - //cerr << unittype << ": with " << guns << " guns\n"; - float gunsleft = guns; - for (int count = 0; count < 3; ++count)//vector::iterator i = s_Units[unittype].target().begin(); i != s_Units[unittype].target().end(); ++i) + for (int count = 0; count < 3; ++count) { string ta = s_Units[unittype].target(count); - //cerr << "Shooting at target class: " << ta << endl; + while (gunsleft > 0) { - - map targets; - - for (UnitList::iterator j = s_Units.begin(); j != s_Units.end(); ++j) - { - if (j->second.type() == "PDS") - continue; - - if (freeFleet(j->first, 1) <= 0) - continue; - - if (m_Fleet[j->first].size() == 0) - continue; - - if (m_Fleet[j->first].size() == 1) - m_Fleet[j->first].push_back(m_Fleet[j->first][0]); - - //cerr << "Target is class: " << j->second.type() << endl; - - if (m_Fleet[j->first][1] > 0 && ( ta == j->second.unitClass() || ta == "All")) - { - - // cerr << "Looking at target: " << j->first << endl; - targets[j->first] = &m_Fleet[j->first][1]; - } - - } + int total = 0; + map targets = findTargets(ta, total, 1); if (targets.size() == 0) break; - int total = 0; - for (map::iterator j = targets.begin(); j != targets.end(); ++j) - total += (*j->second); - for (map::iterator j = targets.begin(); j != targets.end(); ++j) { - float maxguns = float((*j->second))/total * guns; - //cerr << "Now shooting at target: " << j->first << endl; - + float maxguns = float((*j->second))/total * gunsleft; double k = maxguns; - int hits = 0; while (k > 0) @@ -552,8 +470,6 @@ void Fleet::takeEMP(std::string unittype, int number, std::map hitunits[j->first]++; blockFleet(j->first, 1); } - - //cerr << hits << " units of type: " << j->first << " blocked\n"; if (k <= 0) gunsleft -= maxguns; else @@ -870,3 +786,28 @@ void Fleet::usePodGuns(int tick, int guns) } m_UsedPodGuns[tick] += guns; } + +////////////////////////////////////////////////////////////////////////// +// +std::map Fleet::findTargets(std::string targetClass,int& total, int attackerType) +{ + map targets; + + for (UnitList::iterator i = s_Units.begin(); i != s_Units.end(); ++i) + { + if (m_Fleet[i->first].size() == 0) + continue; + + if (m_Fleet[i->first].size() == 1 ) + m_Fleet[i->first].push_back(m_Fleet[i->first][0]); + + if (m_Fleet[i->first][1] > 0 && ( targetClass == i->second.unitClass() || targetClass == "All")) + { + if (i->second.unitClass() == "PDS" && attackerType == 1) + continue; + targets[i->first] = &m_Fleet[i->first][1]; + total += m_Fleet[i->first][1]; + } + } + return targets; +}