X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2FGamePhysics.java;h=406ee346b461859f3d436d82ab8f155cf286c8ee;hb=3a443514027417133d7a7e18766720dfea028a87;hp=eee83c747ab915f41570455f4add9854d70877db;hpb=b9841a5aa1ccc1c4d30b23854b14d8de346951fd;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/GamePhysics.java b/core/src/ru/deadsoftware/cavedroid/game/GamePhysics.java index eee83c7..406ee34 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/GamePhysics.java +++ b/core/src/ru/deadsoftware/cavedroid/game/GamePhysics.java @@ -4,16 +4,17 @@ import com.badlogic.gdx.math.Intersector; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; +import org.jetbrains.annotations.Nullable; import ru.deadsoftware.cavedroid.MainConfig; import ru.deadsoftware.cavedroid.game.mobs.Mob; import ru.deadsoftware.cavedroid.game.mobs.MobsController; import ru.deadsoftware.cavedroid.game.mobs.player.Player; import ru.deadsoftware.cavedroid.game.model.block.Block; -import ru.deadsoftware.cavedroid.game.objects.Drop; -import ru.deadsoftware.cavedroid.game.objects.DropController; +import ru.deadsoftware.cavedroid.game.model.item.InventoryItem; +import ru.deadsoftware.cavedroid.game.objects.drop.Drop; +import ru.deadsoftware.cavedroid.game.objects.drop.DropController; import ru.deadsoftware.cavedroid.game.world.GameWorld; -import javax.annotation.CheckForNull; import javax.inject.Inject; import java.util.Iterator; @@ -67,7 +68,7 @@ public class GamePhysics { /** * @return colliding rect or null if no collision */ - @CheckForNull + @Nullable private Rectangle checkColl(Rectangle rect) { int minX = (int) ((rect.x + rect.width / 2) / 16) - 4; int minY = (int) ((rect.y + rect.height / 2) / 16) - 4; @@ -114,11 +115,11 @@ public class GamePhysics { /** * @return Rectangle representing magneting target for this drop */ - @CheckForNull + @Nullable private Rectangle getShiftedMagnetingPlayerRect(Drop drop) { final Player player = mMobsController.getPlayer(); - if (!player.inventory.canPickItem(drop.getItem())) { + if (!player.inventory.canPickItem(drop)) { return null; } @@ -184,7 +185,7 @@ public class GamePhysics { return; } - @CheckForNull Rectangle collidingRect = checkColl(mob); + @Nullable Rectangle collidingRect = checkColl(mob); if (collidingRect != null) { if (mob.canJump() && !mob.isFlyMode() && collidingRect.y >= mob.y + mob.height - 8) { @@ -224,7 +225,7 @@ public class GamePhysics { } private void mobYColl(Mob mob) { - @CheckForNull final Rectangle collidingRect = checkColl(mob); + @Nullable final Rectangle collidingRect = checkColl(mob); if (collidingRect != null) { int d = -1; @@ -354,16 +355,24 @@ public class GamePhysics { for (Iterator it = mMobsController.getMobs().iterator(); it.hasNext(); ) { Mob mob = it.next(); - mob.ai(mGameWorld, mGameItemsHolder, delta); + mob.ai(mGameWorld, mGameItemsHolder, mMobsController, delta); mobPhy(mob, delta); if (mob.isDead()) { + for (InventoryItem invItem : mob.getDrop(mGameItemsHolder)) { + mDropController.addDrop(mob.x, mob.y, invItem); + } + it.remove(); } } playerPhy(player, delta); - player.ai(mGameWorld, mGameItemsHolder, delta); + player.ai(mGameWorld, mGameItemsHolder, mMobsController, delta); if (player.isDead()) { + for (InventoryItem invItem : player.inventory.getItems()) { + mDropController.addDrop(player.x, player.y, invItem); + } + player.inventory.clear(); player.respawn(mGameWorld, mGameItemsHolder); } }