X-Git-Url: https://deadsoftware.ru/gitweb?p=cavedroid.git;a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavecraft%2Fgame%2Fobjects%2FDrop.java;h=d2139c76bef1008a45b8bee9916099d77bf90fba;hp=5ff36e476584f6eaa9ac34733d76ba550df0d9ea;hb=cef4b5a9985bcbdfea6dc652147ecde0721d7fdc;hpb=0b8922bfbb2bbec067b532ecb7912f6afe02c4ef diff --git a/core/src/ru/deadsoftware/cavecraft/game/objects/Drop.java b/core/src/ru/deadsoftware/cavecraft/game/objects/Drop.java index 5ff36e4..d2139c7 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/objects/Drop.java +++ b/core/src/ru/deadsoftware/cavecraft/game/objects/Drop.java @@ -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); } }