DEADSOFTWARE

Reimplement mobs
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / objects / Drop.java
1 package ru.deadsoftware.cavedroid.game.objects;
3 import com.badlogic.gdx.math.Intersector;
4 import com.badlogic.gdx.math.Rectangle;
5 import com.badlogic.gdx.math.Vector2;
6 import ru.deadsoftware.cavedroid.game.mobs.Player;
8 import java.io.Serializable;
10 import static ru.deadsoftware.cavedroid.GameScreen.GP;
12 public class Drop implements Serializable {
14 private final int id;
15 public boolean pickedUp = false;
16 public final Vector2 move;
17 public final Vector2 pos;
19 public Drop(float x, float y, int id) {
20 this.id = id;
21 pos = new Vector2(x, y);
22 move = new Vector2(0, -1);
23 }
25 public int closeToPlayer() {
26 boolean[] c = new boolean[3];
28 c[0] = Intersector.overlaps(new Rectangle(GP.player.getX() - 16,
29 GP.player.getY() - 16, GP.player.getWidth() + 32, GP.player.getHeight() + 32),
30 getRect());
31 c[1] = Intersector.overlaps(new Rectangle((GP.player.getX() + GP.world.getWidthPx()) - 16,
32 GP.player.getY() - 16, GP.player.getWidth() + 32, GP.player.getHeight() + 32),
33 getRect());
34 c[2] = Intersector.overlaps(new Rectangle((GP.player.getX() - GP.world.getWidthPx()) - 16,
35 GP.player.getY() - 16, GP.player.getWidth() + 32, GP.player.getHeight() + 32),
36 getRect());
38 for (int i = 0; i < 3; i++) {
39 if (c[i]) {
40 return i + 1;
41 }
42 }
43 return 0;
44 }
46 public void moveToPlayer() {
47 int ctp = closeToPlayer();
48 if (ctp > 0) {
49 float px = GP.player.getX();
50 float py = GP.player.getY();
51 switch (ctp) {
52 case 2:
53 px += GP.world.getWidthPx();
54 break;
55 case 3:
56 px -= GP.world.getWidthPx();
57 break;
58 }
59 float dx = 0, dy = 0;
60 if (px + GP.player.getWidth() < pos.x + 4) {
61 dx = -.5f;
62 } else if (px > pos.x + 4) {
63 dx = .5f;
64 }
66 if (py + GP.player.getHeight() < pos.y + 4) {
67 dy = -.5f;
68 } else if (py > pos.y + 4) {
69 dy = .5f;
70 }
72 move.add(dx, dy);
74 if (move.x > 2) {
75 move.x = 1;
76 } else if (move.x < -2) {
77 move.x = -1;
78 }
80 if (move.y > 2) {
81 move.y = 1;
82 } else if (move.y < -2) {
83 move.y = -1;
84 }
85 }
86 }
88 public void pickUpDrop(Player pl) {
89 for (int i = 0; i < pl.inventory.length; i++) {
90 if (pl.inventory[i] == 0 || pl.inventory[i] == id) {
91 pl.inventory[i] = id;
92 pickedUp = true;
93 break;
94 }
95 }
96 }
98 public int getId() {
99 return id;
102 public Rectangle getRect() {
103 return new Rectangle(pos.x, pos.y, 8, 8);