waterplane per lua bewegen

  • Hallo,mir kam grad die Erinnerung, dass jemand schonmal diese Frage gestellt hat, um Hochwasser darzustellen. Hab dann mal beim Modhoster nach Hochwasser gesucht und siehe da:


    Wiesenfurt Land Unter


    Laut Beschreibung mit Hochwasser-Simulation. Hab die Map aber nicht geladen und daher keine Ahnung ob sich da die waterplane bewegt.
    Aber kannst dir ja mal ansehen.


    MfG Robert

  • Update wird meines Wissens einmal pro Frame aufgerufen. Verzögern kannst du das demnach also nur, indem du irgendwie deine FPS runter bekommst. Wenn du aber mit dem dt arbeitest bringt das aber nix, bei 30fps ist das dt von einem Frame doppelt so hoch wie bei 60fps. Dann hilft es nur bei der Berechnung selbst was anzupassen.

  • Vermutungen über die fps anstellen und da dann auch noch mit rumrechnen ist das allerblödeste, was man überhaupt machen kann.


    dt ist die vergangene Zeit in ms seit dem letzten Frame. Eine Minute sind 60000ms, eine Stunde 3600000ms. Das sind Werte, wo man mit rechnen kann, weil sie auf jedem Rechner gleich sind. Oder zumindest fast gleich, die Unterschiede sind im unteren ms-Bereich und somit zu vernachlässigen.



    Mr. F:
    Das funktioniert so nicht. Du wirst den Timer niemals genau auf 0 bekommen, da wird also nie was upgedatet, nur unendlich runter gezählt. Und wenn es funktionieren würde würde der Teil alle 3.6s ausgeführt werden, nicht jede Minute.

  • Also das mit dem timer würde vllt gehen ,aber wie bekomm ich das mit dem variieren nach Spielzeit Geschwindigkeit hin???
    Also wie is dass mit dem Update tick, wann kommt das in welchem Takt??
    Und nochmal ne andere Frage: was wird hinter den funktions in klammern angegebenen???

  • g_currentmission.missionStats.timeScale ist die Zeitskalierung und zwar der reine Wert genau so wie er später im Spiel oben rechts steht..




    ansonsten, ein Timer mit dt ist schon mal der richtige Weg.. Wenn man 60FPS hat ist dt*60 = 1 Sekunde, wenn man 30FPS hat ist dt*30 = 1 Sekunde und wenn man 15FPS hat ist dt*15 = 1 Sekunde, d.h. damit kann man in Echtzeit zählen.


    load()
    self.timerTime = 60000 -- 1 min


    update()
    self.timerTime = self.timerTime - dt
    if self.timerTime < 0 then
    -- 1 minute um
    self.timerTime = 60000
    end;


    Somit hat man einen ziemlich exakten Timer... Nur weiß ich nicht wirklich wofür du einen Timer bei der Wasserplane brauchst?



    Ach ja updateTick() im Singleplayer tickt etwa genau so schnell wie update() nur im MP wesentlich langsamer..



    LG

  • Schau mal im washable Script da wird der Traktor sauber wenns regnet..


    [lua] if g_currentMission.environment.lastRainScale > 0.1 and g_currentMission.environment.timeSinceLastRain < 30 then
    self:decreaseDirt(dt);
    else
    if self:getIsActive() or self.isActive then
    self:increaseDirt(dt);
    end;
    end;
    [/lua]


    Das in etwa kannst du verwenden.. Die Werte etwas ändern eben und dann entsprechend die Plane aufrufen.. Da brauchst du aber auch keinen Timer, ist überflüssig.


    [lua]
    load()
    self.indexDerWasserplane = Hier den Index der Wasserplane rausfinden
    self.wasserYMax = 10;
    self.wasserYMin = 0;
    self.wasserY = self.wasserYMin
    self.speed = 0.001


    update()
    if g_currentMission.environment.lastRainScale > 0.1 and g_currentMission.environment.timeSinceLastRain < 30 then
    self.hochwasser = true;
    else
    self.hochwasser = false;
    end;



    if self.hochwasser then
    self.wasserY = math.min(self.wasserY + self.speed*dt, self.wasserYMax)
    else
    self.wasserY = math.max(self.wasserY - self.speed*dt, self.wasserYMin)
    end;
    setTranslation(self.indexDerWasserplane, 0, self.wasserY, 0)
    [/lua]



    So in etwa.. ;) Wie schnell das Wasser steigt und sinkt hängt von self.speed ab, dass das Wasser steigt wenns regnet macht der Teil aus dem Washable Script... Quasi.



    LG

Jetzt mitmachen!

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