added control input
This commit is contained in:
		| @@ -5,14 +5,19 @@ import eu.mhsl.minenet.minigames.score.FirstWinsScore; | ||||
| import eu.mhsl.minenet.minigames.util.BatchUtil; | ||||
| import eu.mhsl.minenet.minigames.instance.Dimension; | ||||
| import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.minestom.server.coordinate.Pos; | ||||
| import net.minestom.server.coordinate.Vec; | ||||
| import net.minestom.server.entity.Player; | ||||
| import net.minestom.server.event.player.PlayerMoveEvent; | ||||
| import net.minestom.server.event.player.*; | ||||
| import net.minestom.server.instance.batch.AbsoluteBlockBatch; | ||||
| import net.minestom.server.instance.block.Block; | ||||
| import net.minestom.server.item.ItemStack; | ||||
| import net.minestom.server.item.Material; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
|  | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| import java.util.concurrent.CompletableFuture; | ||||
|  | ||||
| class Tetris extends StatelessGame { | ||||
| @@ -20,6 +25,8 @@ class Tetris extends StatelessGame { | ||||
|     private final int width = 9; | ||||
|     private final int height = 20; | ||||
|  | ||||
|     private final Map<Button, Long> lastPresses = new HashMap<>(); | ||||
|  | ||||
|     enum Button { | ||||
|         W, | ||||
|         A, | ||||
| @@ -35,17 +42,36 @@ class Tetris extends StatelessGame { | ||||
|         this.setGenerator(new CircularPlateTerrainGenerator(30).setPlateHeight(0)); | ||||
|  | ||||
|         this.isFast = isFast; | ||||
|  | ||||
|         eventNode() | ||||
|             .addListener(PlayerUseItemEvent.class, this::onPlayerInteract) | ||||
|             .addListener(PlayerHandAnimationEvent.class, this::onPlayerAttack); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void onStart() { | ||||
|         super.onStart(); | ||||
|     } | ||||
|  | ||||
|     protected void pressedButton(Button button) { | ||||
|         if(lastPresses.getOrDefault(button, 0L) >= System.currentTimeMillis()-200) return; | ||||
|         lastPresses.put(button, System.currentTimeMillis()); | ||||
|  | ||||
|         switch (button) { | ||||
|             case A -> System.out.println("A"); | ||||
|             case S -> System.out.println("S"); | ||||
|             case D -> System.out.println("D"); | ||||
|             case W -> System.out.println("W"); | ||||
|             case mouseLeft -> System.out.println("mouse left"); | ||||
|             case mouseRight -> System.out.println("mouse right"); | ||||
|             case space -> System.out.println("space"); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     protected void releasedButton(Button button) { | ||||
|         lastPresses.put(button, 0L); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void onLoad(@NotNull CompletableFuture<Void> callback) { | ||||
|         AbsoluteBlockBatch batch = new AbsoluteBlockBatch(); | ||||
| @@ -64,43 +90,71 @@ class Tetris extends StatelessGame { | ||||
|             batch.setBlock(x, 45, 1, Block.GRAY_CONCRETE); | ||||
|         } | ||||
|  | ||||
|         batch.setBlock((int) getSpawn().x(), (int) (getSpawn().y()-1), (int) getSpawn().z(), Block.STONE); | ||||
|  | ||||
|         BatchUtil.loadAndApplyBatch(batch, this, () -> callback.complete(null)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) { | ||||
|         super.onPlayerMove(playerMoveEvent); | ||||
|     protected void onPlayerMove(@NotNull PlayerMoveEvent event) { | ||||
|         super.onPlayerMove(event); | ||||
|  | ||||
| //        if(playerMoveEvent.getNewPosition().z() < getSpawn().z()) { | ||||
| //            pressedButton(Button.W); | ||||
| //        } | ||||
| //        if(playerMoveEvent.getNewPosition().z() > getSpawn().z()) { | ||||
| //            pressedButton(Button.S); | ||||
| //        } | ||||
| //        if(playerMoveEvent.getNewPosition().x() < getSpawn().x()) { | ||||
| //            pressedButton(Button.A); | ||||
| //        } | ||||
| //        if(playerMoveEvent.getNewPosition().x() > getSpawn().x()) { | ||||
| //            pressedButton(Button.D); | ||||
| //        } | ||||
|         Player player = event.getPlayer(); | ||||
|         Pos previousPosition = event.getPlayer().getPosition(); | ||||
|         Pos currentPosition = event.getNewPosition(); | ||||
|  | ||||
| //        playerMoveEvent.getNewPosition().asVec(); | ||||
|         Vec movementVector = currentPosition.asVec().sub(previousPosition.asVec()); | ||||
|  | ||||
|         Vec movementVector = playerMoveEvent.getPlayer().getPreviousPosition().asVec().sub(playerMoveEvent.getNewPosition()); | ||||
|         float yaw = player.getPosition().yaw(); | ||||
|  | ||||
|          | ||||
|         double yawRadians = Math.toRadians(yaw); | ||||
|         double forwardX = -Math.sin(yawRadians); | ||||
|         double forwardZ = Math.cos(yawRadians); | ||||
|  | ||||
|         System.out.println(movementVector); | ||||
|         Vec forward = new Vec(forwardX, 0, forwardZ).normalize(); | ||||
|         Vec left = forward.cross(new Vec(0, 1, 0)).normalize(); | ||||
|  | ||||
| //        if(!(playerMoveEvent.getNewPosition().withYaw(0).withPitch(0) == getSpawn().withYaw(0).withPitch(0))) { | ||||
|             playerMoveEvent.setNewPosition(getSpawn().withView(playerMoveEvent.getNewPosition())); | ||||
| //            return; | ||||
| //        } | ||||
|         double forwardAmount = movementVector.dot(forward); | ||||
|         double leftAmount = movementVector.dot(left); | ||||
|  | ||||
|         if (forwardAmount > 0.01) { | ||||
|             pressedButton(Button.W); | ||||
|             releasedButton(Button.S); | ||||
|         } else if (forwardAmount < -0.01) { | ||||
|             pressedButton(Button.S); | ||||
|             releasedButton(Button.W); | ||||
|         } else { | ||||
|             releasedButton(Button.W); | ||||
|             releasedButton(Button.S); | ||||
|         } | ||||
|  | ||||
|         if (leftAmount > 0.01) { | ||||
|             pressedButton(Button.D); | ||||
|             releasedButton(Button.A); | ||||
|         } else if (leftAmount < -0.01) { | ||||
|             pressedButton(Button.A); | ||||
|             releasedButton(Button.D); | ||||
|         } else { | ||||
|             releasedButton(Button.A); | ||||
|             releasedButton(Button.D); | ||||
|         } | ||||
|  | ||||
|         if(previousPosition.y() < currentPosition.y()) pressedButton(Button.space); | ||||
|  | ||||
|         event.setNewPosition(getSpawn().withView(event.getNewPosition())); | ||||
|     } | ||||
|  | ||||
|     protected void onPlayerInteract(@NotNull PlayerUseItemEvent event) { | ||||
|         pressedButton(Button.mouseRight); | ||||
|     } | ||||
|  | ||||
|     protected void onPlayerAttack(@NotNull PlayerHandAnimationEvent event) { | ||||
|         pressedButton(Button.mouseLeft); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected boolean onPlayerJoin(Player p) { | ||||
|         p.setNoGravity(true); | ||||
|         p.getInventory().setItemStack(0, ItemStack.builder(Material.BIRCH_BUTTON).customName(Component.text("Controller")).build()); | ||||
|         return super.onPlayerJoin(p); | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user