Latest Posts

Topic: Verfügbarkeit von Einheiten

feldschloesschenprinz
Avatar
Joined: 2014-07-09, 18:24
Posts: 118
Ranking
Likes to be here
Posted at: 2022-07-29, 01:13

Werden verfügbare Einheiten grundsätzlich nur im Lager geprüft oder kann eine Einheit, die gerade unterwegs zu ihrer Parkposition im Lager ist, auch umgelenkt werden, z. B. Bauarbeiter auf dem Weg zum Lager wieder zu einer anderen Baustelle?


Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 23:16
Posts: 2284
Ranking
One Elder of Players
Location: Bavaria
Posted at: 2022-07-29, 09:09

Da bin ich mir nicht sicher. Da müsste uns @Nordfriese aushelfen.


Top Quote
Nordfriese
Avatar
Joined: 2017-01-17, 18:07
Posts: 1665
Ranking
One Elder of Players
Location: 0x55555d3a34c0
Posted at: 2022-07-29, 12:34

Waren ja, Arbeiter nein.


Top Quote
feldschloesschenprinz
Avatar
Joined: 2014-07-09, 18:24
Posts: 118
Ranking
Likes to be here
Posted at: 2022-07-29, 18:52

Aber warum ist das so unterschiedlich? Arbeiter kosten doch Werkzeuge und Werkzeuge fossile Rohstoffe. Es wäre also ebenso kosteneffizienter wie logischer, den zurückkehrenden Arbeiter gleich wieder zu einem anderen Arbeitsplatz zu schicken. Oder wäre das ein neues Feature für eine neue Programmversion?


Top Quote
Nordfriese
Avatar
Joined: 2017-01-17, 18:07
Posts: 1665
Ranking
One Elder of Players
Location: 0x55555d3a34c0
Posted at: 2022-07-29, 19:30

Die Verfügbarkeit von Arbeitern und von Waren ist separat implementiert. Beide Typen von Einheiten haben unterschiedliche Algorithmen, die den Transfer der Einheit von A nach B regeln, da Arbeiter selbstständig laufen, während Waren getragen werden müssen. Der jeweilige Algorithmus entscheidet unter anderem auch, was für Ereignisse die Einheit verfügbar bzw. unverfügbar machen.

Für Waren ist das hier definiert:
https://github.com/widelands/widelands/blob/5750147a3445bbaeea7dfa8b07ecca0031642460/src/economy/ware_instance.cc#L329-L335
Dies besagt ganz einfach, dass eine Ware dann und nur dann verfügbar ist, wenn sie nicht bewegt wird oder ihr Zielort diese Ware nicht angefordert hat (d.h. die Ware zur Einlagerung und nicht etwa zur Weiterverarbeitung bestimmt ist).

Für Arbeiter ist die Definition etwas komplexer:
https://github.com/widelands/widelands/blob/5750147a3445bbaeea7dfa8b07ecca0031642460/src/logic/map_objects/tribes/worker.cc#L2223
Dies besagt, dass ein Arbeiter, der sich nicht in einem Warenhaus befindet, nur dann verfügbar ist, wenn er gerade nirgendwo herumläuft. Das ist immer nur für eine Sekunde der Fall, während der Arbeiter überlegt, in welches Warenhaus er gehen soll. Der Zweck dieses Mechanismus ist, dass im Falle einer Arbeiterknappheit ein frisch rausgeworfener Arbeiter sofort einem neuen Gebäude zugewiesen werden kann ohne erst in ein Warenlager gehen zu müssen. Aber während der Arbeiter herumläuft ist sein Status als nicht verfügbar festgelegt.

Wenn sich jemand daran versuchen will, den Arbeiter-Code so umzuschreiben, dass auch auf dem Weg ins Warenhaus der Arbeiter verfügbar ist, hätte ich nichts dagegen. Alles was mit Aktivitäten bewegter Objekte zu tun hat ist allerdings ziemlich unübersichtlicher und nicht allzu intuitiver Code face-wink.png


Top Quote
feldschloesschenprinz
Avatar
Joined: 2014-07-09, 18:24
Posts: 118
Ranking
Likes to be here
Posted at: 2022-07-30, 10:28

Das bedeutet für Arbeiter, dass ein neues Gebäude sehr kurz nach der Erteilung des Abriss-Befehls eines nicht mehr benötigten Gebäudes gleicher Art fertiggestellt sein muss, damit in der Sekunde, in der der Arbeiter das zum Abriss verurteilte Gebäude verlässt, auch gleich ein neuer Arbeiter des gleichen Berufs angefordert wird, er also gleich in das neue Gebäude einziehen kann. Bei Minen geht das nicht, weil ich erst die Meldung haben muss, dass eine Mine erschöpft ist, bevor ich eine neue Mine bauen kann. Es wäre schön, wenn der übriggebliebene Rohstoffbestand angezeigt werden könnte, damit ich rechtzeitig vorausplanen kann.


Top Quote