DEADSOFTWARE

Add drop picking
[cavedroid.git] / core / src / ru / deadsoftware / cavecraft / game / GamePhysics.java
index fdf1206371935e23a848428fca23f3d594c61b33..e38e3b0b3ef12e858795cb204a4d93cd9e271744 100644 (file)
@@ -1,12 +1,12 @@
 package ru.deadsoftware.cavecraft.game;
 
-import com.badlogic.gdx.Gdx;
 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 ru.deadsoftware.cavecraft.CaveGame;
 import ru.deadsoftware.cavecraft.game.mobs.Mob;
+import ru.deadsoftware.cavecraft.game.objects.Drop;
 import ru.deadsoftware.cavecraft.game.objects.Player;
 
 import java.util.Iterator;
@@ -67,6 +67,16 @@ public class GamePhysics {
         return gameProc.world.getForeMap((int)(rect.x+rect.width/2)/16, (int)(rect.y+rect.height/8*7)/16);
     }
 
+    private void dropPhy(Drop drop) {
+        if (drop.move.y < 9) drop.move.y += gravity.y/4;
+        drop.position.add(drop.move);
+        drop.position.y = MathUtils.round(drop.position.y);
+        while (checkColl(drop.getRect())) {
+            drop.position.y--;
+            drop.move.y = 0;
+        }
+    }
+
     private void playerPhy(Player pl) {
         pl.position.add(pl.moveY);
         if (checkColl(pl.getRect())) {
@@ -170,15 +180,22 @@ public class GamePhysics {
 }
 
     public void update(float delta) {
-        for (Mob mob : gameProc.mobs) {
-            mob.ai();
-            mobPhy(mob);
+        for (Iterator<Drop> it = gameProc.drops.iterator(); it.hasNext(); ) {
+            Drop drop = it.next();
+            dropPhy(drop);
+            if (Intersector.overlaps(drop.getRect(), gameProc.player.getRect()))
+                drop.pickUpDrop(gameProc.player);
+            if (drop.pickedUp) it.remove();
         }
+
         for (Iterator<Mob> it = gameProc.mobs.iterator(); it.hasNext();) {
-            Mob m = it.next();
-            if (m.dead)
+            Mob mob = it.next();
+            mob.ai();
+            mobPhy(mob);
+            if (mob.dead)
                 it.remove();
         }
+
         playerPhy(gameProc.player);
 
         gameProc.renderer.camera.position.set(