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.util.BatchUtil;
|
||||||
import eu.mhsl.minenet.minigames.instance.Dimension;
|
import eu.mhsl.minenet.minigames.instance.Dimension;
|
||||||
import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator;
|
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.Pos;
|
||||||
import net.minestom.server.coordinate.Vec;
|
import net.minestom.server.coordinate.Vec;
|
||||||
import net.minestom.server.entity.Player;
|
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.batch.AbsoluteBlockBatch;
|
||||||
import net.minestom.server.instance.block.Block;
|
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 org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
class Tetris extends StatelessGame {
|
class Tetris extends StatelessGame {
|
||||||
@ -20,6 +25,8 @@ class Tetris extends StatelessGame {
|
|||||||
private final int width = 9;
|
private final int width = 9;
|
||||||
private final int height = 20;
|
private final int height = 20;
|
||||||
|
|
||||||
|
private final Map<Button, Long> lastPresses = new HashMap<>();
|
||||||
|
|
||||||
enum Button {
|
enum Button {
|
||||||
W,
|
W,
|
||||||
A,
|
A,
|
||||||
@ -35,17 +42,36 @@ class Tetris extends StatelessGame {
|
|||||||
this.setGenerator(new CircularPlateTerrainGenerator(30).setPlateHeight(0));
|
this.setGenerator(new CircularPlateTerrainGenerator(30).setPlateHeight(0));
|
||||||
|
|
||||||
this.isFast = isFast;
|
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) {
|
protected void pressedButton(Button button) {
|
||||||
|
if(lastPresses.getOrDefault(button, 0L) >= System.currentTimeMillis()-200) return;
|
||||||
|
lastPresses.put(button, System.currentTimeMillis());
|
||||||
|
|
||||||
switch (button) {
|
switch (button) {
|
||||||
case A -> System.out.println("A");
|
case A -> System.out.println("A");
|
||||||
case S -> System.out.println("S");
|
case S -> System.out.println("S");
|
||||||
case D -> System.out.println("D");
|
case D -> System.out.println("D");
|
||||||
case W -> System.out.println("W");
|
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
|
@Override
|
||||||
protected void onLoad(@NotNull CompletableFuture<Void> callback) {
|
protected void onLoad(@NotNull CompletableFuture<Void> callback) {
|
||||||
AbsoluteBlockBatch batch = new AbsoluteBlockBatch();
|
AbsoluteBlockBatch batch = new AbsoluteBlockBatch();
|
||||||
@ -64,43 +90,71 @@ class Tetris extends StatelessGame {
|
|||||||
batch.setBlock(x, 45, 1, Block.GRAY_CONCRETE);
|
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));
|
BatchUtil.loadAndApplyBatch(batch, this, () -> callback.complete(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) {
|
protected void onPlayerMove(@NotNull PlayerMoveEvent event) {
|
||||||
super.onPlayerMove(playerMoveEvent);
|
super.onPlayerMove(event);
|
||||||
|
|
||||||
// if(playerMoveEvent.getNewPosition().z() < getSpawn().z()) {
|
Player player = event.getPlayer();
|
||||||
// pressedButton(Button.W);
|
Pos previousPosition = event.getPlayer().getPosition();
|
||||||
// }
|
Pos currentPosition = event.getNewPosition();
|
||||||
// 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);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 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))) {
|
double forwardAmount = movementVector.dot(forward);
|
||||||
playerMoveEvent.setNewPosition(getSpawn().withView(playerMoveEvent.getNewPosition()));
|
double leftAmount = movementVector.dot(left);
|
||||||
// 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
|
@Override
|
||||||
protected boolean onPlayerJoin(Player p) {
|
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);
|
return super.onPlayerJoin(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user