@@ -57,6 +57,36 @@ unsigned short nofFarmer::GetCarryID() const
5757 return 71 ;
5858}
5959
60+ nofFarmhand::PointQuality nofFarmer::GetNewFieldPointQuality (const GameWorld& world, const MapPoint pt)
61+ {
62+ // Nicht auf Straßen bauen!
63+ for (const auto dir : helpers::EnumRange<Direction>{})
64+ {
65+ if (world.GetPointRoad (pt, dir) != PointRoad::None)
66+ return PointQuality::NotPossible;
67+ }
68+
69+ // Terrain untersuchen
70+ if (!world.IsOfTerrain (pt, [](const auto & desc) { return desc.IsVital (); }))
71+ return PointQuality::NotPossible;
72+
73+ // Ist Platz frei?
74+ NodalObjectType noType = world.GetNO (pt)->GetType ();
75+ if (noType != NodalObjectType::Environment && noType != NodalObjectType::Nothing)
76+ return PointQuality::NotPossible;
77+
78+ for (const MapPoint nb : world.GetNeighbours (pt))
79+ {
80+ // Nicht direkt neben andere Getreidefelder und Gebäude setzen!
81+ noType = world.GetNO (nb)->GetType ();
82+ if (noType == NodalObjectType::Grainfield || noType == NodalObjectType::Grapefield
83+ || noType == NodalObjectType::Building || noType == NodalObjectType::Buildingsite)
84+ return PointQuality::NotPossible;
85+ }
86+
87+ return PointQuality::Class2;
88+ }
89+
6090// / Abgeleitete Klasse informieren, wenn sie anfängt zu arbeiten (Vorbereitungen)
6191void nofFarmer::WorkStarted ()
6292{
@@ -123,34 +153,7 @@ nofFarmhand::PointQuality nofFarmer::GetPointQuality(const MapPoint pt, bool /*
123153 }
124154 // oder einen freien Platz, wo wir ein neues sähen können
125155 else
126- {
127- // Nicht auf Straßen bauen!
128- for (const auto dir : helpers::EnumRange<Direction>{})
129- {
130- if (world->GetPointRoad (pt, dir) != PointRoad::None)
131- return PointQuality::NotPossible;
132- }
133-
134- // Terrain untersuchen
135- if (!world->IsOfTerrain (pt, [](const auto & desc) { return desc.IsVital (); }))
136- return PointQuality::NotPossible;
137-
138- // Ist Platz frei?
139- NodalObjectType noType = world->GetNO (pt)->GetType ();
140- if (noType != NodalObjectType::Environment && noType != NodalObjectType::Nothing)
141- return PointQuality::NotPossible;
142-
143- for (const MapPoint nb : world->GetNeighbours (pt))
144- {
145- // Nicht direkt neben andere Getreidefelder und Gebäude setzen!
146- noType = world->GetNO (nb)->GetType ();
147- if (noType == NodalObjectType::Grainfield || noType == NodalObjectType::Grapefield
148- || noType == NodalObjectType::Building || noType == NodalObjectType::Buildingsite)
149- return PointQuality::NotPossible;
150- }
151-
152- return PointQuality::Class2;
153- }
156+ return GetNewFieldPointQuality (*world, pt);
154157}
155158
156159void nofFarmer::WorkAborted ()
0 commit comments