DEADSOFTWARE

Refactor
[cavedroid.git] / core / src / ru / deadsoftware / cavecraft / game / objects / Player.java
index 5672807cc1205182190ff939d84913adc81f8c55..16e3a5277edd67202148588639cc5bd36b645e11 100644 (file)
@@ -1,38 +1,34 @@
 package ru.deadsoftware.cavecraft.game.objects;
 
+import com.badlogic.gdx.graphics.g2d.SpriteBatch;
+import com.badlogic.gdx.math.MathUtils;
 import com.badlogic.gdx.math.Rectangle;
 import com.badlogic.gdx.math.Vector2;
 import ru.deadsoftware.cavecraft.game.GameItems;
 import ru.deadsoftware.cavecraft.game.GameWorld;
+import ru.deadsoftware.cavecraft.game.mobs.Mob;
+import ru.deadsoftware.cavecraft.misc.Assets;
 
 import java.io.Serializable;
 
-public class Player implements Serializable {
+public class Player extends Mob implements Serializable {
 
-    public static int ANIM_SPEED = 6;
-
-    public Vector2 pos;
-    public Vector2 mov;
-    private int width, height, dir, hp;
-    public boolean canJump;
     public int[] inv;
-    public boolean flyMode = false;
+    public int invSlot;
     public int gameMode;
+    public boolean swim;
 
     public Player(GameWorld world, int gameMode) {
+        super(0, 0, 4, 30, 1, true);
         this.gameMode = gameMode;
-        mov = new Vector2(0, 0);
-        width = 4;
-        height = 30;
         inv = new int[9];
-        hp = 20;
         pos = getSpawnPoint(world).cpy();
+        swim = false;
     }
 
     public void respawn(GameWorld world) {
         pos.set(getSpawnPoint(world));
         mov.setZero();
-        hp = 20;
     }
 
     private Vector2 getSpawnPoint(GameWorld world) {
@@ -48,38 +44,81 @@ public class Player implements Serializable {
         return new Vector2(x * 16 + 8 - (float) getWidth() / 2, (float) y * 16 - getHeight());
     }
 
-    public int getMapX() {
-        return (int) (pos.x + (getWidth() / 2)) / 16;
-    }
-
-    public int getMapY() {
-        return (int) (pos.y + (getHeight() / 2)) / 16;
-    }
-
-    public int getWidth() {
-        return width;
-    }
-
-    public int getHeight() {
-        return height;
+    public void setDir(int dir) {
+        if (dir != getDir()) changeDir();
     }
 
-    public int getHp() {
-        return hp;
+    @Override
+    public void ai() {
     }
 
-    public void setHp(int hp) {
-        this.hp = hp;
+    @Override
+    public void changeDir() {
+        switchDir();
     }
 
-    public int getDir() {
-        return dir;
+    @Override
+    public void draw(SpriteBatch spriteBatch, float x, float y) {
+        if (mov.x != 0 || Assets.plSprite[0][2].getRotation() != 0) {
+            Assets.plSprite[0][2].rotate(animDelta);
+            Assets.plSprite[1][2].rotate(-animDelta);
+            Assets.plSprite[0][3].rotate(-animDelta);
+            Assets.plSprite[1][3].rotate(animDelta);
+        } else {
+            Assets.plSprite[0][2].setRotation(0);
+            Assets.plSprite[1][2].setRotation(0);
+            Assets.plSprite[0][3].setRotation(0);
+            Assets.plSprite[1][3].setRotation(0);
+        }
+        if (Assets.plSprite[0][2].getRotation() >= 60 || Assets.plSprite[0][2].getRotation() <= -60)
+            animDelta = -animDelta;
+
+        //back hand
+        Assets.plSprite[1][2].setPosition(x - 6, y);
+        Assets.plSprite[1][2].draw(spriteBatch);
+        //back leg
+        Assets.plSprite[1][3].setPosition(x - 6, y + 10);
+        Assets.plSprite[1][3].draw(spriteBatch);
+        //front leg
+        Assets.plSprite[0][3].setPosition(x - 6, y + 10);
+        Assets.plSprite[0][3].draw(spriteBatch);
+        //head
+        spriteBatch.draw(Assets.plSprite[getDir()][0], x - 2, y - 2);
+        //body
+        spriteBatch.draw(Assets.plSprite[getDir()][1], x - 2, y + 8);
+        //item in hand
+        if (inv[invSlot] > 0) {
+            float handRotation = MathUtils.degRad * Assets.plSprite[0][2].getRotation();
+            switch (GameItems.getItem(inv[invSlot]).getType()) {
+                case 0:
+                    Assets.blockTex[GameItems.getItem(inv[invSlot]).getTex()].setPosition(
+                            x - 8 * MathUtils.sin(handRotation),
+                            y + 6 + 8 * MathUtils.cos(handRotation));
+                    Assets.blockTex[GameItems.getItem(inv[invSlot]).getTex()].draw(spriteBatch);
+                    break;
+                default:
+                    Assets.itemTex[GameItems.getItem(inv[invSlot]).getTex()].flip((getDir() == 0), false);
+                    Assets.itemTex[GameItems.getItem(inv[invSlot]).getTex()].setRotation(
+                            -45 + getDir() * 90 + Assets.plSprite[0][2].getRotation());
+                    Assets.itemTex[GameItems.getItem(inv[invSlot]).getTex()].setPosition(
+                            x - 10 + (12 * getDir()) - 8 * MathUtils.sin(handRotation),
+                            y + 2 + 8 * MathUtils.cos(handRotation));
+                    Assets.itemTex[GameItems.getItem(inv[invSlot]).getTex()].draw(spriteBatch);
+                    Assets.itemTex[GameItems.getItem(inv[invSlot]).getTex()].flip((getDir() == 0), false);
+                    break;
+            }
+        }
+        //front hand
+        Assets.plSprite[0][2].setPosition(x - 6, y);
+        Assets.plSprite[0][2].draw(spriteBatch);
     }
 
-    public void setDir(int dir) {
-        this.dir = dir;
+    @Override
+    public int getType() {
+        return 0;
     }
 
+    @Override
     public Rectangle getRect() {
         return new Rectangle(pos.x, pos.y, getWidth(), getHeight());
     }