From f47e4cc3098741208db561f9e3b81561f3bf911f Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Thu, 30 Jan 2025 22:28:26 +0100 Subject: [PATCH] feat: animated background --- app/src/main/java/gui/AnimatedBackground.java | 28 +++++++++++++++++++ app/src/main/java/gui/Options.java | 1 + app/src/main/java/gui/menu/OptionsMenu.java | 4 +++ app/src/main/java/gui/menu/StateMachine.java | 11 +++----- 4 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/gui/AnimatedBackground.java diff --git a/app/src/main/java/gui/AnimatedBackground.java b/app/src/main/java/gui/AnimatedBackground.java new file mode 100644 index 0000000..66e8698 --- /dev/null +++ b/app/src/main/java/gui/AnimatedBackground.java @@ -0,0 +1,28 @@ +package gui; + +import imgui.ImGui; +import imgui.ImVec2; +import imgui.flag.ImGuiWindowFlags; + +public class AnimatedBackground { + + private float backgroundOffset = 0; + + public AnimatedBackground() { + + } + + public void render() { + backgroundOffset += ImGui.getIO().getDeltaTime() / 10.0f * Options.BackgroundSpeed; + var displaySize = ImGui.getIO().getDisplaySize(); + ImGui.setNextWindowPos(new ImVec2(0.0f, 0.0f)); + ImGui.setNextWindowSize(displaySize); + ImGui.begin("Background", null, ImGuiWindowFlags.NoDecoration | ImGuiWindowFlags.NoMove + | ImGuiWindowFlags.NoSavedSettings | ImGuiWindowFlags.NoBackground + | ImGuiWindowFlags.NoBringToFrontOnFocus | ImGuiWindowFlags.NoInputs); + ImGui.image(Images.BACKGROUND, displaySize, new ImVec2(backgroundOffset, backgroundOffset), + new ImVec2(1.0f + backgroundOffset, 1.0f + backgroundOffset)); + ImGui.end(); + } + +} diff --git a/app/src/main/java/gui/Options.java b/app/src/main/java/gui/Options.java index ade2b66..238f60f 100644 --- a/app/src/main/java/gui/Options.java +++ b/app/src/main/java/gui/Options.java @@ -3,5 +3,6 @@ package gui; public class Options { public static Symbols Symboles = Symbols.Numbers; + public static float BackgroundSpeed = 1.0f; } diff --git a/app/src/main/java/gui/menu/OptionsMenu.java b/app/src/main/java/gui/menu/OptionsMenu.java index 9d856c3..382ee54 100644 --- a/app/src/main/java/gui/menu/OptionsMenu.java +++ b/app/src/main/java/gui/menu/OptionsMenu.java @@ -8,6 +8,7 @@ import imgui.type.ImInt; public class OptionsMenu extends BaseView { private ImInt currentValue = new ImInt(); + private float backgroundSpeed[] = new float[]{Options.BackgroundSpeed}; public OptionsMenu(StateMachine stateMachine) { super(stateMachine); @@ -19,6 +20,9 @@ public class OptionsMenu extends BaseView { if(ImGui.combo("Jeu de symboles", currentValue, Symbols.getSymbolsNames())){ Options.Symboles = Symbols.values()[currentValue.get()]; } + if(ImGui.sliderFloat("Vitesse d'animation de l'arrière plan", backgroundSpeed, 0.0f, 10.0f)){ + Options.BackgroundSpeed = backgroundSpeed[0]; + } renderReturnButton(); } diff --git a/app/src/main/java/gui/menu/StateMachine.java b/app/src/main/java/gui/menu/StateMachine.java index a175362..5af733f 100644 --- a/app/src/main/java/gui/menu/StateMachine.java +++ b/app/src/main/java/gui/menu/StateMachine.java @@ -2,7 +2,7 @@ package gui.menu; import java.util.Stack; -import gui.Images; +import gui.AnimatedBackground; import imgui.ImGui; import imgui.ImVec2; import imgui.flag.ImGuiKey; @@ -11,9 +11,11 @@ import imgui.flag.ImGuiWindowFlags; public class StateMachine { private final Stack menus; + private final AnimatedBackground background; public StateMachine() { this.menus = new Stack<>(); + this.background = new AnimatedBackground(); } public void clear() { @@ -40,12 +42,7 @@ public class StateMachine { public void render() { var displaySize = ImGui.getIO().getDisplaySize(); - ImGui.setNextWindowPos(new ImVec2(0.0f, 0.0f)); - ImGui.setNextWindowSize(displaySize); - ImGui.begin("Background", null, ImGuiWindowFlags.NoDecoration | ImGuiWindowFlags.NoMove - | ImGuiWindowFlags.NoSavedSettings | ImGuiWindowFlags.NoBackground | ImGuiWindowFlags.NoBringToFrontOnFocus | ImGuiWindowFlags.NoInputs); - ImGui.image(Images.BACKGROUND, displaySize, new ImVec2(0, 0)); - ImGui.end(); + this.background.render(); ImGui.setNextWindowPos(new ImVec2(0.0f, 0.0f)); ImGui.setNextWindowSize(displaySize); ImGui.begin("##Main Window", null, ImGuiWindowFlags.NoDecoration | ImGuiWindowFlags.NoMove