DEADSOFTWARE

Bug fixes
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / world / GameWorld.java
index f8a5cc970e1749d34eb8abeb7f0f7acacb8df382..686f1c946c81f55fb90ef5d4578538a6d85e3c2f 100644 (file)
@@ -26,6 +26,8 @@ public class GameWorld {
     private final Block[][] mForeMap;
     private final Block[][] mBackMap;
 
+    private final WorldGeneratorConfig mWorldConfig = WorldGeneratorConfig.Companion.getDefault();
+
     @Inject
     public GameWorld(DropController dropController,
                      MobsController mobsController,
@@ -39,10 +41,9 @@ public class GameWorld {
         boolean isNewGame = foreMap == null || backMap == null;
 
         if (isNewGame) {
-            final WorldGeneratorConfig config = WorldGeneratorConfig.Companion.getDefault();
-            mWidth = config.getWidth();
-            mHeight = config.getHeight();
-            Pair<Block[][], Block[][]> maps = new GameWorldGenerator(config, mGameItemsHolder).generate();
+            mWidth = mWorldConfig.getWidth();
+            mHeight = mWorldConfig.getHeight();
+            Pair<Block[][], Block[][]> maps = new GameWorldGenerator(mWorldConfig, mGameItemsHolder).generate();
             mForeMap = maps.getFirst();
             mBackMap = maps.getSecond();
             mMobsController.getPlayer().respawn(this, mGameItemsHolder);
@@ -96,23 +97,37 @@ public class GameWorld {
 
     private Block getMap(int x, int y, int layer) {
         Block map = mGameItemsHolder.getFallbackBlock();
-        try {
-            x = transformX(x);
-            map = (layer == 0) ? mForeMap[x][y] : mBackMap[x][y];
-        } catch (ArrayIndexOutOfBoundsException ignored) {
+
+        if (y < 0 || y >= getHeight()) {
+            return map;
+        }
+
+        x = transformX(x);
+
+        if (x < 0 || x >= getWidth()) {
+            return map;
         }
+
+        map = (layer == 0) ? mForeMap[x][y] : mBackMap[x][y];
+
         return map;
     }
 
     private void setMap(int x, int y, int layer, Block value) {
-        try {
-            x = transformX(x);
-            if (layer == 0) {
-                mForeMap[x][y] = value;
-            } else {
-                mBackMap[x][y] = value;
-            }
-        } catch (ArrayIndexOutOfBoundsException ignored) {
+        if (y < 0 || y >= getHeight()) {
+            return;
+        }
+
+        x = transformX(x);
+
+        if (x < 0 || x >= getWidth()) {
+            return;
+        }
+
+        if (layer == 0) {
+            mForeMap[x][y] = value;
+        } else {
+            mBackMap[x][y] = value;
         }
     }
 
@@ -174,15 +189,15 @@ public class GameWorld {
     }
 
     private void playerDurateTool() {
-        final InventoryItem playerCurrentItem = mMobsController.getPlayer().getCurrentItem();
-        if (mMobsController.getPlayer().getCurrentItem().getItem().isTool()) {
+        final InventoryItem playerCurrentItem = mMobsController.getPlayer().inventory.getActiveItem();
+        if (playerCurrentItem.getItem().isTool()) {
             mMobsController.getPlayer().decreaseCurrentItemCount(mGameItemsHolder);
         }
     }
 
     private boolean shouldDrop(Block block) {
-        final Item item = mMobsController.getPlayer().getCurrentItem().getItem();
-        int toolLevel = item.isTool() ? ((Item.Tool)item).getLevel() : 0;
+        final Item item = mMobsController.getPlayer().inventory.getActiveItem().getItem();
+        int toolLevel = item.isTool() ? ((Item.Tool) item).getLevel() : 0;
         if (item.isTool() && block.getParams().getToolType() != item.getClass()) {
             toolLevel = 0;
         }
@@ -200,7 +215,9 @@ public class GameWorld {
         placeToForeground(x, y, mGameItemsHolder.getFallbackBlock());
     }
 
-
+    public WorldGeneratorConfig getWorldConfig() {
+        return mWorldConfig;
+    }
 
     public void destroyBackMap(int x, int y) {
         Block block = getBackMap(x, y);