5252#include " nodeObjs/noFlag.h"
5353#include < stdexcept>
5454
55+ namespace {
56+ nobUsual* staticCastAndAssertCorrectType (noRoadNode* const goal)
57+ {
58+ RTTR_Assert (dynamic_cast <nobUsual*>(goal));
59+ return static_cast <nobUsual*>(goal);
60+ }
61+ } // namespace
62+
5563std::unique_ptr<noFigure> JobFactory::CreateJob (const Job job_id, const MapPoint pt, const unsigned char player,
5664 noRoadNode* const goal)
5765{
@@ -67,36 +75,18 @@ std::unique_ptr<noFigure> JobFactory::CreateJob(const Job job_id, const MapPoint
6775 case Job::Planer:
6876 RTTR_Assert (dynamic_cast <noBuildingSite*>(goal));
6977 return std::make_unique<nofPlaner>(pt, player, static_cast <noBuildingSite*>(goal));
70- case Job::Carpenter:
71- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
72- return std::make_unique<nofCarpenter>(pt, player, static_cast <nobUsual*>(goal));
73- case Job::Armorer:
74- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
75- return std::make_unique<nofArmorer>(pt, player, static_cast <nobUsual*>(goal));
76- case Job::Stonemason:
77- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
78- return std::make_unique<nofStonemason>(pt, player, static_cast <nobUsual*>(goal));
79- case Job::Brewer:
80- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
81- return std::make_unique<nofBrewer>(pt, player, static_cast <nobUsual*>(goal));
82- case Job::Minter:
83- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
84- return std::make_unique<nofMinter>(pt, player, static_cast <nobUsual*>(goal));
85- case Job::Butcher:
86- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
87- return std::make_unique<nofButcher>(pt, player, static_cast <nobUsual*>(goal));
78+ case Job::Carpenter: return std::make_unique<nofCarpenter>(pt, player, staticCastAndAssertCorrectType (goal));
79+ case Job::Armorer: return std::make_unique<nofArmorer>(pt, player, staticCastAndAssertCorrectType (goal));
80+ case Job::Stonemason: return std::make_unique<nofStonemason>(pt, player, staticCastAndAssertCorrectType (goal));
81+ case Job::Brewer: return std::make_unique<nofBrewer>(pt, player, staticCastAndAssertCorrectType (goal));
82+ case Job::Minter: return std::make_unique<nofMinter>(pt, player, staticCastAndAssertCorrectType (goal));
83+ case Job::Butcher: return std::make_unique<nofButcher>(pt, player, staticCastAndAssertCorrectType (goal));
8884 case Job::IronFounder:
89- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
90- return std::make_unique<nofIronfounder>(pt, player, static_cast <nobUsual*>(goal));
91- case Job::Miller:
92- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
93- return std::make_unique<nofMiller>(pt, player, static_cast <nobUsual*>(goal));
85+ return std::make_unique<nofIronfounder>(pt, player, staticCastAndAssertCorrectType (goal));
86+ case Job::Miller: return std::make_unique<nofMiller>(pt, player, staticCastAndAssertCorrectType (goal));
9487 case Job::Metalworker:
95- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
96- return std::make_unique<nofMetalworker>(pt, player, static_cast <nobUsual*>(goal));
97- case Job::Baker:
98- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
99- return std::make_unique<nofBaker>(pt, player, static_cast <nobUsual*>(goal));
88+ return std::make_unique<nofMetalworker>(pt, player, staticCastAndAssertCorrectType (goal));
89+ case Job::Baker: return std::make_unique<nofBaker>(pt, player, staticCastAndAssertCorrectType (goal));
10090 case Job::Helper:
10191 // Wenn goal = 0 oder Lagerhaus, dann Auslagern anscheinend und mann kann irgendeinen Typ nehmen
10292 if (!goal)
@@ -106,7 +96,7 @@ std::unique_ptr<noFigure> JobFactory::CreateJob(const Job job_id, const MapPoint
10696 return std::make_unique<nofWellguy>(pt, player, static_cast <nobBaseWarehouse*>(goal));
10797 else if (goal->GetGOT () == GO_Type::NobUsual)
10898 {
109- auto * goalBld = static_cast <nobUsual*> (goal);
99+ auto * goalBld = staticCastAndAssertCorrectType (goal);
110100 if (goalBld->GetBuildingType () == BuildingType::Well)
111101 return std::make_unique<nofWellguy>(pt, player, goalBld);
112102 else if (goalBld->GetBuildingType () == BuildingType::Catapult)
@@ -127,36 +117,20 @@ std::unique_ptr<noFigure> JobFactory::CreateJob(const Job job_id, const MapPoint
127117 return std::make_unique<nofPassiveWorker>(Job::Scout, pt, player, goal);
128118 else if (goal->GetGOT () == GO_Type::NobUsual) // Spähturm / Lagerhaus?
129119 {
130- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
131- return std::make_unique<nofScout_LookoutTower>(pt, player, static_cast <nobUsual*>(goal));
120+ return std::make_unique<nofScout_LookoutTower>(pt, player, staticCastAndAssertCorrectType (goal));
132121 } else if (goal->GetGOT () == GO_Type::Flag)
133122 return std::make_unique<nofScout_Free>(pt, player, goal);
134123 throw std::runtime_error (" Invalid goal type: " + helpers::toString (goal->GetGOT ()) + " for job "
135124 + helpers::toString (job_id));
136- case Job::Miner:
137- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
138- return std::make_unique<nofMiner>(pt, player, static_cast <nobUsual*>(goal));
139- case Job::Farmer:
140- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
141- return std::make_unique<nofFarmer>(pt, player, static_cast <nobUsual*>(goal));
142- case Job::Forester:
143- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
144- return std::make_unique<nofForester>(pt, player, static_cast <nobUsual*>(goal));
145- case Job::Woodcutter:
146- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
147- return std::make_unique<nofWoodcutter>(pt, player, static_cast <nobUsual*>(goal));
148- case Job::PigBreeder:
149- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
150- return std::make_unique<nofPigbreeder>(pt, player, static_cast <nobUsual*>(goal));
125+ case Job::Miner: return std::make_unique<nofMiner>(pt, player, staticCastAndAssertCorrectType (goal));
126+ case Job::Farmer: return std::make_unique<nofFarmer>(pt, player, staticCastAndAssertCorrectType (goal));
127+ case Job::Forester: return std::make_unique<nofForester>(pt, player, staticCastAndAssertCorrectType (goal));
128+ case Job::Woodcutter: return std::make_unique<nofWoodcutter>(pt, player, staticCastAndAssertCorrectType (goal));
129+ case Job::PigBreeder: return std::make_unique<nofPigbreeder>(pt, player, staticCastAndAssertCorrectType (goal));
151130 case Job::DonkeyBreeder:
152- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
153- return std::make_unique<nofDonkeybreeder>(pt, player, static_cast <nobUsual*>(goal));
154- case Job::Hunter:
155- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
156- return std::make_unique<nofHunter>(pt, player, static_cast <nobUsual*>(goal));
157- case Job::Fisher:
158- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
159- return std::make_unique<nofFisher>(pt, player, static_cast <nobUsual*>(goal));
131+ return std::make_unique<nofDonkeybreeder>(pt, player, staticCastAndAssertCorrectType (goal));
132+ case Job::Hunter: return std::make_unique<nofHunter>(pt, player, staticCastAndAssertCorrectType (goal));
133+ case Job::Fisher: return std::make_unique<nofFisher>(pt, player, staticCastAndAssertCorrectType (goal));
160134 case Job::Private:
161135 case Job::PrivateFirstClass:
162136 case Job::Sergeant:
@@ -167,30 +141,16 @@ std::unique_ptr<noFigure> JobFactory::CreateJob(const Job job_id, const MapPoint
167141 return std::make_unique<nofPassiveSoldier>(pt, player, static_cast <nobBaseMilitary*>(goal), nullptr ,
168142 getSoldierRank (job_id));
169143 case Job::PackDonkey: return std::make_unique<nofCarrier>(CarrierType::Donkey, pt, player, nullptr , goal);
170- case Job::Shipwright:
171- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
172- return std::make_unique<nofShipWright>(pt, player, static_cast <nobUsual*>(goal));
173- case Job::CharBurner:
174- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
175- return std::make_unique<nofCharburner>(pt, player, static_cast <nobUsual*>(goal));
176- case Job::Winegrower:
177- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
178- return std::make_unique<nofWinegrower>(pt, player, static_cast <nobUsual*>(goal));
179- case Job::Vintner:
180- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
181- return std::make_unique<nofVintner>(pt, player, static_cast <nobUsual*>(goal));
144+ case Job::Shipwright: return std::make_unique<nofShipWright>(pt, player, staticCastAndAssertCorrectType (goal));
145+ case Job::CharBurner: return std::make_unique<nofCharburner>(pt, player, staticCastAndAssertCorrectType (goal));
146+ case Job::Winegrower: return std::make_unique<nofWinegrower>(pt, player, staticCastAndAssertCorrectType (goal));
147+ case Job::Vintner: return std::make_unique<nofVintner>(pt, player, staticCastAndAssertCorrectType (goal));
182148 case Job::TempleServant:
183- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
184- return std::make_unique<nofTempleServant>(pt, player, static_cast <nobUsual*>(goal));
185- case Job::Skinner:
186- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
187- return std::make_unique<nofSkinner>(pt, player, static_cast <nobUsual*>(goal));
188- case Job::Tanner:
189- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
190- return std::make_unique<nofTanner>(pt, player, static_cast <nobUsual*>(goal));
149+ return std::make_unique<nofTempleServant>(pt, player, staticCastAndAssertCorrectType (goal));
150+ case Job::Skinner: return std::make_unique<nofSkinner>(pt, player, staticCastAndAssertCorrectType (goal));
151+ case Job::Tanner: return std::make_unique<nofTanner>(pt, player, staticCastAndAssertCorrectType (goal));
191152 case Job::LeatherWorker:
192- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
193- return std::make_unique<nofLeatherWorker>(pt, player, static_cast <nobUsual*>(goal));
153+ return std::make_unique<nofLeatherWorker>(pt, player, staticCastAndAssertCorrectType (goal));
194154 case Job::BoatCarrier:
195155 throw std::logic_error (" Cannot create a boat carrier job (try creating Job::Helper)." );
196156 break ;
0 commit comments