|
@@ -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
|
|
|
+ }
|
|
|
+}
|