Jump to content

Fade In (Lua)


burgelkat
 Share

Go to solution Solved by Dreikblack,

Recommended Posts

Hi,

maybe someone can help me. in this script nothing happens at start. What do i wrong here?

 

FadeIn = {
    duration = 30.0, -- Dauer des Fade-In in Sekunden
    elapsed = 0,    -- Verstrichene Zeit
    overlay = nil,  -- Das Overlay-Panel
    isActive = false -- Status des Fade-In
}

function FadeIn:Start()

    -- Create User Interface
    local ui = CreateInterface(window)
    -- Sicherstellen, dass ein UI existiert
    if not ui then return end

    -- Größe des UI-Fensters ermitteln
    local sz = ui.background:ClientSize()

    -- Overlay erstellen
    self.overlay = CreatePanel(0, 0, sz.x, sz.y, ui.background)
    self.overlay:SetColor(0, 0, 0, 1) -- Vollständig schwarz
    self.elapsed = 0
    self.isActive = true -- Aktiviert den Fade-In-Prozess
end

function FadeIn:Update()
    if not self.isActive or not self.overlay then return end

    local step = 0.016
    -- Zeit aktualisieren
    self.elapsed = self.elapsed + step

    if self.elapsed < self.duration then
        -- Alpha-Wert basierend auf der verstrichenen Zeit berechnen
        local alpha = math.max(0, 1 - self.elapsed / self.duration)
        self.overlay:SetColor(0, 0, 0, alpha)
    else
        -- Fade-In abgeschlossen, Overlay entfernen
        self.overlay:SetHidden(true)
        self.overlay = nil
        self.isActive = false
    end
end

return FadeIn

 

Link to comment
Share on other sites

FadeIn = {
    duration = 3.0,  -- Dauer des Fade-In in Sekunden
    elapsed = 0,       -- Verstrichene Zeit
    overlay = nil,     -- Das Overlay-Panel
    isActive = true,   -- Status des Fade-In
    ui = nil,          -- UI-Referenz
    framebuffer = nil, -- Framebuffer für die Größe
    window = nil       -- Fenster-Referenz
}

function FadeIn:Start()
    -- Sicherstellen, dass der Framebuffer und das Fenster initialisiert sind
    if not self.framebuffer then
        local displays = GetDisplays()
        self.framebuffer = CreateFramebuffer(window)  -- Framebuffer erstellen
        print("Framebuffer erstellt!")  -- Debugging-Ausgabe
    end

    local world = self.entity:GetWorld()

    -- Sicherstellen, dass die UI initialisiert ist
    if not self.ui then
        -- Holen der Größe des Framebuffers (Fenstergröße)
        local sz = self.framebuffer.size
        local font = LoadFont("Fonts/arial.ttf")

        -- Benutzeroberfläche mit der Größe des Framebuffers erstellen
        self.ui = CreateInterface(world, font, sz)
        print("UI erstellt!")  -- Debugging-Ausgabe
    end

    -- Overlay-Panel erstellen, das das gesamte Fenster abdeckt
    local sz = self.framebuffer.size

    -- Panel im Fensterbereich erstellen (im 2D-Raum des Fensters)
    self.overlay = CreatePanel(0, 0, sz.x, sz.y, self.ui.background)
    self.overlay:SetColor(0, 0, 0, 1)  -- Vollständig schwarz
    self.elapsed = 0
    self.isActive = true  -- Fade-In-Prozess aktivieren

    print("Fade-In gestartet!")  -- Debugging-Ausgabe
end

function FadeIn:ProcessEvent(ev)
    -- Ereignisse für die UI verarbeiten (z. B. Maus- oder Tastaturereignisse)
    if self.ui then
        self.ui:ProcessEvent(ev)
    end
end

function FadeIn:Update()
    if not self.isActive or not self.overlay then
        print("Fade-In-Prozess ist nicht aktiv oder Overlay fehlt.")  -- Debugging-Ausgabe
        return
    end

    local step = 0.016
    -- Zeit aktualisieren
    self.elapsed = self.elapsed + step

    if self.elapsed < self.duration then
        -- Alpha-Wert basierend auf der verstrichenen Zeit berechnen
        local alpha = math.max(0, 1 - self.elapsed / self.duration)
        self.overlay:SetColor(0, 0, 0, alpha)
    else
        -- Fade-In abgeschlossen, Overlay entfernen
        self.overlay:SetHidden(true)
        self.overlay = nil
        self.isActive = false
        print("Fade-In abgeschlossen.")  -- Debugging-Ausgabe
    end

    -- Ereignisse verarbeiten
    while (PeekEvent()) do
        local ev = WaitEvent()
        self:ProcessEvent(ev)  -- Ereignis verarbeiten
    end
end

RegisterComponent("FadeIn", FadeIn)

return FadeIn

image.thumb.png.3313a645ab508f8acc3a5be0711671cf.png:D

it already works. somehow. Ha-Ha. but the panel does not cover the existing window.

 

Link to comment
Share on other sites

  • Solution

Reworked component to make it work with sprite:

FadeIn = {
    duration = 5.0,  -- Dauer des Fade-In in Sekunden
    elapsed = 0,       -- Verstrichene Zeit
    isActive = true,   -- Status des Fade-In
    framebuffer = nil, -- Framebuffer für die Größe
    orthographicCamera = nil, -- 2D camera
    fadeSprite = nill --Sprite that covering camera fully
}

function FadeIn:Start()
    -- Sicherstellen, dass der Framebuffer und das Fenster initialisiert sind
    if not self.framebuffer then
        self.framebuffer = CreateFramebuffer(ActiveWindow())  -- Framebuffer erstellen
        print("Framebuffer erstellt!")  -- Debugging-Ausgabe
    end

    local world = self.entity:GetWorld()

    local sz = self.framebuffer.size

    self.orthographicCamera = CreateCamera(world, PROJECTION_ORTHOGRAPHIC)
    self.orthographicCamera:SetClearMode(CLEAR_DEPTH);
    self.orthographicCamera:SetClearColor(0.125)
    self.orthographicCamera:SetPosition(sz.x * 0.5, sz.y * 0.5, 0.0)
    self.orthographicCamera:SetRenderLayers(2)

    self.fadeSprite = CreateSprite(world, sz.x, sz.y)
    self.fadeSprite:SetRenderLayers(2)
    local material = CreateMaterial()
    material:SetShadow(false);
    material:SetTransparent(true);
    material:SetShaderFamily(LoadShaderFamily("Shaders/Unlit.fam"));
    self.fadeSprite:SetMaterial(material)

    self.fadeSprite:SetColor(0, 0, 0, 1)  -- Vollständig schwarz
    self.elapsed = 0
    self.isActive = true  -- Fade-In-Prozess aktivieren

    print("Fade-In gestartet!")  -- Debugging-Ausgabe
end

function FadeIn:ProcessEvent(ev)

end

function FadeIn:Update()
    if not self.isActive or not self.fadeSprite then
        print("Fade-In-Prozess ist nicht aktiv oder Sprite fehlt.")  -- Debugging-Ausgabe
        return
    end

    local step = 0.016
    -- Zeit aktualisieren
    self.elapsed = self.elapsed + step

    if self.elapsed < self.duration then
        -- Alpha-Wert basierend auf der verstrichenen Zeit berechnen
        local alpha = math.max(0, 1 - self.elapsed / self.duration)
        self.fadeSprite:SetColor(0, 0, 0, alpha)
    else
        -- Fade-In abgeschlossen, Sprite entfernen
        self.fadeSprite:SetHidden(true)
        self.fadeSprite = nil
        self.isActive = false
        print("Fade-In abgeschlossen.")  -- Debugging-Ausgabe
    end
end

RegisterComponent("FadeIn", FadeIn)

return FadeIn

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...