diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Hider.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Hider.java index 95eebe7..9b813f3 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/Hider.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/Hider.java @@ -21,6 +21,7 @@ import java.util.function.BooleanSupplier; import ru.windcorp.progressia.client.graphics.flat.RenderTarget; import ru.windcorp.progressia.client.graphics.gui.layout.LayoutFill; +import ru.windcorp.progressia.client.graphics.input.InputEvent; import ru.windcorp.progressia.client.graphics.model.Renderable; public class Hider extends Component { @@ -37,16 +38,10 @@ public class Hider extends Component { addChild(contents); } -// FIXME -// -// @Override -// public void dispatchInput(Input input) { -// if (shouldHide.getAsBoolean()) { -// return; -// } -// -// super.dispatchInput(input); -// } + @Override + protected boolean passInputToChildren(InputEvent e) { + return !shouldHide.getAsBoolean(); + } @Override public synchronized Component findFocused() { diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/world/hud/LayerHUD.java b/src/main/java/ru/windcorp/progressia/client/graphics/world/hud/LayerHUD.java index 91fade5..c14c4c4 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/world/hud/LayerHUD.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/world/hud/LayerHUD.java @@ -27,6 +27,9 @@ import ru.windcorp.progressia.client.graphics.gui.GUILayer; import ru.windcorp.progressia.client.graphics.gui.Group; import ru.windcorp.progressia.client.graphics.gui.layout.LayoutFill; import ru.windcorp.progressia.client.graphics.input.InputEvent; +import ru.windcorp.progressia.client.graphics.input.KeyMatcher; +import ru.windcorp.progressia.client.graphics.input.bus.InputBus; +import ru.windcorp.progressia.test.controls.TestPlayerControls; public class LayerHUD extends GUILayer { @@ -43,6 +46,27 @@ public class LayerHUD extends GUILayer { setCursorPolicy(CursorPolicy.INDIFFERENT); manager.getClient().subscribe(this); + + getRoot().addKeyListener(new KeyMatcher("Escape"), e -> { + setInventoryShown(!showInventory); + e.consume(); + }, InputBus.Option.IGNORE_FOCUS); + + getRoot().addKeyListener(new KeyMatcher("E"), e -> { + setInventoryShown(!showInventory); + e.consume(); + }, InputBus.Option.IGNORE_FOCUS); + + getRoot().addKeyListener(new KeyMatcher("Left Control"), e -> { + TestPlayerControls.getInstance().getInventoryControls().switchHandsWithCtrl(e); + e.consume(); + }, InputBus.Option.IGNORE_ACTION, InputBus.Option.IGNORE_FOCUS); + + getRoot().addKeyListener(new KeyMatcher("Right Control"), e -> { + TestPlayerControls.getInstance().getInventoryControls().switchHandsWithCtrl(e); + e.consume(); + }, InputBus.Option.IGNORE_ACTION, InputBus.Option.IGNORE_FOCUS); + } @Subscribe @@ -105,12 +129,16 @@ public class LayerHUD extends GUILayer { } @Override - public void handleInput(InputEvent e) { + public void handleInput(InputEvent event) { if (isHidden) { return; } - - super.handleInput(e); + + super.handleInput(event); + + if (getCursorPolicy() == CursorPolicy.REQUIRE) { + event.consume(); + } } @Override diff --git a/src/main/java/ru/windcorp/progressia/test/controls/InventoryControls.java b/src/main/java/ru/windcorp/progressia/test/controls/InventoryControls.java index 64a7e05..d489723 100644 --- a/src/main/java/ru/windcorp/progressia/test/controls/InventoryControls.java +++ b/src/main/java/ru/windcorp/progressia/test/controls/InventoryControls.java @@ -57,16 +57,6 @@ public class InventoryControls { ) ); - triggers.register( - ControlTriggers.localOf( - "Test:CloseInventory", - KeyEvent.class, - this::toggleInventory, - new KeyMatcher("Escape")::matches, - e -> ClientState.getInstance().getHUD().isInventoryShown() - ) - ); - triggers.register( ControlTriggers.localOf( "Test:HideHUD", @@ -103,7 +93,7 @@ public class InventoryControls { client.getHUD().setHidden(!client.getHUD().isHidden()); } - private void switchHandsWithCtrl(KeyEvent event) { + public void switchHandsWithCtrl(KeyEvent event) { int change = 0; if (event.isPress()) { diff --git a/src/main/java/ru/windcorp/progressia/test/controls/TestPlayerControls.java b/src/main/java/ru/windcorp/progressia/test/controls/TestPlayerControls.java index 5fb8f59..06addc9 100644 --- a/src/main/java/ru/windcorp/progressia/test/controls/TestPlayerControls.java +++ b/src/main/java/ru/windcorp/progressia/test/controls/TestPlayerControls.java @@ -169,6 +169,18 @@ public class TestPlayerControls { public MovementControls getMovementControls() { return movementControls; } + + public CameraControls getCameraControls() { + return cameraControls; + } + + public InteractionControls getInteractionControls() { + return interactionControls; + } + + public InventoryControls getInventoryControls() { + return inventoryControls; + } public BlockData getSelectedBlock() { return interactionControls.getSelectedBlock();