DEADSOFTWARE

Delete old GameItems
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / GameRenderer.java
index ca9cf8b392c231dfc564ef3120eff9ba90469ec2..43973bcea0116f9713baff4de5182ec39aa09fe2 100644 (file)
@@ -9,25 +9,25 @@ import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
 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 com.badlogic.gdx.scenes.scene2d.utils.ScissorStack;
+import kotlin.collections.CollectionsKt;
 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;
-import ru.deadsoftware.cavedroid.game.objects.Block;
+import ru.deadsoftware.cavedroid.game.model.block.Block;
+import ru.deadsoftware.cavedroid.game.model.item.Item;
 import ru.deadsoftware.cavedroid.game.objects.Drop;
 import ru.deadsoftware.cavedroid.game.objects.DropController;
-import ru.deadsoftware.cavedroid.game.objects.Item;
 import ru.deadsoftware.cavedroid.game.world.GameWorld;
 import ru.deadsoftware.cavedroid.misc.ControlMode;
 import ru.deadsoftware.cavedroid.misc.Renderer;
-import ru.deadsoftware.cavedroid.misc.utils.SpriteUtilsKt;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 import javax.inject.Inject;
 
+import java.util.Collection;
+
 import static ru.deadsoftware.cavedroid.misc.Assets.*;
 
 @GameScope
@@ -40,13 +40,15 @@ public class GameRenderer extends Renderer {
     private final GameWorld mGameWorld;
     private final MobsController mMobsController;
     private final DropController mDropController;
+    private final GameItemsHolder mGameItemsHolder;
 
     @Inject
     GameRenderer(MainConfig mainConfig,
                  GameInput gameInput,
                  GameWorld gameWorld,
                  MobsController mobsController,
-                 DropController dropController) {
+                 DropController dropController,
+                 GameItemsHolder gameItemsHolder) {
         super(mainConfig.getWidth(), mainConfig.getHeight());
 
         mMainConfig = mainConfig;
@@ -54,6 +56,7 @@ public class GameRenderer extends Renderer {
         mGameWorld = gameWorld;
         mMobsController = mobsController;
         mDropController = dropController;
+        mGameItemsHolder = gameItemsHolder;
 
         Gdx.gl.glClearColor(0f, .6f, .6f, 1f);
     }
@@ -66,9 +69,9 @@ public class GameRenderer extends Renderer {
         return y * 16 - getCamY();
     }
 
-    private void drawWreck(int bl) {
+    private void drawWreck(Block bl) {
         if (mGameInput.getBlockDamage() > 0) {
-            int index = 10 * mGameInput.getBlockDamage() / GameItems.getBlock(bl).getHp();
+            int index = 10 * mGameInput.getBlockDamage() / bl.getHp();
             String key = "break_" + index;
 
             if (index > 10 || index < 0) {
@@ -82,16 +85,16 @@ public class GameRenderer extends Renderer {
 
     private void drawBlock(int x, int y, boolean drawBG) {
         if (drawBG) {
-            if ((!mGameWorld.hasForeAt(x, y) || mGameWorld.getForeMapBlock(x, y).isTransparent())
+            if ((!mGameWorld.hasForeAt(x, y) || mGameWorld.getForeMap(x, y).isTransparent())
                     && mGameWorld.hasBackAt(x, y)) {
-                mGameWorld.getBackMapBlock(x, y).draw(spriter, drawX(x), drawY(y));
+                mGameWorld.getBackMap(x, y).draw(spriter, drawX(x), drawY(y));
                 if (!mGameWorld.hasForeAt(x, y) && x == mGameInput.getCurX() && y == mGameInput.getCurY()) {
                     drawWreck(mGameWorld.getBackMap(mGameInput.getCurX(), mGameInput.getCurY()));
                 }
             }
         }
-        if (mGameWorld.hasForeAt(x, y) && mGameWorld.getForeMapBlock(x, y).isBackground() == drawBG) {
-            mGameWorld.getForeMapBlock(x, y).draw(spriter, drawX(x), drawY(y));
+        if (mGameWorld.hasForeAt(x, y) && mGameWorld.getForeMap(x, y).isBackground() == drawBG) {
+            mGameWorld.getForeMap(x, y).draw(spriter, drawX(x), drawY(y));
             if (x == mGameInput.getCurX() && y == mGameInput.getCurY()) {
                 drawWreck(mGameWorld.getForeMap(mGameInput.getCurX(), mGameInput.getCurY()));
             }
@@ -122,7 +125,7 @@ public class GameRenderer extends Renderer {
             shaper.setColor(0f, 0f, 0f, .5f);
             for (int y = minY; y < maxY; y++) {
                 for (int x = minX; x < maxX; x++) {
-                    if ((!mGameWorld.hasForeAt(x, y) || mGameWorld.getForeMapBlock(x, y).isTransparent())
+                    if ((!mGameWorld.hasForeAt(x, y) || mGameWorld.getForeMap(x, y).isTransparent())
                             && mGameWorld.hasBackAt(x, y)) {
                         shaper.rect(drawX(x), drawY(y), 16, 16);
                     }
@@ -176,25 +179,13 @@ public class GameRenderer extends Renderer {
     }
 
     private void drawDrop(Drop drop) {
-        if (drop.getId() <= 0) {
-            return;
-        }
-
         @CheckForNull final Rectangle drawingRect = getDrawingRectIfInsideViewport(drop);
 
         if (drawingRect == null) {
             return;
         }
 
-        final Item item = GameItems.getItem(drop.getId());
-        @CheckForNull final Block block = GameItems.getBlock(GameItems.getItemKey(drop.getId()));
-        @CheckForNull final Sprite sprite = item.isBlock()
-                ? block.getTexture()
-                : item.getSprite();
-
-        if (sprite == null) {
-            return;
-        }
+        final Sprite sprite = drop.getItem().getSprite();
 
         sprite.setPosition(drawingRect.x, drawingRect.y);
         sprite.setSize(drawingRect.width, drawingRect.height);
@@ -208,29 +199,22 @@ public class GameRenderer extends Renderer {
         float y = getHeight() / 2 - (float) creative.getRegionHeight() / 2;
         spriter.draw(creative, x, y);
         spriter.draw(textureRegions.get("handle"), x + 156,
-                y + 18 + (mGameInput.getCreativeScroll() * (72f / GameProc.MAX_CREATIVE_SCROLL)));
+                y + 18 + (mGameInput.getCreativeScroll() * (72f / mGameItemsHolder.getCreativeScrollAmount())));
+        final Collection<Item> items = mGameItemsHolder.getAllItems();
         for (int i = mGameInput.getCreativeScroll() * 8; i < mGameInput.getCreativeScroll() * 8 + 40; i++) {
-            if (i > 0 && i < GameItems.getItemsSize()) {
-                if (GameItems.getItem(i).isBlock()) {
-                    spriter.draw(GameItems.getBlock(GameItems.getBlockIdByItemId(i)).getTexture(),
-                            x + 8 + ((i - mGameInput.getCreativeScroll() * 8) % 8) * 18,
-                            y + 18 + ((i - mGameInput.getCreativeScroll() * 8) / 8) * 18);
-                } else {
-                    spriter.draw(GameItems.getItem(i).getTexture(),
+            if (i > 0 && i < items.size()) {
+                Item item = CollectionsKt.elementAt(items, i);
+                if (item != mGameItemsHolder.getFallbackItem()) {
+                    spriter.draw(CollectionsKt.elementAt(items, i).getSprite(),
                             x + 8 + ((i - mGameInput.getCreativeScroll() * 8) % 8) * 18,
                             y + 18 + ((i - mGameInput.getCreativeScroll() * 8) / 8) * 18);
                 }
             }
         }
         for (int i = 0; i < 9; i++) {
-            if (mMobsController.getPlayer().inventory[i] > 0) {
-                if (GameItems.getItem(mMobsController.getPlayer().inventory[i]).isBlock()) {
-                    spriter.draw(GameItems.getBlock(GameItems.getBlockIdByItemId(mMobsController.getPlayer().inventory[i])).getTexture(),
-                            x + 8 + i * 18, y + creative.getRegionHeight() - 24);
-                } else {
-                    spriter.draw(GameItems.getItem(mMobsController.getPlayer().inventory[i]).getTexture(),
-                            x + 8 + i * 18, y + creative.getRegionHeight() - 24);
-                }
+            if (mMobsController.getPlayer().inventory[i] != null && mMobsController.getPlayer().inventory[i] != mGameItemsHolder.getFallbackItem()) {
+                spriter.draw(mMobsController.getPlayer().inventory[i].getSprite(),
+                        x + 8 + i * 18, y + creative.getRegionHeight() - 24);
             }
         }
 
@@ -273,16 +257,10 @@ public class GameRenderer extends Renderer {
         drawHealth(hotbarX, hotbar.getRegionHeight());
 
         for (int i = 0; i < 9; i++) {
-            if (mMobsController.getPlayer().inventory[i] > 0) {
-                if (GameItems.getItem(mMobsController.getPlayer().inventory[i]).isBlock()) {
-                    spriter.draw(GameItems.getBlock(GameItems.getBlockIdByItemId(mMobsController.getPlayer().inventory[i])).getTexture(),
-                            getWidth() / 2 - (float) hotbar.getRegionWidth() / 2 + 3 + i * 20,
-                            3);
-                } else {
-                    spriter.draw(GameItems.getItem(mMobsController.getPlayer().inventory[i]).getTexture(),
-                            getWidth() / 2 - (float) hotbar.getRegionWidth() / 2 + 3 + i * 20,
-                            3);
-                }
+            if (mMobsController.getPlayer().inventory[i] != null && mMobsController.getPlayer().inventory[i] != mGameItemsHolder.getFallbackItem()) {
+                spriter.draw(mMobsController.getPlayer().inventory[i].getSprite(),
+                        getWidth() / 2 - (float) hotbar.getRegionWidth() / 2 + 3 + i * 20,
+                        3);
             }
         }
         spriter.draw(hotbarSelector,
@@ -306,7 +284,9 @@ public class GameRenderer extends Renderer {
 
         drawWorld(true);
         player.draw(spriter, player.getX() - getCamX() - player.getWidth() / 2, player.getY() - getCamY(), delta);
-        mMobsController.getMobs().forEach( (mob) -> { drawMob(mob, delta); });
+        mMobsController.getMobs().forEach((mob) -> {
+            drawMob(mob, delta);
+        });
         mDropController.forEach(this::drawDrop);
         drawWorld(false);
         drawGUI();
@@ -326,11 +306,11 @@ public class GameRenderer extends Renderer {
         final boolean hasBackMap = mGameWorld.hasBackAt(x, y);
 
         if (hasForeMap) {
-            final Block block = mGameWorld.getForeMapBlock(x, y);
+            final Block block = mGameWorld.getForeMap(x, y);
 
-            if (GameItems.isWater(block)) {
+            if (block.isWater()) {
                 result = Color.BLUE;
-            } else if (GameItems.isLava(block)) {
+            } else if (block.isLava()) {
                 result = Color.RED;
             } else {
                 result = Color.BLACK;
@@ -354,8 +334,7 @@ public class GameRenderer extends Renderer {
                 final int worldX = (int) (mMobsController.getPlayer().getMapX() - size / 2 + x);
                 final int worldY = (int) (mMobsController.getPlayer().getUpperMapY() - size / 2 + y);
 
-                @Nullable
-                final Color color = getMinimapColor(worldX, worldY);
+                @Nullable final Color color = getMinimapColor(worldX, worldY);
 
                 if (color != null) {
                     shaper.setColor(color);
@@ -411,10 +390,9 @@ public class GameRenderer extends Renderer {
             drawString("Swim: " + player.swim, 0, 60);
             drawString("Mobs: " + mMobsController.getMobs().size(), 0, 70);
             drawString("Drops: " + mDropController.getSize(), 0, 80);
-            drawString("Block: " + GameItems.getBlockKey(mGameWorld.getForeMap(mGameInput.getCurX(), mGameInput.getCurY())), 0, 90);
-            drawString("Hand: " + GameItems.getItemKey(mMobsController.getPlayer().inventory[mMobsController.getPlayer().slot]), 0, 100);
+            drawString("Block: " + mGameWorld.getForeMap(mGameInput.getCurX(), mGameInput.getCurY()).getParams().getKey(), 0, 90);
+            drawString("Hand: " + mMobsController.getPlayer().inventory[mMobsController.getPlayer().slot].getParams().getKey(), 0, 100);
             drawString("Game mode: " + player.gameMode, 0, 110);
-            drawString("Check swim: " + GameItems.isFluid(mGameWorld.getForeMap(player.getMapX(), player.getLowerMapY())), 0, 120);
             spriter.end();
         }