Deutsches Simutransforum

Normale Version: Industrierauch
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2

Wurzelgnom

Simutrans-Version: r2290 ( MS VC++ 2005 EE )

PAK-Set (+zusätzliche PAK-Dateien): pak.german

Betriebssystem: Win XP Pro


Fehler (möglichst genaue Beschreibung):

Der Industrierauch befindet sich bei 4 Ansichten immer über dem angegebenen Feld. siehe Grafik

Entsprechend wird der Rauch auch bei der Rotation nicht korrekt mitgedreht.

Verhalten (Absturz, Einfrieren, ...):

Dwachs

Kannst du bitte die dat + png Datei posten? Bzw nur die SmokeTile, SmokeOffset - Parameter.

Dwachs

Dieses Bergwerk rotiert auch falsch rum. Der Screenshot ist einmal vor einmal nach der Rotation.

Wurzelgnom

Das der falsch rotiert weis ich. Darum gings ja bei meinen Änderungen.

Dabei ist dann das mit dem Rauch aufgefallen.

Da der Rauch immer über dem selben Feld war, hatte ich den Schornstein eben da hin gemacht, wo der Rauch war.

Dwachs

Bei rotiertem Rauch darf man nicht so genau hingucken Smile

Leicht zu aendern ist, dass der Rauch aus dem richtigen Fabrikteil rauskommt.

Aber die Feinjustierung, dass der Rauch dann auch noch aus dem Schornstein und nicht, sagen wir mal aus dem Backofen kommt, ist schon gehobene Glueckssache Wink Da muesste man die dat-Parameter um einen Smoke-Offset fuer jede Rotation ergaenzen.
WIeso, den kann man auch tilewise rotieren. Sollte gar nicht mal so schwer sein.

Dwachs

Aber die x- und y-offsets in koord3d::rotate90() bringen alles durcheinander. Rotiere mal eine Karte mit Industrierauch. Der schon existierende Rauch ist dann teilweise mehrere Tiles von seiner urspruenglichen Position entfernt.

Eigentlich braeuchte man 3d-Offsets. Denn woher soll Simutrans wissen, ob zum Beispiel der Rauch in der hinteren Tileecke am Boden oder in der vorderen Tileecke aber oberhalb des Bodens erzeugt wird? Das Bild ist erst einmal dasselbe, aber nach der Rotation nicht mehr.

Oder man nimmt dem Programm die Rotation ab und laesst die Smoke-Offsets fuer jede Orientierung in der pak-Datei einstellen.
Wieso: Die basiskachel ist doch vorgebbar mit smoke_tile. Die müsste nur halt korrekt mitrotiert werden für die anderen layouts. Oder verwechsel ich was? Die Offsets im Tile müssen natürlich horizontal gespiegelt werden für ungerade Rotationen. SOllte alles machbar sein.

Dwachs

Du hast schon recht, es ist einfach, die richtige Kachel zu treffen, an der der Rauch ausgestossen wird.

Dann gibts es aber noch den Offset fuer die Feinpositionierung in der Kachel, den kriegt man nicht gescheit rotiert.

Und jede schon vorhandene Wolke hat auch so einen Offset, der in koord3d::rotate90() rotiert wird. Das fuehrt dann bei Franks Kohlegruben (xoff=5, yoff=-27) dazu, dass die Wolke total neben der Spur ist (xoff=54 - also fast eine Kachel daneben). Mein Versuch das zu bessern ist:

Code:
Index: dings/wolke.h
===================================================================
--- dings/wolke.h       (revision 2357)
+++ dings/wolke.h       (working copy)
@@ -46,6 +46,8 @@
        void rdwr(loadsave_t *file);

        virtual void entferne(spieler_t *sp);
+
+       virtual void rotate90();
};
Index: dings/wolke.cc
===================================================================
--- dings/wolke.cc      (revision 2357)
+++ dings/wolke.cc      (working copy)
@@ -116,6 +116,18 @@



+// called during map rotation
+void wolke_t::rotate90()
+{
+       set_yoff(get_yoff() - base_y_off );
+
+       ding_t::rotate90();
+
+       set_yoff(get_yoff() + base_y_off );
+}
+
+
+
/***************************** just for compatibility, the old raucher and smoke clouds *********************************/

raucher_t::raucher_t(karte_t *welt, loadsave_t *file) : ding_t(welt)
Na auch der Industriecode muss den Rauch an die rechte Stelle setzen.
Seiten: 1 2