瀏覽代碼

Character - Boat Animation Function, Character - Ship function, Menü - Score Screen (begonnen)

Hudriwudri 5 年之前
父節點
當前提交
cc61d37d45

+ 51 - 17
src/pathgame/gameplay/Player.java

@@ -2,12 +2,14 @@ package pathgame.gameplay;
 
 import java.util.Iterator;
 import java.util.LinkedList;
+import me.hammerle.snuviengine.api.KeyBinding;
 import pathgame.tilemap.Tile;
 import pathgame.tilemap.TileMap;
 import pathgame.tilemap.Tiles;
 
 public class Player
 {
+
     private static final float SPEED = 0.125f;
 
     private PlayerAbilities abilities = PlayerAbilities.NORMAL;
@@ -21,6 +23,7 @@ public class Player
     private float velY = 0;
     private boolean isMoving = false;
     private int currSpeedSlowdown = 1;
+    private boolean isSailing = false;
 
     private int energySupply;
     private int energyUsed = 0;
@@ -72,7 +75,7 @@ public class Player
 
         int currentTileX = Math.round(x);
         int currentTileY = Math.round(y);
-        
+
         //TODO: Bug beheben: Exception, wenn Spieler sofort an den unteren Levelrand geht (auch am rechten Levelrand)
         //ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 10
         //System.out.println(currentTileY);
@@ -82,13 +85,17 @@ public class Player
         currSpeedSlowdown = currentTile.getEnergyCost(abilities);
         lastX = x;
         lastY = y;
-        
+
         if(isOnTile())
         {
             velX = 0.0f;
             velY = 0.0f;
             if(isMoving)
             {
+                //if(currentTile == Tiles.FOREST) //TODO: check for port with onEnter() or if
+                {
+                    //isSailing = !isSailing;
+                }
                 currentTile.onEnter(this, map, currentTileX, currentTileY);
                 steps.addLast(new MinusStepsValues(currSpeedSlowdown));
                 energyUsed += currSpeedSlowdown;
@@ -98,27 +105,48 @@ public class Player
 
         if(Keys.LEFT_KEY.isDown() && !isMoving && x > 0 && !map.getTile(currentTileX - 1, currentTileY).isBlockingMovement())
         {
-            velX = -SPEED;
-            isMoving = true;
-            currentTile.onLeave(this, map, currentTileX, currentTileY);
+            if((!isSailing && map.getTile(currentTileX - 1, currentTileY) != Tiles.DEEP_WATER)
+                    || (isSailing && (map.getTile(currentTileX - 1, currentTileY) == Tiles.SHALLOW_WATER
+                    || map.getTile(currentTileX - 1, currentTileY) == Tiles.DEEP_WATER))) // TODO: or is port
+            {
+                velX = -SPEED;
+                isMoving = true;
+                currentTile.onLeave(this, map, currentTileX, currentTileY);
+            }
         }
         else if(Keys.RIGHT_KEY.isDown() && !isMoving && x < map.getWidth() - 1 && !map.getTile(currentTileX + 1, currentTileY).isBlockingMovement())
         {
-            velX = SPEED;
-            isMoving = true;
-            currentTile.onLeave(this, map, currentTileX, currentTileY);
+            if((!isSailing && map.getTile(currentTileX + 1, currentTileY) != Tiles.DEEP_WATER)
+                    || (isSailing && (map.getTile(currentTileX + 1, currentTileY) == Tiles.SHALLOW_WATER
+                    || map.getTile(currentTileX + 1, currentTileY) == Tiles.DEEP_WATER))) // TODO: or is port
+            {
+                velX = SPEED;
+                isMoving = true;
+                currentTile.onLeave(this, map, currentTileX, currentTileY);
+            }
         }
         else if(Keys.UP_KEY.isDown() && !isMoving && y > 0 && !map.getTile(currentTileX, currentTileY - 1).isBlockingMovement())
         {
-            velY = -SPEED;
-            isMoving = true;
-            currentTile.onLeave(this, map, currentTileX, currentTileY);
+            if((!isSailing && map.getTile(currentTileX, currentTileY - 1) != Tiles.DEEP_WATER)
+                    || (isSailing && (map.getTile(currentTileX, currentTileY - 1) == Tiles.SHALLOW_WATER
+                    || map.getTile(currentTileX, currentTileY - 1) == Tiles.DEEP_WATER))) // TODO: or is port
+                    
+            {
+                velY = -SPEED;
+                isMoving = true;
+                currentTile.onLeave(this, map, currentTileX, currentTileY);
+            }
         }
         else if(Keys.DOWN_KEY.isDown() && !isMoving && y < map.getHeight() - 1 && !map.getTile(currentTileX, currentTileY + 1).isBlockingMovement())
         {
-            velY = SPEED;
-            isMoving = true;
-            currentTile.onLeave(this, map, currentTileX, currentTileY);
+            if((!isSailing && map.getTile(currentTileX, currentTileY + 1) != Tiles.DEEP_WATER)
+                    || (isSailing && (map.getTile(currentTileX, currentTileY + 1) == Tiles.SHALLOW_WATER
+                    || map.getTile(currentTileX, currentTileY + 1) == Tiles.DEEP_WATER))) // TODO: or is port
+            {
+                velY = SPEED;
+                isMoving = true;
+                currentTile.onLeave(this, map, currentTileX, currentTileY);
+            }
         }
 
         float moveX = Math.abs(velX / currSpeedSlowdown);
@@ -197,7 +225,7 @@ public class Player
     {
         return objectivesAmount;
     }
-    
+
     public void setObjectivesAmount(int objectivesAmount)
     {
         this.objectivesAmount = objectivesAmount;
@@ -207,7 +235,7 @@ public class Player
     {
         return objectivesVisited;
     }
-    
+
     public void visitTown()
     {
         objectivesVisited++;
@@ -273,7 +301,13 @@ public class Player
     {
         return isMoving;
     }
-    
+
+    public boolean isSailing()
+    {
+        return false; //TODO: delete line
+        //return isSailing;
+    }
+
     public Tile getCurrTile()
     {
         return currentTile;

+ 10 - 1
src/pathgame/gameplay/menu/Menu.java

@@ -11,6 +11,7 @@ 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;
     
     static
     {
@@ -19,6 +20,7 @@ public class Menu
         ESCAPE_ID = id++;
         OPTION_ID = id++;
         CHARACTER_ID = id++;
+        SCORE_ID = id++;
     }
     
     private final BaseMenu[] menus = new BaseMenu[] 
@@ -26,7 +28,8 @@ public class Menu
         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 CharacterMenu(CHARACTER_ID, MAIN_ID),
+        new ScoreMenu(SCORE_ID, MAIN_ID)
     };
     
     private int currentIndex = 0;
@@ -47,6 +50,12 @@ public class Menu
             gamestate.setState(Gamestates.MENU);
             menus[currentIndex].resetIndex();
         }
+        else if(gamestate.getState() == Gamestates.GAMEPLAY && level.getPlayer().hasWon())
+        {
+            currentIndex = SCORE_ID;
+            gamestate.setState(Gamestates.MENU);
+            menus[currentIndex].resetIndex();
+        }
     }
     
     public MenuButton[] getOptions()

+ 41 - 0
src/pathgame/gameplay/menu/ScoreMenu.java

@@ -0,0 +1,41 @@
+package pathgame.gameplay.menu;
+
+import pathgame.gameplay.Gamestates;
+
+public class ScoreMenu extends BaseMenu
+{
+
+    private final MenuButton[] options;
+
+    public ScoreMenu(int id, int mainId)
+    {
+        super(id);
+
+        options = new MenuButton[]
+        {
+            new MenuButton("Next Level", (gamestate, level) ->
+            {
+                level.nextLevel();
+                level.getPlayer().setAbilities(level.getPlayer().getAbilities());
+                gamestate.setState(Gamestates.GAMEPLAY);
+            }),
+            new MenuButton("Retry", (gamestate, level) ->
+            {
+                level.reset();
+                level.getPlayer().setAbilities(level.getPlayer().getAbilities());
+                gamestate.setState(Gamestates.GAMEPLAY);
+            }),
+            new MenuButton("Main Menu", (gamestate) ->
+            {
+                setReturnId(mainId);
+            }),
+        };
+    }
+
+    @Override
+    public MenuButton[] getOptions()
+    {
+        return options;
+    }
+
+}

+ 1 - 1
src/pathgame/rendering/PlayerRenderer.java

@@ -66,7 +66,7 @@ public class PlayerRenderer
             yIndex = 0;
         }
         
-        if(p.getCurrTile()== Tiles.DEEP_WATER) //TODO: check for shallowwater with ship port
+        if(p.isSailing())
         {
             yTexOff = 0.5f;
         }