X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Fmobs%2Fplayer%2FPlayer.java;h=8ea87c11d8b42868a4dc393c9f100689496b4788;hb=6bb7e1d207c640ff3b8e41ce2fb1c6203985bdb1;hp=dcc77ef81202b4bb6e96018b3651b348b3aeb1f1;hpb=9af7e45e07d903996eab693d958679ed699dcac7;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/mobs/player/Player.java b/core/src/ru/deadsoftware/cavedroid/game/mobs/player/Player.java index dcc77ef..8ea87c1 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/mobs/player/Player.java +++ b/core/src/ru/deadsoftware/cavedroid/game/mobs/player/Player.java @@ -6,10 +6,13 @@ import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; import ru.deadsoftware.cavedroid.game.GameItemsHolder; import ru.deadsoftware.cavedroid.game.mobs.Mob; +import ru.deadsoftware.cavedroid.game.mobs.MobsController; import ru.deadsoftware.cavedroid.game.model.block.Block; import ru.deadsoftware.cavedroid.game.model.item.InventoryItem; import ru.deadsoftware.cavedroid.game.model.item.Item; -import ru.deadsoftware.cavedroid.game.objects.Drop; +import ru.deadsoftware.cavedroid.game.objects.drop.Drop; +import ru.deadsoftware.cavedroid.game.objects.drop.DropController; +import ru.deadsoftware.cavedroid.game.ui.TooltipManager; import ru.deadsoftware.cavedroid.game.world.GameWorld; import ru.deadsoftware.cavedroid.misc.Assets; import ru.deadsoftware.cavedroid.misc.utils.SpriteOrigin; @@ -21,6 +24,7 @@ public class Player extends Mob { private static final float SPEED = 69.072f; private static final float JUMP_VELOCITY = -133.332f; + private static final int SURVIVAL_CURSOR_RANGE = 4; public static final int MAX_HEALTH = 20; public static final int INVENTORY_SIZE = 36; @@ -50,14 +54,14 @@ public class Player extends Mob { CURSOR } - public Player(GameItemsHolder gameItemsHolder) { + public Player(GameItemsHolder gameItemsHolder, TooltipManager tooltipManager) { super(0, 0, 4, 30, randomDir(), Type.MOB, MAX_HEALTH); - inventory = new Inventory(INVENTORY_SIZE, HOTBAR_SIZE, gameItemsHolder); + inventory = new Inventory(INVENTORY_SIZE, HOTBAR_SIZE, gameItemsHolder, tooltipManager); swim = false; } - public void initInventory(GameItemsHolder gameItemsHolder) { - inventory.initItems(gameItemsHolder); + public void initInventory(GameItemsHolder gameItemsHolder, TooltipManager tooltipManager) { + inventory.initItems(gameItemsHolder, tooltipManager); } public void respawn(GameWorld gameWorld, GameItemsHolder itemsHolder) { @@ -81,6 +85,11 @@ public class Player extends Mob { } } + public void dropCurrentItem(DropController dropController) { + final InventoryItem activeItem = inventory.getActiveItem(); + + } + private Vector2 getSpawnPoint(GameWorld gameWorld, GameItemsHolder itemsHolder) { if (spawnPoint != null) { return spawnPoint; @@ -125,6 +134,17 @@ public class Player extends Mob { @Override public void jump() { + if (!canJump()) { + if (gameMode == 1) { + if (isFlyMode()) { + setFlyMode(false); + } else { + getVelocity().y = 0f; + setFlyMode(true); + } + } + return; + } mVelocity.y = JUMP_VELOCITY; } @@ -132,6 +152,29 @@ public class Player extends Mob { return !block.isNone() && block.getParams().getHitPoints() >= 0; } + /** + * @return true if any mob fas hit + */ + private boolean hitMobs(GameItemsHolder gameItemsHolder, MobsController mobsController) { + if (!hitting || !hittingWithDamage) { + return false; + } + + boolean result = false; + for (Mob mob : mobsController.getMobs()) { + if (overlaps(mob.getHitBox())) { + final Item activeItem = inventory.getActiveItem().getItem(); + final Item.Tool tool = activeItem.isTool() ? (Item.Tool) activeItem : null; + if (tool != null) { + decreaseCurrentItemCount(gameItemsHolder); + } + result = true; + mob.damage(MathUtils.floor(tool != null ? tool.getMobDamageMultiplier() : 1)); + } + } + return result; + } + private void hitBlock(GameWorld gameWorld, GameItemsHolder gameItemsHolder) { if (!hitting || !hittingWithDamage) { return; @@ -169,9 +212,14 @@ public class Player extends Mob { } @Override - public void ai(GameWorld gameWorld, GameItemsHolder gameItemsHolder, float delta) { + public void ai(GameWorld gameWorld, GameItemsHolder gameItemsHolder, MobsController mobsController, float delta) { updateAnimation(delta); - hitBlock(gameWorld, gameItemsHolder); + + if (!hitMobs(gameItemsHolder, mobsController)) { + hitBlock(gameWorld, gameItemsHolder); + } else { + stopHitting(); + } if (gameMode == 1) { return; @@ -233,6 +281,20 @@ public class Player extends Mob { super.heal(heal); } + public void checkCursorBounds(GameWorld gameWorld) { + if (gameMode == 0) { + int minCursorX = getMapX() - SURVIVAL_CURSOR_RANGE; + int maxCursorX = getMapX() + SURVIVAL_CURSOR_RANGE; + int minCursorY = getMiddleMapY() - SURVIVAL_CURSOR_RANGE; + int maxCursorY = getMiddleMapY() + SURVIVAL_CURSOR_RANGE; + + cursorX = MathUtils.clamp(cursorX, minCursorX, maxCursorX); + cursorY = MathUtils.clamp(cursorY, minCursorY, maxCursorY); + } + + cursorY = MathUtils.clamp(cursorY, 0, gameWorld.getHeight() - 1); + } + private void drawItem(SpriteBatch spriteBatch, float x, float y, float anim) { final Item item = inventory.getActiveItem().getItem(); @@ -352,6 +414,13 @@ public class Player extends Mob { frontHandAnim = -rightHandAnim; } + backHand.setColor(getTintColor()); + backLeg.setColor(getTintColor()); + frontLeg.setColor(getTintColor()); + head.setColor(getTintColor()); + body.setColor(getTintColor()); + frontHand.setColor(getTintColor()); + SpriteUtilsKt.drawSprite(spriteBatch, backHand, x + 2, y + 8, backHandAnim); if (looksLeft()) {