17-03-2007, Saturday-22:43:29
Alle Typen sind irgendwie Platzbeschränkt.
LKWs verursachen Staus, Züge resevieren ihre Schienen, Flugzeuge haben Haltebuchten.
Nur die Schiffe lassen sich 1000fach übereinander lagern.
Ich würde daher vorschlagen, das maximal 3 Schiffe auf einem Feld sein dürfen.
Wovon maximal 2 Stehen können. Auf die Art und Weise verhindert man Deadlocks.
Schiffe müssen immer bis zum nächsten Feld an dem sie anhalten können den Weg reservieren, wenn das nicht geht pausieren sie, bis es geht. (Dann kommt echtes Rheinfeeling auf bei dem Schiff an Schiff den Fluss entlangschippert anstat alle aufeinander)
Die seltenen Fälle in denen ein User den Fahrplan öffnet und so das Schiff anhält sollten kein Probleme sein weil es sehr selten Eintritt. Ausserdem wird er diesen Fall genauso leicht korrigieren können wie andere selbstverursachte Deadlocks (da auch von diesem Feld aus der Weg zum nächsten Stehfeld frei ist).
Später lässt sich das sicher noch so erweitern das freie Plätze im gesamten Hafen gesucht werden.
Auf die Art und Weise machen umfangreiche Hafenanlagen endlich Sinn.
zum Speicherverbraucht benötigt werden 2 bit pro feld. (oder falls der Simutranscode bereits cool ist garnix extra). Beim zuruecksetzen von 2 auf 1 kann ja überprüft werden ob die Schiffanzahl tatsächlich nur 1 beträgt (da ja beim laden alter Karten durchaus 200 schiffe an einer Stelle sein können würde ich in einem Fall mit mehr als 3 Schiffen auf einem Feld 2 als Standardwert eintragen um Userbeschwerden vorzubeugen)
der Speicherverbrauch macht bei einer 256x256 Karte lächerliche 16Kb
maximal (falls man 8 bit braucht, weil man das Byte an den Weg anknüpfen muss) wäre es bei einer 1024x1024 Karte nur 1MB (was für Leute die solche Karten spielen kein Problem sein sollte).
Rechenzeitmäsig müssen die einzelnen Schiffe nur checken ob das nächste Feld ausreichend frei ist.
Sonst brauchen sie ein Wegobjekt, in dem ihr Weg bis zum nächsten Feld an dem sie stehen können eingespeichert und reserviert ist. (macht im normalfall nur 4Byte extra für den Pointer)
(wenn ich Zugang zum Code hätte würd ichs als patch selber coden)
LKWs verursachen Staus, Züge resevieren ihre Schienen, Flugzeuge haben Haltebuchten.
Nur die Schiffe lassen sich 1000fach übereinander lagern.
Ich würde daher vorschlagen, das maximal 3 Schiffe auf einem Feld sein dürfen.
Wovon maximal 2 Stehen können. Auf die Art und Weise verhindert man Deadlocks.
Schiffe müssen immer bis zum nächsten Feld an dem sie anhalten können den Weg reservieren, wenn das nicht geht pausieren sie, bis es geht. (Dann kommt echtes Rheinfeeling auf bei dem Schiff an Schiff den Fluss entlangschippert anstat alle aufeinander)
Die seltenen Fälle in denen ein User den Fahrplan öffnet und so das Schiff anhält sollten kein Probleme sein weil es sehr selten Eintritt. Ausserdem wird er diesen Fall genauso leicht korrigieren können wie andere selbstverursachte Deadlocks (da auch von diesem Feld aus der Weg zum nächsten Stehfeld frei ist).
Später lässt sich das sicher noch so erweitern das freie Plätze im gesamten Hafen gesucht werden.
Auf die Art und Weise machen umfangreiche Hafenanlagen endlich Sinn.
zum Speicherverbraucht benötigt werden 2 bit pro feld. (oder falls der Simutranscode bereits cool ist garnix extra). Beim zuruecksetzen von 2 auf 1 kann ja überprüft werden ob die Schiffanzahl tatsächlich nur 1 beträgt (da ja beim laden alter Karten durchaus 200 schiffe an einer Stelle sein können würde ich in einem Fall mit mehr als 3 Schiffen auf einem Feld 2 als Standardwert eintragen um Userbeschwerden vorzubeugen)
der Speicherverbrauch macht bei einer 256x256 Karte lächerliche 16Kb
maximal (falls man 8 bit braucht, weil man das Byte an den Weg anknüpfen muss) wäre es bei einer 1024x1024 Karte nur 1MB (was für Leute die solche Karten spielen kein Problem sein sollte).
Rechenzeitmäsig müssen die einzelnen Schiffe nur checken ob das nächste Feld ausreichend frei ist.
Sonst brauchen sie ein Wegobjekt, in dem ihr Weg bis zum nächsten Feld an dem sie stehen können eingespeichert und reserviert ist. (macht im normalfall nur 4Byte extra für den Pointer)
(wenn ich Zugang zum Code hätte würd ichs als patch selber coden)