DEADSOFTWARE

Code improvements
[cavedroid.git] / core / src / ru / deadsoftware / cavecraft / game / objects / Drop.java
index 5ff36e476584f6eaa9ac34733d76ba550df0d9ea..d2139c76bef1008a45b8bee9916099d77bf90fba 100644 (file)
@@ -1,27 +1,68 @@
 package ru.deadsoftware.cavecraft.game.objects;
 
+import com.badlogic.gdx.math.Intersector;
 import com.badlogic.gdx.math.Rectangle;
 import com.badlogic.gdx.math.Vector2;
+import ru.deadsoftware.cavecraft.game.GameProc;
 
 import java.io.Serializable;
 
 public class Drop implements Serializable {
+
     private int id;
-    public Vector2 move, position;
+    public boolean pickedUp = false;
+    public Vector2 move, pos;
 
-    public static void pickUpDrop(Player pl, int id) {
-        for (int i = 0; i < pl.inventory.length; i++) {
-            if (pl.inventory[i] == 0) {
-                pl.inventory[i] = id;
-                break;
+    public Drop(float x, float y, int id) {
+        this.id = id;
+        pos = new Vector2(x, y);
+        move = new Vector2(0, -1);
+    }
+
+    public int closeToPlayer(GameProc gp) {
+        boolean c1 = Intersector.overlaps(new Rectangle(gp.player.pos.x - 16, gp.player.pos.y - 16, gp.player.getWidth() + 32, gp.player.getHeight() + 32), getRect());
+        boolean c2 = Intersector.overlaps(new Rectangle((gp.player.pos.x + gp.world.getWidthPx()) - 16, gp.player.pos.y - 16, gp.player.getWidth() + 32, gp.player.getHeight() + 32), getRect());
+        boolean c3 = Intersector.overlaps(new Rectangle((gp.player.pos.x - gp.world.getWidthPx()) - 16, gp.player.pos.y - 16, gp.player.getWidth() + 32, gp.player.getHeight() + 32), getRect());
+        if (c1) return 1;
+        if (c2) return 2;
+        if (c3) return 3;
+        return 0;
+    }
+
+    public void moveToPlayer(GameProc gp) {
+        int ctp = closeToPlayer(gp);
+        if (ctp > 0) {
+            float px = gp.player.pos.x;
+            float py = gp.player.pos.y;
+            switch (ctp) {
+                case 2:
+                    px += gp.world.getWidthPx();
+                    break;
+                case 3:
+                    px -= gp.world.getWidthPx();
+                    break;
             }
+            float dx = 0, dy = 0;
+            if (px + gp.player.getWidth() < pos.x + 4) dx = -.5f;
+            else if (px > pos.x + 4) dx = .5f;
+            if (py + gp.player.getHeight() < pos.y + 4) dy = -.5f;
+            else if (py > pos.y + 4) dy = .5f;
+            move.add(dx, dy);
+            if (move.x > 2) move.x = 1;
+            if (move.x < -2) move.x = -1;
+            if (move.y > 2) move.y = 1;
+            if (move.y < -2) move.y = -1;
         }
     }
 
-    public Drop(float x, float y, int id) {
-        this.id = id;
-        position = new Vector2(x, y);
-        move = new Vector2(0, -1);
+    public void pickUpDrop(Player pl) {
+        for (int i = 0; i < pl.inv.length; i++) {
+            if (pl.inv[i] == 0 || pl.inv[i] == id) {
+                pl.inv[i] = id;
+                pickedUp = true;
+                break;
+            }
+        }
     }
 
     public int getId() {
@@ -29,7 +70,7 @@ public class Drop implements Serializable {
     }
 
     public Rectangle getRect() {
-        return new Rectangle(position.x, position.y, 8, 8);
+        return new Rectangle(pos.x, pos.y, 8, 8);
     }
 
 }