Hudriwudri 5 lat temu
rodzic
commit
6e294225db

+ 89 - 13
src/pathgame/gameplay/MainMenu.java

@@ -1,6 +1,8 @@
 package pathgame.gameplay;
 
 import me.hammerle.snuviengine.api.Engine;
+import me.hammerle.snuviengine.api.KeyHandler;
+import org.lwjgl.glfw.GLFW;
 import pathgame.rendering.MainMenuRenderer;
 
 public class MainMenu
@@ -11,32 +13,77 @@ public class MainMenu
         START, OPTIONS, EXIT
     }
 
+    public enum KeybindingButtons
+    {
+        UP, DOWN, LEFT, RIGHT, ESCAPE, CONFIRM, ZOOM_IN, ZOOM_OUT, BACK
+    }
+
     private MenuButtons activeButton = MenuButtons.START;
+    private KeybindingButtons activeKeybindingButton = KeybindingButtons.UP;
+    private boolean optionsIsActive = false;
 
     public void tick(Gamestate gamestate)
     {
 
         if(Keys.UP_KEY.isDown() && Keys.UP_KEY.getTime() == 1 || (Keys.UP_KEY.getTime() >= 20 && Keys.UP_KEY.getTime() % 5 == 1))
         {
-            
-            activeButton = getPrevButton(activeButton);
+            if(optionsIsActive)
+            {
+                activeKeybindingButton = getPrevButton(activeKeybindingButton);
+            }
+            else
+            {
+                activeButton = getPrevButton(activeButton);
+            }
+
             //System.out.println(activeButton);
         }
         else if(Keys.DOWN_KEY.isDown() && Keys.DOWN_KEY.getTime() == 1 || (Keys.DOWN_KEY.getTime() >= 20 && Keys.DOWN_KEY.getTime() % 5 == 1))
         {
-            activeButton = getNextButton(activeButton);
-            System.out.println(activeButton);
+            if(optionsIsActive)
+            {
+                activeKeybindingButton = getNextButton(activeKeybindingButton);
+            }
+            else
+            {
+
+                activeButton = getNextButton(activeButton);
+            }
         }
-        else if(Keys.CONFIRM_KEY.isDown()&& Keys.CONFIRM_KEY.getTime() == 1)
+        else if(Keys.CONFIRM_KEY.isDown() && Keys.CONFIRM_KEY.getTime() == 1)
         {
-            if(activeButton.equals(MenuButtons.EXIT))
+            if(optionsIsActive)
             {
-                Engine.stop();
+                if(activeKeybindingButton.equals(KeybindingButtons.UP))
+                {
+                    System.out.println("rebinding");
+
+                    //Todo: Key Rebinding
+                    //Keys.UP_KEY.isRebinding();
+                    //Keys.UP_KEY.getKey();
+                    //Keys.UP_KEY = KeyHandler.register(GLFW.GLFW_KEY_W);
+                }
+                else if(activeKeybindingButton.equals(KeybindingButtons.BACK))
+                {
+                    optionsIsActive = false;
+                }
             }
-            else if(activeButton.equals(MenuButtons.START))
+            else
             {
-                gamestate.setState(Gamestates.GAMEPLAY);
+                if(activeButton.equals(MenuButtons.EXIT))
+                {
+                    Engine.stop();
+                }
+                else if(activeButton.equals(MenuButtons.START))
+                {
+                    gamestate.setState(Gamestates.GAMEPLAY);
+                }
+                else if(activeButton.equals(MenuButtons.OPTIONS))
+                {
+                    optionsIsActive = true;
+                }
             }
+
         }
     }
 
@@ -50,21 +97,50 @@ public class MainMenu
         return activeButton.equals(button);
     }
 
-    protected MainMenu.MenuButtons getNextButton(MainMenu.MenuButtons e)
+    public boolean isActiveButton(KeybindingButtons button)
+    {
+        return activeKeybindingButton.equals(button);
+    }
+
+    public boolean isOptionsIsActive()
+    {
+        return optionsIsActive;
+    }
+
+    private MenuButtons getNextButton(MenuButtons e)
     {
         int index = e.ordinal();
         int nextIndex = index + 1;
-        MainMenu.MenuButtons[] btns = MainMenu.MenuButtons.values();
+        MenuButtons[] btns = MenuButtons.values();
+        nextIndex %= btns.length;
+        return btns[nextIndex];
+    }
+
+    private MenuButtons getPrevButton(MenuButtons e)
+    {
+        int index = e.ordinal();
+        MenuButtons[] btns = MenuButtons.values();
+        int nextIndex = index + btns.length - 1;
         nextIndex %= btns.length;
         return btns[nextIndex];
     }
 
-    protected MainMenu.MenuButtons getPrevButton(MainMenu.MenuButtons e)
+    private KeybindingButtons getPrevButton(KeybindingButtons e)
     {
         int index = e.ordinal();
-        MainMenu.MenuButtons[] btns = MainMenu.MenuButtons.values();
+        KeybindingButtons[] btns = KeybindingButtons.values();
         int nextIndex = index + btns.length - 1;
         nextIndex %= btns.length;
         return btns[nextIndex];
     }
+
+    private KeybindingButtons getNextButton(KeybindingButtons e)
+    {
+        int index = e.ordinal();
+        int nextIndex = index + 1;
+        KeybindingButtons[] btns = KeybindingButtons.values();
+        nextIndex %= btns.length;
+        return btns[nextIndex];
+    }
+
 }

+ 56 - 4
src/pathgame/rendering/MainMenuRenderer.java

@@ -13,10 +13,30 @@ public class MainMenuRenderer
         r.scale(2.0f, 2.0f);
         r.updateMatrix();
 
-        renderBackground(r);
-        renderButton("Start", r.getViewHeight() * 0.25f - 20 - r.getFontRenderer().getSize("Start").getHeight() * 0.5f, menu.isActiveButton(MainMenu.MenuButtons.START), r);
-        renderButton("Options", r.getViewHeight() * 0.25f - r.getFontRenderer().getSize("Options").getHeight() * 0.5f, menu.isActiveButton(MainMenu.MenuButtons.OPTIONS), r);
-        renderButton("Exit", r.getViewHeight() * 0.25f + 20 - r.getFontRenderer().getSize("Exit").getHeight() * 0.5f, menu.isActiveButton(MainMenu.MenuButtons.EXIT), r);
+        if(menu.isOptionsIsActive())
+        {
+            renderBigBackground(r);
+
+            renderOptionButton("Up Key", Keys.UP_KEY.getName(), r.getViewHeight() * 0.25f - 60 - r.getFontRenderer().getSize("Up Key").getHeight() * 0.5f, menu.isActiveButton(MainMenu.KeybindingButtons.UP), r);
+            renderOptionButton("Down Key", Keys.DOWN_KEY.getName(), r.getViewHeight() * 0.25f - 45 - r.getFontRenderer().getSize("Down Key").getHeight() * 0.5f, menu.isActiveButton(MainMenu.KeybindingButtons.DOWN), r);
+            renderOptionButton("Left Key", Keys.LEFT_KEY.getName(), r.getViewHeight() * 0.25f - 30 - r.getFontRenderer().getSize("Left Key").getHeight() * 0.5f, menu.isActiveButton(MainMenu.KeybindingButtons.LEFT), r);
+            renderOptionButton("Right Key", Keys.RIGHT_KEY.getName(), r.getViewHeight() * 0.25f - 15 - r.getFontRenderer().getSize("Right Key").getHeight() * 0.5f, menu.isActiveButton(MainMenu.KeybindingButtons.RIGHT), r);
+            renderOptionButton("Escape Key", Keys.ESCAPE_KEY.getName(), r.getViewHeight() * 0.25f + 0 - r.getFontRenderer().getSize("Escape Key").getHeight() * 0.5f, menu.isActiveButton(MainMenu.KeybindingButtons.ESCAPE), r);
+            renderOptionButton("Confirm Key", Keys.CONFIRM_KEY.getName(), r.getViewHeight() * 0.25f + 15 - r.getFontRenderer().getSize("Confirm Key").getHeight() * 0.5f, menu.isActiveButton(MainMenu.KeybindingButtons.CONFIRM), r);
+            renderOptionButton("Zoom In Key", Keys.ZOOM_IN_KEY.getName(), r.getViewHeight() * 0.25f + 30 - r.getFontRenderer().getSize("Zoom In Key").getHeight() * 0.5f, menu.isActiveButton(MainMenu.KeybindingButtons.ZOOM_IN), r);
+            renderOptionButton("Zoom Out Key", Keys.ZOOM_OUT_KEY.getName(), r.getViewHeight() * 0.25f + 45 - r.getFontRenderer().getSize("Zoom Out Key").getHeight() * 0.5f, menu.isActiveButton(MainMenu.KeybindingButtons.ZOOM_OUT), r);
+            renderButton("Back to Main Menu", r.getViewHeight() * 0.25f + 70 - r.getFontRenderer().getSize("Back to Main Menu").getHeight() * 0.5f, menu.isActiveButton(MainMenu.KeybindingButtons.BACK), r);
+
+        }
+        else
+        {
+            renderBackground(r);
+
+            renderButton("Start", r.getViewHeight() * 0.25f - 20 - r.getFontRenderer().getSize("Start").getHeight() * 0.5f, menu.isActiveButton(MainMenu.MenuButtons.START), r);
+            renderButton("Options", r.getViewHeight() * 0.25f - r.getFontRenderer().getSize("Options").getHeight() * 0.5f, menu.isActiveButton(MainMenu.MenuButtons.OPTIONS), r);
+            renderButton("Exit", r.getViewHeight() * 0.25f + 20 - r.getFontRenderer().getSize("Exit").getHeight() * 0.5f, menu.isActiveButton(MainMenu.MenuButtons.EXIT), r);
+
+        }
     }
 
     private void renderButton(String text, float y, boolean active, Renderer r)
@@ -36,6 +56,28 @@ public class MainMenuRenderer
         r.getFontRenderer().drawString(r.getViewWidth() * 0.25f - (r.getFontRenderer().getSize(s).getWidth() * 0.5f), y, s);
     }
 
+    private void renderOptionButton(String text, String binding, float y, boolean active, Renderer r)
+    {
+        r.setMixColorEnabled(false);
+        r.setColorEnabled(true);
+        r.setTextureEnabled(true);
+        String s = text;
+        String b = binding;
+        if(active)
+        {
+            s = "&f" + s;
+            b = "&f" + b;
+        }
+        else
+        {
+            s = "&7" + s;
+            b = "&7" + b;
+        }
+        //r.getFontRenderer().drawString(r.getViewWidth() * 0.25f - (r.getFontRenderer().getSize(s).getWidth() * 0.5f), y, s+" - "+binding);
+        r.getFontRenderer().drawString(50, y, s);
+        r.getFontRenderer().drawString(180 - (r.getFontRenderer().getSize(binding).getWidth() * 0.5f), y, b);
+    }
+
     private void renderBackground(Renderer r)
     {
         r.setMixColorEnabled(true);
@@ -45,4 +87,14 @@ public class MainMenuRenderer
 
         r.getColorRenderer().drawRectangle(r.getViewWidth() * 0.25f - 100, r.getViewHeight() * 0.25f - 50, r.getViewWidth() * 0.25f + 100, r.getViewHeight() * 0.25f + 50, 0x33_00_00_00);//ABGR
     }
+
+    private void renderBigBackground(Renderer r)
+    {
+        r.setMixColorEnabled(true);
+        r.setColorEnabled(true);
+        r.setTextureEnabled(false);
+        r.setBlendingEnabled(true);
+
+        r.getColorRenderer().drawRectangle(r.getViewWidth() * 0.25f - 100, r.getViewHeight() * 0.25f - 75, r.getViewWidth() * 0.25f + 100, r.getViewHeight() * 0.25f + 80, 0x33_00_00_00);//ABGR
+    }
 }