mirror of
https://github.com/OMGeeky/andors-trail.git
synced 2026-01-23 20:05:29 +01:00
Move canAcceptInput() checks into handler.
This commit is contained in:
@@ -160,8 +160,8 @@ public final class InputController implements OnClickListener, OnLongClickListen
|
||||
}
|
||||
|
||||
// Generate game actions based on mapped keys
|
||||
public boolean onKeyboardAction(Context context, KeyEvent event) {
|
||||
L.log("onKeyboardAction(): Processing action " + event.getAction() + " for keyCode " + event.getKeyCode());
|
||||
public boolean onKeyboardAction(Context context, KeyEvent event, boolean acceptInput) {
|
||||
//L.log("onKeyboardAction(): Processing action " + event.getAction() + " for keyCode " + event.getKeyCode());
|
||||
|
||||
if (event.getAction() != KeyEvent.ACTION_DOWN && event.getAction() != KeyEvent.ACTION_UP) return false; // don't handle other actions
|
||||
boolean keydown = (event.getAction() == KeyEvent.ACTION_DOWN);
|
||||
@@ -173,19 +173,19 @@ public final class InputController implements OnClickListener, OnLongClickListen
|
||||
// keys used simultaneously to create synthetic diagonals
|
||||
case KEY_MOVE_UP:
|
||||
keyState_dy = keydown ? -1 : 0;
|
||||
if (!inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
if (acceptInput && !inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
break;
|
||||
case KEY_MOVE_DOWN:
|
||||
keyState_dy = keydown ? 1 : 0;
|
||||
if (!inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
if (acceptInput && !inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
break;
|
||||
case KEY_MOVE_LEFT:
|
||||
keyState_dx = keydown ? -1 : 0;
|
||||
if (!inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
if (acceptInput && !inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
break;
|
||||
case KEY_MOVE_RIGHT:
|
||||
keyState_dx = keydown ? 1 : 0;
|
||||
if (!inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
if (acceptInput && !inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
break;
|
||||
|
||||
// Diagonal directional keys. Modify both direction registers, can't be combined
|
||||
@@ -193,22 +193,22 @@ public final class InputController implements OnClickListener, OnLongClickListen
|
||||
case KEY_MOVE_UP_LEFT:
|
||||
keyState_dx = keydown ? -1 : 0;
|
||||
keyState_dy = keydown ? -1 : 0;
|
||||
if (!inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
if (acceptInput && !inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
break;
|
||||
case KEY_MOVE_UP_RIGHT:
|
||||
keyState_dx = keydown ? 1 : 0;
|
||||
keyState_dy = keydown ? -1 : 0;
|
||||
if (!inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
if (acceptInput && !inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
break;
|
||||
case KEY_MOVE_DOWN_LEFT:
|
||||
keyState_dx = keydown ? -1 : 0;
|
||||
keyState_dy = keydown ? 1 : 0;
|
||||
if (!inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
if (acceptInput && !inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
break;
|
||||
case KEY_MOVE_DOWN_RIGHT:
|
||||
keyState_dx = keydown ? 1 : 0;
|
||||
keyState_dy = keydown ? 1 : 0;
|
||||
if (!inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
if (acceptInput && !inihbit) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
break;
|
||||
|
||||
// Special key handling below - some combat/movement stuff done here because it's too
|
||||
@@ -220,7 +220,7 @@ public final class InputController implements OnClickListener, OnLongClickListen
|
||||
if (keydown && !keyState_attack) { // key pressed - pause any movement
|
||||
if(!world.model.uiSelections.isInCombat) controllers.movementController.stopMovement();
|
||||
} else if (!keydown && keyState_attack) { // key released - execute attack / move in direction
|
||||
onRelativeMovement(keyState_dx, keyState_dy);
|
||||
if (acceptInput) onRelativeMovement(keyState_dx, keyState_dy);
|
||||
}
|
||||
keyState_attack = keydown;
|
||||
break;
|
||||
@@ -229,12 +229,12 @@ public final class InputController implements OnClickListener, OnLongClickListen
|
||||
case KEY_FLEE:
|
||||
if (world.model.uiSelections.isInCombat) {
|
||||
if (keydown && !keyState_flee) { // button pressed - set flee; movement locked while pressed
|
||||
controllers.combatController.startFlee();
|
||||
if(acceptInput) controllers.combatController.startFlee();
|
||||
} else if (!keydown && keyState_flee) { // button released - move flee direction, if held
|
||||
// We need to do a special call because the movement key may already be down, and if the device
|
||||
// doesn't generate repeat keystrokes, this handler won't get another event
|
||||
if ((keyState_dx != 0 || keyState_dy != 0) && allowInputInterval()) {
|
||||
controllers.combatController.executeMoveAttack(keyState_dx, keyState_dy);
|
||||
if(acceptInput) controllers.combatController.executeMoveAttack(keyState_dx, keyState_dy);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -243,7 +243,7 @@ public final class InputController implements OnClickListener, OnLongClickListen
|
||||
|
||||
// "End Turn" shortcut. Flag prevents repeated end turn if key is held down.
|
||||
case KEY_END_TURN:
|
||||
if (keydown && !keyState_endturn) {
|
||||
if (acceptInput && keydown && !keyState_endturn) {
|
||||
if (world.model.uiSelections.isInCombat) controllers.combatController.endPlayerTurn();
|
||||
}
|
||||
keyState_endturn = keydown;
|
||||
@@ -251,7 +251,7 @@ public final class InputController implements OnClickListener, OnLongClickListen
|
||||
|
||||
// "Hero Info" screen shortcut. New activity takes focus, so we don't need to worry about repeats.
|
||||
case KEY_HERO_INFO:
|
||||
if (keydown) context.startActivity(new Intent(context, HeroinfoActivity.class));
|
||||
if (acceptInput && keydown) context.startActivity(new Intent(context, HeroinfoActivity.class));
|
||||
break;
|
||||
|
||||
case KEY_TOOLBOX:
|
||||
|
||||
@@ -133,18 +133,16 @@ public final class MainView extends SurfaceView
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {
|
||||
if (!canAcceptInput()) return false;
|
||||
|
||||
// onKeyboardAction needs context to start new activities.
|
||||
return inputController.onKeyboardAction(getContext(), keyEvent) || super.onKeyDown(keyCode, keyEvent);
|
||||
// canAcceptInput() checks done in handler so it can preserve keystate even if it does not have focus.
|
||||
return inputController.onKeyboardAction(getContext(), keyEvent, canAcceptInput()) || super.onKeyDown(keyCode, keyEvent);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyUp(int keyCode, KeyEvent keyEvent) {
|
||||
// Android provides artificial ACTION_UP events when focus changes; we process them to prevent "stuck key" effect after dialogs close
|
||||
// (so don't check canAcceptInput() here)
|
||||
return inputController.onKeyboardAction(getContext(), keyEvent) || super.onKeyUp(keyCode, keyEvent);
|
||||
return inputController.onKeyboardAction(getContext(), keyEvent, canAcceptInput()) || super.onKeyUp(keyCode, keyEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -175,6 +173,7 @@ public final class MainView extends SurfaceView
|
||||
|
||||
@Override
|
||||
public void surfaceCreated(SurfaceHolder sh) {
|
||||
|
||||
hasSurface = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user