DEADSOFTWARE

MainComponent in kotlin
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / GamePhysics.java
index eee83c747ab915f41570455f4add9854d70877db..406ee346b461859f3d436d82ab8f155cf286c8ee 100644 (file)
@@ -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<Mob> 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);
         }
     }