Habe mir dazu folgendes überlegt:
Ob man eine Armee sehen kann oder nicht hängt von folgender Formel ab:
round(((1 / pow($armeegroesse,0.2)) * (1/$armeespeed) * ($armeeentfernung*4) * (1/$stadtaufmerksamkeit)),1);
Anders geschrieben:
(1 / Armeegröße ^ 0.2) * (1 / Armeegeschwindigkeit) * (Entfernung der Armee * 4) * (1 / Aufmerksamkeit der Stadt) = X
Ist X kleiner gleich 1,5, ist die Armee zu sehen.
Hab dazu mal ein kleines Testscript geschrieben:
http://dev.openhope.de/sichttest.php
Achso, das was Rot ist, wird gesehen. ![]()
Die Formel ist noch nicht final, liefert aber gute Werte.
Das einzig schwierige wird sein, die Entfernung, bzw. die Stadt, zu der das Berechnet werden soll, zu bestimmen.
Optimalerweise passiert sowas direkt in der DB.
Um Performance zu sparen, kann ich mir vorstellen, das die Sichten nicht dynamisch, sondern vorab berechnet werden. Da ja alles tickbasiert ist, sollte das kein Problem sein, da das Spiel schon beim Berechnen des Ticks weiß, wo alle Armeen stehen werden.
P.S. Zusätzlich gibt es eine Anzeige, wieviele Armeen sich in der Nähe der Stadt befinden. Das wird in etwa so aussehen: "Sire, wir haben keine/wenig/vermehrt/massiv/alarmierende Gerüchte von fremden Truppenbewegungen in der Nähe von <Stadtname> vernommen".
Das soll verhindern, das findige Leute einfach alles splitten und erst kurz vor dem Ziel zusammenführen, auch wenn das trotzdem eine gute Taktik sein wird, da der Stadtbesitzer dann erstmal suchen gehen muss. ![]()