[WIP] Plane Fly By

  • Tagchen.
    Wollte hier mal mein kleines Projekt vorstellen was ich momentan am werkeln bin.




    Plane Fly By/Ghost Planes?
    Hiermit versuche ich das Singleplayer Feature auch in MTA umzusetzen - wie in GTA:SA fliegen zur Spielatmosphäre Flugzeuge über den Spieler hinweg, das Feature wurde in der Community auch als Mythos 'Ghost Planes' bekannt da bei einem Absturz kein Pilot zu finden ist. Mehr dazu hier: GTA SA Myth - The Truth About Ghost Planes







    Die Funktionen
    Clientseitig wird durch einen Timer eine zufällige Fluglinie berechnet und geprüft ob sich nichts im Weg befindet.
    Anschliessend wird Serverseitig ein zufälliges Flugzeug generiert und mit setElementVelocity (Danke an @Sorginator) in Fluggeschwindigkeit gebracht, clientseitig wird dann die Steuerung des Piloten geregelt damit das Flugzeug geradeaus fliegen kann.
    Sobald das Flugzeug aus dem Sync-Radius des gewählten Spielers ist und kein neuer Syncer gefunden wird, wird das Flugzeug gelöscht.
    Die Linien im Video(dxDrawLine3D) & in der Abbildung unten sind die generierten Flugrichtungen.



    - Legende -
    [Player]: Spielerposition
    [Flugzeug]: Spawnposition des Flugzeuges(kann am Anfang oder am Ende einer generierten Flugrichtung spawnen)
    [Graue Quadrate]: Hindernisse u.a. Gebäude
    [Linien]: Generierte Flugroute
    [X]: Aktuell gewählte Flugroute blockiert, Hinterniss im Weg
    [✔]: Neue gewählte Flugroute akzeptiert(bis zum Ende der bislang gerechneten Route, isLineOfSightClear)






    Geplante Funktionen
    Das einzige woran man noch arbeiten müsste ist die generierte Flugroute zu verbessern(Startposition in jede Himmelsrichtung zufällig zu generieren)
    Die Kollisionsabfrage beruht momentan nur auf einem isLineOfSightClear(einer Linie), weshalb die Flugzeuge noch mit den Tragflächen an zu nahe gelegenen Objekte ankommen können, wie oben im Bild zu sehen. Geplant wäre es jeweils 3 Abfragen zu erstellen welche auch die Tragflächen einbezieht, siehe Bild unten.






    Mithilfe
    Vielleicht weiss jemand wie ich diese Abfragen am besten lösen kann.

    - Flugroute in einem Radius um den Spieler generieren.
    - Die Kollisionsabfragen(isLineOfSightClear) parallel für die Tragfläche Links & Rechts generieren lassen, Offset-Position von der Mittleren Abfrage aus. (Bild dazu weiter oben)





    Ihr dürft hier frei diskutieren, Kritik äussern und eure Meinung abgeben.
    Ich und meine Illustrationen... :D

  • Die Kollisionsabfragen(isLineOfSightClear) parallel für die Tragfläche Links & Rechts generieren lassen, Offset-Position von der Mittleren Abfrage aus. (Bild dazu weiter oben)

    Das ist eine Aufgabe für MasterMatrix! (ne Spaß ich hab davon fast keine Ahnung)



    Damit kannst du den Offset anhand der Bounding Box berechnen, was im Endeffekt die Box ist, die man im Map Editor sehen kann. Ergebnis:


    ggf. müsste man die Werte der Bounding Box noch + 2 oder ähnliches Rechnen, damit die Checks nicht genau am Ende der Tragfläche gemacht werden, sondern etwas weiter draußen


    //EDIT OOP muss aktiviert sein, bzw ich weiß nicht genau, ob es die Matrix-Funktionen auch normal gibt

  • Hallöchen.
    Nach 'ner Weile hatte ich mich nun wieder drangesetzt und es weiter ausgebaut und verbessert.



    Geplante Funktionen

    Die Kollisionsabfrage beruht momentan nur auf einem isLineOfSightClear(einer Linie), weshalb die Flugzeuge noch mit den Tragflächen an zu nahe gelegenen Objekte ankommen können, wie oben im Bild zu sehen. Geplant wäre es jeweils 3 Abfragen zu erstellen welche auch die Tragflächen einbezieht, siehe Bild unten.

    Danke @MasterM für den Ansatz, habe das ganze danach ohne Probleme mit der Matrix-Class (ohne oop) getPositionFromElementOffset geregelt, welche ich schon andersweitig in Verwendung hatte.
    Die Flugroute hat nun jeweils 3 Kollisionsabfragen. Mittig, Links & Rechts an den Tragflächen (die Mittlere verläuft etwas nach oben).
    Den Wert für die Länge der Tragflächen welche zum abfragen der Kollisionsroute genommen wird kann beliebig eingestellt werden (z.B. Dodo Tragflächenspannweite 7, Shamal 10).



    - Flugroute in einem Radius um den Spieler generieren

    Das grösste Manko war bisher das "am einfachsten generieren einer sauberen Flugroute", welche ich auch (dank einer Useful-Funktion) umsetzen konnte.
    Es wird eine zufällige Distanz/Entfernung rund um den Spieler ausgegeben und eine Zielroute generiert welche über den Spieler hinweg geht, in welchem Winkel die Fluglinie zum Spieler verläuft kann ebenso eingestellt werden.



    Es ist so gut wie erledigt.
    Werde nur noch ein paar Einzelheiten checken und eine kleine Spezial-Funktion fertigstellen für jene, die noch eigene schlichten Flugrouten hinzufügen möchten, welche dann durch den Spieler ausgelöst werden können.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!