DEADSOFTWARE

Refactor
[cavedroid.git] / core / src / ru / deadsoftware / cavecraft / game / GameInput.java
1 package ru.deadsoftware.cavecraft.game;
3 import com.badlogic.gdx.Input;
4 import com.badlogic.gdx.utils.TimeUtils;
5 import ru.deadsoftware.cavecraft.CaveGame;
6 import ru.deadsoftware.cavecraft.GameScreen;
7 import ru.deadsoftware.cavecraft.game.mobs.Pig;
8 import ru.deadsoftware.cavecraft.misc.AppState;
9 import ru.deadsoftware.cavecraft.misc.Assets;
11 public class GameInput {
13 private GameProc gp;
15 public GameInput(GameProc gp) {
16 this.gp = gp;
17 }
19 private boolean checkSwim() {
20 return GameItems.isFluid(gp.world.getForeMap(gp.player.getMapX(), gp.player.getMapY()));
21 }
23 private boolean insideCreativeInv(int screenX, int screenY) {
24 return (screenX > gp.renderer.getWidth() / 2 - Assets.creativeInv.getRegionWidth() / 2 &&
25 screenX < gp.renderer.getWidth() / 2 + Assets.creativeInv.getRegionWidth() / 2 &&
26 screenY > gp.renderer.getHeight() / 2 - Assets.creativeInv.getRegionHeight() / 2 &&
27 screenY < gp.renderer.getHeight() / 2 + Assets.creativeInv.getRegionHeight() / 2);
28 }
30 private void wasdPressed(int keycode) {
31 if (gp.ctrlMode == 0 || !CaveGame.TOUCH) {
32 switch (keycode) {
33 case Input.Keys.A:
34 gp.player.mov.x = -GamePhysics.PL_SPEED;
35 gp.player.setDir(0);
36 if (CaveGame.TOUCH && checkSwim()) gp.player.swim = true;
37 break;
38 case Input.Keys.D:
39 gp.player.mov.x = GamePhysics.PL_SPEED;
40 gp.player.setDir(1);
41 if (CaveGame.TOUCH && checkSwim()) gp.player.swim = true;
42 break;
43 }
44 } else {
45 switch (keycode) {
46 case Input.Keys.A:
47 gp.curX--;
48 break;
49 case Input.Keys.D:
50 gp.curX++;
51 break;
52 case Input.Keys.W:
53 gp.curY--;
54 break;
55 case Input.Keys.S:
56 gp.curY++;
57 break;
58 }
59 gp.blockDmg = 0;
60 }
61 }
63 public void keyDown(int keycode) {
64 gp.isKeyDown = true;
65 gp.keyDownCode = keycode;
66 if (keycode == Input.Keys.W || keycode == Input.Keys.A ||
67 keycode == Input.Keys.S || keycode == Input.Keys.D) {
68 wasdPressed(keycode);
69 } else switch (keycode) {
70 case Input.Keys.ALT_LEFT:
71 if (CaveGame.TOUCH) {
72 gp.ctrlMode++;
73 if (gp.ctrlMode > 1) gp.ctrlMode = 0;
74 }
75 break;
77 case Input.Keys.SPACE:
78 if (checkSwim()) {
79 gp.player.swim = true;
80 } else if (gp.player.canJump) {
81 gp.player.mov.add(0, -7);
82 } else if (!gp.player.flyMode && gp.player.gameMode == 1) {
83 gp.player.flyMode = true;
84 gp.player.mov.y = 0;
85 } else if (gp.player.flyMode) {
86 gp.player.mov.y = -GamePhysics.PL_SPEED;
87 }
88 break;
90 case Input.Keys.CONTROL_LEFT:
91 gp.player.mov.y = GamePhysics.PL_SPEED;
92 break;
94 case Input.Keys.E:
95 if (CaveGame.STATE == AppState.GAME_PLAY) switch (gp.player.gameMode) {
96 case 0:
97 //TODO survival inv
98 break;
99 case 1:
100 CaveGame.STATE = AppState.GAME_CREATIVE_INV;
101 break;
103 else CaveGame.STATE = AppState.GAME_PLAY;
104 break;
106 case Input.Keys.G:
107 gp.mobs.add(new Pig(gp.curX * 16, gp.curY * 16));
108 break;
110 case Input.Keys.ESCAPE:
111 case Input.Keys.BACK:
112 CaveGame.STATE = AppState.GOTO_MENU;
113 break;
115 case Input.Keys.F1:
116 GameScreen.SHOW_DEBUG = !GameScreen.SHOW_DEBUG;
117 break;
121 public void keyUp(int keycode) {
122 switch (keycode) {
123 case Input.Keys.A:
124 case Input.Keys.D:
125 gp.player.mov.x = 0;
126 if (CaveGame.TOUCH && gp.player.swim) gp.player.swim = false;
127 break;
129 case Input.Keys.SPACE:
130 case Input.Keys.CONTROL_LEFT:
131 if (gp.player.flyMode) gp.player.mov.y = 0;
132 if (gp.player.swim) gp.player.swim = false;
133 break;
137 public void touchDown(int screenX, int screenY, int button) {
138 gp.touchDownTime = TimeUtils.millis();
139 gp.isTouchDown = true;
140 gp.touchDownBtn = button;
141 gp.touchDownX = screenX;
142 gp.touchDownY = screenY;
145 public void touchUp(int screenX, int screenY, int button) {
146 if (CaveGame.TOUCH && gp.isKeyDown) {
147 keyUp(gp.keyDownCode);
148 gp.isKeyDown = false;
150 if (gp.isTouchDown) {
151 if (CaveGame.STATE == AppState.GAME_CREATIVE_INV && insideCreativeInv(screenX, screenY)) {
152 int ix = (int) (screenX - (gp.renderer.getWidth() / 2 - Assets.creativeInv.getRegionWidth() / 2 + 8)) / 18;
153 int iy = (int) (screenY - (gp.renderer.getHeight() / 2 - Assets.creativeInv.getRegionHeight() / 2 + 18)) / 18;
154 int item = gp.creativeScroll * 8 + (ix + iy * 8);
155 if (ix >= 8 || ix < 0 || iy < 0 || iy >= 5) item = -1;
156 if (item >= 0 && item < GameItems.getItemsSize()) {
157 for (int i = 8; i > 0; i--) {
158 gp.player.inv[i] = gp.player.inv[i - 1];
160 gp.player.inv[0] = item;
162 } else if (CaveGame.STATE == AppState.GAME_CREATIVE_INV) {
163 CaveGame.STATE = AppState.GAME_PLAY;
164 } else if (screenY < Assets.invBar.getRegionHeight() &&
165 screenX > gp.renderer.getWidth() / 2 - Assets.invBar.getRegionWidth() / 2 &&
166 screenX < gp.renderer.getWidth() / 2 + Assets.invBar.getRegionWidth() / 2) {
167 gp.player.invSlot = (int) ((screenX - (gp.renderer.getWidth() / 2 - Assets.invBar.getRegionWidth() / 2)) / 20);
168 } else if (button == Input.Buttons.RIGHT) {
169 gp.useItem(gp.curX, gp.curY,
170 gp.player.inv[gp.player.invSlot], false);
171 } else if (button == Input.Buttons.LEFT) {
172 gp.blockDmg = 0;
175 gp.isTouchDown = false;
178 public void touchDragged(int screenX, int screenY) {
179 if (CaveGame.STATE == AppState.GAME_CREATIVE_INV && Math.abs(screenY - gp.touchDownY) > 16) {
180 if (insideCreativeInv(screenX, screenY)) {
181 gp.creativeScroll -= (screenY - gp.touchDownY) / 16;
182 gp.touchDownX = screenX;
183 gp.touchDownY = screenY;
184 if (gp.creativeScroll < 0) gp.creativeScroll = 0;
185 if (gp.creativeScroll > gp.maxCreativeScroll)
186 gp.creativeScroll = gp.maxCreativeScroll;
191 public void scrolled(int amount) {
192 switch (CaveGame.STATE) {
193 case GAME_PLAY:
194 gp.player.invSlot += amount;
195 if (gp.player.invSlot < 0) gp.player.invSlot = 8;
196 if (gp.player.invSlot > 8) gp.player.invSlot = 0;
197 break;
198 case GAME_CREATIVE_INV:
199 gp.creativeScroll += amount;
200 if (gp.creativeScroll < 0) gp.creativeScroll = 0;
201 if (gp.creativeScroll > gp.maxCreativeScroll)
202 gp.creativeScroll = gp.maxCreativeScroll;
203 break;