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 gameProc
;
15 public GameInput(GameProc gameProc
) {
16 this.gameProc
= gameProc
;
19 private boolean checkSwim() {
20 return (Items
.isFluid(gameProc
.world
.getForeMap((int) (gameProc
.player
.position
.x
+ gameProc
.player
.width
/ 2) / 16,
21 (int) (gameProc
.player
.position
.y
+ gameProc
.player
.height
/ 4 * 3) / 16)));
24 private void wasdPressed(int keycode
) {
25 if (gameProc
.ctrlMode
== 0 || !CaveGame
.TOUCH
) {
28 gameProc
.player
.moveX
.x
= -GamePhysics
.PL_SPEED
;
29 gameProc
.player
.dir
= 0;
30 if (CaveGame
.TOUCH
&& checkSwim()) gameProc
.swim
= true;
33 gameProc
.player
.moveX
.x
= GamePhysics
.PL_SPEED
;
34 gameProc
.player
.dir
= 1;
35 if (CaveGame
.TOUCH
&& checkSwim()) gameProc
.swim
= true;
38 } else if (CaveGame
.TOUCH
) {
53 gameProc
.blockDmg
= 0;
57 public void keyDown(int keycode
) {
58 gameProc
.isKeyDown
= true;
59 gameProc
.keyDownCode
= keycode
;
60 if (keycode
== Input
.Keys
.W
|| keycode
== Input
.Keys
.A
||
61 keycode
== Input
.Keys
.S
|| keycode
== Input
.Keys
.D
) {
63 } else switch (keycode
) {
64 case Input
.Keys
.ALT_LEFT
:
67 if (gameProc
.ctrlMode
> 1) gameProc
.ctrlMode
= 0;
71 case Input
.Keys
.SPACE
:
74 } else if (gameProc
.player
.canJump
) {
75 gameProc
.player
.moveY
.add(0, -7);
76 } else if (!gameProc
.player
.flyMode
) {
77 gameProc
.player
.flyMode
= true;
78 gameProc
.player
.moveY
.setZero();
80 gameProc
.player
.moveY
.y
= -GamePhysics
.PL_SPEED
;
84 case Input
.Keys
.CONTROL_LEFT
:
85 gameProc
.player
.moveY
.y
= GamePhysics
.PL_SPEED
;
89 if (CaveGame
.STATE
== AppState
.GAME_PLAY
) CaveGame
.STATE
= AppState
.GAME_CREATIVE_INV
;
90 else CaveGame
.STATE
= AppState
.GAME_PLAY
;
94 gameProc
.mobs
.add(new Pig(gameProc
.cursorX
* 16, gameProc
.cursorY
* 16));
97 case Input
.Keys
.ESCAPE
:
99 CaveGame
.STATE
= AppState
.GOTO_MENU
;
103 GameScreen
.SHOW_DEBUG
= !GameScreen
.SHOW_DEBUG
;
108 public void keyUp(int keycode
) {
112 gameProc
.player
.moveX
.x
= 0;
113 if (CaveGame
.TOUCH
&& gameProc
.swim
) gameProc
.swim
= false;
116 case Input
.Keys
.SPACE
:
117 case Input
.Keys
.CONTROL_LEFT
:
118 if (gameProc
.player
.flyMode
) gameProc
.player
.moveY
.setZero();
119 if (gameProc
.swim
) gameProc
.swim
= false;
124 public void mouseMoved(int screenX
, int screenY
) {
127 public void touchDown(int screenX
, int screenY
, int button
) {
128 gameProc
.touchDownTime
= TimeUtils
.millis();
129 gameProc
.isTouchDown
= true;
130 gameProc
.touchDownButton
= button
;
131 gameProc
.touchDownX
= screenX
;
132 gameProc
.touchDownY
= screenY
;
135 public void touchUp(int screenX
, int screenY
, int button
) {
136 if (CaveGame
.TOUCH
&& gameProc
.isKeyDown
) {
137 keyUp(gameProc
.keyDownCode
);
138 gameProc
.isKeyDown
= false;
140 if (gameProc
.isTouchDown
) {
141 if (CaveGame
.STATE
== AppState
.GAME_CREATIVE_INV
&&
142 screenX
> gameProc
.renderer
.camera
.viewportWidth
/ 2 - Assets
.creativeInv
.getRegionWidth() / 2 &&
143 screenX
< gameProc
.renderer
.camera
.viewportWidth
/ 2 + Assets
.creativeInv
.getRegionWidth() / 2 &&
144 screenY
> gameProc
.renderer
.camera
.viewportHeight
/ 2 - Assets
.creativeInv
.getRegionHeight() / 2 &&
145 screenY
< gameProc
.renderer
.camera
.viewportHeight
/ 2 + Assets
.creativeInv
.getRegionHeight() / 2) {
146 int ix
= (int) (screenX
- (gameProc
.renderer
.camera
.viewportWidth
/ 2 - Assets
.creativeInv
.getRegionWidth() / 2 + 8)) / 18;
147 int iy
= (int) (screenY
- (gameProc
.renderer
.camera
.viewportHeight
/ 2 - Assets
.creativeInv
.getRegionHeight() / 2 + 18)) / 18;
148 int item
= gameProc
.creativeScroll
* 8 + (ix
+ iy
* 8);
149 if (ix
>= 8 || ix
< 0 || iy
< 0 || iy
>= 5) item
= -1;
150 if (item
>= 0 && item
< Items
.ITEMS
.size()) {
151 for (int i
= 8; i
> 0; i
--) {
152 gameProc
.player
.inventory
[i
] = gameProc
.player
.inventory
[i
- 1];
154 gameProc
.player
.inventory
[0] = item
;
156 } else if (CaveGame
.STATE
== AppState
.GAME_CREATIVE_INV
) {
157 CaveGame
.STATE
= AppState
.GAME_PLAY
;
158 } else if (screenY
< Assets
.invBar
.getRegionHeight() &&
159 screenX
> gameProc
.renderer
.camera
.viewportWidth
/ 2 - Assets
.invBar
.getRegionWidth() / 2 &&
160 screenX
< gameProc
.renderer
.camera
.viewportWidth
/ 2 + Assets
.invBar
.getRegionWidth() / 2) {
161 gameProc
.invSlot
= (int) ((screenX
- (gameProc
.renderer
.camera
.viewportWidth
/ 2 - Assets
.invBar
.getRegionWidth() / 2)) / 20);
162 } else if (button
== Input
.Buttons
.RIGHT
) {
163 gameProc
.useItem(gameProc
.cursorX
, gameProc
.cursorY
,
164 gameProc
.player
.inventory
[gameProc
.invSlot
], false);
165 } else if (button
== Input
.Buttons
.LEFT
) {
166 gameProc
.blockDmg
= 0;
169 gameProc
.isTouchDown
= false;
172 public void touchDragged(int screenX
, int screenY
) {
173 if (CaveGame
.STATE
== AppState
.GAME_CREATIVE_INV
&& Math
.abs(screenY
- gameProc
.touchDownY
) > 16) {
174 if (screenX
> gameProc
.renderer
.camera
.viewportWidth
/ 2 - Assets
.creativeInv
.getRegionWidth() / 2 &&
175 screenX
< gameProc
.renderer
.camera
.viewportWidth
/ 2 + Assets
.creativeInv
.getRegionWidth() / 2 &&
176 screenY
> gameProc
.renderer
.camera
.viewportHeight
/ 2 - Assets
.creativeInv
.getRegionHeight() / 2 &&
177 screenY
< gameProc
.renderer
.camera
.viewportHeight
/ 2 + Assets
.creativeInv
.getRegionHeight() / 2) {
178 gameProc
.creativeScroll
-= (screenY
- gameProc
.touchDownY
) / 16;
179 gameProc
.touchDownX
= screenX
;
180 gameProc
.touchDownY
= screenY
;
181 if (gameProc
.creativeScroll
< 0) gameProc
.creativeScroll
= 0;
182 if (gameProc
.creativeScroll
> gameProc
.maxCreativeScroll
)
183 gameProc
.creativeScroll
= gameProc
.maxCreativeScroll
;
188 public void scrolled(int amount
) {
189 switch (CaveGame
.STATE
) {
191 gameProc
.invSlot
+= amount
;
192 if (gameProc
.invSlot
< 0) gameProc
.invSlot
= 8;
193 if (gameProc
.invSlot
> 8) gameProc
.invSlot
= 0;
195 case GAME_CREATIVE_INV
:
196 gameProc
.creativeScroll
+= amount
;
197 if (gameProc
.creativeScroll
< 0) gameProc
.creativeScroll
= 0;
198 if (gameProc
.creativeScroll
> gameProc
.maxCreativeScroll
)
199 gameProc
.creativeScroll
= gameProc
.maxCreativeScroll
;