added control input
This commit is contained in:
parent
7ea39f9aad
commit
9d287f7c2f
@ -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);
|
||||
|
||||
Vec forward = new Vec(forwardX, 0, forwardZ).normalize();
|
||||
Vec left = forward.cross(new Vec(0, 1, 0)).normalize();
|
||||
|
||||
System.out.println(movementVector);
|
||||
double forwardAmount = movementVector.dot(forward);
|
||||
double leftAmount = movementVector.dot(left);
|
||||
|
||||
// if(!(playerMoveEvent.getNewPosition().withYaw(0).withPitch(0) == getSpawn().withYaw(0).withPitch(0))) {
|
||||
playerMoveEvent.setNewPosition(getSpawn().withView(playerMoveEvent.getNewPosition()));
|
||||
// return;
|
||||
// }
|
||||
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);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user