X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavecraft%2Fgame%2FGameProc.java;h=25658c165421870f9d3868e08f16f4bd96a2e847;hb=0b8922bfbb2bbec067b532ecb7912f6afe02c4ef;hp=5d20e621cdc981ba66b94cabae10da0eed6bfb15;hpb=75e8bbe4c9dceaabd8bb7e7976ad9052cfb0a968;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavecraft/game/GameProc.java b/core/src/ru/deadsoftware/cavecraft/game/GameProc.java index 5d20e62..25658c1 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/GameProc.java +++ b/core/src/ru/deadsoftware/cavecraft/game/GameProc.java @@ -9,6 +9,7 @@ import ru.deadsoftware.cavecraft.game.mobs.FallingGravel; import ru.deadsoftware.cavecraft.game.mobs.FallingSand; import ru.deadsoftware.cavecraft.game.mobs.Mob; import ru.deadsoftware.cavecraft.game.mobs.Pig; +import ru.deadsoftware.cavecraft.game.objects.Drop; import ru.deadsoftware.cavecraft.game.objects.Player; import ru.deadsoftware.cavecraft.misc.AppState; import ru.deadsoftware.cavecraft.misc.Assets; @@ -22,11 +23,11 @@ public class GameProc implements Serializable{ public static boolean DO_UPD = false; public static int UPD_X = -1, UPD_Y = -1; - public static int FUPD_X, FUPD_Y; public Player player; public ArrayList mobs; + public ArrayList drops; public transient GameWorld world; public transient GameRenderer renderer; @@ -36,6 +37,7 @@ public class GameProc implements Serializable{ public int invSlot; public int ctrlMode; public int creativeScroll, maxCreativeScroll; + public int blockDmg = 0; public boolean isTouchDown, isKeyDown, swim; public int touchDownX, touchDownY, keyDownCode; @@ -46,6 +48,7 @@ public class GameProc implements Serializable{ world = new GameWorld(); world.generate(1024,256); player = new Player(world.getSpawnPoint()); + drops = new ArrayList(); mobs = new ArrayList(); for (int i=0; i<16; i++) { mobs.add(new Pig(i*256, 196*16)); @@ -59,7 +62,7 @@ public class GameProc implements Serializable{ renderer = new GameRenderer(this,480, 480*((float)GameScreen.getHeight()/GameScreen.getWidth())); } - maxCreativeScroll = Items.BLOCKS.size/8; + maxCreativeScroll = Items.ITEMS.size()/8; GameSaver.save(this); } @@ -79,6 +82,7 @@ public class GameProc implements Serializable{ } private void moveCursor() { + int pastX = cursorX, pastY = cursorY; if (ctrlMode == 0 && CaveGame.TOUCH) { cursorX = (int) (player.position.x + player.texWidth / 2) / 16; if (player.dir == 0) cursorX--; @@ -103,6 +107,7 @@ public class GameProc implements Serializable{ (renderer.camera.viewportWidth/GameScreen.getWidth())+renderer.camera.position.x)<0) cursorX--; } + if (pastX!=cursorX || pastY!=cursorY) blockDmg = 0; } private void checkCursorBounds() { @@ -118,140 +123,147 @@ public class GameProc implements Serializable{ private void updateFluids(int x, int y) { if (Items.isWater(world.getForeMap(x, y)) && world.getForeMap(x, y)!=8) { - if ((!Items.isWater(world.getForeMap(x-1,y)) || + if (world.getForeMap(x, y)==60) { + if (!Items.isWater(world.getForeMap(x, y - 1))) + world.setForeMap(x, y, world.getForeMap(x, y) + 1); + } else if ((!Items.isWater(world.getForeMap(x-1,y)) || (Items.isWater(world.getForeMap(x,y)) && world.getForeMap(x-1, y)>=world.getForeMap(x, y))) && (!Items.isWater(world.getForeMap(x+1,y)) || (Items.isWater(world.getForeMap(x,y)) && world.getForeMap(x+1, y)>=world.getForeMap(x, y)))){ world.setForeMap(x, y, world.getForeMap(x, y)+1); - if (world.getForeMap(x, y)>62) world.setForeMap(x, y, 0); } + if (world.getForeMap(x, y)>63) world.setForeMap(x, y, 0); } - if (world.getForeMap(x, y) == 8) { - if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=60 && world.getForeMap(x, y+1)<=62) || + if (world.getForeMap(x, y) == 8 || world.getForeMap(x, y) == 60) { + if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=61 && world.getForeMap(x, y+1)<=63) || (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) { - world.setForeMap(x,y+1,8); + world.setForeMap(x,y+1,60); updateBlock(x, y+2); } else if (Items.isLava(world.getForeMap(x, y+1))) { if (world.getForeMap(x, y+1)>9) world.setForeMap(x, y+1, 4); - else world.setForeMap(x, y+1, 66); + else world.setForeMap(x, y+1, 68); } else if (Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision) { if (world.getForeMap(x+1, y)==0 || (!Items.BLOCKS.getValueAt(world.getForeMap(x+1, y)).collision && !Items.isFluid(world.getForeMap(x+1, y))) || - (Items.isWater(world.getForeMap(x+1, y)) && world.getForeMap(x+1, y)>60)) { - world.setForeMap(x+1,y,60); + (Items.isWater(world.getForeMap(x+1, y)) && world.getForeMap(x+1, y)>61)) { + world.setForeMap(x+1,y,61); updateBlock(x+1, y+1); } else if (Items.isLava(world.getForeMap(x+1, y))) { if (world.getForeMap(x+1, y)>9) world.setForeMap(x+1, y, 4); - else world.setForeMap(x+1, y, 66); - } else if (world.getForeMap(x+1, y)==60 && world.getForeMap(x+2, y)==8) world.setForeMap(x+1, y, 8); + else world.setForeMap(x+1, y, 68); + } else if (world.getForeMap(x+1, y)==61 && (world.getForeMap(x+2, y)==8 || world.getForeMap(x+2, y)==60)) world.setForeMap(x+1, y, 8); if (world.getForeMap(x-1, y)==0 || (!Items.BLOCKS.getValueAt(world.getForeMap(x-1, y)).collision && !Items.isFluid(world.getForeMap(x-1, y))) || - (Items.isWater(world.getForeMap(x-1, y)) && world.getForeMap(x-1, y)>60)) { - world.setForeMap(x-1,y,60); + (Items.isWater(world.getForeMap(x-1, y)) && world.getForeMap(x-1, y)>61)) { + world.setForeMap(x-1,y,61); updateBlock(x-1, y+1); } else if (Items.isLava(world.getForeMap(x-1, y))) { if (world.getForeMap(x-1, y)>9) world.setForeMap(x-1, y, 4); - else world.setForeMap(x-1, y, 66); - } else if (world.getForeMap(x-1, y)==60 && world.getForeMap(x-2, y)==8) world.setForeMap(x-1, y, 8); + else world.setForeMap(x-1, y, 68); + } else if (world.getForeMap(x-1, y)==61 && (world.getForeMap(x-2, y)==8 || world.getForeMap(x-2, y)==60)) world.setForeMap(x-1, y, 8); } return; } - if (world.getForeMap(x, y) == 60) { - if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=60 && world.getForeMap(x, y+1)<=62) || + if (world.getForeMap(x, y) == 61) { + if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=61 && world.getForeMap(x, y+1)<=63) || (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) { - world.setForeMap(x,y+1,8); + world.setForeMap(x,y+1,60); updateBlock(x, y+2); } else if (Items.isLava(world.getForeMap(x, y+1))) { if (world.getForeMap(x, y+1)>9) world.setForeMap(x, y+1, 4); - else world.setForeMap(x, y+1, 66); + else world.setForeMap(x, y+1, 68); } else if (Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision) { if (world.getForeMap(x+1, y)==0 || (!Items.BLOCKS.getValueAt(world.getForeMap(x+1, y)).collision && !Items.isFluid(world.getForeMap(x+1, y))) || - (Items.isWater(world.getForeMap(x+1, y)) && world.getForeMap(x+1, y)>61)){ - world.setForeMap(x+1,y,61); + (Items.isWater(world.getForeMap(x+1, y)) && world.getForeMap(x+1, y)>62)){ + world.setForeMap(x+1,y,62); updateBlock(x+1, y+1); } else if (Items.isLava(world.getForeMap(x+1, y))) { if (world.getForeMap(x+1, y)>9) world.setForeMap(x+1, y, 4); - else world.setForeMap(x+1, y, 66); + else world.setForeMap(x+1, y, 68); } if (world.getForeMap(x-1, y)==0 || (!Items.BLOCKS.getValueAt(world.getForeMap(x-1, y)).collision && !Items.isFluid(world.getForeMap(x-1, y))) || - (Items.isWater(world.getForeMap(x-1, y)) && world.getForeMap(x-1, y)>61)){ - world.setForeMap(x-1,y,61); + (Items.isWater(world.getForeMap(x-1, y)) && world.getForeMap(x-1, y)>62)){ + world.setForeMap(x-1,y,62); updateBlock(x-1, y+1); } else if (Items.isLava(world.getForeMap(x-1, y))) { if (world.getForeMap(x-1, y)>9) world.setForeMap(x-1, y, 4); - else world.setForeMap(x-1, y, 66); + else world.setForeMap(x-1, y, 68); } } return; } - if (world.getForeMap(x, y) == 61) { - if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=60 && world.getForeMap(x, y+1)<=62) || + if (world.getForeMap(x, y) == 62) { + if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=61 && world.getForeMap(x, y+1)<=63) || (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) { - world.setForeMap(x,y+1,8); + world.setForeMap(x,y+1,60); updateBlock(x, y+2); } else if (Items.isLava(world.getForeMap(x, y+1))) { if (world.getForeMap(x, y+1)>9) world.setForeMap(x, y+1, 4); - else world.setForeMap(x, y+1, 66); + else world.setForeMap(x, y+1, 68); } else if (Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision) { if (world.getForeMap(x+1, y)==0 || (!Items.BLOCKS.getValueAt(world.getForeMap(x+1, y)).collision && !Items.isFluid(world.getForeMap(x+1, y))) ){ - world.setForeMap(x+1,y,62); + world.setForeMap(x+1,y,63); updateBlock(x+1, y+1); } else if (Items.isLava(world.getForeMap(x+1, y))) { if (world.getForeMap(x+1, y)>9) world.setForeMap(x+1, y, 4); - else world.setForeMap(x+1, y, 66); + else world.setForeMap(x+1, y, 68); } if (world.getForeMap(x-1, y)==0 || (!Items.BLOCKS.getValueAt(world.getForeMap(x-1, y)).collision && !Items.isFluid(world.getForeMap(x-1, y))) ){ - world.setForeMap(x-1,y,62); + world.setForeMap(x-1,y,63); updateBlock(x-1, y+1); } else if (Items.isLava(world.getForeMap(x-1, y))) { if (world.getForeMap(x-1, y)>9) world.setForeMap(x-1, y, 4); - else world.setForeMap(x-1, y, 66); + else world.setForeMap(x-1, y, 68); } } return; } - if (world.getForeMap(x, y) == 62) { - if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=60 && world.getForeMap(x, y+1)<=62) || + if (world.getForeMap(x, y) == 63) { + if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=61 && world.getForeMap(x, y+1)<=63) || (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) { - world.setForeMap(x,y+1,8); + world.setForeMap(x,y+1,60); updateBlock(x, y+2); } else if (Items.isLava(world.getForeMap(x, y+1))) { if (world.getForeMap(x, y+1)>9) world.setForeMap(x, y+1, 4); - else world.setForeMap(x, y+1, 66); + else world.setForeMap(x, y+1, 68); } return; } if (Items.isLava(world.getForeMap(x, y)) && world.getForeMap(x, y)!=9) { - if ((!Items.isLava(world.getForeMap(x-1,y)) || + if (world.getForeMap(x, y)==64) { + if (!Items.isLava(world.getForeMap(x, y - 1))) + world.setForeMap(x, y, world.getForeMap(x, y) + 1); + } else if ((!Items.isLava(world.getForeMap(x,y-1))) && + (!Items.isLava(world.getForeMap(x-1,y)) || (Items.isLava(world.getForeMap(x,y)) && world.getForeMap(x-1, y)>=world.getForeMap(x, y))) && (!Items.isLava(world.getForeMap(x+1,y)) || (Items.isLava(world.getForeMap(x,y)) && world.getForeMap(x+1, y)>=world.getForeMap(x, y)))){ world.setForeMap(x, y, world.getForeMap(x, y)+1); - if (world.getForeMap(x, y)>65) world.setForeMap(x, y, 0); } + if (world.getForeMap(x, y)>67) world.setForeMap(x, y, 0); } - if (world.getForeMap(x, y) == 9) { - if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=63 && world.getForeMap(x, y+1)<=65) || + if (world.getForeMap(x, y) == 9 || world.getForeMap(x, y) == 64) { + if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=65 && world.getForeMap(x, y+1)<=67) || (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) { - world.setForeMap(x,y+1,9); + world.setForeMap(x,y+1,64); updateBlock(x, y+2); } else if (Items.isWater(world.getForeMap(x, y+1))) { world.setForeMap(x, y+1, 1); } else if (Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision) { if (world.getForeMap(x+1, y)==0 || (!Items.BLOCKS.getValueAt(world.getForeMap(x+1, y)).collision && !Items.isFluid(world.getForeMap(x+1, y))) || - (Items.isLava(world.getForeMap(x+1, y)) && world.getForeMap(x+1, y)>63)) { - world.setForeMap(x+1,y,63); + (Items.isLava(world.getForeMap(x+1, y)) && world.getForeMap(x+1, y)>65)) { + world.setForeMap(x+1,y,65); updateBlock(x+1, y+1); } else if (Items.isWater(world.getForeMap(x+1, y))) { world.setForeMap(x+1, y, 1); @@ -259,8 +271,8 @@ public class GameProc implements Serializable{ if (world.getForeMap(x-1, y)==0 || (!Items.BLOCKS.getValueAt(world.getForeMap(x-1, y)).collision && !Items.isFluid(world.getForeMap(x-1, y))) || - (Items.isLava(world.getForeMap(x-1, y)) && world.getForeMap(x-1, y)>63)) { - world.setForeMap(x-1,y,63); + (Items.isLava(world.getForeMap(x-1, y)) && world.getForeMap(x-1, y)>65)) { + world.setForeMap(x-1,y,65); updateBlock(x-1, y+1); } else if (Items.isWater(world.getForeMap(x-1, y))) { world.setForeMap(x-1, y, 1); @@ -268,18 +280,18 @@ public class GameProc implements Serializable{ } return; } - if (world.getForeMap(x, y) == 63) { - if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=63 && world.getForeMap(x, y+1)<=65) || + if (world.getForeMap(x, y) == 65) { + if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=65 && world.getForeMap(x, y+1)<=67) || (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) { - world.setForeMap(x,y+1,9); + world.setForeMap(x,y+1,64); updateBlock(x, y+2); } else if (Items.isWater(world.getForeMap(x, y+1))) { world.setForeMap(x, y+1, 1); } else if (Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision) { if (world.getForeMap(x+1, y)==0 || (!Items.BLOCKS.getValueAt(world.getForeMap(x+1, y)).collision && !Items.isFluid(world.getForeMap(x+1, y))) || - (Items.isLava(world.getForeMap(x+1, y)) && world.getForeMap(x+1, y)>64)){ - world.setForeMap(x+1,y,64); + (Items.isLava(world.getForeMap(x+1, y)) && world.getForeMap(x+1, y)>66)){ + world.setForeMap(x+1,y,66); updateBlock(x+1, y+1); } else if (Items.isWater(world.getForeMap(x+1, y))) { world.setForeMap(x+1, y, 1); @@ -287,8 +299,8 @@ public class GameProc implements Serializable{ if (world.getForeMap(x-1, y)==0 || (!Items.BLOCKS.getValueAt(world.getForeMap(x-1, y)).collision && !Items.isFluid(world.getForeMap(x-1, y))) || - (Items.isLava(world.getForeMap(x-1, y)) && world.getForeMap(x-1, y)>64)){ - world.setForeMap(x-1,y,64); + (Items.isLava(world.getForeMap(x-1, y)) && world.getForeMap(x-1, y)>66)){ + world.setForeMap(x-1,y,66); updateBlock(x-1, y+1); } else if (Items.isWater(world.getForeMap(x-1, y))) { world.setForeMap(x-1, y, 1); @@ -296,17 +308,17 @@ public class GameProc implements Serializable{ } return; } - if (world.getForeMap(x, y) == 64) { - if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=63 && world.getForeMap(x, y+1)<=65) || + if (world.getForeMap(x, y) == 66) { + if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=65 && world.getForeMap(x, y+1)<=67) || (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) { - world.setForeMap(x,y+1,9); + world.setForeMap(x,y+1,64); updateBlock(x, y+2); } else if (Items.isWater(world.getForeMap(x, y+1))) { world.setForeMap(x, y+1, 1); } else if (Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision) { if (world.getForeMap(x+1, y)==0 || (!Items.BLOCKS.getValueAt(world.getForeMap(x+1, y)).collision && !Items.isFluid(world.getForeMap(x+1, y))) ){ - world.setForeMap(x+1,y,65); + world.setForeMap(x+1,y,67); updateBlock(x+1, y+1); } else if (Items.isWater(world.getForeMap(x+1, y))) { world.setForeMap(x+1, y, 1); @@ -314,7 +326,7 @@ public class GameProc implements Serializable{ if (world.getForeMap(x-1, y)==0 || (!Items.BLOCKS.getValueAt(world.getForeMap(x-1, y)).collision && !Items.isFluid(world.getForeMap(x-1, y))) ){ - world.setForeMap(x-1,y,65); + world.setForeMap(x-1,y,67); updateBlock(x-1, y+1); } else if (Items.isWater(world.getForeMap(x-1, y))) { world.setForeMap(x-1, y, 1); @@ -322,10 +334,10 @@ public class GameProc implements Serializable{ } return; } - if (world.getForeMap(x, y) == 65) { - if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=63 && world.getForeMap(x, y+1)<=65) || + if (world.getForeMap(x, y) == 67) { + if (world.getForeMap(x, y+1)==0 || (world.getForeMap(x, y+1)>=65 && world.getForeMap(x, y+1)<=67) || (!Items.BLOCKS.getValueAt(world.getForeMap(x, y+1)).collision && !Items.isFluid(world.getForeMap(x, y+1)))) { - world.setForeMap(x,y+1,9); + world.setForeMap(x,y+1,64); updateBlock(x, y+2); } else if (Items.isWater(world.getForeMap(x, y+1))) { world.setForeMap(x, y+1, 1); @@ -366,6 +378,13 @@ public class GameProc implements Serializable{ } } + public void useItem(int x, int y, int id, boolean bg) { + if (id>0 && Items.ITEMS.get(id).getType()==0) { + if (!bg) world.placeToForeground(x, y, Items.ITEMS.get(id).getBlock()); + else world.placeToBackground(x, y, Items.ITEMS.get(id).getBlock()); + } + } + public void update(float delta) { RUN_TIME += delta; @@ -377,36 +396,39 @@ public class GameProc implements Serializable{ DO_UPD = false; } - for (int y=(int)renderer.camera.position.y/16-1; y<(int)(renderer.camera.position.y+renderer.camera.viewportHeight)/16+1; y++) { + for (int y=0; y=(int)(renderer.camera.position.x+renderer.camera.viewportWidth)/16+1) { - FUPD_X = (int) renderer.camera.position.x / 16 - 1; - FUPD_Y++; - if (FUPD_Y>=(int)(renderer.camera.position.y+renderer.camera.viewportHeight)/16+1) { - FUPD_Y = (int) renderer.camera.position.y / 16 - 1; - } - } - physics.update(delta); moveCursor(); checkCursorBounds(); + if (isTouchDown && touchDownButton==Input.Buttons.LEFT) { + if (world.getForeMap(cursorX, cursorY) > 0 && + Items.BLOCKS.getValueAt(world.getForeMap(cursorX, cursorY)).getHp()>=0){// || world.getBackMap(cursorX, cursorY) > 0) { + blockDmg++; + if (blockDmg>=Items.BLOCKS.getValueAt(world.getForeMap(cursorX, cursorY)).getHp()) { + if (Items.BLOCKS.getValueAt(world.getForeMap(cursorX, cursorY)).getDrop()>0) + drops.add(new Drop(cursorX*16+4, cursorY*16+4, Items.BLOCKS.getValueAt(world.getForeMap(cursorX, cursorY)).getDrop())); + world.placeToForeground(cursorX, cursorY, 0); + blockDmg=0; + } + } + } + if (isTouchDown && TimeUtils.timeSinceMillis(touchDownTime) > 500) { if (touchDownButton== Input.Buttons.RIGHT) { - world.placeToBackground(cursorX, cursorY, - player.inventory[invSlot]); + useItem(cursorX, cursorY, player.inventory[invSlot], true); + isTouchDown = false; } else if (touchDownY< Assets.invBar.getRegionHeight() && touchDownX>renderer.camera.viewportWidth/2-Assets.invBar.getRegionWidth()/2 && touchDownX