Skip to content

Commit 2488de2

Browse files
FlamefireFlow86
authored andcommitted
Inline StopLeavingFigures function
This is so specific to the call site that it should be inline which explains the reasoning better.
1 parent 2ffddcc commit 2488de2

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)