فهرست منبع

moved effects from menu.d

quantumde1 2 ماه پیش
والد
کامیت
700f0e88be
2فایلهای تغییر یافته به همراه115 افزوده شده و 3 حذف شده
  1. 2 3
      conf/settings.conf
  2. 113 0
      source/ui/effects.d

+ 2 - 3
conf/settings.conf

@@ -1,8 +1,7 @@
 TITLE:Remember11 - Self Chapter
-SCRIPT:scripts/KO00.lua
+SCRIPT:scripts/SA00.lua
 DIALOG_END_INDICATOR:res/misc/circle.png
-DIALOG_BOX:res/misc/win_01b.PNG
-CHOICE_BOX:res/misc/win_00b.PNG
+DIALOG_BOX:res/misc/TEX#win_01b.PNG
 FALLBACK_FONT:res/font_en.png
 ICON:res/icon.png
 DEFAULT_SCREEN_WIDTH:1024

+ 113 - 0
source/ui/effects.d

@@ -0,0 +1,113 @@
+module ui.effects;
+
+import raylib;
+import std.stdio;
+import variables;
+import std.string;
+import system.abstraction;
+import std.file;
+
+int screenWidth;
+int screenHeight;
+
+Texture2D[] loadAnimationFramesUI(const string fileDir, const string animationFileName)
+{
+    screenWidth = systemSettings.defaultScreenWidth;
+    screenHeight = systemSettings.defaultScreenHeight;
+    Texture2D[] frames;
+    uint frameIndex = 1;
+    while (true)
+    {
+        string frameFileName = format("%s-%03d.png", animationFileName, frameIndex);
+        if (std.file.exists(fileDir~"/"~frameFileName) == false) break;
+        debug debugWriteln(frameFileName);
+        Texture2D texture = LoadTexture((fileDir~"/"~frameFileName).toStringz());
+        frames ~= texture;
+        debug debugWriteln("Loaded frame for UI ", frameIndex, " - ", frameFileName);
+        frameIndex++;
+    }
+    debug debugWriteln("Frames for ui animations length: ", frames.length);
+    return frames;
+}
+
+void playUIAnimation(Texture2D[] frames)
+{
+    static float frameTime = 0.0f;
+    
+    if (playAnimation) {
+        frameTime += GetFrameTime();
+        
+        while (frameTime >= frameDuration && frameDuration > 0) {
+            frameTime -= frameDuration;
+            currentFrame = cast(int)((currentFrame + 1) % frames.length);
+        }
+
+        int frameWidth = frames[currentFrame].width;
+        int frameHeight = frames[currentFrame].height;
+        
+        DrawTexturePro(
+            frames[currentFrame],
+            Rectangle(0, 0, frameWidth, frameHeight),
+            Rectangle(0, 0, screenWidth, screenHeight),
+            Vector2(0, 0),
+            0,
+            Color(255, 255, 255, 127)
+        );
+    } else {
+        frameTime = 0.0f;
+        currentFrame = 0;
+    }
+}
+
+
+void fadeEffect(float alpha, bool fadeIn, void delegate(float alpha) renderer)
+{
+    const float FadeIncrement = 0.02f;
+
+    while (fadeIn ? alpha < 2.0f : alpha > 0.0f)
+    {
+        alpha += fadeIn ? FadeIncrement : -FadeIncrement;
+        BeginDrawing();
+        ClearBackground(Colors.BLACK);
+        renderer(alpha);
+        EndDrawing();
+    }
+}
+
+void renderText(float alpha, immutable(char)* text)
+{
+    DrawTextEx(textFont, text,
+        Vector2(GetScreenWidth() / 2 - MeasureText(text, 40) / 2,
+            GetScreenHeight() / 2), 40, 0, Fade(Colors.WHITE, alpha)
+    );
+}
+
+void helloScreen()
+{
+    debug
+    {
+        bool play = false;
+        debugWriteln("hello screen showing");
+        if (play == false) {
+            videoFinished = true;
+        }
+    } else {
+        fadeEffect(0.0f, true, (float alpha) {
+            renderText(alpha, "powered by\n\nHimmel Engine");
+        });
+
+        fadeEffect(2.0f, false, (float alpha) {
+            renderText(alpha, "powered by\n\nHimmel Engine");
+        });
+        /*
+        fadeEffect(0.0f, true, (float alpha) {
+            renderLogo(alpha, "atlus_logo.png".toStringz, true);
+        });
+        
+        fadeEffect(fadeAlpha, false, (float alpha) {
+            renderLogo(alpha, "atlus_logo.png".toStringz, true);
+        });
+        */
+        // Play Opening Video
+    }
+}