Browse Source

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

Kajetan Johannes Hammerle 5 years ago
parent
commit
ab4d8069ff

BIN
lib/SnuviEngine.jar


BIN
resources/character.png


BIN
resources/config.bin


BIN
resources/config.txt


BIN
resources/energyBars.png


+ 6 - 1
src/pathgame/PathGame.java

@@ -40,7 +40,7 @@ public class PathGame implements IGame
     @Override
     public void tick()
     {
-        cam.tick(level);
+        cam.tick(level, gamestate);
 
         level.getMap().tick();
         mapRenderer.tick();
@@ -64,6 +64,11 @@ public class PathGame implements IGame
     @Override
     public void renderTick(Renderer r, float lag)
     {
+        if(gamestate.is(Gamestates.MENU))
+        {
+            lag = 0.0f;
+        }
+        
         TileMap map = level.getMap();
         Player player = level.getPlayer();
 

+ 2 - 2
src/pathgame/gameplay/Camera.java

@@ -13,7 +13,7 @@ public class Camera
     private float camOffsetX = 0.0f;
     private float camOffsetY = 0.0f;
 
-    public void tick(Level level)
+    public void tick(Level level, Gamestate gamestate)
     {
         lastCamOffsetX = camOffsetX;
         lastCamOffsetY = camOffsetY;
@@ -28,7 +28,7 @@ public class Camera
             scale /= 1.1f;
         }
 
-        if(!level.getPlayer().isMoving())
+        if(!level.getPlayer().isMoving() && gamestate.is(Gamestates.GAMEPLAY))
         {
             if(Keys.CAM_UP_KEY.isDown())
             {

+ 1 - 1
src/pathgame/gameplay/Gamestate.java

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

+ 25 - 41
src/pathgame/gameplay/Keys.java

@@ -1,9 +1,8 @@
 package pathgame.gameplay;
 
-import java.io.BufferedReader;
+import java.io.DataInputStream;
 import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
+import java.io.FileInputStream;
 import java.io.IOException;
 import me.hammerle.snuviengine.api.KeyBinding;
 import me.hammerle.snuviengine.api.KeyHandler;
@@ -12,64 +11,49 @@ import org.lwjgl.glfw.GLFW;
 public class Keys
 {
 
-    public static final KeyBinding UP_KEY;// = KeyHandler.register(GLFW.GLFW_KEY_W);
-    public static final KeyBinding DOWN_KEY;// = KeyHandler.register(GLFW.GLFW_KEY_S);
-    public static final KeyBinding LEFT_KEY;// = KeyHandler.register(GLFW.GLFW_KEY_A);
-    public static final KeyBinding RIGHT_KEY;// = KeyHandler.register(GLFW.GLFW_KEY_D);
-    public static final KeyBinding ZOOM_IN_KEY;// = KeyHandler.register(GLFW.GLFW_KEY_I);
-    public static final KeyBinding ZOOM_OUT_KEY;// = KeyHandler.register(GLFW.GLFW_KEY_O);
-    public static final KeyBinding CONFIRM_KEY;// = KeyHandler.register(GLFW.GLFW_KEY_ENTER);
-    public static final KeyBinding ESCAPE_KEY;// = KeyHandler.register(GLFW.GLFW_KEY_ESCAPE);
+    public static final KeyBinding UP_KEY = KeyHandler.register(GLFW.GLFW_KEY_W);
+    public static final KeyBinding DOWN_KEY = KeyHandler.register(GLFW.GLFW_KEY_S);
+    public static final KeyBinding LEFT_KEY = KeyHandler.register(GLFW.GLFW_KEY_A);
+    public static final KeyBinding RIGHT_KEY = KeyHandler.register(GLFW.GLFW_KEY_D);
+    public static final KeyBinding ZOOM_IN_KEY = KeyHandler.register(GLFW.GLFW_KEY_I);
+    public static final KeyBinding ZOOM_OUT_KEY = KeyHandler.register(GLFW.GLFW_KEY_O);
+    public static final KeyBinding CONFIRM_KEY = KeyHandler.register(GLFW.GLFW_KEY_ENTER);
+    public static final KeyBinding ESCAPE_KEY = KeyHandler.register(GLFW.GLFW_KEY_ESCAPE);
     public static final KeyBinding CAM_UP_KEY = KeyHandler.register(GLFW.GLFW_KEY_UP);
     public static final KeyBinding CAM_DOWN_KEY = KeyHandler.register(GLFW.GLFW_KEY_DOWN);
     public static final KeyBinding CAM_LEFT_KEY = KeyHandler.register(GLFW.GLFW_KEY_LEFT);
     public static final KeyBinding CAM_RIGHT_KEY = KeyHandler.register(GLFW.GLFW_KEY_RIGHT);
     public static final KeyBinding TEST_KEY = KeyHandler.register(GLFW.GLFW_KEY_T);
 
-    public static final KeyBinding[] KEYS;
+    public static final KeyBinding[] KEYS = new KeyBinding[]
+    {
+        UP_KEY, DOWN_KEY, LEFT_KEY, RIGHT_KEY, ZOOM_IN_KEY, ZOOM_OUT_KEY, 
+        CONFIRM_KEY, ESCAPE_KEY, CAM_UP_KEY, CAM_DOWN_KEY, CAM_LEFT_KEY, 
+        CAM_RIGHT_KEY
+    };
+
     public static final String[] KEYNAMES =
     {
-        "Up Key", "Down Key", "Left Key", "Right Key", "Zoom In Key", "Zoom Out Key", "Confirm Key", "Escape Key", //"Cam Up Key", "Cam Down Key", "Cam Left Key", "Cam Right Key"
+        "Up Key", "Down Key", "Left Key", "Right Key", "Zoom In Key",
+        "Zoom Out Key", "Confirm Key", "Escape Key", "Cam Up Key", 
+        "Cam Down Key", "Cam Left Key", "Cam Right Key"
     };
 
     static
     {
-        String line[] = new String[KEYNAMES.length];
-        File f = new File("resources/config.txt");
-        System.out.println(f.getName());
+        File f = new File("resources/config.bin");
         if(f.exists())
         {
-            FileReader reader = null;
-            try
+            try(DataInputStream reader = new DataInputStream(new FileInputStream(f)))
             {
-                reader = new FileReader(f);
-                BufferedReader bReader = new BufferedReader(reader);
-                for(int i = 0; i < KEYNAMES.length; ++i)
+                for(int i = 0; i < KEYS.length; ++i)
                 {
-                    try
-                    {
-                        line[i] = bReader.readLine();
-                    }
-                    catch(IOException ex)
-                    {
-                    }
+                    KeyHandler.rebind(KEYS[i], reader.readInt());
                 }
             }
-            catch(FileNotFoundException ex)
+            catch(IOException ex)
             {
             }
         }
-        UP_KEY = KeyHandler.register(Integer.parseInt(line[0].substring(line[0].indexOf(":") + 2, line[0].length())));
-        DOWN_KEY = KeyHandler.register(Integer.parseInt(line[1].substring(line[1].indexOf(":") + 2, line[1].length())));
-        LEFT_KEY = KeyHandler.register(Integer.parseInt(line[2].substring(line[2].indexOf(":") + 2, line[2].length())));
-        RIGHT_KEY = KeyHandler.register(Integer.parseInt(line[3].substring(line[3].indexOf(":") + 2, line[3].length())));
-        ZOOM_IN_KEY = KeyHandler.register(Integer.parseInt(line[4].substring(line[4].indexOf(":") + 2, line[4].length())));
-        ZOOM_OUT_KEY = KeyHandler.register(Integer.parseInt(line[5].substring(line[5].indexOf(":") + 2, line[5].length())));
-        CONFIRM_KEY = KeyHandler.register(Integer.parseInt(line[6].substring(line[6].indexOf(":") + 2, line[6].length())));
-        ESCAPE_KEY = KeyHandler.register(Integer.parseInt(line[7].substring(line[7].indexOf(":") + 2, line[7].length())));
-        KEYS = new KeyBinding[]
-        {
-            UP_KEY, DOWN_KEY, LEFT_KEY, RIGHT_KEY, ZOOM_IN_KEY, ZOOM_OUT_KEY, CONFIRM_KEY, ESCAPE_KEY, //CAM_UP_KEY, CAM_DOWN_KEY, CAM_LEFT_KEY, CAM_RIGHT_KEY
-        };
     }
 }

+ 15 - 3
src/pathgame/gameplay/Player.java

@@ -4,6 +4,7 @@ import java.util.Iterator;
 import java.util.LinkedList;
 import pathgame.tilemap.Tile;
 import pathgame.tilemap.TileMap;
+import pathgame.tilemap.Tiles;
 
 public class Player
 {
@@ -26,6 +27,7 @@ public class Player
     private int objectivesAmount;
     private int objectivesVisited = 0;
     private final LinkedList<MinusStepsValues> steps = new LinkedList<>();
+    private Tile currentTile;// = Tiles.GRASS;
 
     public Player()
     {
@@ -70,12 +72,17 @@ public class Player
 
         int currentTileX = Math.round(x);
         int currentTileY = Math.round(y);
-        Tile currentTile = map.getTile(currentTileX, currentTileY);
-
+        
+        //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);
+        //currentTile = Tiles.GRASS;
+        currentTile = map.getTile(currentTileX, currentTileY);
+        //System.out.println(currentTile);
         currSpeedSlowdown = currentTile.getEnergyCost(abilities);
         lastX = x;
         lastY = y;
-
+        
         if(isOnTile())
         {
             velX = 0.0f;
@@ -266,4 +273,9 @@ public class Player
     {
         return isMoving;
     }
+    
+    public Tile getCurrTile()
+    {
+        return currentTile;
+    }
 }

+ 8 - 15
src/pathgame/gameplay/menu/BaseMenu.java

@@ -1,5 +1,6 @@
 package pathgame.gameplay.menu;
 
+import me.hammerle.snuviengine.api.KeyBinding;
 import pathgame.gameplay.Gamestate;
 import pathgame.gameplay.Keys;
 import pathgame.gameplay.Level;
@@ -29,16 +30,16 @@ public abstract class BaseMenu
     public int tick(Gamestate gamestate, Level level)
     {
         returnId = id;
-        if(isUpPressed())
+        if(isKeyPressed(Keys.UP_KEY) || isKeyPressed(Keys.CAM_UP_KEY))
         {
             int length = getOptions().length;
             index = ((index - 1) + length) % length;
         }
-        else if(isDownPressed())
+        else if(isKeyPressed(Keys.DOWN_KEY) || isKeyPressed(Keys.CAM_DOWN_KEY))
         {
             index = (index + 1) % getOptions().length;
         }
-        else if(isEnterPressed())
+        else if(isKeyPressed(Keys.CONFIRM_KEY))
         {
             getOptions()[index].run(gamestate, level);
         }
@@ -54,23 +55,15 @@ public abstract class BaseMenu
         returnId = id;
     }
             
-    private boolean isUpPressed()
+    public void resetIndex()
     {
-        return Keys.UP_KEY.isDown() && Keys.UP_KEY.getTime() == 1 || (Keys.UP_KEY.getTime() >= 20 && Keys.UP_KEY.getTime() % 5 == 1);
+        index = 0;
     }
     
-    private boolean isDownPressed()
+    private boolean isKeyPressed(KeyBinding key)
     {
-        return Keys.DOWN_KEY.isDown() && Keys.DOWN_KEY.getTime() == 1 || (Keys.DOWN_KEY.getTime() >= 20 && Keys.DOWN_KEY.getTime() % 5 == 1);
+        return key.getTime() == 1 || (key.getTime() >= 20 && key.getTime() % 5 == 1);
     }
     
-    private boolean isEnterPressed()
-    {
-        return Keys.CONFIRM_KEY.isDown() && Keys.CONFIRM_KEY.getTime() == 1;
-    }
     
-    public void resetIndex()
-    {
-        index = 0;
-    }
 }

+ 5 - 18
src/pathgame/gameplay/menu/OptionMenu.java

@@ -1,7 +1,8 @@
 package pathgame.gameplay.menu;
 
 import java.io.File;
-import java.io.FileWriter;
+import java.io.FileOutputStream;
+import java.io.DataOutputStream;
 import java.io.IOException;
 import me.hammerle.snuviengine.api.KeyBinding;
 import me.hammerle.snuviengine.api.KeyHandler;
@@ -23,27 +24,13 @@ public class OptionMenu extends BaseMenu
         }
         options[menuLength] = new MenuButton("Back to Main Menu", (gamestate) ->
         {
-            File f = new File("resources/config.txt");
-            if(!f.exists())
+            File f = new File("resources/config.bin");
+            try(DataOutputStream writer = new DataOutputStream(new FileOutputStream(f)))
             {
-                try
-                {
-                    f.createNewFile();
-                }
-                catch(IOException ex)
-                {
-                }
-            }
-            FileWriter writer = null;
-            try
-            {
-                writer = new FileWriter(f);
-                int x = 0;
                 for(int i = 0; i < Keys.KEYS.length; ++i)
                 {
-                    writer.append(Keys.KEYNAMES[i] + ": " + String.valueOf(Keys.KEYS[i].getKey()) + "\n");
+                    writer.writeInt(Keys.KEYS[i].getKey());
                 }
-                writer.close();
             }
             catch(IOException ex)
             {

+ 9 - 8
src/pathgame/rendering/HUDRenderer.java

@@ -9,7 +9,7 @@ import pathgame.gameplay.Player;
 public class HUDRenderer
 {
     public static final float OFFSET_Y = 40;
-    private static final Texture ENERGYBAR = new Texture("resources/energyBar.png");
+    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)
@@ -45,7 +45,7 @@ public class HUDRenderer
         //render ObjectiveTracker
         String objectiveTracker = String.valueOf(p.getObjectivesVisited()) + "/" + String.valueOf(p.getObjectivesAmount()) + " Towns";
 
-        r.getFontRenderer().drawString(2, 1, objectiveTracker);
+        r.getFontRenderer().drawString(2, 6, objectiveTracker);
     }
 
     void renderEnergyText(Renderer r, Player p)
@@ -59,7 +59,7 @@ public class HUDRenderer
         r.getFontRenderer().drawString(
                 r.getViewWidth() * 0.5f
                 - r.getFontRenderer().getSize(energy).getWidth() - 15,
-                1, energy);
+                6, energy);
     }
 
     void renderEnergyBar(Renderer r, Player p)
@@ -70,11 +70,12 @@ public class HUDRenderer
         r.setBlendingEnabled(true);
 
         float energyPercent = 100 / (float) p.getEnergySupply() * (float) p.getEnergyLeft() / 100;
-        ENERGYBARGREY.bind();
-        r.getTextureRenderer().drawRectangle(100, 0, (r.getViewWidth() / 2 - 5), 10, 0, 0, 1, 1);
+        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, 0, (((r.getViewWidth() / 2 - 5) - 100) * (energyPercent)) + 100, 10, 0, 0, 1 * energyPercent, 1);
+        //ENERGYBAR.bind();
+        r.getTextureRenderer().drawRectangle(100, 5, (((r.getViewWidth() / 2 - 5) - 100) * (energyPercent)) + 100, 17, 0, 0, 1 * energyPercent, 0.0625f);
 
     }
 
@@ -88,7 +89,7 @@ public class HUDRenderer
         for(MinusStepsValues step : steps)
         {
             String minusEnergy = String.format("&4-%d", step.getValue());
-            r.getFontRenderer().drawString(r.getViewWidth() * 0.5f - 63, 3 + step.getLifeTime() + lag, minusEnergy);
+            r.getFontRenderer().drawString(r.getViewWidth() * 0.5f - 63, 9 + step.getLifeTime() + lag, minusEnergy);
         }
     }
 }

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

@@ -4,6 +4,7 @@ import me.hammerle.snuviengine.api.Renderer;
 import me.hammerle.snuviengine.api.Texture;
 import pathgame.gameplay.Player;
 import pathgame.tilemap.TileMap;
+import pathgame.tilemap.Tiles;
 
 public class PlayerRenderer
 {
@@ -31,6 +32,8 @@ public class PlayerRenderer
         baseY = baseY - (int) baseY;
 
         int tIndex = 0;
+        float xTexOff = 0;
+        float yTexOff = 0;
 
         CHARACTER.bind();
         if(p.getVelX() > 0)
@@ -63,12 +66,22 @@ public class PlayerRenderer
             yIndex = 0;
         }
         
+        if(p.getCurrTile()== Tiles.DEEP_WATER) //TODO: check for shallowwater with ship port
+        {
+            yTexOff = 0.5f;
+        }
+        else if(p.getCurrTile()== Tiles.SHALLOW_WATER)
+        {
+            xTexOff = 0.5f;
+        }
+        
         float viewScale = r.getViewScale();
         ix = (int) (ix * viewScale) / viewScale;
         iy = (int) (iy * viewScale) / viewScale;
         
         r.getTextureRenderer().drawRectangle(ix, iy, ix + playerSize, iy + playerSize,
-                tIndex * 0.25f, yIndex * 0.25f, (tIndex + 1) * 0.25f, yIndex * 0.25f + 0.25f);
+                tIndex * 0.125f + xTexOff, yIndex * 0.125f + yTexOff,
+                (tIndex + 1) * 0.125f + xTexOff, yIndex * 0.125f + 0.125f + yTexOff);
     }
 
     private int checkForAnimationIndex(float base)