X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Fmobs%2FPlayer.java;h=47d48d8a415374d61279a2c2af1c04d3da291e6a;hb=445466cd94b52a4acdaa3e22b14533305fd73488;hp=0e8af6e0eed0407b1cc3a4be057ae2dc344f5b87;hpb=387ad284ceb79b07cba3726fa7350b7e83916815;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/mobs/Player.java b/core/src/ru/deadsoftware/cavedroid/game/mobs/Player.java index 0e8af6e..47d48d8 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/mobs/Player.java +++ b/core/src/ru/deadsoftware/cavedroid/game/mobs/Player.java @@ -62,11 +62,6 @@ public class Player extends Mob { } } - @CheckForNull - public Item inventory(int i) { - return inventory.get(i).getItem(); - } - public void respawn(GameWorld gameWorld, GameItemsHolder itemsHolder) { Vector2 pos = getSpawnPoint(gameWorld, itemsHolder); this.x = pos.x; @@ -90,24 +85,43 @@ public class Player extends Mob { return inventory.get(slot); } - public void pickUpDrop(Drop drop) { - for (InventoryItem invItem : inventory) { + /** + * @return index of inventory where this drop could be placed or -1 if cant pick up + */ + public int canPickUpDrop(Drop drop) { + for (int i = 0; i < 36; i++) { + final InventoryItem invItem = inventory.get(i); + if (!invItem.getItem().isTool() && invItem.getItem() == drop.getItem() && invItem.getAmount() < invItem.getItem().getParams().getMaxStack()) { - invItem.setAmount(invItem.getAmount() + 1); - drop.setPickedUp(true); - return; + return i; } - } - for (int i = 0; i < inventory.size(); i++) { - if (inventory(i) == null || inventory(i).getParams().getKey().equals(GameItemsHolder.FALLBACK_ITEM_KEY)) { - inventory.set(i, drop.getItem().toInventoryItem()); - drop.setPickedUp(true); - break; + if (invItem.getItem().isNone()) { + return i; } } + + return -1; + } + + public void pickUpDrop(Drop drop) { + int index = canPickUpDrop(drop); + + if (index < 0) { + return; + } + + final InventoryItem invItem = inventory.get(index); + + if (invItem.getItem().equals(drop.getItem())) { + invItem.setAmount(invItem.getAmount() + 1); + drop.setPickedUp(true); + } else if (invItem.getItem().isNone()) { + inventory.set(index, drop.getItem().toInventoryItem()); + drop.setPickedUp(true); + } } private Vector2 getSpawnPoint(GameWorld gameWorld, GameItemsHolder itemsHolder) { @@ -157,6 +171,10 @@ public class Player extends Mob { mVelocity.y = JUMP_VELOCITY; } + private boolean checkBlockCanBeHit(Block block) { + return !block.isNone() && block.getParams().getHitPoints() >= 0; + } + private void hitBlock(GameWorld gameWorld, GameItemsHolder gameItemsHolder) { if (!hitting || !hittingWithDamage) { return; @@ -165,15 +183,20 @@ public class Player extends Mob { final Block foregroundBlock = gameWorld.getForeMap(cursorX, cursorY); final Block backgroundBlock = gameWorld.getBackMap(cursorX, cursorY); - if ((!foregroundBlock.isNone() && foregroundBlock.getParams().getHitPoints() >= 0) || - (foregroundBlock.isNone() && !backgroundBlock.isNone() && backgroundBlock.getParams().getHitPoints() >= 0)) { + + if ((checkBlockCanBeHit(foregroundBlock)) || + (foregroundBlock.isNone() && checkBlockCanBeHit(backgroundBlock))) { if (gameMode == 0) { - if (!foregroundBlock.isNone() && blockDamage >= foregroundBlock.getParams().getHitPoints()) { - gameWorld.destroyForeMap(cursorX, cursorY); - blockDamage = 0; - } else if (!backgroundBlock.isNone() && blockDamage >= backgroundBlock.getParams().getHitPoints()) { - gameWorld.destroyBackMap(cursorX, cursorY); - blockDamage = 0; + if (!foregroundBlock.isNone()) { + if (blockDamage >= foregroundBlock.getParams().getHitPoints()) { + gameWorld.destroyForeMap(cursorX, cursorY); + blockDamage = 0; + } + } else if (!backgroundBlock.isNone()) { + if (blockDamage >= backgroundBlock.getParams().getHitPoints()) { + gameWorld.destroyBackMap(cursorX, cursorY); + blockDamage = 0; + } } } else { if (!foregroundBlock.isNone()) { @@ -201,9 +224,9 @@ public class Player extends Mob { final Block backgroundBlock = gameWorld.getBackMap(cursorX, cursorY); @CheckForNull final Block target; - if (!foregroundBlock.isNone() && foregroundBlock.getParams().getHitPoints() >= 0) { + if (checkBlockCanBeHit(foregroundBlock)) { target = foregroundBlock; - } else if (!backgroundBlock.isNone() && backgroundBlock.getParams().getHitPoints() >= 0) { + } else if (checkBlockCanBeHit(backgroundBlock)) { target = backgroundBlock; } else { target = null; @@ -254,7 +277,7 @@ public class Player extends Mob { } private void drawItem(SpriteBatch spriteBatch, float x, float y, float anim) { - final Item item = inventory(slot); + final Item item = inventory.get(slot).getItem(); if (item == null || item.isNone()) { return;