瀏覽代碼

Merge branch 'master' of https://git.hammerle.me/kjhammerle/path-game

Leon Palluch 4 年之前
父節點
當前提交
5e362d1323

+ 26 - 1
src/pathgame/gameplay/Level.java

@@ -8,6 +8,8 @@ public final class Level
     private final Player player = new Player();
     private int level = 1;
     private TileMap map = null;
+    private boolean showScoreMenu = false;
+    private boolean showAfterScore = false;
 
     public Level()
     {
@@ -17,10 +19,19 @@ public final class Level
     public void tick(Gamestate gamestate)
     {
         map.tick();
-        if(gamestate.is(Gamestates.GAMEPLAY))
+        if(gamestate.is(Gamestates.GAMEPLAY) && !showScoreMenu)
         {
             player.tick(map);
         }
+        if(gamestate.is(Gamestates.GAMEPLAY) && !showScoreMenu && (player.hasLost() || player.hasWon()))
+        {
+            showScoreMenu = true;
+        }
+        else if(showScoreMenu && Keys.CONFIRM_KEY.getTime() == 1)
+        {
+            showScoreMenu = false;
+            showAfterScore = true;
+        }
     }
 
     public void nextLevel()
@@ -51,4 +62,18 @@ public final class Level
     {
         return level;
     }
+    
+    public boolean getShowAfterScore()
+    {
+        return showAfterScore;
+    }
+    
+    public void setShowAfterScore(boolean show)
+    {
+        showAfterScore = show;
+    }
+    public boolean getShowScoreMenu()
+    {
+        return showScoreMenu; 
+    }
 }

+ 6 - 3
src/pathgame/gameplay/menu/ScoreMenu.java → src/pathgame/gameplay/menu/AfterScoreMenu.java

@@ -2,12 +2,12 @@ package pathgame.gameplay.menu;
 
 import pathgame.gameplay.Gamestates;
 
-public class ScoreMenu extends BaseMenu
+public class AfterScoreMenu extends BaseMenu
 {
 
     private final MenuButton[] options;
 
-    public ScoreMenu(int id, int mainId)
+    public AfterScoreMenu(int id, int mainId)
     {
         super(id);
 
@@ -18,15 +18,18 @@ public class ScoreMenu extends BaseMenu
                 level.nextLevel();
                 level.getPlayer().setAbilities(level.getPlayer().getAbilities());
                 gamestate.setState(Gamestates.GAMEPLAY);
+                level.setShowAfterScore(false);
             }),
             new MenuButton("Retry", (gamestate, level) ->
             {
                 level.reset();
                 level.getPlayer().setAbilities(level.getPlayer().getAbilities());
                 gamestate.setState(Gamestates.GAMEPLAY);
+                level.setShowAfterScore(false);
             }),
-            new MenuButton("Main Menu", (gamestate) ->
+            new MenuButton("Main Menu", (gamestate, level) ->
             {
+                level.setShowAfterScore(false);
                 setReturnId(mainId);
             }),
         };

+ 23 - 18
src/pathgame/gameplay/menu/Menu.java

@@ -11,8 +11,8 @@ public class Menu
     private final static int ESCAPE_ID;
     private final static int OPTION_ID;
     private final static int CHARACTER_ID;
-    private final static int SCORE_ID;
-    
+    private final static int AFTER_SCORE_ID;
+
     static
     {
         int id = 0;
@@ -20,20 +20,20 @@ public class Menu
         ESCAPE_ID = id++;
         OPTION_ID = id++;
         CHARACTER_ID = id++;
-        SCORE_ID = id++;
+        AFTER_SCORE_ID = id++;
     }
-    
-    private final BaseMenu[] menus = new BaseMenu[] 
-    { 
-        new MainMenu(MAIN_ID, OPTION_ID, CHARACTER_ID), 
-        new EscMenu(ESCAPE_ID, MAIN_ID), 
-        new OptionMenu(OPTION_ID, MAIN_ID), 
+
+    private final BaseMenu[] menus = new BaseMenu[]
+    {
+        new MainMenu(MAIN_ID, OPTION_ID, CHARACTER_ID),
+        new EscMenu(ESCAPE_ID, MAIN_ID),
+        new OptionMenu(OPTION_ID, MAIN_ID),
         new CharacterMenu(CHARACTER_ID, MAIN_ID),
-        new ScoreMenu(SCORE_ID, MAIN_ID)
+        new AfterScoreMenu(AFTER_SCORE_ID, MAIN_ID)
     };
-    
+
     private int currentIndex = 0;
-    
+
     public void tick(Gamestate gamestate, Level level)
     {
         if(gamestate.getState() == Gamestates.MENU)
@@ -43,6 +43,11 @@ public class Menu
             {
                 gamestate.setState(Gamestates.GAMEPLAY);
             }
+            else if((currentIndex == OPTION_ID || currentIndex == CHARACTER_ID)
+                    && Keys.ESCAPE_KEY.getTime() == 1)
+            {
+                currentIndex = MAIN_ID;
+            }
         }
         else if(gamestate.getState() == Gamestates.GAMEPLAY && Keys.ESCAPE_KEY.getTime() == 1)
         {
@@ -50,29 +55,29 @@ public class Menu
             gamestate.setState(Gamestates.MENU);
             menus[currentIndex].resetIndex();
         }
-        else if(gamestate.getState() == Gamestates.GAMEPLAY && level.getPlayer().hasWon())
+        else if(level.getShowAfterScore())
         {
-            currentIndex = SCORE_ID;
+            currentIndex = AFTER_SCORE_ID;
             gamestate.setState(Gamestates.MENU);
             menus[currentIndex].resetIndex();
         }
     }
-    
+
     public MenuButton[] getOptions()
     {
         return menus[currentIndex].getOptions();
     }
-    
+
     public int getActiveIndex()
     {
         return menus[currentIndex].getActiveIndex();
     }
-    
+
     public boolean isOptionMenu()
     {
         return menus[currentIndex].isOptionMenu();
     }
-    
+
     public void showEscapeMenu()
     {
         currentIndex = ESCAPE_ID;

+ 4 - 7
src/pathgame/rendering/HUDRenderer.java

@@ -10,7 +10,6 @@ public class HUDRenderer
 {
     public static final float OFFSET_Y = 40;
     private static final Texture ENERGYBAR = new Texture("resources/energyBars.png");
-    private static final Texture ENERGYBARGREY = new Texture("resources/energyBarGrey.png");
 
     public void renderTick(Renderer r, Player p, float lag)//TileMap map, TileMapRenderer map, float lag, float offX, float offY)
     {
@@ -23,7 +22,6 @@ public class HUDRenderer
         renderEnergyBar(r, p);
         renderEnergyText(r, p);
         renderMinusEnergy(r, p, lag);
-        
     }
 
     void renderHUDBackgound(Renderer r)
@@ -42,9 +40,7 @@ public class HUDRenderer
         r.setColorEnabled(true);
         r.setTextureEnabled(true);
 
-        //render ObjectiveTracker
         String objectiveTracker = String.valueOf(p.getObjectivesVisited()) + "/" + String.valueOf(p.getObjectivesAmount()) + " Towns";
-
         r.getFontRenderer().drawString(2, 6, objectiveTracker);
     }
 
@@ -70,11 +66,12 @@ public class HUDRenderer
         r.setBlendingEnabled(true);
 
         float energyPercent = 100 / (float) p.getEnergySupply() * (float) p.getEnergyLeft() / 100;
+        if(energyPercent<0)
+        {
+            energyPercent = 0;
+        }
         ENERGYBAR.bind();        
-        //ENERGYBARGREY.bind();
         r.getTextureRenderer().drawRectangle(100, 5, (r.getViewWidth() / 2 - 5), 17, 0, 0.0625f, 1, 0.0625f*2);
-
-        //ENERGYBAR.bind();
         r.getTextureRenderer().drawRectangle(100, 5, (((r.getViewWidth() / 2 - 5) - 100) * (energyPercent)) + 100, 17, 0, 0, 1 * energyPercent, 0.0625f);
 
     }

+ 11 - 3
src/pathgame/rendering/LevelRenderer.java

@@ -10,11 +10,11 @@ import pathgame.tilemap.TileMap;
 
 public class LevelRenderer
 {
-
     private final PlayerRenderer playerRenderer = new PlayerRenderer();
     private final TileMapRenderer mapRenderer = new TileMapRenderer();
     private final HUDRenderer hudRenderer = new HUDRenderer();
     private final Camera cam = new Camera();
+    private final ScoreMenuRenderer scoreRenderer = new ScoreMenuRenderer();
 
     public void tick(Level level, Gamestate gamestate)
     {
@@ -47,8 +47,16 @@ public class LevelRenderer
         if(gamestate.is(Gamestates.GAMEPLAY))
         {
             playerRenderer.renderTick(map, mapRenderer, r, player, lag, offX, offY);
-            hudRenderer.renderTick(r, player, lag);
+            if(!level.getShowScoreMenu())
+            {
+                hudRenderer.renderTick(r, player, lag);
+            }
+            else if(level.getShowScoreMenu())
+            {
+                scoreRenderer.renderTick(r, lag, level);
+            }
         }
+
     }
 
     private float getMapOffsetX(TileMap map, Player player, Renderer r, float lag, float interScale)
@@ -85,4 +93,4 @@ public class LevelRenderer
         }
         return cam.getCamOffsetY(offY, minOffY, lag, interScale);
     }
-}
+}

+ 87 - 0
src/pathgame/rendering/ScoreMenuRenderer.java

@@ -0,0 +1,87 @@
+package pathgame.rendering;
+
+import me.hammerle.snuviengine.api.Renderer;
+import pathgame.gameplay.Level;
+
+public class ScoreMenuRenderer
+{
+    public void renderTick(Renderer r, float lag, Level level)
+    {
+        float windowWidth = r.getViewWidth();
+        float windowHeight = r.getViewHeight();
+        float paddingX = 30;
+        float paddingY = 50;
+        r.setMixColorEnabled(false);
+        r.setColorEnabled(true);
+        r.setTextureEnabled(false);
+        r.setBlendingEnabled(true);
+        r.getColorRenderer().drawRectangle(paddingX, paddingY, windowWidth - paddingX, windowHeight - paddingY, 0x90000000);
+
+        r.setTextureEnabled(true);
+        r.translateTo(0.0f, 0.0f);
+        float scale = scale(r, 1);
+
+        String message;
+
+        message = "&2" + String.valueOf(level.getPlayer().getEnergyUsed()) + "&f of &2"
+                + String.valueOf(level.getPlayer().getEnergySupply()) + "&f Energy used";
+        r.getFontRenderer().drawString((windowWidth * scale - getWidth(r, message)) / 2, (windowHeight * scale - getHeight(r, message)) / 2 - windowHeight * scale * 0.5f * 0.15f, message);
+
+        System.out.println((float) level.getPlayer().getEnergyUsed() / level.getPlayer().getEnergySupply());
+        if((float) level.getPlayer().getEnergyUsed() / level.getPlayer().getEnergySupply() < 0.5f)
+        {
+            message = "You were better than the algorithm!";
+        }
+        else if((float) level.getPlayer().getEnergyUsed() / level.getPlayer().getEnergySupply() < 0.6f)
+        {
+            message = "Only 20% more energy use than the algorithm!";
+        }
+        else if((float) level.getPlayer().getEnergyUsed() / level.getPlayer().getEnergySupply() < 0.75f)
+        {
+            message = "Only 50% more energy use than the algorithm!";
+        }
+        else if((float) level.getPlayer().getEnergyUsed() / level.getPlayer().getEnergySupply() < 1)
+        {
+            message = "Only twice the energy use of the algorithm!";
+        }
+        else if((float) level.getPlayer().getEnergyUsed() / level.getPlayer().getEnergySupply() > 1)
+        {
+            message = "More than twice the energy use of the algorithm!";
+        }
+
+        r.getFontRenderer().drawString((windowWidth * scale - getWidth(r, message)) / 2, (windowHeight * scale - getHeight(r, message)) / 2 - windowHeight * scale * 0.5f * (-0.15f), message);
+
+        scale = scale(r, 2);
+        if((float) level.getPlayer().getEnergyUsed() / level.getPlayer().getEnergySupply() < 1)
+        {
+
+            message = "Congratulations!";
+        }
+        else
+        {
+            message = "What a pity! Out of energy!";
+        }
+        r.getFontRenderer().drawString((windowWidth * scale - getWidth(r, message)) / 2, (windowHeight * scale - getHeight(r, message)) / 2, message);
+
+        message = "OK!";
+        r.getFontRenderer().drawString((windowWidth * scale - getWidth(r, message)) / 2, (windowHeight * scale - paddingY * scale - getHeight(r, message)) - 10, message);
+
+    }
+
+    private float getWidth(Renderer r, String s)
+    {
+        return r.getFontRenderer().getSize(s).getWidth();
+    }
+
+    private float getHeight(Renderer r, String s)
+    {
+        return r.getFontRenderer().getSize(s).getHeight();
+    }
+
+    private float scale(Renderer r, int scale)
+    {
+        r.scale(scale, scale);
+        r.updateMatrix();
+        return 1.0f / scale;
+    }
+}