浏览代码

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;
         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
 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)
     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();
         r.updateMatrix();
 
 
         //TODO: insert animations
         //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)
         if(p.getVelX() > 0)
         {
         {
-            CHARACTERRIGHT.bind();
+            //go right
+            yIndex = 2;
+            tIndex = checkForAnimationIndex(baseX, 2);
         }
         }
         else if(p.getVelX() < 0)
         else if(p.getVelX() < 0)
         {
         {
-            CHARACTERLEFT.bind();
+            //go left
+            yIndex = 1;
+            tIndex = checkForAnimationIndex(baseX, 2);
         }
         }
         else if(p.getVelY() > 0)
         else if(p.getVelY() > 0)
         {
         {
-            CHARACTER.bind();
+            //go down
+            yIndex = 0;
+            tIndex = checkForAnimationIndex(baseY, 2);
         }
         }
         else if(p.getVelY() < 0)
         else if(p.getVelY() < 0)
         {
         {
-            CHARACTERBACK.bind();
+            //go up
+            yIndex = 3;
+            tIndex = checkForAnimationIndex(baseY, 2);
         }
         }
         else
         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;
     }
     }
 }
 }