diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/character/Character.java b/api/src/main/java/com/bartlomiejpluta/base/api/character/Character.java index b44a5a55..f88770e6 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/api/character/Character.java +++ b/api/src/main/java/com/bartlomiejpluta/base/api/character/Character.java @@ -2,16 +2,16 @@ package com.bartlomiejpluta.base.api.character; import com.bartlomiejpluta.base.api.animation.Animated; import com.bartlomiejpluta.base.api.entity.Entity; -import com.bartlomiejpluta.base.api.event.Event; -import com.bartlomiejpluta.base.api.event.EventType; import com.bartlomiejpluta.base.api.move.Direction; import com.bartlomiejpluta.base.api.move.Movable; +import com.bartlomiejpluta.base.api.move.Movement; import java.util.concurrent.CompletableFuture; -import java.util.function.Consumer; public interface Character extends Movable, Animated, Entity { + Movement move(Direction direction); + Direction getFaceDirection(); void setFaceDirection(Direction direction); diff --git a/api/src/main/java/com/bartlomiejpluta/base/lib/ai/RandomMovementAI.java b/api/src/main/java/com/bartlomiejpluta/base/lib/ai/RandomMovementAI.java index 1345bc5a..795c8bbf 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/lib/ai/RandomMovementAI.java +++ b/api/src/main/java/com/bartlomiejpluta/base/lib/ai/RandomMovementAI.java @@ -25,7 +25,7 @@ public class RandomMovementAI implements AI { if (!npc.isMoving()) { if (accumulator > threshold) { Direction direction = Direction.values()[random.nextInt(4)]; - layer.pushMovement(npc.prepareMovement(direction)); + npc.move(direction); accumulator = 0.0f; threshold = random.nextFloat() * intervalSeconds; } diff --git a/api/src/main/java/com/bartlomiejpluta/base/lib/character/CharacterDelegate.java b/api/src/main/java/com/bartlomiejpluta/base/lib/character/CharacterDelegate.java index 08df6064..1fb10ad4 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/lib/character/CharacterDelegate.java +++ b/api/src/main/java/com/bartlomiejpluta/base/lib/character/CharacterDelegate.java @@ -56,6 +56,11 @@ public abstract class CharacterDelegate implements Character { return character.getMovement(); } + @Override + public Movement move(Direction direction) { + return character.move(direction); + } + @Override public Direction getFaceDirection() { return character.getFaceDirection(); diff --git a/api/src/main/java/com/bartlomiejpluta/base/util/input/InputUtil.java b/api/src/main/java/com/bartlomiejpluta/base/util/input/InputUtil.java new file mode 100644 index 00000000..60ef6a7b --- /dev/null +++ b/api/src/main/java/com/bartlomiejpluta/base/util/input/InputUtil.java @@ -0,0 +1,36 @@ +package com.bartlomiejpluta.base.util.input; + +import com.bartlomiejpluta.base.api.character.Character; +import com.bartlomiejpluta.base.api.input.Input; +import com.bartlomiejpluta.base.api.input.Key; +import com.bartlomiejpluta.base.api.move.Direction; + +public class InputUtil { + public static void handleBasicControl(Character character, Input input) { + if (character.isMoving() || character.getLayer() == null) { + return; + } + + if (input.isKeyPressed(Key.KEY_LEFT_CONTROL)) { + if (input.isKeyPressed(Key.KEY_DOWN)) { + character.setFaceDirection(Direction.DOWN); + } else if (input.isKeyPressed(Key.KEY_UP)) { + character.setFaceDirection(Direction.UP); + } else if (input.isKeyPressed(Key.KEY_LEFT)) { + character.setFaceDirection(Direction.LEFT); + } else if (input.isKeyPressed(Key.KEY_RIGHT)) { + character.setFaceDirection(Direction.RIGHT); + } + } else { + if (input.isKeyPressed(Key.KEY_DOWN)) { + character.move(Direction.DOWN); + } else if (input.isKeyPressed(Key.KEY_UP)) { + character.move(Direction.UP); + } else if (input.isKeyPressed(Key.KEY_LEFT)) { + character.move(Direction.LEFT); + } else if (input.isKeyPressed(Key.KEY_RIGHT)) { + character.move(Direction.RIGHT); + } + } + } +} diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/model/DefaultCharacter.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/model/DefaultCharacter.java index e2ae378a..4d90661d 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/model/DefaultCharacter.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/character/model/DefaultCharacter.java @@ -144,6 +144,13 @@ public class DefaultCharacter extends MovableSprite implements Character { return animation.getFuture(); } + @Override + public Movement move(Direction direction) { + var movement = prepareMovement(direction); + layer.pushMovement(movement); + return movement; + } + @Override public boolean move(Movement movement) { if (super.move(movement)) {