From be2c0360e90fbeb3496e3960fe5aa1c30fd8926c Mon Sep 17 00:00:00 2001 From: fred-boy Date: Sat, 21 Apr 2018 00:25:51 +0700 Subject: [PATCH 01/16] Fix README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c7ee65b..ec43d0f 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Written in Java using libGDX framework.
### Android `./gradlew android:assemble`
### Desktop -`./gradlew desktop:assemble`
+`./gradlew desktop:dist`
*** On Windows, use `gradlew.bat` instead of `./gradlew` -- 2.29.2 From 20c99e213303aee769c1bf6320881badb524384f Mon Sep 17 00:00:00 2001 From: fred-boy Date: Sat, 21 Apr 2018 18:30:09 +0700 Subject: [PATCH 02/16] Fix water in the sky --- core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java | 6 ------ core/src/ru/deadsoftware/cavecraft/game/WorldGen.java | 6 +++--- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java b/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java index d104b2f..5a82102 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java @@ -220,12 +220,6 @@ public class GameRenderer { } spriteBatch.end(); - shapeRenderer.begin(ShapeRenderer.ShapeType.Line); - shapeRenderer.setColor(Color.ORANGE); - shapeRenderer.line(0-camera.position.x, 128*16-camera.position.y, - gameProc.world.getWidth()*16-camera.position.x, 128*16-camera.position.y); - shapeRenderer.end(); - if (CaveGame.TOUCH) { spriteBatch.begin(); drawTouchGui(); diff --git a/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java b/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java index 48c8db8..32cb8f9 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java +++ b/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java @@ -81,9 +81,9 @@ public class WorldGen { } } for (int y = height-64; y2 && x Date: Sat, 21 Apr 2018 19:08:04 +0700 Subject: [PATCH 03/16] Fix bugs --- .../ru/deadsoftware/cavecraft/GameScreen.java | 5 +++ .../ru/deadsoftware/cavecraft/GameState.java | 1 + .../cavecraft/game/GameInputHandler.java | 41 +++++++++++-------- .../deadsoftware/cavecraft/game/GameProc.java | 4 +- .../cavecraft/game/GameRenderer.java | 2 +- .../cavecraft/game/GameWorld.java | 17 ++++++-- .../deadsoftware/cavecraft/game/WorldGen.java | 11 ++--- 7 files changed, 53 insertions(+), 28 deletions(-) diff --git a/core/src/ru/deadsoftware/cavecraft/GameScreen.java b/core/src/ru/deadsoftware/cavecraft/GameScreen.java index e1eea18..2a2c262 100644 --- a/core/src/ru/deadsoftware/cavecraft/GameScreen.java +++ b/core/src/ru/deadsoftware/cavecraft/GameScreen.java @@ -35,6 +35,11 @@ public class GameScreen implements Screen { @Override public void render(float delta) { + if (CaveGame.STATE == GameState.RESTART) { + gameProc = new GameProc(); + Gdx.input.setInputProcessor(new InputHandler(gameProc)); + CaveGame.STATE = GameState.GAME_PLAY; + } FPS = (int)(1/delta); gameProc.update(delta); gameProc.renderer.render(); diff --git a/core/src/ru/deadsoftware/cavecraft/GameState.java b/core/src/ru/deadsoftware/cavecraft/GameState.java index 9de340d..dd6b021 100644 --- a/core/src/ru/deadsoftware/cavecraft/GameState.java +++ b/core/src/ru/deadsoftware/cavecraft/GameState.java @@ -1,6 +1,7 @@ package ru.deadsoftware.cavecraft; public enum GameState { + RESTART, GAME_PLAY, GAME_CREATIVE_INV } diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameInputHandler.java b/core/src/ru/deadsoftware/cavecraft/game/GameInputHandler.java index 89fba69..dc19afd 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameInputHandler.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameInputHandler.java @@ -13,9 +13,9 @@ public class GameInputHandler { this.gameProc = gameProc; } - private void wasdPressed(int keyCode) { + private void wasdPressed(int keycode) { if (gameProc.ctrlMode==0 || !CaveGame.TOUCH) { - switch (keyCode) { + switch (keycode) { case Input.Keys.A: gameProc.player.moveX.x = -GamePhysics.PL_SPEED; gameProc.player.dir = 0; @@ -26,7 +26,7 @@ public class GameInputHandler { break; } } else if (CaveGame.TOUCH){ - switch (keyCode) { + switch (keycode) { case Input.Keys.A: gameProc.cursorX--; break; @@ -43,11 +43,13 @@ public class GameInputHandler { } } - public void keyDown(int keyCode) { - if (keyCode == Input.Keys.W || keyCode == Input.Keys.A || - keyCode == Input.Keys.S || keyCode == Input.Keys.D) { - wasdPressed(keyCode); - } else switch (keyCode) { + public void keyDown(int keycode) { + gameProc.isKeyDown = true; + gameProc.keyDownCode = keycode; + if (keycode == Input.Keys.W || keycode == Input.Keys.A || + keycode == Input.Keys.S || keycode == Input.Keys.D) { + wasdPressed(keycode); + } else switch (keycode) { case Input.Keys.ALT_LEFT: if (CaveGame.TOUCH) { gameProc.ctrlMode++; @@ -74,11 +76,14 @@ public class GameInputHandler { if (CaveGame.STATE == GameState.GAME_PLAY) CaveGame.STATE = GameState.GAME_CREATIVE_INV; else CaveGame.STATE = GameState.GAME_PLAY; break; + + case Input.Keys.N: + CaveGame.STATE = GameState.RESTART; } } - public void keyUp(int keyCode) { - switch (keyCode) { + public void keyUp(int keycode) { + switch (keycode) { case Input.Keys.A: case Input.Keys.D: gameProc.player.moveX.x = 0; break; @@ -98,16 +103,14 @@ public class GameInputHandler { screenXgameProc.renderer.camera.viewportHeight/2-Assets.creativeInv.getRegionHeight()/2 && screenY= 0 && item < Items.BLOCKS.size) { for (int i = 8; i > 0; i--) { gameProc.player.inventory[i] = gameProc.player.inventory[i - 1]; } - if (item >= 0 && item < Items.BLOCKS.size) gameProc.player.inventory[0] = item; - } catch (Exception e) { - Gdx.app.error("GameInputHandler", e.toString()); + gameProc.player.inventory[0] = item; } } else if (CaveGame.STATE == GameState.GAME_CREATIVE_INV) { CaveGame.STATE = GameState.GAME_PLAY; @@ -121,6 +124,10 @@ public class GameInputHandler { } public void touchUp(int screenX, int screenY, int button) { + if (gameProc.isKeyDown) { + keyUp(gameProc.keyDownCode); + gameProc.isKeyDown = false; + } if (gameProc.isTouchDown) { if (button == Input.Buttons.RIGHT){ gameProc.world.placeToForeground(gameProc.cursorX, gameProc.cursorY, diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameProc.java b/core/src/ru/deadsoftware/cavecraft/game/GameProc.java index 7ded79f..6a2bf04 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameProc.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameProc.java @@ -26,8 +26,8 @@ public class GameProc { public int invSlot; public int ctrlMode; - public boolean isTouchDown = false; - public int touchDownX, touchDownY; + public boolean isTouchDown, isKeyDown; + public int touchDownX, touchDownY, keyDownCode; public int touchDownButton; public long touchDownTime; diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java b/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java index 5a82102..b8b5324 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java @@ -231,7 +231,7 @@ public class GameRenderer { drawString("CaveCraft "+CaveGame.VERSION, 0, 0); drawString("FPS: "+GameScreen.FPS, 0, 20); drawString("X: "+(int)(gameProc.player.position.x/16), 0, 40); - drawString("Y: "+(int)(gameProc.player.position.y/16), 0, 60); + drawString("Y: "+(gameProc.world.getHeight()-(int)(gameProc.player.position.y/16)), 0, 60); drawString("Seed: "+WorldGen.getSeed(), 0, 80); drawString("Mobs: "+gameProc.mobs.size, 0, 100); fontBatch.end(); diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameWorld.java b/core/src/ru/deadsoftware/cavecraft/game/GameWorld.java index c4655bf..e6b0b00 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameWorld.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameWorld.java @@ -3,6 +3,8 @@ package ru.deadsoftware.cavecraft.game; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.ArrayMap; +import ru.deadsoftware.cavecraft.CaveGame; +import ru.deadsoftware.cavecraft.GameState; import ru.deadsoftware.cavecraft.Items; public class GameWorld { @@ -84,13 +86,22 @@ public class GameWorld { while (!found) { for (int i = 0; i < getHeight(); i++) { if (getForeMap((int)x, i)>0 && - Items.BLOCKS.getValueAt(getForeMap((int)x, i)).collision) { - y = i-3; + Items.BLOCKS.getValueAt(getForeMap((int)x, i)).collision && + getForeMap((int)x, i-1)==0 && getForeMap((int)x, i-1)==0) { + y = i-2; found = true; break; } } - if (!found) x--; + if (!found) { + x--; + if (x<0) x=getWidth()-1; + if ((int)x == getWidth()/2+1) { + x--; + y=0; + break; + } + } } x = x*16 + 4; y *= 16; diff --git a/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java b/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java index 32cb8f9..954bdff 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java +++ b/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java @@ -54,16 +54,14 @@ public class WorldGen { genWorld(width, height, TimeUtils.millis()); } - static void genWorld(int width, int height, long s) { + static void genWorld(int width, int height, long worldseed) { int dirtH; - seed = s; + seed = worldseed; rand = new RandomXS128(seed); foreMap = new int[width][height]; backMap = new int[width][height]; hMap = genLandscape(width, height/4, height/8, height/2); for (int x=0; x2 && x Date: Sat, 21 Apr 2018 23:48:22 +0700 Subject: [PATCH 04/16] Ciclic worlds --- .../cavecraft/game/GamePhysics.java | 29 ++++----- .../deadsoftware/cavecraft/game/GameProc.java | 12 ++-- .../cavecraft/game/GameRenderer.java | 28 +++------ .../cavecraft/game/GameWorld.java | 61 +++++++++---------- .../deadsoftware/cavecraft/game/WorldGen.java | 8 ++- 5 files changed, 62 insertions(+), 76 deletions(-) diff --git a/core/src/ru/deadsoftware/cavecraft/game/GamePhysics.java b/core/src/ru/deadsoftware/cavecraft/game/GamePhysics.java index 3bcbc9b..2fdc29b 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GamePhysics.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GamePhysics.java @@ -1,6 +1,9 @@ package ru.deadsoftware.cavecraft.game; -import com.badlogic.gdx.math.*; +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.Items; import ru.deadsoftware.cavecraft.game.mobs.Mob; @@ -23,18 +26,18 @@ public class GamePhysics { int bl = 0; switch (dir) { case 0: - if ((int)((rect.x+(rect.width/2))/16) - 1>=0) - bl = gameProc.world.getForeMap( - (int)((rect.x+(rect.width/2))/16) - 1, - (int)(rect.y/16)+1); + bl = gameProc.world.getForeMap( + (int)((rect.x+(rect.width/2))/16) - 1, + (int)(rect.y/16)+1); if (gameProc.world.getForeMap((int)((rect.x+(rect.width/2))/16)-1,(int)(rect.y/16))>0) bl=0; + if (gameProc.world.getForeMap((int)((rect.x+(rect.width/2))/16)-1,(int)(rect.y/16)-1)>0) bl=0; break; case 1: - if ((int)((rect.x+(rect.width/2))/16) + 10) bl=0; + if (gameProc.world.getForeMap((int)((rect.x+(rect.width/2))/16)+1,(int)(rect.y/16)-1)>0) bl=0; break; default: bl=0; @@ -48,9 +51,7 @@ public class GamePhysics { int minY = (int) ((rect.y+rect.height/2)/16)-4; int maxX = (int) ((rect.x+rect.width/2)/16)+4; int maxY = (int) ((rect.y+rect.height/2)/16)+4; - if (minX<0) minX=0; if (minY<0) minY=0; - if (maxX>gameProc.world.getWidth()) maxX = gameProc.world.getWidth(); if (maxY>gameProc.world.getHeight()) maxY = gameProc.world.getHeight(); for (int y=minY; y=gameProc.world.getWidth()*16) - pl.position.sub(pl.moveX); if (checkColl(pl.getRect())) { if (pl.canJump && !pl.flyMode) pl.position.y-=8; if (checkColl(pl.getRect())) { @@ -119,9 +117,6 @@ public class GamePhysics { } mob.moveY.add(gravity); mob.position.add(mob.moveX); - if (mob.position.x<32 || - mob.position.x+mob.width>gameProc.world.getWidth()*16-32) - mob.position.sub(mob.moveX); if (checkColl(mob.getRect())) { int d = 0; if (mob.moveX.x<0) d=1; else if (mob.moveX.x>0) d=-1; diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameProc.java b/core/src/ru/deadsoftware/cavecraft/game/GameProc.java index 6a2bf04..6c532ac 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameProc.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameProc.java @@ -2,7 +2,6 @@ package ru.deadsoftware.cavecraft.game; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; -import com.badlogic.gdx.math.RandomXS128; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.TimeUtils; import ru.deadsoftware.cavecraft.*; @@ -37,8 +36,8 @@ public class GameProc { physics = new GamePhysics(this); player = new Player(world.getSpawnPoint()); mobs = new Array(); - for (int i=0; i<1024/64; i++) { - mobs.add(new Pig(i*16*64, 0, world)); + for (int i=0; i= world.getWidth()) cursorX = world.getWidth()-1; if (cursorY < 0) cursorY = 0; if (cursorY >= world.getHeight()) cursorY = world.getHeight()-1; if (cursorX<(player.position.x+player.texWidth/2)/16) diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java b/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java index b8b5324..9440938 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java @@ -1,7 +1,6 @@ package ru.deadsoftware.cavecraft.game; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.g2d.SpriteBatch; @@ -9,8 +8,8 @@ import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.math.Vector2; import ru.deadsoftware.cavecraft.Assets; import ru.deadsoftware.cavecraft.CaveGame; -import ru.deadsoftware.cavecraft.Items; import ru.deadsoftware.cavecraft.GameScreen; +import ru.deadsoftware.cavecraft.Items; import ru.deadsoftware.cavecraft.game.mobs.Mob; import ru.deadsoftware.cavecraft.game.objects.Player; @@ -53,22 +52,16 @@ public class GameRenderer { Assets.minecraftFont.draw(fontBatch, str, x, y); } - private void drawWorld() { - int minX = (int) (camera.position.x/16); - int minY = (int) (camera.position.y/16); + private void drawWorldBackground() { + int minX = (int) (camera.position.x/16)-1; + int minY = (int) (camera.position.y/16)-1; int maxX = (int) ((camera.position.x+camera.viewportWidth)/16)+1; int maxY = (int) ((camera.position.y+camera.viewportHeight)/16)+1; - if (minX<0) minX=0; if (minY<0) minY=0; - if (maxX>gameProc.world.getWidth()) maxX = gameProc.world.getWidth(); if (maxY>gameProc.world.getHeight()) maxY = gameProc.world.getHeight(); for (int y=minY; y0){/* && - !Items.BLOCKS.getValueAt(gameProc.world.getForeMap(x,y)).foreground) { - spriteBatch.draw( - Items.BLOCKS.getValueAt(gameProc.world.getForeMap(x,y)).getTexture(), - x * 16 - camera.position.x,y * 16 - camera.position.y);*/ + if (gameProc.world.getForeMap(x,y)>0){ } else if (gameProc.world.getBackMap(x,y)>0) { spriteBatch.draw( Items.BLOCKS.getValueAt(gameProc.world.getBackMap(x,y)).getTexture(), @@ -81,18 +74,15 @@ public class GameRenderer { } private void drawWorldForeground(){ - int minX = (int) (camera.position.x/16); - int minY = (int) (camera.position.y/16); + int minX = (int) (camera.position.x/16)-1; + int minY = (int) (camera.position.y/16)-1; int maxX = (int) ((camera.position.x+camera.viewportWidth)/16)+1; int maxY = (int) ((camera.position.y+camera.viewportHeight)/16)+1; - if (minX<0) minX=0; if (minY<0) minY=0; - if (maxX>gameProc.world.getWidth()) maxX = gameProc.world.getWidth(); if (maxY>gameProc.world.getHeight()) maxY = gameProc.world.getHeight(); for (int y=minY; y0) { /*&& - Items.BLOCKS.getValueAt(gameProc.world.getForeMap(x,y)).foreground) {*/ + if (gameProc.world.getForeMap(x,y)>0) { spriteBatch.draw( Items.BLOCKS.getValueAt(gameProc.world.getForeMap(x,y)).getTexture(), x * 16 - camera.position.x,y * 16 - camera.position.y); @@ -197,7 +187,7 @@ public class GameRenderer { } private void drawGamePlay() { - drawWorld(); + drawWorldBackground(); Mob.animateMobs(); for (Mob mob : gameProc.mobs) drawMob(mob); drawPlayer(gameProc.player); diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameWorld.java b/core/src/ru/deadsoftware/cavecraft/game/GameWorld.java index e6b0b00..ab89dd7 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameWorld.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameWorld.java @@ -2,9 +2,6 @@ package ru.deadsoftware.cavecraft.game; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.utils.ArrayMap; -import ru.deadsoftware.cavecraft.CaveGame; -import ru.deadsoftware.cavecraft.GameState; import ru.deadsoftware.cavecraft.Items; public class GameWorld { @@ -32,17 +29,29 @@ public class GameWorld { } public int getForeMap(int x, int y) { - int ret = 0; + int map = 0; try { - ret = foreMap[x][y]; + if (x<0) { + x = x % (getWidth()-1)-1; + x = getWidth()- Math.abs(x); + } else if (x>0) { + x = x % (getWidth()-1)+1; + } + map = foreMap[x][y]; } catch (ArrayIndexOutOfBoundsException e) { Gdx.app.error("GameWorld",e.toString()); } - return ret; + return map; } public void setForeMap(int x, int y, int value) { try { + if (x<0) { + x = x % (getWidth()-1)-1; + x = getWidth()- Math.abs(x); + } else if (x>0) { + x = x % (getWidth()-1)+1; + } foreMap[x][y] = value; } catch (ArrayIndexOutOfBoundsException e) { Gdx.app.error("GameWorld", e.toString()); @@ -50,17 +59,29 @@ public class GameWorld { } public int getBackMap(int x, int y) { - int ret = 0; + int map = 0; try { - ret = backMap[x][y]; + if (x<0) { + x = x % (getWidth()-1)-1; + x = getWidth()- Math.abs(x); + } else if (x>0) { + x = x % (getWidth()-1)+1; + } + map = backMap[x][y]; } catch (ArrayIndexOutOfBoundsException e) { Gdx.app.error("GameWorld",e.toString()); } - return ret; + return map; } public void setBackMap(int x, int y, int value) { try { + if (x<0) { + x = x % (getWidth()-1)-1; + x = getWidth()- Math.abs(x); + } else if (x>0) { + x = x % (getWidth()-1)+1; + } backMap[x][y] = value; } catch (ArrayIndexOutOfBoundsException e) { Gdx.app.error("GameWorld", e.toString()); @@ -81,28 +102,6 @@ public class GameWorld { public Vector2 getSpawnPoint() { float x=0, y=0; - boolean found = false; - x = getWidth()/2; - while (!found) { - for (int i = 0; i < getHeight(); i++) { - if (getForeMap((int)x, i)>0 && - Items.BLOCKS.getValueAt(getForeMap((int)x, i)).collision && - getForeMap((int)x, i-1)==0 && getForeMap((int)x, i-1)==0) { - y = i-2; - found = true; - break; - } - } - if (!found) { - x--; - if (x<0) x=getWidth()-1; - if ((int)x == getWidth()/2+1) { - x--; - y=0; - break; - } - } - } x = x*16 + 4; y *= 16; return new Vector2(x,y); diff --git a/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java b/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java index 954bdff..ccbe50a 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java +++ b/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java @@ -1,8 +1,6 @@ package ru.deadsoftware.cavecraft.game; -import com.badlogic.gdx.Gdx; import com.badlogic.gdx.math.RandomXS128; -import com.badlogic.gdx.utils.ArrayMap; import com.badlogic.gdx.utils.TimeUtils; public class WorldGen { @@ -23,6 +21,10 @@ public class WorldGen { res[0] = mid; for (int i=1; iwidth-(max-min)) { + if (res[i-1]+tres[0]) t=-Math.abs(t); + } res[i] = res[i-1] + t; if (res[i]max) res[i] = max; @@ -60,7 +62,7 @@ public class WorldGen { rand = new RandomXS128(seed); foreMap = new int[width][height]; backMap = new int[width][height]; - hMap = genLandscape(width, height/4, height/8, height/2); + hMap = genLandscape(width, height/8*3, height/8, height/2); for (int x=0; x Date: Sun, 22 Apr 2018 00:24:32 +0700 Subject: [PATCH 05/16] Fix controls on Android --- .../cavecraft/game/GamePhysics.java | 1 + .../deadsoftware/cavecraft/game/GameProc.java | 42 +++++++++---------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/core/src/ru/deadsoftware/cavecraft/game/GamePhysics.java b/core/src/ru/deadsoftware/cavecraft/game/GamePhysics.java index 2fdc29b..b20575a 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GamePhysics.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GamePhysics.java @@ -24,6 +24,7 @@ public class GamePhysics { private boolean checkJump(Rectangle rect, int dir) { int bl = 0; + if (rect.x<0) rect.x-=16; switch (dir) { case 0: bl = gameProc.world.getForeMap( diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameProc.java b/core/src/ru/deadsoftware/cavecraft/game/GameProc.java index 6c532ac..f3ea4ac 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameProc.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameProc.java @@ -52,26 +52,22 @@ public class GameProc { } private void moveCursor() { - if (ctrlMode==0 && CaveGame.TOUCH) { - if (player.canJump) { - cursorX = (int) (player.position.x + player.texWidth / 2) / 16; - if (player.dir == 0) cursorX--; + if (ctrlMode == 0 && CaveGame.TOUCH) { + cursorX = (int) (player.position.x + player.texWidth / 2) / 16; + if (player.dir == 0) cursorX--; else cursorX++; - cursorY = (int) (player.position.y + player.texWidth) / 16; - if (!isAutoselectable(cursorX, cursorY)) { - cursorY++; - } - if (!isAutoselectable(cursorX, cursorY)) { - cursorY++; - } - if (!isAutoselectable(cursorX, cursorY)) { - if (player.dir == 0) cursorX++; - else cursorX--; - } - } else { - cursorX = (int) (player.position.x + player.texWidth / 2) / 16; - cursorY = (int) (player.position.y + player.height+8)/16; + cursorY = (int) (player.position.y + player.texWidth) / 16; + if (!isAutoselectable(cursorX, cursorY)) { + cursorY++; } + if (!isAutoselectable(cursorX, cursorY)) { + cursorY++; + } + if (!isAutoselectable(cursorX, cursorY)) { + if (player.dir == 0) cursorX++; + else cursorX--; + } + if (player.position.x<0) cursorX--; } else if (!CaveGame.TOUCH){ cursorX = (int)(Gdx.input.getX()* (renderer.camera.viewportWidth/GameScreen.getWidth())+renderer.camera.position.x)/16; @@ -86,10 +82,12 @@ public class GameProc { private void checkCursorBounds() { if (cursorY < 0) cursorY = 0; if (cursorY >= world.getHeight()) cursorY = world.getHeight()-1; - if (cursorX<(player.position.x+player.texWidth/2)/16) - player.dir=0; - if (cursorX>(player.position.x+player.texWidth/2)/16) - player.dir=1; + if (ctrlMode==1) { + if (cursorX*16+8player.position.x+player.texWidth/2) + player.dir=1; + } } public void update(float delta) { -- 2.29.2 From 7e901796f1eb536505728f34fca8c0ea5204cf24 Mon Sep 17 00:00:00 2001 From: fred-boy Date: Sun, 22 Apr 2018 00:29:56 +0700 Subject: [PATCH 06/16] Update version --- android/build.gradle | 4 ++-- build.gradle | 2 +- core/src/ru/deadsoftware/cavecraft/CaveGame.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 114e1b5..2b6fa39 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -21,8 +21,8 @@ android { applicationId "ru.deadsoftware.cavecraft" minSdkVersion 9 targetSdkVersion 20 - versionCode 1 - versionName "alpha0.1" + versionCode 2 + versionName "alpha0.2" } buildTypes { release { diff --git a/build.gradle b/build.gradle index 9d3557f..51e0e43 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ allprojects { apply plugin: "eclipse" apply plugin: "idea" - version = 'alpha0.1' + version = 'alpha0.2' ext { appName = "CaveCraft" gdxVersion = '1.9.7' diff --git a/core/src/ru/deadsoftware/cavecraft/CaveGame.java b/core/src/ru/deadsoftware/cavecraft/CaveGame.java index 57f560b..99e4f68 100644 --- a/core/src/ru/deadsoftware/cavecraft/CaveGame.java +++ b/core/src/ru/deadsoftware/cavecraft/CaveGame.java @@ -4,7 +4,7 @@ import com.badlogic.gdx.Game; public class CaveGame extends Game { - public static final String VERSION = "alpha 0.1"; + public static final String VERSION = "alpha 0.2"; public static GameState STATE; -- 2.29.2 From e0aa1520178df544807f3e803b4b6169346b07fb Mon Sep 17 00:00:00 2001 From: fred-boy Date: Sun, 22 Apr 2018 01:22:03 +0700 Subject: [PATCH 07/16] TP player when crossing world's edge --- .../deadsoftware/cavecraft/game/GamePhysics.java | 5 ++++- .../ru/deadsoftware/cavecraft/game/GameProc.java | 1 - .../cavecraft/game/GameRenderer.java | 4 ++++ .../deadsoftware/cavecraft/game/GameWorld.java | 16 ++++++++-------- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/core/src/ru/deadsoftware/cavecraft/game/GamePhysics.java b/core/src/ru/deadsoftware/cavecraft/game/GamePhysics.java index b20575a..07587e6 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GamePhysics.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GamePhysics.java @@ -24,7 +24,6 @@ public class GamePhysics { private boolean checkJump(Rectangle rect, int dir) { int bl = 0; - if (rect.x<0) rect.x-=16; switch (dir) { case 0: bl = gameProc.world.getForeMap( @@ -95,6 +94,8 @@ public class GamePhysics { while (checkColl(pl.getRect())) pl.position.x += d; } } + if (pl.position.x+pl.texWidth/2<0) pl.position.x+=gameProc.world.getWidth()*16; + if (pl.position.x+pl.texWidth/2>gameProc.world.getWidth()*16) pl.position.x-=gameProc.world.getWidth()*16; if (pl.position.y > gameProc.world.getHeight()*16) { pl.position = gameProc.world.getSpawnPoint().cpy(); } @@ -118,6 +119,8 @@ public class GamePhysics { } mob.moveY.add(gravity); mob.position.add(mob.moveX); + if (mob.position.x+mob.width/2<0) mob.position.x+=gameProc.world.getWidth()*16; + if (mob.position.x+mob.width/2>gameProc.world.getWidth()*16) mob.position.x-=gameProc.world.getWidth()*16; if (checkColl(mob.getRect())) { int d = 0; if (mob.moveX.x<0) d=1; else if (mob.moveX.x>0) d=-1; diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameProc.java b/core/src/ru/deadsoftware/cavecraft/game/GameProc.java index f3ea4ac..2cdc302 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameProc.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameProc.java @@ -67,7 +67,6 @@ public class GameProc { if (player.dir == 0) cursorX++; else cursorX--; } - if (player.position.x<0) cursorX--; } else if (!CaveGame.TOUCH){ cursorX = (int)(Gdx.input.getX()* (renderer.camera.viewportWidth/GameScreen.getWidth())+renderer.camera.position.x)/16; diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java b/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java index 9440938..009d9b7 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java @@ -92,8 +92,12 @@ public class GameRenderer { } private void drawMob(Mob mob) { + mob.draw(spriteBatch, + mob.position.x-camera.position.x-gameProc.world.getWidth()*16, mob.position.y-camera.position.y); mob.draw(spriteBatch, mob.position.x-camera.position.x, mob.position.y-camera.position.y); + mob.draw(spriteBatch, + mob.position.x-camera.position.x+gameProc.world.getWidth()*16, mob.position.y-camera.position.y); } private void drawPlayer(Player pl) { diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameWorld.java b/core/src/ru/deadsoftware/cavecraft/game/GameWorld.java index ab89dd7..daa00c0 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameWorld.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameWorld.java @@ -32,10 +32,10 @@ public class GameWorld { int map = 0; try { if (x<0) { - x = x % (getWidth()-1)-1; + x = x % (getWidth()); x = getWidth()- Math.abs(x); } else if (x>0) { - x = x % (getWidth()-1)+1; + x = x % (getWidth()); } map = foreMap[x][y]; } catch (ArrayIndexOutOfBoundsException e) { @@ -47,10 +47,10 @@ public class GameWorld { public void setForeMap(int x, int y, int value) { try { if (x<0) { - x = x % (getWidth()-1)-1; + x = x % (getWidth()); x = getWidth()- Math.abs(x); } else if (x>0) { - x = x % (getWidth()-1)+1; + x = x % (getWidth()); } foreMap[x][y] = value; } catch (ArrayIndexOutOfBoundsException e) { @@ -62,10 +62,10 @@ public class GameWorld { int map = 0; try { if (x<0) { - x = x % (getWidth()-1)-1; + x = x % (getWidth()); x = getWidth()- Math.abs(x); } else if (x>0) { - x = x % (getWidth()-1)+1; + x = x % (getWidth()); } map = backMap[x][y]; } catch (ArrayIndexOutOfBoundsException e) { @@ -77,10 +77,10 @@ public class GameWorld { public void setBackMap(int x, int y, int value) { try { if (x<0) { - x = x % (getWidth()-1)-1; + x = x % (getWidth()); x = getWidth()- Math.abs(x); } else if (x>0) { - x = x % (getWidth()-1)+1; + x = x % (getWidth()); } backMap[x][y] = value; } catch (ArrayIndexOutOfBoundsException e) { -- 2.29.2 From ae127044500e62f503403562d2b80c7d59235831 Mon Sep 17 00:00:00 2001 From: fred-boy Date: Sun, 22 Apr 2018 02:56:57 +0700 Subject: [PATCH 08/16] Add icon on desktop --- android/assets/icons/icon128.png | Bin 0 -> 3647 bytes android/assets/icons/icon16.png | Bin 0 -> 661 bytes android/assets/icons/icon32.png | Bin 0 -> 1258 bytes .../cavecraft/desktop/DesktopLauncher.java | 4 ++++ 4 files changed, 4 insertions(+) create mode 100644 android/assets/icons/icon128.png create mode 100644 android/assets/icons/icon16.png create mode 100644 android/assets/icons/icon32.png diff --git a/android/assets/icons/icon128.png b/android/assets/icons/icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..7f15a2d8e384f9a20a7aa244e5a8a1abe8e87dcd GIT binary patch literal 3647 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 literal 0 HcmV?d00001 diff --git a/android/assets/icons/icon32.png b/android/assets/icons/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..30a3ecaa714278865db187aa5e3fd14ab2f4bff5 GIT binary patch literal 1258 zcmVe|%g(OIpB%QcA|MnsBi=W(+Qx4R*sE&P*c;OEzFGn_t^Ra3=FY zvMs@jCN?Z&VOiA;S;Uxm%h>dSDHj@IhTbeV2+2axGCo>8osi5IPrL#SS&^?79$>yuY0Dnv~<$%_n%H? zn47G<&*z&nYidTqJT53GKtvD`oK7bIPN$Rc@o@l3N=o!I(P$J!Q96M$z^WO6EHfi3 z=9#W#YWiHO)!Eru0M37VBf&_WZ+-l!HH_VEHvqw45WC%uh|u%RbwofA6T?8S1Z-Lwm#fS+Bm&=u20J8}m5HOD|;7Z!3?Jh{P7xpoA>MVkgv!R$g??wc;(|8}AA6?d9W0C2Rr1`#0~4&!pU z)(=A~k5ywj*+fS8B>{M{@95vA`y?YD&{8TuW2NfFpC4%F@QX(P=>IZ6^X@VLZjQ|( z0)0b4j=ZI&`7=!?=-k(oQRwEbmoxRl7MiFUS|OHsinbIW7!2y)cDo%wk9&X$R~~&s z(})PQRmJLj!p@rAlWB+u9*<{@kEJw$#?GZTHv0`pj52SZSQzj6D6KW19DbjidCeTu)c87<lfHqk_W)$ zYtu9y>Oe#&EG$Gs2%PJrW@|A3HwHf7$@(|-b**VNLP`NN##%}qyn2xeS3Ur>+luHL z3L+xxefc%L?9w9UXxmvXcE68^aHzhV;lc9&O#ONvfaeUnT)?=|4tE;Pqo}HadC=`kX0)YzPeyTqsfP5hDANmuE0e_^aPyU1LFJvMP UA|lr6;s5{u07*qoM6N<$g7BG4g#Z8m literal 0 HcmV?d00001 diff --git a/desktop/src/ru/deadsoftware/cavecraft/desktop/DesktopLauncher.java b/desktop/src/ru/deadsoftware/cavecraft/desktop/DesktopLauncher.java index e640ebb..533b65d 100644 --- a/desktop/src/ru/deadsoftware/cavecraft/desktop/DesktopLauncher.java +++ b/desktop/src/ru/deadsoftware/cavecraft/desktop/DesktopLauncher.java @@ -1,5 +1,6 @@ package ru.deadsoftware.cavecraft.desktop; +import com.badlogic.gdx.Files; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; import ru.deadsoftware.cavecraft.CaveGame; @@ -7,6 +8,9 @@ import ru.deadsoftware.cavecraft.CaveGame; public class DesktopLauncher { public static void main (String[] arg) { LwjglApplicationConfiguration config = new LwjglApplicationConfiguration(); + config.addIcon("icons/icon128.png", Files.FileType.Internal); + config.addIcon("icons/icon32.png", Files.FileType.Internal); + config.addIcon("icons/icon16.png", Files.FileType.Internal); config.foregroundFPS = 60; config.title = "CaveCraft"; config.width = 960; -- 2.29.2 From 94cf380b63371b09f2e5c52875e5497dfc314328 Mon Sep 17 00:00:00 2001 From: fred-boy Date: Sun, 22 Apr 2018 03:03:16 +0700 Subject: [PATCH 09/16] Fix trees --- core/src/ru/deadsoftware/cavecraft/game/WorldGen.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java b/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java index ccbe50a..fb1509e 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java +++ b/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java @@ -90,7 +90,9 @@ public class WorldGen { } } if (x>2 && x Date: Sun, 22 Apr 2018 02:47:38 +0700 Subject: [PATCH 10/16] Add menu screen and game logo --- android/assets/gamelogo.png | Bin 0 -> 4888 bytes android/assets/gamelogo_s.png | Bin 0 -> 4560 bytes .../src/ru/deadsoftware/cavecraft/Assets.java | 4 ++ .../ru/deadsoftware/cavecraft/CaveGame.java | 2 +- .../ru/deadsoftware/cavecraft/GameScreen.java | 47 +++++++++++++----- .../ru/deadsoftware/cavecraft/GameState.java | 1 + ...nputHandler.java => InputHandlerGame.java} | 10 ++-- .../cavecraft/InputHandlerMenu.java | 47 ++++++++++++++++++ .../ru/deadsoftware/cavecraft/Renderer.java | 33 ++++++++++++ .../{GameInputHandler.java => GameInput.java} | 4 +- .../cavecraft/game/GameRenderer.java | 13 ++--- .../cavecraft/menu/MenuRenderer.java | 23 +++++++++ 12 files changed, 156 insertions(+), 28 deletions(-) create mode 100644 android/assets/gamelogo.png create mode 100644 android/assets/gamelogo_s.png rename core/src/ru/deadsoftware/cavecraft/{InputHandler.java => InputHandlerGame.java} (95%) create mode 100644 core/src/ru/deadsoftware/cavecraft/InputHandlerMenu.java create mode 100644 core/src/ru/deadsoftware/cavecraft/Renderer.java rename core/src/ru/deadsoftware/cavecraft/game/{GameInputHandler.java => GameInput.java} (98%) create mode 100644 core/src/ru/deadsoftware/cavecraft/menu/MenuRenderer.java diff --git a/android/assets/gamelogo.png b/android/assets/gamelogo.png new file mode 100644 index 0000000000000000000000000000000000000000..7984a531e2529c3c87d2c79e197152b8e064048f GIT binary patch literal 4888 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%0D+1lFj z5uwbs$-)P>IuqEGk8Vyz*%(Q?w%iSw1OA$8&{Q!S8ynj?I_g4Lt$c5Nn5YpQZ1Iwv z&EmeNupFOl`Wd3F*ygIL!xx|dg`wnJ@Qjn4Q3WJ2Bje-gnsMNNVsd_dzSnuNnF5KN z?zPO8@FGQ{*M~(`)F*Z}e@_#479{i@HbVHAg+;s^CMJD%cep5nU=r6%J>K=9So)jt(zL4U1d>$_`VdwY9> z1+d~9wYXdDXL~KvQ{%D%tKtKqgknop>+&XnB%3l!7_kaaE zsz6qox+}9eD~r)OD>v|;7)X|~I@lyTo*F!9Tly8z zmYtkWu616ACNXhw0xeR0=UN+<-Lq3uW}po~ zcefXoj*dgsQ7g4pM5qoH2y6Arin(St%Xy1_`v!}_)TgQjVA^%BuI4ETcRYUZ_3c4t ze?O#Lj|&t(agB|_3OOZ=*@r3mCiy4)Bc^@_@bEVW^KekQFjye<_1P#RSHU*W`=|q- zB-Wc#K*{p@`~Y$psJ^F zK8lG@O#}k54E~?(rqt)fRM!`W7sO;_@nbx_V7~@cMR5<7@0ysJj(QikCu{zeV^=Le zop97jO~uV9r~+C_DEjJ!gTkJOmTaGdtqc- zQBn(flofMbRe$Fnk(*f=;0zQcnTbtM6HKm|p(U48M|8}KHoVXqWCzT*GOEJgHBRyG znYM^cnBl#7kWR{FTaAgk3*Px$Xv!z&Db6hsGzK-$`Tw1h=6J;~@{7OPUWHtHftMV2 cUVVXB_EkZWc^yvQ!3!Bc74clLQr-;pf9mbQVgLXD literal 0 HcmV?d00001 diff --git a/core/src/ru/deadsoftware/cavecraft/Assets.java b/core/src/ru/deadsoftware/cavecraft/Assets.java index acdebdf..427ebc6 100644 --- a/core/src/ru/deadsoftware/cavecraft/Assets.java +++ b/core/src/ru/deadsoftware/cavecraft/Assets.java @@ -12,6 +12,8 @@ public class Assets { public static BitmapFont minecraftFont; + public static Sprite gameLogo; + public static Texture charTexture; public static Sprite[][] playerSprite = new Sprite[2][4]; @@ -82,6 +84,8 @@ public class Assets { public static void load() { minecraftFont = new BitmapFont(Gdx.files.internal("font.fnt"), true); + gameLogo = new Sprite(new Texture(Gdx.files.internal("gamelogo.png"))); + gameLogo.flip(false, true); loadPlayer(); loadPig(); diff --git a/core/src/ru/deadsoftware/cavecraft/CaveGame.java b/core/src/ru/deadsoftware/cavecraft/CaveGame.java index 99e4f68..6ef0427 100644 --- a/core/src/ru/deadsoftware/cavecraft/CaveGame.java +++ b/core/src/ru/deadsoftware/cavecraft/CaveGame.java @@ -16,7 +16,7 @@ public class CaveGame extends Game { public CaveGame(boolean touch) { TOUCH = touch; - STATE = GameState.GAME_PLAY; + STATE = GameState.MENU_MAIN; } @Override diff --git a/core/src/ru/deadsoftware/cavecraft/GameScreen.java b/core/src/ru/deadsoftware/cavecraft/GameScreen.java index 2a2c262..6daa039 100644 --- a/core/src/ru/deadsoftware/cavecraft/GameScreen.java +++ b/core/src/ru/deadsoftware/cavecraft/GameScreen.java @@ -1,23 +1,23 @@ package ru.deadsoftware.cavecraft; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Input; -import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.Screen; -import ru.deadsoftware.cavecraft.game.GameInputHandler; import ru.deadsoftware.cavecraft.game.GameProc; +import ru.deadsoftware.cavecraft.menu.MenuRenderer; public class GameScreen implements Screen { public static int FPS; private GameProc gameProc; + private Renderer renderer; public GameScreen() { Assets.load(); Items.load(); gameProc = new GameProc(); - Gdx.input.setInputProcessor(new InputHandler(gameProc)); + renderer = new MenuRenderer(); + Gdx.input.setInputProcessor(new InputHandlerMenu()); } public static int getWidth() { @@ -28,6 +28,13 @@ public class GameScreen implements Screen { return Gdx.graphics.getHeight(); } + private void game(float delta) { + gameProc.update(delta); + } + + private void menu() { + } + @Override public void show() { @@ -35,19 +42,35 @@ public class GameScreen implements Screen { @Override public void render(float delta) { - if (CaveGame.STATE == GameState.RESTART) { - gameProc = new GameProc(); - Gdx.input.setInputProcessor(new InputHandler(gameProc)); - CaveGame.STATE = GameState.GAME_PLAY; - } FPS = (int)(1/delta); - gameProc.update(delta); - gameProc.renderer.render(); + switch (CaveGame.STATE) { + case GAME_PLAY: case GAME_CREATIVE_INV: + game(delta); + break; + + case MENU_MAIN: + menu(); + break; + + case RESTART: + gameProc = new GameProc(); + Gdx.input.setInputProcessor(new InputHandlerGame(gameProc)); + CaveGame.STATE = GameState.GAME_PLAY; + break; + } + renderer.render(); } @Override public void resize(int width, int height) { - gameProc.resetRenderer(); + switch (CaveGame.STATE) { + case MENU_MAIN: + renderer = new MenuRenderer(); + break; + case GAME_PLAY: case GAME_CREATIVE_INV: + gameProc.resetRenderer(); + break; + } } @Override diff --git a/core/src/ru/deadsoftware/cavecraft/GameState.java b/core/src/ru/deadsoftware/cavecraft/GameState.java index dd6b021..d8be71a 100644 --- a/core/src/ru/deadsoftware/cavecraft/GameState.java +++ b/core/src/ru/deadsoftware/cavecraft/GameState.java @@ -2,6 +2,7 @@ package ru.deadsoftware.cavecraft; public enum GameState { RESTART, + MENU_MAIN, GAME_PLAY, GAME_CREATIVE_INV } diff --git a/core/src/ru/deadsoftware/cavecraft/InputHandler.java b/core/src/ru/deadsoftware/cavecraft/InputHandlerGame.java similarity index 95% rename from core/src/ru/deadsoftware/cavecraft/InputHandler.java rename to core/src/ru/deadsoftware/cavecraft/InputHandlerGame.java index da3e9e4..e22caec 100644 --- a/core/src/ru/deadsoftware/cavecraft/InputHandler.java +++ b/core/src/ru/deadsoftware/cavecraft/InputHandlerGame.java @@ -2,22 +2,22 @@ package ru.deadsoftware.cavecraft; import com.badlogic.gdx.Input; import com.badlogic.gdx.InputProcessor; -import ru.deadsoftware.cavecraft.game.GameInputHandler; +import ru.deadsoftware.cavecraft.game.GameInput; import ru.deadsoftware.cavecraft.game.GameProc; import static ru.deadsoftware.cavecraft.GameScreen.getHeight; import static ru.deadsoftware.cavecraft.GameScreen.getWidth; -public class InputHandler implements InputProcessor { +public class InputHandlerGame implements InputProcessor { private GameProc gameProc; - private GameInputHandler gameInput; + private GameInput gameInput; private float tWidth, tHeight; - public InputHandler(GameProc gameProc) { + public InputHandlerGame(GameProc gameProc) { this.gameProc = gameProc; - this.gameInput = new GameInputHandler(gameProc); + this.gameInput = new GameInput(gameProc); tWidth = gameProc.renderer.camera.viewportWidth; tHeight = gameProc.renderer.camera.viewportHeight; } diff --git a/core/src/ru/deadsoftware/cavecraft/InputHandlerMenu.java b/core/src/ru/deadsoftware/cavecraft/InputHandlerMenu.java new file mode 100644 index 0000000..fe3cb4d --- /dev/null +++ b/core/src/ru/deadsoftware/cavecraft/InputHandlerMenu.java @@ -0,0 +1,47 @@ +package ru.deadsoftware.cavecraft; + +import com.badlogic.gdx.InputProcessor; + +public class InputHandlerMenu implements InputProcessor{ + + @Override + public boolean keyDown(int keycode) { + return false; + } + + @Override + public boolean keyUp(int keycode) { + return false; + } + + @Override + public boolean keyTyped(char character) { + return false; + } + + @Override + public boolean touchDown(int screenX, int screenY, int pointer, int button) { + return false; + } + + @Override + public boolean touchUp(int screenX, int screenY, int pointer, int button) { + return false; + } + + @Override + public boolean touchDragged(int screenX, int screenY, int pointer) { + return false; + } + + @Override + public boolean mouseMoved(int screenX, int screenY) { + return false; + } + + @Override + public boolean scrolled(int amount) { + return false; + } + +} diff --git a/core/src/ru/deadsoftware/cavecraft/Renderer.java b/core/src/ru/deadsoftware/cavecraft/Renderer.java new file mode 100644 index 0000000..635af85 --- /dev/null +++ b/core/src/ru/deadsoftware/cavecraft/Renderer.java @@ -0,0 +1,33 @@ +package ru.deadsoftware.cavecraft; + +import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; + +public abstract class Renderer { + + public OrthographicCamera camera; + public ShapeRenderer shapeRenderer; + public SpriteBatch spriteBatch; + + public Renderer() { + } + + public Renderer(float width, float height) { + camera = new OrthographicCamera(); + shapeRenderer = new ShapeRenderer(); + spriteBatch = new SpriteBatch(); + camera.setToOrtho(true, width, height); + shapeRenderer.setProjectionMatrix(camera.combined); + spriteBatch.setProjectionMatrix(camera.combined); + } + + public float getWidth() { + return camera.viewportWidth; + } + + public float getHeight() {return camera.viewportHeight;} + + public abstract void render(); + +} diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameInputHandler.java b/core/src/ru/deadsoftware/cavecraft/game/GameInput.java similarity index 98% rename from core/src/ru/deadsoftware/cavecraft/game/GameInputHandler.java rename to core/src/ru/deadsoftware/cavecraft/game/GameInput.java index dc19afd..3e72368 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameInputHandler.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameInput.java @@ -5,11 +5,11 @@ import com.badlogic.gdx.Input; import com.badlogic.gdx.utils.TimeUtils; import ru.deadsoftware.cavecraft.*; -public class GameInputHandler { +public class GameInput { private GameProc gameProc; - public GameInputHandler(GameProc gameProc) { + public GameInput(GameProc gameProc) { this.gameProc = gameProc; } diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java b/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java index 009d9b7..e64ed13 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java @@ -6,20 +6,16 @@ import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.math.Vector2; -import ru.deadsoftware.cavecraft.Assets; -import ru.deadsoftware.cavecraft.CaveGame; -import ru.deadsoftware.cavecraft.GameScreen; -import ru.deadsoftware.cavecraft.Items; +import ru.deadsoftware.cavecraft.*; import ru.deadsoftware.cavecraft.game.mobs.Mob; import ru.deadsoftware.cavecraft.game.objects.Player; -public class GameRenderer { +public class GameRenderer extends Renderer{ private GameProc gameProc; - public OrthographicCamera camera, fontCam; - ShapeRenderer shapeRenderer; - SpriteBatch spriteBatch, fontBatch; + public OrthographicCamera fontCam; + SpriteBatch fontBatch; public GameRenderer(GameProc gameProc) { Gdx.gl.glClearColor(0f,.6f,.6f,1f); @@ -199,6 +195,7 @@ public class GameRenderer { drawGUI(); } + @Override public void render() { Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); diff --git a/core/src/ru/deadsoftware/cavecraft/menu/MenuRenderer.java b/core/src/ru/deadsoftware/cavecraft/menu/MenuRenderer.java new file mode 100644 index 0000000..0f8011d --- /dev/null +++ b/core/src/ru/deadsoftware/cavecraft/menu/MenuRenderer.java @@ -0,0 +1,23 @@ +package ru.deadsoftware.cavecraft.menu; + +import ru.deadsoftware.cavecraft.Assets; +import ru.deadsoftware.cavecraft.GameScreen; +import ru.deadsoftware.cavecraft.Items; +import ru.deadsoftware.cavecraft.Renderer; + +public class MenuRenderer extends Renderer { + + public MenuRenderer() { + super(480,480*((float) GameScreen.getHeight()/GameScreen.getWidth())); + } + + @Override + public void render() { + spriteBatch.begin(); + for (int x=0; x<=getWidth(); x++) + for (int y=0; y<=getHeight(); y++) + spriteBatch.draw(Items.BLOCKS.get("dirt").getTexture(),x*16,y*16); + spriteBatch.draw(Assets.gameLogo, getWidth()/2-Assets.gameLogo.getWidth()/2, 0); + spriteBatch.end(); + } +} -- 2.29.2 From 9837004539187e09f955d347dd6b3d838d9fefb1 Mon Sep 17 00:00:00 2001 From: fred-boy Date: Sun, 22 Apr 2018 15:28:21 +0700 Subject: [PATCH 11/16] Add play and quit buttons --- core/src/ru/deadsoftware/cavecraft/menu/objects/Button.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 core/src/ru/deadsoftware/cavecraft/menu/objects/Button.java diff --git a/core/src/ru/deadsoftware/cavecraft/menu/objects/Button.java b/core/src/ru/deadsoftware/cavecraft/menu/objects/Button.java new file mode 100644 index 0000000..a2835fc --- /dev/null +++ b/core/src/ru/deadsoftware/cavecraft/menu/objects/Button.java @@ -0,0 +1,4 @@ +package ru.deadsoftware.cavecraft.menu.objects; + +public class Button { +} -- 2.29.2 From 792296717939ac50df33865ae3acbb010e812ad1 Mon Sep 17 00:00:00 2001 From: fred-boy Date: Sun, 22 Apr 2018 16:37:18 +0700 Subject: [PATCH 12/16] Optimize font --- android/assets/buttons.png | Bin 0 -> 9608 bytes android/assets/font.fnt | 192 +++++++++--------- android/assets/font.png | Bin 3097 -> 3900 bytes .../src/ru/deadsoftware/cavecraft/Assets.java | 72 +++++-- .../ru/deadsoftware/cavecraft/GameScreen.java | 17 +- .../ru/deadsoftware/cavecraft/GameState.java | 1 + .../cavecraft/InputHandlerMenu.java | 17 +- .../ru/deadsoftware/cavecraft/Renderer.java | 13 +- .../cavecraft/game/GameInput.java | 5 + .../deadsoftware/cavecraft/game/GameProc.java | 16 +- .../cavecraft/game/GameRenderer.java | 53 +---- .../cavecraft/menu/MenuRenderer.java | 43 +++- .../cavecraft/menu/objects/Button.java | 53 +++++ 13 files changed, 306 insertions(+), 176 deletions(-) create mode 100644 android/assets/buttons.png diff --git a/android/assets/buttons.png b/android/assets/buttons.png new file mode 100644 index 0000000000000000000000000000000000000000..85280145266dfeec22639de196235b9e66315d18 GIT binary patch literal 9608 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 RT;Biy002ovPDHLkV1h?RBT@hW diff --git a/core/src/ru/deadsoftware/cavecraft/Assets.java b/core/src/ru/deadsoftware/cavecraft/Assets.java index 427ebc6..6a992ef 100644 --- a/core/src/ru/deadsoftware/cavecraft/Assets.java +++ b/core/src/ru/deadsoftware/cavecraft/Assets.java @@ -3,6 +3,7 @@ package ru.deadsoftware.cavecraft; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.TextureRegion; @@ -10,11 +11,16 @@ public class Assets { public static final int BLOCK_TEXTURES = 18; + private static GlyphLayout layout; + public static BitmapFont minecraftFont; public static Sprite gameLogo; - public static Texture charTexture; + public static Texture menuButtonTexture; + public static TextureRegion[] menuButton = new TextureRegion[3]; + + public static Texture playerTexture; public static Sprite[][] playerSprite = new Sprite[2][4]; public static Texture pigTexture; @@ -41,32 +47,32 @@ public class Assets { public static TextureRegion touchSpace; private static void loadPlayer() { - charTexture = new Texture(Gdx.files.internal("mobs/char.png")); + playerTexture = new Texture(Gdx.files.internal("mobs/char.png")); //LOOK TO LEFT //head - playerSprite[0][0] = new Sprite(new TextureRegion(charTexture, 0,0,12,12)); + playerSprite[0][0] = new Sprite(new TextureRegion(playerTexture, 0,0,12,12)); playerSprite[0][0].flip(false,true); //body - playerSprite[0][1] = new Sprite(new TextureRegion(charTexture, 0,13,12,12)); + playerSprite[0][1] = new Sprite(new TextureRegion(playerTexture, 0,13,12,12)); playerSprite[0][1].flip(false,true); //hand - playerSprite[0][2] = new Sprite(new TextureRegion(charTexture, 25,5,20,20)); + playerSprite[0][2] = new Sprite(new TextureRegion(playerTexture, 25,5,20,20)); playerSprite[0][2].flip(false,true); //leg - playerSprite[0][3] = new Sprite(new TextureRegion(charTexture, 25,27,20,20)); + playerSprite[0][3] = new Sprite(new TextureRegion(playerTexture, 25,27,20,20)); playerSprite[0][3].flip(false,true); //LOOK TO RIGHT //head - playerSprite[1][0] = new Sprite(new TextureRegion(charTexture, 13,0,12,12)); + playerSprite[1][0] = new Sprite(new TextureRegion(playerTexture, 13,0,12,12)); playerSprite[1][0].flip(false,true); //body - playerSprite[1][1] = new Sprite(new TextureRegion(charTexture, 13,13,12,12)); + playerSprite[1][1] = new Sprite(new TextureRegion(playerTexture, 13,13,12,12)); playerSprite[1][1].flip(false,true); //hand - playerSprite[1][2] = new Sprite(new TextureRegion(charTexture, 37,5,20,20)); + playerSprite[1][2] = new Sprite(new TextureRegion(playerTexture, 37,5,20,20)); playerSprite[1][2].flip(false,true); //leg - playerSprite[1][3] = new Sprite(new TextureRegion(charTexture, 37,27,20,20)); + playerSprite[1][3] = new Sprite(new TextureRegion(playerTexture, 37,27,20,20)); playerSprite[1][3].flip(false,true); } @@ -84,9 +90,19 @@ public class Assets { public static void load() { minecraftFont = new BitmapFont(Gdx.files.internal("font.fnt"), true); + minecraftFont.getData().setScale(.375f); + + layout = new GlyphLayout(); + gameLogo = new Sprite(new Texture(Gdx.files.internal("gamelogo.png"))); gameLogo.flip(false, true); + menuButtonTexture = new Texture(Gdx.files.internal("buttons.png")); + for (int i=0; i<3; i++) { + menuButton[i] = new TextureRegion(menuButtonTexture, 0, 20*i, 200, 20); + menuButton[i].flip(false, true); + } + loadPlayer(); loadPig(); @@ -103,19 +119,21 @@ public class Assets { creativeScroll = new TextureRegion(creativeTexture, 3, 137, 12, 15); creativeScroll.flip(false, true); - touchGui = new Texture(Gdx.files.internal("touch_gui.png")); - for (int i=0; i<4; i++) { - touchArrows[i] = new TextureRegion(touchGui, i*26, 0, 26,26); - touchArrows[i].flip(false, true); + if (CaveGame.TOUCH) { + touchGui = new Texture(Gdx.files.internal("touch_gui.png")); + for (int i = 0; i < 4; i++) { + touchArrows[i] = new TextureRegion(touchGui, i * 26, 0, 26, 26); + touchArrows[i].flip(false, true); + } + touchLMB = new TextureRegion(touchGui, 0, 26, 26, 26); + touchLMB.flip(false, true); + touchRMB = new TextureRegion(touchGui, 52, 26, 26, 26); + touchRMB.flip(false, true); + touchToggleMode = new TextureRegion(touchGui, 26, 26, 26, 26); + touchToggleMode.flip(false, true); + touchSpace = new TextureRegion(touchGui, 0, 52, 104, 26); + touchSpace.flip(false, true); } - touchLMB = new TextureRegion(touchGui, 0, 26, 26,26); - touchLMB.flip(false, true); - touchRMB = new TextureRegion(touchGui, 52, 26, 26,26); - touchRMB.flip(false, true); - touchToggleMode = new TextureRegion(touchGui, 26, 26, 26, 26); - touchToggleMode.flip(false, true); - touchSpace = new TextureRegion(touchGui, 0, 52, 104, 26); - touchSpace.flip(false, true); terrain = new Texture(Gdx.files.internal("terrain.png")); for (int i=0; i(); @@ -43,7 +49,13 @@ public class GameProc { } public void resetRenderer() { - renderer = new GameRenderer(this); + if (CaveGame.TOUCH) { + renderer = new GameRenderer(this,320, + 320*((float)GameScreen.getHeight()/GameScreen.getWidth())); + } else { + renderer = new GameRenderer(this,480, + 480*((float)GameScreen.getHeight()/GameScreen.getWidth())); + } } private boolean isAutoselectable(int x, int y) { diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java b/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java index e64ed13..a1a4c66 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameRenderer.java @@ -14,38 +14,10 @@ public class GameRenderer extends Renderer{ private GameProc gameProc; - public OrthographicCamera fontCam; - SpriteBatch fontBatch; - - public GameRenderer(GameProc gameProc) { + public GameRenderer(GameProc gameProc,float width, float heigth) { + super(width,heigth); Gdx.gl.glClearColor(0f,.6f,.6f,1f); this.gameProc = gameProc; - camera = new OrthographicCamera(); - if (!CaveGame.TOUCH) { - camera.setToOrtho(true, 480, - 480 * ((float) GameScreen.getHeight() / GameScreen.getWidth())); - } else { - camera.setToOrtho(true, 320, - 320 * ((float) GameScreen.getHeight() / GameScreen.getWidth())); - } - shapeRenderer = new ShapeRenderer(); - shapeRenderer.setProjectionMatrix(camera.combined); - shapeRenderer.setAutoShapeType(true); - spriteBatch = new SpriteBatch(); - spriteBatch.setProjectionMatrix(camera.combined); - - fontCam = new OrthographicCamera(); - fontCam.setToOrtho(true, GameScreen.getWidth(), GameScreen.getHeight()); - fontBatch = new SpriteBatch(); - fontBatch.setProjectionMatrix(fontCam.combined); - } - - private void setFontColor(int r, int g, int b) { - Assets.minecraftFont.setColor(r/255f, g/255f, b/255f, 1f); - } - - private void drawString(String str, float x, float y) { - Assets.minecraftFont.draw(fontBatch, str, x, y); } private void drawWorldBackground() { @@ -209,23 +181,18 @@ public class GameRenderer extends Renderer{ drawCreative(); break; } - spriteBatch.end(); - if (CaveGame.TOUCH) { - spriteBatch.begin(); - drawTouchGui(); - spriteBatch.end(); - } + if (CaveGame.TOUCH) drawTouchGui(); - fontBatch.begin(); setFontColor(255,255,255); drawString("CaveCraft "+CaveGame.VERSION, 0, 0); - drawString("FPS: "+GameScreen.FPS, 0, 20); - drawString("X: "+(int)(gameProc.player.position.x/16), 0, 40); - drawString("Y: "+(gameProc.world.getHeight()-(int)(gameProc.player.position.y/16)), 0, 60); - drawString("Seed: "+WorldGen.getSeed(), 0, 80); - drawString("Mobs: "+gameProc.mobs.size, 0, 100); - fontBatch.end(); + drawString("FPS: "+GameScreen.FPS, 0, 12); + drawString("X: "+(int)(gameProc.player.position.x/16), 0, 24); + drawString("Y: "+(gameProc.world.getHeight()-(int)(gameProc.player.position.y/16)), 0, 36); + drawString("Seed: "+WorldGen.getSeed(), 0, 48); + drawString("Mobs: "+gameProc.mobs.size, 0, 60); + + spriteBatch.end(); } } diff --git a/core/src/ru/deadsoftware/cavecraft/menu/MenuRenderer.java b/core/src/ru/deadsoftware/cavecraft/menu/MenuRenderer.java index 0f8011d..76f2355 100644 --- a/core/src/ru/deadsoftware/cavecraft/menu/MenuRenderer.java +++ b/core/src/ru/deadsoftware/cavecraft/menu/MenuRenderer.java @@ -1,14 +1,34 @@ package ru.deadsoftware.cavecraft.menu; -import ru.deadsoftware.cavecraft.Assets; -import ru.deadsoftware.cavecraft.GameScreen; -import ru.deadsoftware.cavecraft.Items; -import ru.deadsoftware.cavecraft.Renderer; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.utils.Array; +import ru.deadsoftware.cavecraft.*; +import ru.deadsoftware.cavecraft.menu.objects.Button; public class MenuRenderer extends Renderer { - public MenuRenderer() { - super(480,480*((float) GameScreen.getHeight()/GameScreen.getWidth())); + public Array