@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();
package ru.deadsoftware.cavecraft;
public enum GameState {
+ RESTART,
GAME_PLAY,
GAME_CREATIVE_INV
}
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;
break;
}
} else if (CaveGame.TOUCH){
- switch (keyCode) {
+ switch (keycode) {
case Input.Keys.A:
gameProc.cursorX--;
break;
}
}
- 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++;
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;
screenX<gameProc.renderer.camera.viewportWidth/2+Assets.creativeInv.getRegionWidth()/2 &&
screenY>gameProc.renderer.camera.viewportHeight/2-Assets.creativeInv.getRegionHeight()/2 &&
screenY<gameProc.renderer.camera.viewportHeight/2+Assets.creativeInv.getRegionHeight()/2) {
- try {
- int ix = (int) (screenX - (gameProc.renderer.camera.viewportWidth / 2 - Assets.creativeInv.getRegionWidth() / 2 + 8)) / 18;
- int iy = (int) (screenY - (gameProc.renderer.camera.viewportHeight / 2 - Assets.creativeInv.getRegionHeight() / 2 + 18)) / 18;
- int item = ix + iy * 8;
+ int ix = (int) (screenX - (gameProc.renderer.camera.viewportWidth / 2 - Assets.creativeInv.getRegionWidth() / 2 + 8)) / 18;
+ int iy = (int) (screenY - (gameProc.renderer.camera.viewportHeight / 2 - Assets.creativeInv.getRegionHeight() / 2 + 18)) / 18;
+ int item = ix + iy * 8;
+ if (item >= 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;
}
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,
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;
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();
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 {
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;
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; x<width; x++) {
- for (int y=0; y<height; y++) {
- }
dirtH = 4+rand.nextInt(2);
for (int y = height- hMap[x]; y<height; y++) {
if (y==height- hMap[x]) {
if (foreMap[x][y]==0){
foreMap[x][y] = 8;
backMap[x][y] = 8;
+ if (y==height-hMap[x]-1) {
+ foreMap[x][y+1] = 3;
+ }
}
}
if (x>2 && x<width-2 && rand.nextInt(100)<5){
- genOak(x,height-hMap[x]-1);
+ if (foreMap[x][height-hMap[x]]-1==0) genOak(x,height-hMap[x]-1);
}
}
}