Skip to content

Commit 270380f

Browse files
committed
Inline StopLeavingFigures function
This is so specific to the call site that it should be inline which explains the reasoning better.
1 parent 9303235 commit 270380f

2 files changed

Lines changed: 17 additions & 23 deletions

File tree

libs/s25main/buildings/nobBaseMilitary.cpp

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,23 @@ MapPoint nobBaseMilitary::FindAnAttackerPlace(unsigned short& ret_radius, const
221221

222222
bool nobBaseMilitary::CallDefender(nofAttacker& attacker)
223223
{
224-
// Block soldiers leaving this building e.g. for attacks or aggressive defending
225-
StopLeavingSoldiers();
224+
// Stop attacking soldiers (including aggressive defenders) from leaving this building
225+
for(auto it = leave_house.begin(); it != leave_house.end();)
226+
{
227+
if(!dynamic_cast<nofActiveSoldier*>(it->get()))
228+
++it;
229+
else
230+
{
231+
auto soldier = boost::static_pointer_cast<nofActiveSoldier>(std::move(*it));
232+
// At this point there shouldn't be a defender leaving as we are just requesting one
233+
RTTR_Assert(soldier->GetGOT() != GO_Type::NofDefender);
234+
it = leave_house.erase(it);
235+
FigureLeft(*soldier);
236+
237+
soldier->InformTargetsAboutCancelling();
238+
AddActiveSoldier(std::move(soldier));
239+
}
240+
}
226241
// Use existing defender (e.g. just going back in) if possible
227242
if(defender_)
228243
{
@@ -332,22 +347,3 @@ bool nobBaseMilitary::IsOnMission(const nofActiveSoldier& soldier) const
332347
{
333348
return helpers::contains(troops_on_mission, &soldier);
334349
}
335-
336-
void nobBaseMilitary::StopLeavingSoldiers()
337-
{
338-
for(auto it = leave_house.begin(); it != leave_house.end();)
339-
{
340-
// Only take active soldiers
341-
if(!dynamic_cast<nofActiveSoldier*>(it->get()))
342-
++it;
343-
else
344-
{
345-
auto soldier = boost::static_pointer_cast<nofActiveSoldier>(std::move(*it));
346-
it = leave_house.erase(it);
347-
FigureLeft(*soldier);
348-
349-
soldier->InformTargetsAboutCancelling();
350-
AddActiveSoldier(std::move(soldier));
351-
}
352-
}
353-
}

libs/s25main/buildings/nobBaseMilitary.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,6 @@ class nobBaseMilitary : public noBuilding
107107
void CheckArrestedAttackers();
108108
/// Der Verteidiger ist entweder tot oder wieder reingegegangen
109109
void ResetDefender() { defender_ = nullptr; }
110-
/// Stop all soldiers going for an attack from leaving the house, i.e. put them from the queue back in
111-
void StopLeavingSoldiers();
112110

113111
/// Sind noch Truppen drinne, die dieses Gebäude verteidigen können
114112
virtual bool DefendersAvailable() const = 0;

0 commit comments

Comments
 (0)