Deutsches Simutransforum

Normale Version: Tempolimit in Städten umgehen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Simutrans-Version:
0.84.16.2
PAK-Set (+zusätzliche PAK-Dateien):
PAK128
Betriebssystem:
Win XP

Fehler (möglichst genaue Beschreibung):
Für die Straßen in den Städten gibts ja ein Tempolimit von 50 km/h. Wenn ich nun über diese Straßen mit meiner "Asphalt, Tempo 100" drüberplaniere, wird damit das Tempolimit aufgehoben, d.h. meine Busse rasen mit Vollgas durch die Gassen.
Verhalten (Absturz, Einfrieren, ...):
Ist es ein Bug? ist es ein Feature? Ihr werdet es wissen.

Hajo

Ich bin für Feature.

Im englischen Forum wurde vorgeschlagen den Spieler auch Stadtstrassen abauen zu lassen. Dann könnte man das Tempolimit beibehalten.
Wäre es sehr schwierig, beim Bau einer Strasse zu überprüfen, ob sie im Stadtradius ist und dann falls sie eine Höchstgeschwindigkeit > 50kmh hat, diese zu überschreiben?

Gruss
Stefan

Hajo

Schwierig nicht, aber langsam.
Dann muss es anders gehen.
Anderer Vorschlag:
Jedes Tile bekommt ein Flag, ob es in einer Stadt liegt, oder nicht. Wenn das Flag gesetzt ist, ist vmax immer 50 km/h. Das setzten des Flags stelle ich mir so vor:
Beim bau eines Hauses an einem Straßentile läuft folgendes ab:

void checkNSetInCity()
{
if ( Straßentile && (!(inCity)))
{
nachbartileO = tileverwaltung.getTile(x+1, y);
nachbartileN = tileverwaltung.getTile(x, y+1);
nachbartileS = tileverwaltung.getTile(x-1, y);
nachbartileW = tileverwaltung.getTile(x, y-1);
if ( nachbarteilO->isInCity || nachbarteilN->isInCity || nachbarteilS->isInCity || nachbarteilW.isinCity )
{
inCity = true;
vmax = 50;
nachbartileO->checkNSetInCity();
nachbartileN->checkNSetInCity();
nachbartileS->checkNSetInCity();
nachbartileW->checkNSetInCity();
}
}
}

void checkNSetInCityMapGen()
{
nachbartileO = tileverwaltung.getTile(x+1, y);
nachbartileN = tileverwaltung.getTile(x, y+1);
nachbartileS = tileverwaltung.getTile(x-1, y);
nachbartileW = tileverwaltung.getTile(x, y-1);
if ( nachbarteilO->isInCity || nachbarteilN->isInCity || nachbarteilS->isInCity || nachbarteilW.isinCity )
{
inCity = true;
vmax = 50;
nachbartileO->checkNSetInCity();
nachbartileN->checkNSetInCity();
nachbartileS->checkNSetInCity();
nachbartileW->checkNSetInCity();
}
}
Und beim Straßenbau wird aufs inCity geprüft und entsprechend gehandelt.
Beim Karte generieren wird 1 (!) an das Rathausangrenzendes (oder das nächst liegende) Straßentile inCity gesetzt und die checkNSetInCityMapGen() auf das Tile aufgerufen. Ich hab jetzt momentan noch ned die Geistige frische, ob mit der Methode sichergestellt is, daß auch wirklich alle Innenstadttiles beim generieren überprüft werden, denke aber schon, daß dem so ist.

Sollte auch ned so furchtbar lange dauern, vorrausgesetzt, ihr habt das Spiel so aufgebaut, wies ich mir denke Big Grin

Kritik und "hau-auf-den-Neuling-mit-seinen-dummen-Ideen" erwünscht.
Hmm, ne hübsche Endlosschleife hab ich da gepostet :baby: . So ein Schrott. Peinlich. Aber vielleicht kanns ja als Inspirationshilfe gebraucht werden
Zitat:Original von mip
Wäre es sehr schwierig, beim Bau einer Strasse zu überprüfen, ob sie im Stadtradius ist und dann falls sie eine Höchstgeschwindigkeit > 50kmh hat, diese zu überschreiben?
Bitte nicht. Ich verwende das Feature um Schnellstraßen durch Städte zu bauen.

Hajo

Zitat:Original von Marnem
Anderer Vorschlag:
Jedes Tile bekommt ein Flag, ob es in einer Stadt liegt, oder nicht.

Ich würde eine Referenz zur Stadt ablegen. Ich glaube wir brauchen das früher oder später sowieso weil die Spieler sich viele Features wünschen die auf die Stad einfluss haben sollen, aber zur Zeit nicht möglich sind, weil von einem Feld keinen Verweis auf die nächste Stadt gibt.

Auf der anderen Seite stört mich der Speicherverbrauch nur um so etwas triviales zu hinterlegen ... die Tiles haben gerade ein vielfaches von 4 bytes größe. Wenn ich auch nur ein byte dazu nehme, rundert der compiler auf die nächsten 4 auf.

D.h. 4 bytes auf einer 256x256er Karte = 256KB Speicher.

Das ist nicht viel, aber der CPU Cache wird immer ineffizienter je größer die Objekte von Simutrans werden, und schon jetzt braucht Simutrans sehr viel Speicher, tortz all unserer Bemühungen Speicher zu sparen.