瀏覽代碼

character - animation

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

二進制
res/character/characterBack.png


二進制
res/character/characterFront.png


二進制
res/character/characterLeft.png


二進制
res/character/characterRight.png


二進制
res/character/characterWalkRight.png


二進制
resources/character.png


+ 10 - 0
src/pathgame/gameplay/Player.java

@@ -199,4 +199,14 @@ public class Player
     {
         return steps;
     }
+    
+    public void setAbilities(PlayerAbilities playerAbilities)
+    {
+        abilities = playerAbilities;
+    }
+    
+    public PlayerAbilities getAbilities()
+    {
+        return abilities;
+    }
 }

+ 34 - 39
src/pathgame/rendering/PlayerRenderer.java

@@ -7,11 +7,7 @@ import pathgame.tilemap.TileMap;
 
 public class PlayerRenderer
 {
-
-    private static final Texture CHARACTER = new Texture("res/character/characterFront.png");
-    private static final Texture CHARACTERLEFT = new Texture("res/character/characterLeft.png");
-    private static final Texture CHARACTERRIGHT = new Texture("res/character/characterRight.png");
-    private static final Texture CHARACTERBACK = new Texture("res/character/characterBack.png");
+    private static final Texture CHARACTER = new Texture("resources/character.png");
 
     public void renderTick(TileMap map, TileMapRenderer mapR, Renderer r, Player p, float lag, float offX, float offY)
     {
@@ -25,55 +21,54 @@ public class PlayerRenderer
         r.updateMatrix();
 
         //TODO: insert animations
+        float yIndex;
+        float baseX = (p.getLastX() + (p.getX() - p.getLastX()) * lag);
+        float ix = baseX * mapR.getScale() * TileRenderer.TILE_SIZE + offX;
+
+        float baseY = (p.getLastY() + (p.getY() - p.getLastY()) * lag);
+        float iy = baseY * mapR.getScale() * TileRenderer.TILE_SIZE + offY;
+
+        baseX = baseX - (int) baseX;
+        baseY = baseY - (int) baseY;
+
+        int tIndex = 0;
+
+        CHARACTER.bind();
         if(p.getVelX() > 0)
         {
-            CHARACTERRIGHT.bind();
+            //go right
+            yIndex = 2;
+            tIndex = checkForAnimationIndex(baseX, 2);
         }
         else if(p.getVelX() < 0)
         {
-            CHARACTERLEFT.bind();
+            //go left
+            yIndex = 1;
+            tIndex = checkForAnimationIndex(baseX, 2);
         }
         else if(p.getVelY() > 0)
         {
-            CHARACTER.bind();
+            //go down
+            yIndex = 0;
+            tIndex = checkForAnimationIndex(baseY, 2);
         }
         else if(p.getVelY() < 0)
         {
-            CHARACTERBACK.bind();
+            //go up
+            yIndex = 3;
+            tIndex = checkForAnimationIndex(baseY, 2);
         }
         else
         {
-            CHARACTER.bind();
+            //stand still
+            yIndex = 0;
         }
+        r.getTextureRenderer().drawRectangle(ix, iy, ix + playerSize, iy + playerSize,
+                tIndex * 0.25f, yIndex * 0.25f, (tIndex + 1) * 0.25f, yIndex * 0.25f + 0.25f);
+    }
 
-        float baseX = (p.getLastX() + (p.getX() - p.getLastX()) * lag);
-        float ix = baseX * mapR.getScale() * TileRenderer.TILE_SIZE + offX;
-
-//        //TODO: refactor
-//        baseX = baseX - (int) baseX;
-//        int tIndex = 0;
-//        if(baseX <= 0.125f)
-//        {
-//            tIndex = 0;
-//        }
-//        else if(baseX <= 0.375f)
-//        {
-//            tIndex = 1;
-//        }
-//        else if(baseX <= 0.625f)
-//        {
-//            tIndex = 2;
-//        }
-//        else if(baseX <= 0.875f)
-//        {
-//            tIndex = 3;
-//        }
-//        
-//        System.out.println(baseX);
-        float iy = (p.getLastY() + (p.getY() - p.getLastY()) * lag) * mapR.getScale() * TileRenderer.TILE_SIZE + offY;
-//        r.getTextureRenderer().drawRectangle(ix, iy, ix + playerSize, iy + playerSize, 
-//                tIndex * 0.25f, 0.0f, (tIndex + 1) * 0.25f, 1.0f);
-r.getTextureRenderer().drawRectangle(ix, iy, ix + playerSize, iy + playerSize, 
-                0.0f, 0.0f, 1.0f, 1.0f);
+    private int checkForAnimationIndex(float base, int speed)
+    {
+        return (int) (Math.ceil(base / (0.125f / speed)) / 3)%4;
     }
 }