Skip to content

Commit 913f4ff

Browse files
committed
Consolidate handling of adding/removing people from warehouse inventory
It combines handling of armor and boat carriers.
1 parent d1e895d commit 913f4ff

3 files changed

Lines changed: 45 additions & 90 deletions

File tree

libs/s25main/buildings/nobBaseWarehouse.cpp

Lines changed: 37 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -676,15 +676,7 @@ void nobBaseWarehouse::FigureLeft(const noFigure& fig)
676676
// Adapt inventory for non-warehouse workers
677677
if(fig.MemberOfWarehouse())
678678
return;
679-
if(fig.GetJobType() == Job::BoatCarrier)
680-
{
681-
// Remove helper and boat separately
682-
inventory.visual.Remove(Job::Helper);
683-
inventory.visual.Remove(GoodType::Boat);
684-
} else
685-
inventory.visual.Remove(fig.GetJobType());
686-
687-
RemoveArmoredFigurFromVisualInventory(fig);
679+
RemoveFromVisualInventory(fig);
688680

689681
if(fig.GetGOT() == GO_Type::NofTradedonkey)
690682
{
@@ -839,38 +831,9 @@ void nobBaseWarehouse::AddFigure(std::unique_ptr<noFigure> figure, const bool in
839831
// Warenhausarbeiter werden nicht gezählt!
840832
if(!figure->MemberOfWarehouse())
841833
{
842-
// War das ein Boot-Träger?
843-
if(figure->GetJobType() == Job::BoatCarrier)
844-
{
845-
if(increase_visual_counts)
846-
{
847-
inventory.Add(Job::Helper);
848-
inventory.Add(GoodType::Boat);
849-
} else
850-
{
851-
inventory.real.Add(Job::Helper);
852-
inventory.real.Add(GoodType::Boat);
853-
}
854-
} else if(isSoldier(figure->GetJobType()))
855-
{
856-
if(increase_visual_counts)
857-
{
858-
inventory.Add(figure->GetJobType());
859-
if(figure->HasArmor())
860-
inventory.Add(jobEnumToAmoredSoldierEnum(figure->GetJobType()));
861-
} else
862-
{
863-
inventory.real.Add(figure->GetJobType());
864-
if(figure->HasArmor())
865-
inventory.real.Add(jobEnumToAmoredSoldierEnum(figure->GetJobType()));
866-
}
867-
} else
868-
{
869-
if(increase_visual_counts)
870-
inventory.Add(figure->GetJobType());
871-
else
872-
inventory.real.Add(figure->GetJobType());
873-
}
834+
AddToRealInventory(*figure);
835+
if(increase_visual_counts)
836+
AddToVisualInventory(*figure);
874837
}
875838

876839
// Check if we were actually waiting for this figure or if it was just added (e.g. builder that constructed it) to
@@ -882,19 +845,45 @@ void nobBaseWarehouse::AddFigure(std::unique_ptr<noFigure> figure, const bool in
882845
GetEvMgr().AddToKillList(std::move(figure));
883846
}
884847

885-
void nobBaseWarehouse::RemoveArmoredFigurFromVisualInventory(const noFigure& figure)
848+
void nobBaseWarehouse::RemoveFromVisualInventory(const noFigure& figure)
886849
{
887-
if(isSoldier(figure.GetJobType()) && figure.HasArmor())
850+
const auto job = figure.GetJobType();
851+
if(job == Job::BoatCarrier)
888852
{
889-
RTTR_Assert(inventory.visual[jobEnumToAmoredSoldierEnum(figure.GetJobType())] > 0);
890-
inventory.visual.Remove(jobEnumToAmoredSoldierEnum(figure.GetJobType()));
853+
// Remove helper and boat separately
854+
inventory.visual.Remove(Job::Helper);
855+
inventory.visual.Remove(GoodType::Boat);
856+
} else
857+
{
858+
inventory.visual.Remove(job);
859+
if(isSoldier(job) && figure.HasArmor())
860+
inventory.visual.Remove(jobEnumToAmoredSoldierEnum(job));
891861
}
892862
}
893863

894-
void nobBaseWarehouse::AddArmoredFigurToVisualInventory(const noFigure& figure)
864+
static void addToInventory(Inventory& inventory, const noFigure& figure)
865+
{
866+
const auto job = figure.GetJobType();
867+
if(job == Job::BoatCarrier)
868+
{
869+
inventory.Add(Job::Helper);
870+
inventory.Add(GoodType::Boat);
871+
} else
872+
{
873+
inventory.Add(job);
874+
if(isSoldier(job) && figure.HasArmor())
875+
inventory.Add(jobEnumToAmoredSoldierEnum(job));
876+
}
877+
}
878+
879+
void nobBaseWarehouse::AddToVisualInventory(const noFigure& figure)
880+
{
881+
addToInventory(inventory.visual, figure);
882+
}
883+
884+
void nobBaseWarehouse::AddToRealInventory(const noFigure& figure)
895885
{
896-
if(isSoldier(figure.GetJobType()) && figure.HasArmor())
897-
inventory.visual.Add(jobEnumToAmoredSoldierEnum(figure.GetJobType()));
886+
addToInventory(inventory.real, figure);
898887
}
899888

900889
void nobBaseWarehouse::FetchWare()

libs/s25main/buildings/nobBaseWarehouse.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,9 @@ class nobBaseWarehouse : public nobBaseMilitary, public DataChangedObservable
125125
/// Recruts a worker of the given job if possible
126126
bool TryRecruitJob(Job job);
127127

128-
void RemoveArmoredFigurFromVisualInventory(const noFigure& figure);
129-
void AddArmoredFigurToVisualInventory(const noFigure& figure);
128+
void RemoveFromVisualInventory(const noFigure& figure);
129+
void AddToVisualInventory(const noFigure& figure);
130+
void AddToRealInventory(const noFigure& figure);
130131

131132
nobBaseWarehouse(BuildingType type, MapPoint pos, unsigned char player, Nation nation);
132133
nobBaseWarehouse(SerializedGameData& sgd, unsigned obj_id);

libs/s25main/buildings/nobHarborBuilding.cpp

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -515,8 +515,7 @@ void nobHarborBuilding::ShipArrived(noShip& ship)
515515
{
516516
if(it->dest == ship_dest)
517517
{
518-
inventory.visual.Remove(it->attacker->GetJobType());
519-
RemoveArmoredFigurFromVisualInventory(*it->attacker);
518+
RemoveFromVisualInventory(*it->attacker);
520519
attackers.push_back(std::move(it->attacker));
521520
it = soldiers_for_ships.erase(it);
522521
} else
@@ -589,15 +588,7 @@ void nobHarborBuilding::ShipArrived(noShip& ship)
589588
if(it->dest == dest)
590589
{
591590
it->fig->StartShipJourney();
592-
if(it->fig->GetJobType() != Job::BoatCarrier)
593-
{
594-
inventory.visual.Remove(it->fig->GetJobType());
595-
RemoveArmoredFigurFromVisualInventory(*it->fig);
596-
} else
597-
{
598-
inventory.visual.Remove(Job::Helper);
599-
inventory.visual.Remove(GoodType::Boat);
600-
}
591+
RemoveFromVisualInventory(*it->fig);
601592
figures.push_back(std::move(it->fig));
602593
it = figures_for_ships.erase(it);
603594
} else
@@ -867,16 +858,7 @@ std::vector<nobHarborBuilding::ShipConnection> nobHarborBuilding::GetShipConnect
867858
void nobHarborBuilding::AddFigureForShip(std::unique_ptr<noFigure> fig, MapPoint dest)
868859
{
869860
RTTR_Assert(!world->HasFigureAt(fig->GetPos(), *fig)); // Figure is in the harbor, so it cannot be outside
870-
// Anzahl visuell erhöhen
871-
if(fig->GetJobType() != Job::BoatCarrier)
872-
{
873-
inventory.visual.Add(fig->GetJobType());
874-
AddArmoredFigurToVisualInventory(*fig);
875-
} else
876-
{
877-
inventory.visual.Add(Job::Helper);
878-
inventory.visual.Add(GoodType::Boat);
879-
}
861+
AddToVisualInventory(*fig);
880862
figures_for_ships.emplace_back(FigureForShip{std::move(fig), dest});
881863
OrderShip();
882864
}
@@ -1027,15 +1009,7 @@ bool nobHarborBuilding::UseFigureAtOnce(std::unique_ptr<noFigure>& fig, noRoadNo
10271009
{
10281010
// Reduce figure count because figures don't go through the house leaving process
10291011
// And therefore the visual count reducement
1030-
if(fig->GetJobType() != Job::BoatCarrier)
1031-
{
1032-
inventory.visual.Remove(fig->GetJobType());
1033-
RemoveArmoredFigurFromVisualInventory(*fig);
1034-
} else
1035-
{
1036-
inventory.visual.Remove(Job::Helper);
1037-
inventory.visual.Remove(GoodType::Boat);
1038-
}
1012+
RemoveFromVisualInventory(*fig);
10391013
// Dann fügen wir die mal bei uns hinzu
10401014
AddFigureForShip(std::move(fig), next_harbor);
10411015
return true;
@@ -1069,16 +1043,7 @@ void nobHarborBuilding::ReceiveGoodsFromShip(std::list<std::unique_ptr<noFigure>
10691043

10701044
if(nextDir == RoadPathDirection::SouthEast)
10711045
{
1072-
// Increase visual count
1073-
if(figure->GetJobType() == Job::BoatCarrier)
1074-
{
1075-
inventory.visual.Add(Job::Helper);
1076-
inventory.visual.Add(GoodType::Boat);
1077-
} else
1078-
{
1079-
inventory.visual.Add(figure->GetJobType());
1080-
AddArmoredFigurToVisualInventory(*figure);
1081-
}
1046+
AddToVisualInventory(*figure);
10821047
AddLeavingFigure(std::move(figure));
10831048
} else if(nextDir == RoadPathDirection::Ship)
10841049
{

0 commit comments

Comments
 (0)