Skript zum Auslesen von platzierten Industrien.

Willkommen in der Transport Fever Community

Wir begrüßen euch in der Fan-Community zu den Spielen Transport Fever und Train Fever, den Wirtschaftssimulatoren von Urban Games. Die Community steht euch kostenlos zur Verfügung damit ihr euch über das Spiel austauschen und informieren könnt. Wir pflegen hier einen freundlichen und sachlichen Umgang untereinander und unser Team steht euch in allen Fragen gerne beiseite.

 

Die Registrierung und Nutzung ist selbstverständlich kostenlos.

 

Wir wünschen euch viel Spaß und hoffen auf rege Beteiligung.

Das Team der Transport-Fever Community


  • Also ich könnte mir vorstellen, dass TpF vielleicht die Industrien entsprechend dem Terrain orientiert - so wie ja in manchen Positionen die Platzierung von bspw. der kleinen LKW-Station wg. Terrainangleichung nicht möglich ist. Ich will mich aber nicht zu weit aus dem Fenster lehnen, da ich nicht genau weiß, wie das Skript funktioniert, und wie die Platzierung der Industrien erfolgt.

  • Da es sich beim Test (Siehe Edit im vorherigen Beitrag) um eine ebene Fläche handelt, ergäbe das schlicht keinen Sinn.
    Ich denke schon, das es sich da um einen "Fehler" in der berechnung (Formel) der ausgelesenen Daten handelt.

    Ich bin nur dafür verantwortlich was ich schreibe, nicht was andere verstehen "wollen"!


    System: Windows 7 Ultimate 64bit ; AMD Phenom II X4 965 @ 3,4 GHz ; 8 GB DDR3 Ram ; GeForce GTX 660 @ 3 GB GDDR5 Ram (Treiber: 431.36)

  • Ja, du könntest Recht haben. Nachdem ich mir die Formel noch einmal näher angeschaut habe, muss ich sagen, dass sie mir etwas komisch vorkommt. Versuche einmal math.acos durch math.asin zu ersetzen. Dementsprechend müssten die if-Abfragen danach auch angepasst werden:
    Im Falle vec2.x<0 & vec2.y<=0 müsste rad-math.rad(180) zurückgegeben werden, bei vec2.x<=0 & vec2.y>0 math.rad(180)-rad, bei vec2.x>0 & vec2.y>=0 einfach rad und bei vec2.x>=0 & vec2.y < 0 dann auch einfach rad. Das könnte der Fehler sein, da man standardmäßig den Winkel im Bezug auf die x-Achse nimmt (also wenn die Konvention bei TpF auch so ist).

  • Also der austausch von acos in asin hat es nicht gebracht. :/


    Hier wieder ein Vergleichsbild:

    Diesmal hab ich einen weiteren Drehwinkel mit in den Test aufgenommen. (Der schräg gebaute ist Nr. 5)
    Warum hier wieder ein Testkandidat (2) fehlt, keine Ahnung. Ist aber erst einmal nicht von Relevanz.


    Code:


    Code
    { pos = {	-4437.767578125	,	-516.53387451172	}, angle = 	4.7123886545975	, fileName ="industry/oil_well.con"},
    { pos = {	-5041.65234375	,	-468.60540771484	}, angle = 	5.3210735503839	, fileName ="industry/oil_well.con"},
    { pos = {	-4709.83984375	,	-328.90100097656	}, angle = 	7.5497901264043e-008	, fileName ="industry/oil_well.con"},
    { pos = {	-4953.8696289063	,	-228.09991455078	}, angle = 	6.2831853071796	, fileName ="industry/oil_well.con"},
    { pos = {	-4171.34765625	,	-385.84106445313	}, angle = 	4.7123899459838	, fileName ="industry/oil_well.con"},

    Wirklich interessant aber ist aber Nr. 1!
    Denn der Winkel (angle) ist im Code identisch mit dem 1. Test.
    Und dennoch sind sie unterschiedlich ausgerichtet. o.O
    Ob wohl Nr 1. in beiden Tests als erstes und ungedreht gebaut wurden.

    Ich bin nur dafür verantwortlich was ich schreibe, nicht was andere verstehen "wollen"!


    System: Windows 7 Ultimate 64bit ; AMD Phenom II X4 965 @ 3,4 GHz ; 8 GB DDR3 Ram ; GeForce GTX 660 @ 3 GB GDDR5 Ram (Treiber: 431.36)

  • Ich habe auch einen Fehler gemacht, im Falle vec2.x >=0 und vec2.y < 0 muss (-1)*rad zurückgegeben werden. Deshalb kriegst du in einem Bereich von 90 Grad die falschen Drehungen. Ich habe vergessen, dass er ja den Absolutbetrag nimmt (das könnte man auch vereinfachen / umändern). Komisch ist es trotzdem, denn deine Industrien sind einem Bereich von mehr als 90 Grad nicht richtig orientiert.

  • So langsam überfordert mich das etwas.... verstehe nix von dem was Du da schreibst. ;) (Wahr wohl doch nicht so gut in Mathe wie ich immer dachte) :D
    Welche Zeile müsste jetzt genau in was geändert werden?


    Ps: Schon mal vielen Dank, das Du Dich da so mit auseinandersetzt und hilfst. :thumbup:

    Ich bin nur dafür verantwortlich was ich schreibe, nicht was andere verstehen "wollen"!


    System: Windows 7 Ultimate 64bit ; AMD Phenom II X4 965 @ 3,4 GHz ; 8 GB DDR3 Ram ; GeForce GTX 660 @ 3 GB GDDR5 Ram (Treiber: 431.36)

  • Kein Problem - ich studiere ja auch Mathematik ;)


    Also du müsstest jedenfalls nach elseif (vec2.x>=0 and vec2.y<0) then die Zeile in return (-1)*rad ändern. Dann sollte da nach dem math.asin-Abschnitt stehen:

    Code
    if (vec2.x < 0 and vec2.y <= 0) then
    		return rad-math.rad(180)
    	elseif (vec2.x <= 0 and vec2.y > 0) then
    		return math.rad(180)-rad
    	elseif (vec2.x > 0 and vec2.y >= 0) then
    		return rad
    	elseif (vec2.x >= 0 and vec2.y < 0) then
    		return (-1)*rad
    	end


    Wichtig ist, dass die if-Abfragen entsprechend angepasst sind.

  • @GreenCity
    So langsam nähern wir uns dem Ziel. (Hab den Code so 1:1 übernommen.)
    Allerdings werden die Industrien noch immer um 90° (Im Uhrzeigersinn) zu weit gedreht.
    Der Rest kommt wenigstens schon mal hin.


    Leider habe ich diesmal die Screenshots vergessen. :/


    @R4Dt
    Ja mir auch so langsam.
    Aber solche Dinge sind eben (Für Mao-Modder) zukünftig durchaus nützlich, wenn das Skript erst einmal genau so funktioniert wie es soll. :)
    Auch wenn mir die Winkel/Vektoren-Berechnung ebenfalls zu hoch ist. :/


    Aber für genau solche Dinge hat man dann eben die Profis in einer Community. :thumbup:

    Ich bin nur dafür verantwortlich was ich schreibe, nicht was andere verstehen "wollen"!


    System: Windows 7 Ultimate 64bit ; AMD Phenom II X4 965 @ 3,4 GHz ; 8 GB DDR3 Ram ; GeForce GTX 660 @ 3 GB GDDR5 Ram (Treiber: 431.36)

  • Also wenn die Industrien konstant um 90 Grad zu weit gedreht werden, musst du einfach math.rad(90) von den zurückgegebenen Werten in den if-Abfragen oben abziehen oder addieren (je nach dem, wie herum gedreht wird).
    Dem entsprechend also entweder

    Code
    if (vec2.x < 0 and vec2.y <= 0) then
    		return rad-math.rad(270)
    	elseif (vec2.x <= 0 and vec2.y > 0) then
    		return math.rad(90)-rad
    	elseif (vec2.x > 0 and vec2.y >= 0) then
    		return rad-math.rad(90)
    	elseif (vec2.x >= 0 and vec2.y < 0) then
    		return (-1)*rad-math.rad(90)
    	end


    oder


    Code
    if (vec2.x < 0 and vec2.y <= 0) then
    		return rad-math.rad(90)
    	elseif (vec2.x <= 0 and vec2.y > 0) then
    		return math.rad(270)-rad
    	elseif (vec2.x > 0 and vec2.y >= 0) then
    		return rad+math.rad(90)
    	elseif (vec2.x >= 0 and vec2.y < 0) then
    		return (-1)*rad+math.rad(90)
    	end

    Eins davon müsste dann das Richtige tun.

  • STRIKE! :thumbsup:


    @GreenCity
    Der 2. Code ist es. :D
    An dieser Stelle nochmals meinen aufrichtigen Dank, für Deine geduldige Hilfe.
    Nun passt das Skript, bzw. die ausgegebenen Daten, und können effektiv für die präzise Positionierung und vor allem Drehung genutzt werden.


    @beni92
    Mit Deiner Erlaubnis, würde ich das ganze Skript nun noch etwas "Aufhübschen", in dem ich zB. die "Missionsbeschreibung" durch eine Art Anleitung ersetze.
    Vielleicht sogar noch ein passendes Ladebild ergänze, und Dir dann zwecks Veröffentlichung (Im Lexikon) zurückschicke?


    Mir jedenfalls habt Ihr BEIDE, sehr sehr geholfen.
    Jetzt kann ich mit der eigentlich "lästigen" Arbeit beginnen, und durch die genaue "visuelle" Industrieplatzierung/Drehung, meine Map-Projekte entscheidend voranbringen.

    Ich bin nur dafür verantwortlich was ich schreibe, nicht was andere verstehen "wollen"!


    System: Windows 7 Ultimate 64bit ; AMD Phenom II X4 965 @ 3,4 GHz ; 8 GB DDR3 Ram ; GeForce GTX 660 @ 3 GB GDDR5 Ram (Treiber: 431.36)

BlueBrixx