Archived
0

attempt to implement an event model of Player movement

This commit is contained in:
2018-08-11 19:30:36 +03:00
parent a3880f49ec
commit 916a78c660
7 changed files with 91 additions and 10 deletions

View File

@@ -4,8 +4,12 @@
*/
package mc.core;
import com.google.common.eventbus.Subscribe;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import mc.core.events.EventBusGetter;
import mc.core.events.CS_PlayerMoveEvent;
import mc.core.events.SC_PlayerMoveEvent;
import mc.core.player.PlayerManager;
import mc.core.time.TimeProcessor;
import org.springframework.beans.factory.annotation.Autowired;
@@ -38,10 +42,22 @@ public class GameLoop extends Thread {
TPS_WATCHER.setTraceTPS(value);
}
@Subscribe
public void playerMoveEventHandler(CS_PlayerMoveEvent event) {
log.trace("(GameLoop) playerMoveEventHandler()");
event.getPlayer().getLocation().setXYZ(event.getNewLocation());
SC_PlayerMoveEvent nextEvent = new SC_PlayerMoveEvent(event.getPlayer());
nextEvent.setNewLocation(event.getNewLocation());
EventBusGetter.INSTANCE.post(nextEvent);
}
@Override
public void run() {
TPS_WATCHER.startWatch();
EventBusGetter.INSTANCE.register(this);
while (!isInterrupted()) {
TPS_WATCHER.check();

View File

@@ -0,0 +1,22 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 2018-05-02
*/
package mc.core.events;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import mc.core.EntityLocation;
import mc.core.Location;
import mc.core.player.Player;
@RequiredArgsConstructor
@Getter
public class CS_PlayerMoveEvent extends EventBase {
private final Player player;
private final EntityLocation oldLocation; // TODO сомнительное решение
// вообще нужно будет создать реализацию "иммутабл локейшен" для подобных ситуаций
@Setter
private EntityLocation newLocation;
}

View File

@@ -1,19 +1,15 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 2018-05-02
*/
package mc.core.events;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import mc.core.Location;
import mc.core.EntityLocation;
import mc.core.player.Player;
@RequiredArgsConstructor
@Getter
@Setter
public class PlayerPositionEvent extends EventBase {
public class SC_PlayerMoveEvent extends EventBase {
private final Player player;
private Location newPosition;
@Setter
private EntityLocation newLocation;
}