DEADSOFTWARE

Refactor
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / GameRenderer.java
index 252e77fe144ae79670dd014e9d1b217755692214..389994636043d1b7985bb13a411977d82a8d1b00 100644 (file)
@@ -3,15 +3,19 @@ package ru.deadsoftware.cavedroid.game;
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.GL20;
+import com.badlogic.gdx.graphics.g2d.TextureRegion;
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
+import com.badlogic.gdx.math.Rectangle;
 import ru.deadsoftware.cavedroid.CaveGame;
 import ru.deadsoftware.cavedroid.GameScreen;
 import ru.deadsoftware.cavedroid.game.mobs.Mob;
 import ru.deadsoftware.cavedroid.game.objects.Drop;
-import ru.deadsoftware.cavedroid.misc.Assets;
+import ru.deadsoftware.cavedroid.misc.ControlMode;
 import ru.deadsoftware.cavedroid.misc.Renderer;
 
 import static ru.deadsoftware.cavedroid.GameScreen.GP;
+import static ru.deadsoftware.cavedroid.misc.Assets.guiMap;
+import static ru.deadsoftware.cavedroid.misc.Assets.textureRegions;
 
 public class GameRenderer extends Renderer {
 
@@ -30,25 +34,23 @@ public class GameRenderer extends Renderer {
 
     private void drawWreck(int bl) {
         if (GP.blockDmg > 0) {
-            spriter.draw(Assets.wreck[
-                            10 * GP.blockDmg /
-                                    GameItems.getBlock(bl).getHp()],
-                    GP.curX * 16 - getCamX(),
-                    GP.curY * 16 - getCamY());
+            int index = 10 * GP.blockDmg / GameItems.getBlock(bl).getHp();
+            String key = "break_" + index;
+            spriter.draw(textureRegions.get(key), GP.curX * 16 - getCamX(), GP.curY * 16 - getCamY());
         }
     }
 
     private void drawBlock(int x, int y, boolean drawBG) {
         if (drawBG) {
-            if ((GP.world.getForeMap(x, y) == 0 || GameItems.getBlock(GP.world.getForeMap(x, y)).isTransparent())
-                    && GP.world.getBackMap(x, y) > 0) {
-                spriter.draw(GameItems.getBlock(GP.world.getBackMap(x, y)).getTex(), drawX(x), drawY(y));
-                if (GP.world.getForeMap(x, y) == 0 && x == GP.curX && y == GP.curY)
+            if ((!GP.world.hasForeAt(x, y) || GP.world.getForeMapBlock(x, y).isTransparent())
+                    && GP.world.hasBackAt(x, y)) {
+                spriter.draw(GP.world.getBackMapBlock(x, y).getTex(), drawX(x), drawY(y));
+                if (!GP.world.hasForeAt(x, y) && x == GP.curX && y == GP.curY)
                     drawWreck(GP.world.getBackMap(GP.curX, GP.curY));
             }
         }
-        if (GP.world.getForeMap(x, y) > 0 && GameItems.getBlock(GP.world.getForeMap(x, y)).isBackground() == drawBG) {
-            spriter.draw(GameItems.getBlock(GP.world.getForeMap(x, y)).getTex(), drawX(x), drawY(y));
+        if (GP.world.hasForeAt(x, y) && GP.world.getForeMapBlock(x, y).isBackground() == drawBG) {
+            spriter.draw(GP.world.getForeMapBlock(x, y).getTex(), drawX(x), drawY(y));
             if (x == GP.curX && y == GP.curY)
                 drawWreck(GP.world.getForeMap(GP.curX, GP.curY));
         }
@@ -74,8 +76,8 @@ 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 ((GP.world.getForeMap(x, y) == 0 || GameItems.getBlock(GP.world.getForeMap(x, y)).isTransparent())
-                            && GP.world.getBackMap(x, y) > 0)
+                    if ((!GP.world.hasForeAt(x, y) || GP.world.getForeMapBlock(x, y).isTransparent())
+                            && GP.world.hasBackAt(x, y))
                         shaper.rect(drawX(x), drawY(y), 16, 16);
                 }
             }
@@ -104,11 +106,12 @@ public class GameRenderer extends Renderer {
 
     @SuppressWarnings("IntegerDivisionInFloatingPointContext")
     private void drawCreative() {
-        float x = getWidth() / 2 - (float) Assets.creativeInv.getRegionWidth() / 2;
-        float y = getHeight() / 2 - (float) Assets.creativeInv.getRegionHeight() / 2;
-        spriter.draw(Assets.creativeInv, x, y);
-        spriter.draw(Assets.creativeScr, x + 156,
-                y + 18 + (GP.creativeScroll * (72f / GP.maxCreativeScroll)));
+        TextureRegion creative = textureRegions.get("creative");
+        float x = getWidth() / 2 - (float) creative.getRegionWidth() / 2;
+        float y = getHeight() / 2 - (float) creative.getRegionHeight() / 2;
+        spriter.draw(creative, x, y);
+        spriter.draw(textureRegions.get("handle"), x + 156,
+                y + 18 + (GP.creativeScroll * (72f / GameProc.MAX_CREATIVE_SCROLL)));
         for (int i = GP.creativeScroll * 8; i < GP.creativeScroll * 8 + 40; i++) {
             if (i > 0 && i < GameItems.getItemsSize())
                 if (GameItems.getItem(i).isBlock()) {
@@ -122,55 +125,57 @@ public class GameRenderer extends Renderer {
                 }
         }
         for (int i = 0; i < 9; i++) {
-            if (GP.player.inv[i] > 0)
-                if (GameItems.getItem(GP.player.inv[i]).isBlock()) {
-                    spriter.draw(GameItems.getBlock(GameItems.getBlockIdByItemId(GP.player.inv[i])).getTex(),
-                            x + 8 + i * 18, y + Assets.creativeInv.getRegionHeight() - 24);
+            if (GP.player.inventory[i] > 0)
+                if (GameItems.getItem(GP.player.inventory[i]).isBlock()) {
+                    spriter.draw(GameItems.getBlock(GameItems.getBlockIdByItemId(GP.player.inventory[i])).getTex(),
+                            x + 8 + i * 18, y + creative.getRegionHeight() - 24);
                 } else {
-                    spriter.draw(GameItems.getItem(GP.player.inv[i]).getTex(),
-                            x + 8 + i * 18, y + Assets.creativeInv.getRegionHeight() - 24);
+                    spriter.draw(GameItems.getItem(GP.player.inventory[i]).getTex(),
+                            x + 8 + i * 18, y + creative.getRegionHeight() - 24);
                 }
         }
 
     }
 
     private void drawGUI() {
-        if (GP.world.getForeMap(GP.curX, GP.curY) > 0 ||
-                GP.world.getBackMap(GP.curX, GP.curY) > 0 ||
-                GP.ctrlMode == 1 ||
+        TextureRegion cursor = textureRegions.get("cursor");
+        TextureRegion hotbar = textureRegions.get("hotbar");
+        TextureRegion hotbarSelector = textureRegions.get("hotbar_selector");
+
+        if (GP.world.hasForeAt(GP.curX, GP.curY) ||
+                GP.world.hasBackAt(GP.curX, GP.curY) ||
+                GP.controlMode == ControlMode.CURSOR ||
                 !CaveGame.TOUCH)
-            spriter.draw(Assets.guiCur,
+            spriter.draw(cursor,
                     GP.curX * 16 - getCamX(),
                     GP.curY * 16 - getCamY());
-        spriter.draw(Assets.invBar, getWidth() / 2 - (float) Assets.invBar.getRegionWidth() / 2, 0);
+        spriter.draw(hotbar, getWidth() / 2 - (float) hotbar.getRegionWidth() / 2, 0);
         for (int i = 0; i < 9; i++) {
-            if (GP.player.inv[i] > 0) {
-                if (GameItems.getItem(GP.player.inv[i]).isBlock()) {
-                    spriter.draw(GameItems.getBlock(GameItems.getBlockIdByItemId(GP.player.inv[i])).getTex(),
-                            getWidth() / 2 - (float) Assets.invBar.getRegionWidth() / 2 + 3 + i * 20,
+            if (GP.player.inventory[i] > 0) {
+                if (GameItems.getItem(GP.player.inventory[i]).isBlock()) {
+                    spriter.draw(GameItems.getBlock(GameItems.getBlockIdByItemId(GP.player.inventory[i])).getTex(),
+                            getWidth() / 2 - (float) hotbar.getRegionWidth() / 2 + 3 + i * 20,
                             3);
                 } else {
-                    spriter.draw(GameItems.getItem(GP.player.inv[i]).getTex(),
-                            getWidth() / 2 - (float) Assets.invBar.getRegionWidth() / 2 + 3 + i * 20,
+                    spriter.draw(GameItems.getItem(GP.player.inventory[i]).getTex(),
+                            getWidth() / 2 - (float) hotbar.getRegionWidth() / 2 + 3 + i * 20,
                             3);
                 }
             }
         }
-        spriter.draw(Assets.invBarCur,
-                getWidth() / 2 - (float) Assets.invBar.getRegionWidth() / 2 - 1 + 20 * GP.player.invSlot,
+        spriter.draw(hotbarSelector,
+                getWidth() / 2 - (float) hotbar.getRegionWidth() / 2 - 1 + 20 * GP.player.slot,
                 -1);
     }
 
     private void drawTouchGui() {
-        spriter.draw(Assets.touchArrows[0], 26, getHeight() - 52);
-        spriter.draw(Assets.touchArrows[1], 0, getHeight() - 26);
-        spriter.draw(Assets.touchArrows[2], 26, getHeight() - 26);
-        spriter.draw(Assets.touchArrows[3], 52, getHeight() - 26);
-        spriter.draw(Assets.touchLMB, getWidth() - 52, getHeight() - 26);
-        spriter.draw(Assets.touchRMB, getWidth() - 26, getHeight() - 26);
-        spriter.draw(Assets.touchMode, 78, getHeight() - 26);
-        if (GP.ctrlMode == 1) {
-            spriter.draw(Assets.shade, 83, getHeight() - 21);
+        for (int i = 0; i < guiMap.size; i++) {
+            Rectangle touchKey = guiMap.getValueAt(i);
+            spriter.draw(textureRegions.get(guiMap.getKeyAt(i)),
+                    touchKey.x, touchKey.y, touchKey.width, touchKey.height);
+        }
+        if (GP.controlMode == ControlMode.CURSOR) {
+            spriter.draw(textureRegions.get("shade"), 83, getHeight() - 21);
         }
     }
 
@@ -188,11 +193,11 @@ public class GameRenderer extends Renderer {
         Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
 
         spriter.begin();
-        switch (CaveGame.STATE) {
-            case GAME_PLAY:
+        switch (CaveGame.GAME_STATE) {
+            case PLAY:
                 drawGamePlay();
                 break;
-            case GAME_CREATIVE_INV:
+            case CREATIVE_INV:
                 drawGamePlay();
                 drawCreative();
                 break;
@@ -202,20 +207,20 @@ public class GameRenderer extends Renderer {
 
         spriter.end();
 
-        if(GameScreen.SHOW_MAP) {
+        if (GameScreen.SHOW_MAP) {
             //DRAW MAP
             shaper.begin(ShapeRenderer.ShapeType.Filled);
             shaper.setColor(Color.LIGHT_GRAY);
             shaper.rect(0, 0, GP.world.getWidth(), 128);
             for (int y = 128; y < 256; y++) {
                 for (int x = 0; x < getWidth(); x++) {
-                    if (GP.world.getForeMap(x, y) > 0 || GP.world.getBackMap(x, y) > 0) {
+                    if (GP.world.hasForeAt(x, y) || GP.world.hasBackAt(x, y)) {
                         if (GameItems.isWater(GP.world.getForeMap(x, y))) {
                             shaper.setColor(Color.BLUE);
                         } else if (GameItems.isLava(GP.world.getForeMap(x, y))) {
                             shaper.setColor(Color.RED);
                         } else {
-                            if (GP.world.getForeMap(x, y) > 0) {
+                            if (GP.world.hasForeAt(x, y)) {
                                 shaper.setColor(Color.BLACK);
                             } else {
                                 shaper.setColor(Color.DARK_GRAY);
@@ -230,9 +235,9 @@ public class GameRenderer extends Renderer {
             shaper.end();
             //=================
         }
-        spriter.begin();
 
         if (GameScreen.SHOW_DEBUG) {
+            spriter.begin();
             drawString("FPS: " + GameScreen.FPS, 0, 0);
             drawString("X: " + (int) (GP.player.pos.x / 16), 0, 10);
             drawString("Y: " + (int) (GP.player.pos.y / 16), 0, 20);
@@ -241,10 +246,10 @@ public class GameRenderer extends Renderer {
             drawString("Mobs: " + GP.mobs.size(), 0, 50);
             drawString("Drops: " + GP.drops.size(), 0, 60);
             drawString("Block: " + GameItems.getBlockKey(GP.world.getForeMap(GP.curX, GP.curY)), 0, 70);
-            drawString("Hand: " + GameItems.getItemKey(GP.player.inv[GP.player.invSlot]), 0, 80);
+            drawString("Hand: " + GameItems.getItemKey(GP.player.inventory[GP.player.slot]), 0, 80);
             drawString("Game mode: " + GP.player.gameMode, 0, 90);
+            spriter.end();
         }
-        spriter.end();
 
 
     }