made turtle movement clean
This commit is contained in:
@@ -9,7 +9,7 @@ import net.minestom.server.MinecraftServer;
|
|||||||
import net.minestom.server.entity.EntityCreature;
|
import net.minestom.server.entity.EntityCreature;
|
||||||
import net.minestom.server.entity.Player;
|
import net.minestom.server.entity.Player;
|
||||||
import net.minestom.server.entity.attribute.Attribute;
|
import net.minestom.server.entity.attribute.Attribute;
|
||||||
import net.minestom.server.event.player.PlayerMoveEvent;
|
import net.minestom.server.event.player.PlayerTickEvent;
|
||||||
import net.minestom.server.item.ItemStack;
|
import net.minestom.server.item.ItemStack;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -22,22 +22,22 @@ class TurtleGame extends StatelessGame {
|
|||||||
private final Map<Player, TurtleGameInstance> gameInstances = new WeakHashMap<>();
|
private final Map<Player, TurtleGameInstance> gameInstances = new WeakHashMap<>();
|
||||||
|
|
||||||
public TurtleGame(boolean firstPerson) {
|
public TurtleGame(boolean firstPerson) {
|
||||||
super(Dimension.OVERWORLD.key, "Tetris", new PointsWinScore());
|
super(Dimension.OVERWORLD.key, "Turtle Game", new PointsWinScore());
|
||||||
this.firstPerson = firstPerson;
|
this.firstPerson = firstPerson;
|
||||||
|
|
||||||
this.eventNode()
|
this.eventNode()
|
||||||
.addListener(PlayerMoveEvent.class, this::onPlayerMove);
|
.addListener(PlayerTickEvent.class, this::onPlayerTick);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onPlayerMove(@NotNull PlayerMoveEvent event) {
|
protected void onPlayerTick(@NotNull PlayerTickEvent event) {
|
||||||
TurtleGameInstance gameInstance = this.gameInstances.get(event.getPlayer());
|
TurtleGameInstance gameInstance = this.gameInstances.get(event.getPlayer());
|
||||||
gameInstance.getTurtle().setView(event.getPlayer().getPosition().yaw(), gameInstance.getTurtle().getPosition().pitch());
|
gameInstance.getTurtle().teleport(gameInstance.getTurtle().getPosition().withView(event.getPlayer().getPosition()));
|
||||||
if(this.isRunning()) gameInstance.moveTurtle(event.getPlayer().getPosition().direction());
|
if(this.isRunning()) gameInstance.moveTurtle(event.getPlayer().getPosition().direction());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean onPlayerJoin(Player p) {
|
protected boolean onPlayerJoin(Player p) {
|
||||||
p.getInventory().setItemStack(0, ItemStack.builder(Material.BARRIER).customName(Component.text("Reset")).build());
|
p.getInventory().setItemStack(0, ItemStack.builder(Material.BARRIER).customName(Component.text("Reset Snack")).build());
|
||||||
|
|
||||||
if(this.gameInstances.get(p) == null) {
|
if(this.gameInstances.get(p) == null) {
|
||||||
this.gameInstances.put(p, new TurtleGameInstance(
|
this.gameInstances.put(p, new TurtleGameInstance(
|
||||||
|
@@ -15,6 +15,7 @@ public class TurtleGameInstance {
|
|||||||
private final StatelessGame instance;
|
private final StatelessGame instance;
|
||||||
private final Pos startPosition;
|
private final Pos startPosition;
|
||||||
private final EntityCreature turtle = new EntityCreature(EntityType.TURTLE);
|
private final EntityCreature turtle = new EntityCreature(EntityType.TURTLE);
|
||||||
|
private double speed = 2;
|
||||||
|
|
||||||
public TurtleGameInstance(StatelessGame instance, Pos startPosition) {
|
public TurtleGameInstance(StatelessGame instance, Pos startPosition) {
|
||||||
this.instance = instance;
|
this.instance = instance;
|
||||||
@@ -22,9 +23,8 @@ public class TurtleGameInstance {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void moveTurtle(Vec direction) {
|
public void moveTurtle(Vec direction) {
|
||||||
Vec targetDirection = direction.withY(0).normalize().mul(100);
|
Vec targetDirection = direction.withY(0).normalize().mul(speed);
|
||||||
Pos targetPosition = this.turtle.getPosition().add(targetDirection);
|
this.turtle.setVelocity(targetDirection);
|
||||||
this.turtle.getNavigator().setPathTo(targetPosition);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generate() {
|
public void generate() {
|
||||||
|
Reference in New Issue
Block a user