4949#include " nodeObjs/noFlag.h"
5050#include < stdexcept>
5151
52+ namespace {
53+ nobUsual* staticCastAndAssertCorrectType (noRoadNode* const goal)
54+ {
55+ RTTR_Assert (dynamic_cast <nobUsual*>(goal));
56+ return static_cast <nobUsual*>(goal);
57+ }
58+ } // namespace
59+
5260std::unique_ptr<noFigure> JobFactory::CreateJob (const Job job_id, const MapPoint pt, const unsigned char player,
5361 noRoadNode* const goal)
5462{
@@ -64,41 +72,22 @@ std::unique_ptr<noFigure> JobFactory::CreateJob(const Job job_id, const MapPoint
6472 case Job::Planer:
6573 RTTR_Assert (dynamic_cast <noBuildingSite*>(goal));
6674 return std::make_unique<nofPlaner>(pt, player, static_cast <noBuildingSite*>(goal));
67- case Job::Carpenter:
68- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
69- return std::make_unique<nofCarpenter>(pt, player, static_cast <nobUsual*>(goal));
70- case Job::Armorer:
71- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
72- return std::make_unique<nofArmorer>(pt, player, static_cast <nobUsual*>(goal));
73- case Job::Stonemason:
74- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
75- return std::make_unique<nofStonemason>(pt, player, static_cast <nobUsual*>(goal));
76- case Job::Brewer:
77- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
78- return std::make_unique<nofBrewer>(pt, player, static_cast <nobUsual*>(goal));
79- case Job::Minter:
80- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
81- return std::make_unique<nofMinter>(pt, player, static_cast <nobUsual*>(goal));
82- case Job::Butcher:
83- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
84- return std::make_unique<nofButcher>(pt, player, static_cast <nobUsual*>(goal));
75+ case Job::Carpenter: return std::make_unique<nofCarpenter>(pt, player, staticCastAndAssertCorrectType (goal));
76+ case Job::Armorer: return std::make_unique<nofArmorer>(pt, player, staticCastAndAssertCorrectType (goal));
77+ case Job::Stonemason: return std::make_unique<nofStonemason>(pt, player, staticCastAndAssertCorrectType (goal));
78+ case Job::Brewer: return std::make_unique<nofBrewer>(pt, player, staticCastAndAssertCorrectType (goal));
79+ case Job::Minter: return std::make_unique<nofMinter>(pt, player, staticCastAndAssertCorrectType (goal));
80+ case Job::Butcher: return std::make_unique<nofButcher>(pt, player, staticCastAndAssertCorrectType (goal));
8581 case Job::IronFounder:
86- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
87- return std::make_unique<nofIronfounder>(pt, player, static_cast <nobUsual*>(goal));
88- case Job::Miller:
89- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
90- return std::make_unique<nofMiller>(pt, player, static_cast <nobUsual*>(goal));
82+ return std::make_unique<nofIronfounder>(pt, player, staticCastAndAssertCorrectType (goal));
83+ case Job::Miller: return std::make_unique<nofMiller>(pt, player, staticCastAndAssertCorrectType (goal));
9184 case Job::Metalworker:
92- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
93- return std::make_unique<nofMetalworker>(pt, player, static_cast <nobUsual*>(goal));
94- case Job::Baker:
95- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
96- return std::make_unique<nofBaker>(pt, player, static_cast <nobUsual*>(goal));
85+ return std::make_unique<nofMetalworker>(pt, player, staticCastAndAssertCorrectType (goal));
86+ case Job::Baker: return std::make_unique<nofBaker>(pt, player, staticCastAndAssertCorrectType (goal));
9787 case Job::Helper:
9888 if (goal && goal->GetGOT () == GO_Type::NobUsual)
9989 {
100- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
101- auto * goalBld = static_cast <nobUsual*>(goal);
90+ auto * goalBld = staticCastAndAssertCorrectType (goal);
10291 if (goalBld->GetBuildingType () == BuildingType::Well)
10392 return std::make_unique<nofWellguy>(pt, player, goalBld);
10493 else if (goalBld->GetBuildingType () == BuildingType::Catapult)
@@ -113,36 +102,20 @@ std::unique_ptr<noFigure> JobFactory::CreateJob(const Job job_id, const MapPoint
113102 // Different scout for lookout towers and free scouts
114103 if (goal->GetGOT () == GO_Type::NobUsual)
115104 {
116- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
117- return std::make_unique<nofScout_LookoutTower>(pt, player, static_cast <nobUsual*>(goal));
105+ return std::make_unique<nofScout_LookoutTower>(pt, player, staticCastAndAssertCorrectType (goal));
118106 } else if (goal->GetGOT () == GO_Type::Flag)
119107 return std::make_unique<nofScout_Free>(pt, player, goal);
120108 throw std::runtime_error (" Invalid goal type: " + helpers::toString (goal->GetGOT ()) + " for job "
121109 + helpers::toString (job_id));
122- case Job::Miner:
123- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
124- return std::make_unique<nofMiner>(pt, player, static_cast <nobUsual*>(goal));
125- case Job::Farmer:
126- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
127- return std::make_unique<nofFarmer>(pt, player, static_cast <nobUsual*>(goal));
128- case Job::Forester:
129- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
130- return std::make_unique<nofForester>(pt, player, static_cast <nobUsual*>(goal));
131- case Job::Woodcutter:
132- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
133- return std::make_unique<nofWoodcutter>(pt, player, static_cast <nobUsual*>(goal));
134- case Job::PigBreeder:
135- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
136- return std::make_unique<nofPigbreeder>(pt, player, static_cast <nobUsual*>(goal));
110+ case Job::Miner: return std::make_unique<nofMiner>(pt, player, staticCastAndAssertCorrectType (goal));
111+ case Job::Farmer: return std::make_unique<nofFarmer>(pt, player, staticCastAndAssertCorrectType (goal));
112+ case Job::Forester: return std::make_unique<nofForester>(pt, player, staticCastAndAssertCorrectType (goal));
113+ case Job::Woodcutter: return std::make_unique<nofWoodcutter>(pt, player, staticCastAndAssertCorrectType (goal));
114+ case Job::PigBreeder: return std::make_unique<nofPigbreeder>(pt, player, staticCastAndAssertCorrectType (goal));
137115 case Job::DonkeyBreeder:
138- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
139- return std::make_unique<nofDonkeybreeder>(pt, player, static_cast <nobUsual*>(goal));
140- case Job::Hunter:
141- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
142- return std::make_unique<nofHunter>(pt, player, static_cast <nobUsual*>(goal));
143- case Job::Fisher:
144- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
145- return std::make_unique<nofFisher>(pt, player, static_cast <nobUsual*>(goal));
116+ return std::make_unique<nofDonkeybreeder>(pt, player, staticCastAndAssertCorrectType (goal));
117+ case Job::Hunter: return std::make_unique<nofHunter>(pt, player, staticCastAndAssertCorrectType (goal));
118+ case Job::Fisher: return std::make_unique<nofFisher>(pt, player, staticCastAndAssertCorrectType (goal));
146119 case Job::Private:
147120 case Job::PrivateFirstClass:
148121 case Job::Sergeant:
@@ -153,21 +126,13 @@ std::unique_ptr<noFigure> JobFactory::CreateJob(const Job job_id, const MapPoint
153126 return std::make_unique<nofPassiveSoldier>(pt, player, static_cast <nobBaseMilitary*>(goal), nullptr ,
154127 getSoldierRank (job_id));
155128 case Job::PackDonkey: return std::make_unique<nofCarrier>(CarrierType::Donkey, pt, player, nullptr , goal);
156- case Job::Shipwright:
157- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
158- return std::make_unique<nofShipWright>(pt, player, static_cast <nobUsual*>(goal));
159- case Job::CharBurner:
160- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
161- return std::make_unique<nofCharburner>(pt, player, static_cast <nobUsual*>(goal));
162- case Job::Winegrower:
163- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
164- return std::make_unique<nofWinegrower>(pt, player, static_cast <nobUsual*>(goal));
165- case Job::Vintner:
166- RTTR_Assert (dynamic_cast <nobUsual*>(goal));
167- return std::make_unique<nofVintner>(pt, player, static_cast <nobUsual*>(goal));
129+ case Job::Shipwright: return std::make_unique<nofShipWright>(pt, player, staticCastAndAssertCorrectType (goal));
130+ case Job::CharBurner: return std::make_unique<nofCharburner>(pt, player, staticCastAndAssertCorrectType (goal));
131+ case Job::Winegrower: return std::make_unique<nofWinegrower>(pt, player, staticCastAndAssertCorrectType (goal));
132+ case Job::Vintner: return std::make_unique<nofVintner>(pt, player, staticCastAndAssertCorrectType (goal));
168133 case Job::TempleServant:
169134 RTTR_Assert (dynamic_cast <nobUsual*>(goal));
170- return std::make_unique<nofTempleServant>(pt, player, static_cast <nobUsual*> (goal));
135+ return std::make_unique<nofTempleServant>(pt, player, staticCastAndAssertCorrectType (goal));
171136 case Job::BoatCarrier:
172137 throw std::logic_error (" Cannot create a boat carrier job (try creating Job::Helper)." );
173138 break ;
0 commit comments