Hudriwudri 5 жил өмнө
parent
commit
98403a1f30

+ 27 - 7
src/pathgame/PathGame.java

@@ -2,21 +2,24 @@ package pathgame;
 
 import me.hammerle.snuviengine.api.IGame;
 import me.hammerle.snuviengine.api.Renderer;
+import pathgame.gameplay.EscMenu;
 import pathgame.gameplay.Gamestate;
 import pathgame.gameplay.Gamestates;
 import pathgame.gameplay.Keys;
-import pathgame.gameplay.Menu;
+import pathgame.gameplay.MainMenu;
 import pathgame.rendering.TileMapRenderer;
 import pathgame.tilemap.TileMap;
 import pathgame.tilemap.TileMapGenerator;
 import pathgame.gameplay.Player;
+import pathgame.rendering.EscMenuRenderer;
 import pathgame.rendering.HUDRenderer;
-import pathgame.rendering.MenuRenderer;
+import pathgame.rendering.MainMenuRenderer;
 import pathgame.rendering.PlayerRenderer;
 import pathgame.rendering.TileRenderer;
 
 public class PathGame implements IGame
 {
+
     private final Gamestate gamestate = new Gamestate();
 
     private final TileMapRenderer mapRenderer = new TileMapRenderer();
@@ -25,9 +28,12 @@ public class PathGame implements IGame
     private final PlayerRenderer playerRenderer = new PlayerRenderer();
     private final Player player = new Player(100, 10);
 
-    private final MenuRenderer menuRenderer = new MenuRenderer();
-    private final Menu menu = new Menu();
+    private final MainMenuRenderer menuRenderer = new MainMenuRenderer();
+    private final MainMenu menu = new MainMenu();
 
+    private final EscMenuRenderer escMenuRenderer = new EscMenuRenderer();
+    private final EscMenu escMenu = new EscMenu();
+    
     private final HUDRenderer hudRenderer = new HUDRenderer();
 
     private float lastScale = 1.0f;
@@ -40,20 +46,21 @@ public class PathGame implements IGame
     @Override
     public void tick()
     {
+        checkForGamestateChange();
         mapRenderer.tick();
         switch(gamestate.getState())
         {
             case ESCMENU:
+                escMenu.tick(gamestate);
                 break;
             case GAMEPLAY:
                 player.tick(map);
                 break;
             case MAINMENU:
-                 menu.tick(gamestate);
+                menu.tick(gamestate);
                 break;
 
         }
-        
 
         lastScale = scale;
         if(Keys.ZOOM_IN_KEY.isDown())
@@ -81,7 +88,8 @@ public class PathGame implements IGame
         switch(gamestate.getState())
         {
             case ESCMENU:
-                break;
+                escMenuRenderer.renderTick(r, lag, escMenu);
+                    break;
             case GAMEPLAY:
                 playerRenderer.renderTick(map, mapRenderer, r, player, lag, offX, offY);
                 hudRenderer.renderTick(r, player, lag);
@@ -131,4 +139,16 @@ public class PathGame implements IGame
     {
         //System.out.println("stopped game");
     }
+
+    private void checkForGamestateChange()
+    {
+        if(Keys.ESCAPE_KEY.isDown() && Keys.ESCAPE_KEY.getTime() == 1 && gamestate.isGamestate(Gamestates.GAMEPLAY))
+        {
+            gamestate.setState(Gamestates.ESCMENU);
+        }
+        else if(Keys.ESCAPE_KEY.isDown() && Keys.ESCAPE_KEY.getTime() == 1 && gamestate.isGamestate(Gamestates.ESCMENU))
+        {
+            gamestate.setState(Gamestates.GAMEPLAY);
+        }
+    }
 }

+ 72 - 0
src/pathgame/gameplay/EscMenu.java

@@ -0,0 +1,72 @@
+package pathgame.gameplay;
+
+import me.hammerle.snuviengine.api.Engine;
+
+public class EscMenu
+{
+
+    public enum EscMenuButtons
+    {
+        CONTINUE, MAINMENU, EXIT
+    }
+    private EscMenuButtons activeButton = EscMenuButtons.CONTINUE;
+
+    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);
+            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);
+        }
+        else if(Keys.CONFIRM_KEY.isDown() && Keys.CONFIRM_KEY.getTime() == 1)
+        {
+            if(activeButton.equals(EscMenuButtons.EXIT))
+            {
+                Engine.stop();
+            }
+            else if(activeButton.equals(EscMenuButtons.CONTINUE))
+            {
+                gamestate.setState(Gamestates.GAMEPLAY);
+            }
+            else if(activeButton.equals(EscMenuButtons.MAINMENU))
+            {
+                gamestate.setState(Gamestates.MAINMENU);
+            }
+        }
+    }
+
+    public EscMenuButtons getActiveButton()
+    {
+        return activeButton;
+    }
+
+    public boolean isActiveButton(EscMenuButtons button)
+    {
+        return activeButton.equals(button);
+    }
+
+    protected EscMenuButtons getNextButton(EscMenuButtons e)
+    {
+        int index = e.ordinal();
+        int nextIndex = index + 1;
+        EscMenuButtons[] btns = EscMenuButtons.values();
+        nextIndex %= btns.length;
+        return btns[nextIndex];
+    }
+
+    protected EscMenuButtons getPrevButton(EscMenuButtons e)
+    {
+        int index = e.ordinal();
+        EscMenuButtons[] btns = EscMenuButtons.values();
+        int nextIndex = index + btns.length - 1;
+        nextIndex %= btns.length;
+        return btns[nextIndex];
+    }
+}

+ 5 - 0
src/pathgame/gameplay/Gamestate.java

@@ -14,4 +14,9 @@ public class Gamestate
     {
         return state;
     }
+    
+    public boolean isGamestate(Gamestates gamestate)
+    {
+        return state == gamestate;
+    }
 }

+ 8 - 7
src/pathgame/gameplay/Menu.java → src/pathgame/gameplay/MainMenu.java

@@ -1,9 +1,9 @@
 package pathgame.gameplay;
 
 import me.hammerle.snuviengine.api.Engine;
-import pathgame.rendering.MenuRenderer;
+import pathgame.rendering.MainMenuRenderer;
 
-public class Menu
+public class MainMenu
 {
 
     public enum MenuButtons
@@ -18,6 +18,7 @@ public class Menu
 
         if(Keys.UP_KEY.isDown() && Keys.UP_KEY.getTime() == 1 || (Keys.UP_KEY.getTime() >= 20 && Keys.UP_KEY.getTime() % 5 == 1))
         {
+            
             activeButton = getPrevButton(activeButton);
             //System.out.println(activeButton);
         }
@@ -26,7 +27,7 @@ public class Menu
             activeButton = getNextButton(activeButton);
             System.out.println(activeButton);
         }
-        else if(Keys.CONFIRM_KEY.isDown())
+        else if(Keys.CONFIRM_KEY.isDown()&& Keys.CONFIRM_KEY.getTime() == 1)
         {
             if(activeButton.equals(MenuButtons.EXIT))
             {
@@ -49,19 +50,19 @@ public class Menu
         return activeButton.equals(button);
     }
 
-    private MenuButtons getNextButton(MenuButtons e)
+    protected MainMenu.MenuButtons getNextButton(MainMenu.MenuButtons e)
     {
         int index = e.ordinal();
         int nextIndex = index + 1;
-        MenuButtons[] btns = MenuButtons.values();
+        MainMenu.MenuButtons[] btns = MainMenu.MenuButtons.values();
         nextIndex %= btns.length;
         return btns[nextIndex];
     }
 
-    private MenuButtons getPrevButton(MenuButtons e)
+    protected MainMenu.MenuButtons getPrevButton(MainMenu.MenuButtons e)
     {
         int index = e.ordinal();
-        MenuButtons[] btns = MenuButtons.values();
+        MainMenu.MenuButtons[] btns = MainMenu.MenuButtons.values();
         int nextIndex = index + btns.length - 1;
         nextIndex %= btns.length;
         return btns[nextIndex];

+ 49 - 0
src/pathgame/rendering/EscMenuRenderer.java

@@ -0,0 +1,49 @@
+
+package pathgame.rendering;
+
+import me.hammerle.snuviengine.api.Renderer;
+import pathgame.gameplay.EscMenu;
+
+public class EscMenuRenderer
+{
+    public void renderTick(Renderer r, float lag, EscMenu escMenu)
+    {
+        r.translateTo(0.0f, 0.0f);
+        r.scale(2.0f, 2.0f);
+        r.updateMatrix();
+
+        renderBackground(r);
+        renderButton("Continue", r.getViewHeight() * 0.25f - 20 - r.getFontRenderer().getSize("Continue").getHeight() * 0.5f, escMenu.isActiveButton(EscMenu.EscMenuButtons.CONTINUE), r);
+        renderButton("Main Menu", r.getViewHeight() * 0.25f - r.getFontRenderer().getSize("Main Menu").getHeight() * 0.5f, escMenu.isActiveButton(EscMenu.EscMenuButtons.MAINMENU), r);
+        renderButton("Exit", r.getViewHeight() * 0.25f + 20 - r.getFontRenderer().getSize("Exit").getHeight() * 0.5f, escMenu.isActiveButton(EscMenu.EscMenuButtons.EXIT), r);
+    
+        
+    }
+    
+    private void renderButton(String text, float y, boolean active, Renderer r)
+    {
+        r.setMixColorEnabled(false);
+        r.setColorEnabled(true);
+        r.setTextureEnabled(true);
+        String s = text;
+        if(active)
+        {
+            s = "&f" + s;
+        }
+        else
+        {
+            s = "&7" + s;
+        }
+        r.getFontRenderer().drawString(r.getViewWidth() * 0.25f - (r.getFontRenderer().getSize(s).getWidth() * 0.5f), y, s);
+    }
+
+    private void renderBackground(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 - 50, r.getViewWidth() * 0.25f + 100, r.getViewHeight() * 0.25f + 50, 0x33_00_00_00);//ABGR
+    }
+}

+ 6 - 6
src/pathgame/rendering/MenuRenderer.java → src/pathgame/rendering/MainMenuRenderer.java

@@ -2,21 +2,21 @@ package pathgame.rendering;
 
 import me.hammerle.snuviengine.api.Renderer;
 import pathgame.gameplay.Keys;
-import pathgame.gameplay.Menu;
+import pathgame.gameplay.MainMenu;
 
-public class MenuRenderer
+public class MainMenuRenderer
 {
 
-    public void renderTick(Renderer r, float lag, Menu menu)
+    public void renderTick(Renderer r, float lag, MainMenu menu)
     {
         r.translateTo(0.0f, 0.0f);
         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(Menu.MenuButtons.START), r);
-        renderButton("Options", r.getViewHeight() * 0.25f - r.getFontRenderer().getSize("Options").getHeight() * 0.5f, menu.isActiveButton(Menu.MenuButtons.OPTIONS), r);
-        renderButton("Exit", r.getViewHeight() * 0.25f + 20 - r.getFontRenderer().getSize("Exit").getHeight() * 0.5f, menu.isActiveButton(Menu.MenuButtons.EXIT), 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)