[TuT] Bewegbare Tore mit Klicksystem und automatisch schließen

  • Eigentlich nicht wirklich schwer.
    Wobei hier wieder interessant wird, dass die Tore in meinem Verfahren in .map-Datei erstellt werden, also man auch Objekte aus der .map-Datei ansprechen kann.
    Ich habe damit eine Schranke am LVPD erstellt, falls irgendwer das ganze testen will. Ist die Schranke, westlich vom LVPD-Gebäude.

    meta.xml

    Code
    <meta>
    	<map src="gate.map" />
    
    	<script src="gate.lua" />
    </meta>


    Muss ich denke ich nicht weiter erklären.

    gate.map

    Code
    <map>
    	<object id="lv_pd_barrier_01" model="2920" posX="2238.2000" posY="2450.4000" posZ="10.5500" rotX="270" rotY="0" rotZ="0" interior="0" dimension="0" state="closed" moving="false" />
    </map>


    Eigentlich alles, was der Map-Editor schon anlegt.
    Wichtig sind hierbei
    state="closed"
    und
    moving="false"

    Ich übergebe hiermit direkt Element-Daten mit der .map-Datei.

    gate.lua


    Gut, hier tricksen wir ein wenig mit Timern, moveObject und ElementData um die Animation schön über die Bühne zu bekommen ;)

    Nach dem Check, ob der linke Mausbutton wieder losgelassen wurde, lesen wir uns erstmal unsere Element-ID aus und überprüfen, ob dies auch unsere Schranke ist, die dieses Script ansprechen soll.
    Danach lesen wir uns noch die ElementData von state und moving aus, berechnen die Entfernung zwischen Schranke und Spieler und setzten noch eine lokale Variable für die maximale Entfernung.

    Nun wirds lustig.
    Erst checken wir, ob die aktuelle Entfernung kleiner/gleich der maximalen Entfernung ist. Wenn nicht, wird mit outputChatBox() abgebrochen.
    Vom Normalfall ausgehend, wird nun noch gecheckt, welchen state (open/closed) unsere Schranke hat und ob sie sich nicht bewegt (moving).

    Danach nur noch das Element über eine Zeit bewegen (moveObject()).
    Die Timer sind nur dafür da, damit die Element-Daten richtig gesetzt werden.
    Vor der Bewegung wird moving auf true gesetzt um ein mehrfaches Ausführen des Scripts zu verhindern.
    Da unser Objekt über eine Zeit von 1500ms sich bewegt, soll erst nach 1500ms sowohl moving auf false (unsere Schranke bewegt sich ja nicht mehr) als auch state auf open (unsere Schranke ist ja jetzt offen) gesetzt werden.
    Der zweite Timer macht nichts anderes, als 5 Sekunden, nachdem die Schranke oben ist, sie wieder zu schließen.

    Umgekehrt dann in der unteren if-Abfrage.


    Soviel dazu, falls irgendwer ein besseres System kennt, immer her damit ;)

    Externer Inhalt i.imm.io
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.


    @Schlumpf: Danke fürs Weihnachtsgeschenk ;)

  • Dieses Thema enthält 4 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind, bitte registrieren Sie sich oder melden Sie sich an um diese lesen zu können.

Jetzt mitmachen!

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