Sachen auf den Bildschirm rendern

  • Hey Leute!


    Ich wollte mal ein Script machen das das auf den Bildschirm rendert:

    • aktueller Spritverbrauch
    • insgesamt verbrauchter Sprit
    • aktuelle Umdrehungen

    und wenns möglich ist die aktuelle Auslastung des Fahrzeugs!




    Aber jetzt meine Frage:


    Wie soll das ganze aussehen?

  • Aktuelle Umdrehungen: self.motor.lastMotorRpm



    EDIT: Idee zum Thema aktueller Spritverbrauch.. Keine Ahnung ob das so hin haut :D


    Aktueller Spritverbrauch gesehen auf 1h:
    [lua]
    load()
    self.fuelBackup = nil;
    self.timeBackup = nil;
    self.actualFuelUsagePerHour = 0;


    update()
    if self.fuelBackup == nil and self.timeBackup == nil then -- wird nur beim ersten Aufruf der LUA aktiv
    self.fuelBackup = self.fuelFillLevel;
    self.timeBackup = self.time;
    end;


    if self.fuelFillLevel < self.fuelBackup then -- wenn der aktuelle Tankinhalt kleiner ist, als der beim letzten Programmdurchlauf
    local used = self.fuelBackup - self.fuelFillLevel; -- dann ist der verbrauchte Sprit seit dem letzten Programmdurchlauf die Differenz der beiden
    local curtime = self.time - self.timeBackup; -- und die Zeit seit dem letzten Programmdurchlauf ist die Differenz der ges. Spielzeit - der Spielzeit beim letzten Programmdurchlauf
    self.actualFuelUsagePerHour = (used / curtime) * 3600; -- der Spritverbrauch umgerechnet auf 1h ist also das seit dem letz. Durchlauf verbrauchte / die vergangene Zeit * 3600 (weil self.time in Sekunden ist, sekunden * 3600 = Stunden)


    end;
    self.fuelBackup = self.fuelFillLevel; -- Die Backupwerte werden neu gesetzt und somit für den nächsten Programmdurchlauf bereit
    self.timeBackup = self.time;


    [/lua]


    Hoffe das ist nicht völliger Blödsinn, hab es nämlich nicht ausprobiert..^^



    LG

  • Bis auf die Klammern in Zeile 15 sieht es ganz gut aus ;)


    EDIT:
    self.fuelBackup = self.fuelFillLevel;
    self.timeBackup = self.time;


    könnte man ja auch gleich in der function load() setzen... anstatt sie beim Laden auf nil zu setzen und anschließend beim ersten Programmdurchlauf mit den entsprechenden Werten zu belegen... oder ?

  • Wenn man davon ausgeht dass die LUA nach den Standard-LUA's eingebaut wird, sodass die Variablen in jedem Fall schon existieren, dann ja ;)


    Keine Ahnung ob self.time schon belegt ist während load() aufgerufen wird. Der Wert beginnt erst mit Spielstart an zu zählen, ob davor 0 oder nil weiß ich aber nicht. Müsste man gegebenenfalls ausprobieren.


    EDIT: Klammer angepasst.. Hatte da am Anfang noch ne andere Berechnung stehen davon war die noch über. Ob man die beiden anderen Klammern braucht bin ich mir (mal wieder^^) nicht sicher..


    LG

  • also... ich habe auch mal das mit dem rendern hinzugefügt...



    [expander][hide][lua]RenderState = {};


    function RenderState.prerequisitesPresent(specializations)
    return true;
    end;


    function RenderState:load(xmlFile)
    self.fuelBackup = nil;
    self.timeBackup = nil;
    self.actualFuelUsagePerHour = 0;

    self.ShowHud = {};
    self.ShowHudxPos = 0.005;
    self.ShowHudyPos = 0.009;
    self.ShowHudwidth = 0.160;
    self.ShowHudheight = 0.044;
    self.ShowHudOverlay = Overlay:new("HUDOverlay", Utils.getFilename("Textures/Hud.png", self.baseDirectory), self.ShowHudxPos, self.ShowHudyPos, self.ShowHudwidth, self.ShowHudheight);

    self.RenderText = true;
    end;
    function RenderState:delete()
    end;
    function RenderState:mouseEvent(posX, posY, isDown, isUp, button)
    end;
    function RenderState:keyEvent(unicode, sym, modifier, isDown)
    end;
    function RenderState:update(dt)
    if self.fuelBackup == nil and self.timeBackup == nil then -- wird nur beim ersten Aufruf der LUA aktiv
    self.fuelBackup = self.fuelFillLevel;
    self.timeBackup = self.time;
    end;


    if self.fuelFillLevel < self.fuelBackup then -- wenn der aktuelle Tankinhalt kleiner ist, als der beim letzten Programmdurchlauf
    local used = self.fuelBackup - self.fuelFillLevel; -- dann ist der verbrauchte Sprit seit dem letzten Programmdurchlauf die Differenz der beiden
    local curtime = self.time - self.timeBackup; -- und die Zeit seit dem letzten Programmdurchlauf ist die Differenz der ges. Spielzeit - der Spielzeit beim letzten Programmdurchlauf
    self.actualFuelUsagePerHour = (used / curtime) * 3600; -- der Spritverbrauch umgerechnet auf 1h ist also das seit dem letz. Durchlauf verbrauchte / die vergangene Zeit * 3600 (weil self.time in Sekunden ist, sekunden * 3600 = Stunden)
    end;
    self.fuelBackup = self.fuelFillLevel; -- Die Backupwerte werden neu gesetzt und somit für den nächsten Programmdurchlauf bereit
    self.timeBackup = self.time;
    end;
    function RenderState:updateTick(dt)
    end;
    function RenderState:draw()
    self.ShowHudOverlay:render();
    end;
    function RenderState:onLeave()
    self.RenderText = false;
    end;[/lua][/hide][/expander]


    PS: Danke an modelleicher für die Beispielspezi :D

  • Man sagt ja immer Probieren geht über studieren... ;) ! Das schöne ist sogar, wenn ein Fehler im Skript ist, sieht du das gleich, zum einen das dein HUD fehlt und zum anderen an einträgen in der LOG!


    Aber so wie dein Skript jetzt ist, wird es gehen...nur es passiert nicht das was du willst:
    Es wird also ein HUD zeigen das leer ist.


    Webby hat ein Skript rausgebracht, was die aktuelle Motordrehzahl in einem HUD anzeigt, da ist z.b die bei dir fehlende Zeile drin. Du musst deinem Mod ja jetzt beibringen, wenn der Tankinhalt kleiner ist wie beim letzten Durchlauf, das er dir das auch "zeigt"...also solltest du noch folgendes in zeile 36 einfügen, also vor dem end;



    [lua]


    self.actualFuelUsagePerHour = (used / curtime) * 3600; -- der Spritverbrauch umgerechnet auf 1h ist also das seit dem letz. Durchlauf verbrauchte / die vergangene Zeit * 3600 (weil self.time in Sekunden ist, sekunden * 3600 = Stunden)



    renderText(self.ShowHudxPos + 0.085, self.ShowHudyPos + 0.013, 0.021, tostring(math.floor(self.actualFuelUsagePerHour ))); --die Zahlen musst du noch anpassen, stammt jetzt aus dem oben erwähnten skript





    end;
    [/lua]


    Die zahlen hinter self.ShowHudxPos und self.ShowHudyPos bestimmen in dem Fall wo deine Zahl angezeigt wird, also von HUD position ausgehen +0.085 bzw 0.013


    zusätzlich kannst du dann natürlich noch bestimmen wie der Text aussieht, also fett geschrieben, farben usw.


    Aber so solltest du dein Skript erstmal einbauen und testen.


    Eventuell auch noch ein "print" einbauen, um in der LOG zu sehen ob dein Skript überhaupt den Teil durchläuft der zur Berechnung notwendig ist.


    Hoffe ich hab jetzt nicht zu viel dummes zeug in meine Antwort eingebaut...

Jetzt mitmachen!

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