diff --git a/README.md b/README.md index 82ede3d..f4ee357 100644 --- a/README.md +++ b/README.md @@ -9,18 +9,25 @@ * [Contact us](#contact-us) # Features -Provide `Entities, Managers, Handlers, Maths` classes for many types of online games (Turn-based (Located), MMO, Normal): + +Provide `Entities, Managers, Handlers, Maths` classes for many types of online games (Turn-based (Located), MMO, +Normal): + * **Entities**: MMOPlayer, LocatedPlayer, MMORoom, LocatedRoom, NormalRoom, MMOVirtualWorld * **Managers**: MMORoomManager, LocatedRoomManager, MMOPlayerManager, LocatedPlayerManager * **Handlers**: Synchronized Position Handler * **Maths**: Rect, Vec2, Vec3 - # Introduction -To rapidly build online games, developers often have to use a game server engine like SmartFoxServer or Photon, but unfortunately, they come with really high price, especially when more and more users are engaging in our products. Therefore, we develop `game-box engine` powered by the [EzyFox Ecosystem](https://github.com/youngmonkeys/ezyfox-server) aiming to make everything free and open for everyone who are keen on building scalable multi-players games. +To rapidly build online games, developers often have to use a game server engine like SmartFoxServer or Photon, but +unfortunately, they come with really high price, especially when more and more users are engaging in our products. +Therefore, we develop `game-box engine` powered by the [EzyFox Ecosystem](https://github.com/youngmonkeys/ezyfox-server) +aiming to make everything free and open for everyone who are keen on building scalable multi-players games. -EzyFox Ecosystem supports a wide range of most important components to develop an enterprise product including TCP, UDP, WebSocket protocols with SSL encryption, HTTP RESTful API, Remote procedure call RPC protocol, Database interaction, Memory caching, Message Queue. +EzyFox Ecosystem supports a wide range of most important components to develop an enterprise product including TCP, UDP, +WebSocket protocols with SSL encryption, HTTP RESTful API, Remote procedure call RPC protocol, Database interaction, +Memory caching, Message Queue. # Get Started @@ -46,7 +53,11 @@ TBA # Help us by donation -Currently, our operating budget is fully from on our own salaries, and all product developments are still based on voluntary contributions from a few members of the organization. Apparently, the low budget would cause many considerable difficulties for us. Therefore, with a clear roadmap and an ambitious goal to provide intellectual products for the community, we really appreciate your support if you can provide a donation to take us further steps. Thanks in advance for your meaningful contributions! +Currently, our operating budget is fully from on our own salaries, and all product developments are still based on +voluntary contributions from a few members of the organization. Apparently, the low budget would cause many considerable +difficulties for us. Therefore, with a clear roadmap and an ambitious goal to provide intellectual products for the +community, we really appreciate your support if you can provide a donation to take us further steps. Thanks in advance +for your meaningful contributions! [https://youngmonkeys.org/donate/](https://youngmonkeys.org/donate/) diff --git a/assembly.xml b/assembly.xml index 1a84be6..b3e7030 100644 --- a/assembly.xml +++ b/assembly.xml @@ -1,16 +1,16 @@ - bin - false - - dir - + bin + false + + dir + - - - true - lib - - + + + true + lib + + \ No newline at end of file diff --git a/checkstyle.xml b/checkstyle.xml index 3a2231d..c85267e 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -1,380 +1,380 @@ + "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" + "https://checkstyle.org/dtds/configuration_1_3.dtd"> - + - + - + - - - - - - - + + + + + + + - - - + + + - - - - - + + + + + - - - + + + - + - - + + - - - - + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + RECORD_DEF"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index 911e935..06688cf 100644 --- a/pom.xml +++ b/pom.xml @@ -1,66 +1,66 @@ - - 4.0.0 + + 4.0.0 - - com.tvd12 - ezyfox-server - 1.0.3 - + + com.tvd12 + ezyfox-server + 1.0.3 + - game-box - 1.1.3 + game-box + 1.1.3 - game-box - https://youngmonkeys.org/ + game-box + https://youngmonkeys.org/ - - 1.2.2 - + + 1.2.2 + - - - com.tvd12 - ezyfox-server-core - ${ezy.server.version} - + + + com.tvd12 + ezyfox-server-core + ${ezy.server.version} + com.tvd12 ezyfox-server-support ${ezy.server.version} - true + true - + - - - org.apache.maven.plugins - maven-checkstyle-plugin - 3.1.2 - - - com.puppycrawl.tools - checkstyle - 8.42 - - - - UTF-8 - true - warn - checkstyle.xml - - - - verify - verify - - check - - - - - - + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.1.2 + + + com.puppycrawl.tools + checkstyle + 8.42 + + + + UTF-8 + true + warn + checkstyle.xml + + + + verify + verify + + check + + + + + + diff --git a/src/main/java/com/tvd12/gamebox/constant/Commands.java b/src/main/java/com/tvd12/gamebox/constant/Commands.java index ac068ca..4e79518 100644 --- a/src/main/java/com/tvd12/gamebox/constant/Commands.java +++ b/src/main/java/com/tvd12/gamebox/constant/Commands.java @@ -2,7 +2,8 @@ public final class Commands { - private Commands() {} - public static final String SYNC_POSITION = "s"; + + private Commands() { + } } diff --git a/src/main/java/com/tvd12/gamebox/constant/IPlayerRole.java b/src/main/java/com/tvd12/gamebox/constant/IPlayerRole.java index 8c5dbcf..c1a220d 100644 --- a/src/main/java/com/tvd12/gamebox/constant/IPlayerRole.java +++ b/src/main/java/com/tvd12/gamebox/constant/IPlayerRole.java @@ -3,4 +3,5 @@ import com.tvd12.ezyfox.constant.EzyConstant; @SuppressWarnings("AbbreviationAsWordInName") -public interface IPlayerRole extends EzyConstant {} +public interface IPlayerRole extends EzyConstant { +} diff --git a/src/main/java/com/tvd12/gamebox/constant/IPlayerStatus.java b/src/main/java/com/tvd12/gamebox/constant/IPlayerStatus.java index 85f32f5..75b8437 100644 --- a/src/main/java/com/tvd12/gamebox/constant/IPlayerStatus.java +++ b/src/main/java/com/tvd12/gamebox/constant/IPlayerStatus.java @@ -3,4 +3,5 @@ import com.tvd12.ezyfox.constant.EzyConstant; @SuppressWarnings("AbbreviationAsWordInName") -public interface IPlayerStatus extends EzyConstant {} +public interface IPlayerStatus extends EzyConstant { +} diff --git a/src/main/java/com/tvd12/gamebox/constant/IRoomStatus.java b/src/main/java/com/tvd12/gamebox/constant/IRoomStatus.java index e9f0fe4..98e7fc0 100644 --- a/src/main/java/com/tvd12/gamebox/constant/IRoomStatus.java +++ b/src/main/java/com/tvd12/gamebox/constant/IRoomStatus.java @@ -3,4 +3,5 @@ import com.tvd12.ezyfox.constant.EzyConstant; @SuppressWarnings("AbbreviationAsWordInName") -public interface IRoomStatus extends EzyConstant {} +public interface IRoomStatus extends EzyConstant { +} diff --git a/src/main/java/com/tvd12/gamebox/constant/PlayerRole.java b/src/main/java/com/tvd12/gamebox/constant/PlayerRole.java index 5ff09ca..a5c5ace 100644 --- a/src/main/java/com/tvd12/gamebox/constant/PlayerRole.java +++ b/src/main/java/com/tvd12/gamebox/constant/PlayerRole.java @@ -1,11 +1,10 @@ package com.tvd12.gamebox.constant; -import java.util.Map; - import com.tvd12.ezyfox.util.EzyEnums; - import lombok.Getter; +import java.util.Map; + public enum PlayerRole implements IPlayerRole { NULL(0), @@ -14,22 +13,21 @@ public enum PlayerRole implements IPlayerRole { PLAYER(3), NPC(4); + private static final Map ROLE_BY_ID = + EzyEnums.enumMapInt(PlayerRole.class); @Getter private int id; - private static final Map ROLE_BY_ID = - EzyEnums.enumMapInt(PlayerRole.class); - private PlayerRole(int id) { this.id = id; } + public static PlayerRole valueOf(int id) { + return ROLE_BY_ID.getOrDefault(Integer.valueOf(id), NULL); + } + @Override public String getName() { return toString(); } - - public static PlayerRole valueOf(int id) { - return ROLE_BY_ID.getOrDefault(Integer.valueOf(id), NULL); - } } diff --git a/src/main/java/com/tvd12/gamebox/constant/PlayerStatus.java b/src/main/java/com/tvd12/gamebox/constant/PlayerStatus.java index 30e8f9a..cdd608e 100644 --- a/src/main/java/com/tvd12/gamebox/constant/PlayerStatus.java +++ b/src/main/java/com/tvd12/gamebox/constant/PlayerStatus.java @@ -1,11 +1,10 @@ package com.tvd12.gamebox.constant; -import java.util.Map; - import com.tvd12.ezyfox.util.EzyEnums; - import lombok.Getter; +import java.util.Map; + public enum PlayerStatus implements IPlayerStatus { NULL(0), @@ -13,22 +12,21 @@ public enum PlayerStatus implements IPlayerStatus { PLAYING(2), SPEAKING(3); - @Getter - private int id; - private static final Map STATUS_BY_ID = EzyEnums.enumMapInt(PlayerStatus.class); + @Getter + private int id; private PlayerStatus(int id) { this.id = id; } + public static PlayerStatus valueOf(int id) { + return STATUS_BY_ID.getOrDefault(Integer.valueOf(id), NULL); + } + @Override public String getName() { return toString(); } - - public static PlayerStatus valueOf(int id) { - return STATUS_BY_ID.getOrDefault(Integer.valueOf(id), NULL); - } } diff --git a/src/main/java/com/tvd12/gamebox/constant/RoomStatus.java b/src/main/java/com/tvd12/gamebox/constant/RoomStatus.java index 661b993..9e7f29c 100644 --- a/src/main/java/com/tvd12/gamebox/constant/RoomStatus.java +++ b/src/main/java/com/tvd12/gamebox/constant/RoomStatus.java @@ -1,11 +1,10 @@ package com.tvd12.gamebox.constant; -import java.util.Map; - import com.tvd12.ezyfox.util.EzyEnums; - import lombok.Getter; +import java.util.Map; + public enum RoomStatus implements IRoomStatus { WAITING(1), @@ -14,22 +13,21 @@ public enum RoomStatus implements IRoomStatus { FINISHING(4), FINISHED(5); - @Getter - private int id; - private static final Map STATUS_BY_ID = EzyEnums.enumMapInt(RoomStatus.class); + @Getter + private int id; private RoomStatus(int id) { this.id = id; } + public static RoomStatus valueOf(int id) { + return STATUS_BY_ID.get(Integer.valueOf(id)); + } + @Override public String getName() { return toString(); } - - public static RoomStatus valueOf(int id) { - return STATUS_BY_ID.get(Integer.valueOf(id)); - } } diff --git a/src/main/java/com/tvd12/gamebox/entity/LocatedRoom.java b/src/main/java/com/tvd12/gamebox/entity/LocatedRoom.java index 771bbda..acb81ee 100644 --- a/src/main/java/com/tvd12/gamebox/entity/LocatedRoom.java +++ b/src/main/java/com/tvd12/gamebox/entity/LocatedRoom.java @@ -15,9 +15,9 @@ public class LocatedRoom extends Room { protected final int maxSlot; @Setter(AccessLevel.NONE) - protected Queue slots; - @Setter(AccessLevel.NONE) protected final LocatedPlayerManager playerManager; + @Setter(AccessLevel.NONE) + protected Queue slots; public LocatedRoom(Builder builder) { super(builder); @@ -26,6 +26,10 @@ public LocatedRoom(Builder builder) { this.slots = newSlots(builder.maxSlot); } + public static Builder builder() { + return new Builder<>(); + } + public int addPlayer(LocatedPlayer player) { if (slots.isEmpty()) { throw new NoSlotException("has no available slot"); @@ -40,7 +44,7 @@ public void removePlayer(LocatedPlayer player) { playerManager.removePlayer(player.getLocation()); slots.add(player.getLocation()); } - + } protected Queue newSlots(int maxSlots) { @@ -51,10 +55,6 @@ protected Queue newSlots(int maxSlots) { return slots; } - public static Builder builder() { - return new Builder<>(); - } - @SuppressWarnings("unchecked") public static class Builder> extends Room.Builder { diff --git a/src/main/java/com/tvd12/gamebox/entity/MMOPlayer.java b/src/main/java/com/tvd12/gamebox/entity/MMOPlayer.java index 5db686b..206464d 100644 --- a/src/main/java/com/tvd12/gamebox/entity/MMOPlayer.java +++ b/src/main/java/com/tvd12/gamebox/entity/MMOPlayer.java @@ -1,21 +1,22 @@ package com.tvd12.gamebox.entity; +import com.tvd12.gamebox.math.Vec3; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.Setter; + import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; -import com.tvd12.gamebox.math.Vec3; - -import lombok.AccessLevel; -import lombok.Getter; -import lombok.Setter; - @Getter @SuppressWarnings("AbbreviationAsWordInName") public class MMOPlayer extends Player { + @Getter(AccessLevel.NONE) + protected final Map nearbyPlayers = new ConcurrentHashMap<>(); protected Vec3 position = new Vec3(); protected Vec3 rotation = new Vec3(); @Getter(AccessLevel.NONE) @@ -23,13 +24,18 @@ public class MMOPlayer extends Player { @Setter protected int clientTimeTick; - @Getter(AccessLevel.NONE) - protected final Map nearbyPlayers = new ConcurrentHashMap<>(); - public MMOPlayer(String name) { super(name); } + protected MMOPlayer(Builder builder) { + super(builder); + } + + public static Builder builder() { + return new Builder(); + } + void addNearbyPlayer(MMOPlayer otherPlayer) { this.nearbyPlayers.put(otherPlayer.getName(), otherPlayer); } @@ -60,14 +66,14 @@ public void setRotation(double x, double y, double z) { this.stateChanged.set(true); } - public void setStateChanged(boolean changed) { - this.stateChanged.set(changed); - } - public boolean isStateChanged() { return this.stateChanged.get(); } + public void setStateChanged(boolean changed) { + this.stateChanged.set(changed); + } + /** * To be used after onRoomUpdated to sync neighbor's positions for current player. * @@ -81,14 +87,6 @@ public List getNearbyPlayerNames() { return new ArrayList(nearbyPlayers.keySet()); } - protected MMOPlayer(Builder builder) { - super(builder); - } - - public static Builder builder() { - return new Builder(); - } - public static class Builder extends Player.Builder { @Override diff --git a/src/main/java/com/tvd12/gamebox/entity/MMORoom.java b/src/main/java/com/tvd12/gamebox/entity/MMORoom.java index eab4ee1..c8dbe7f 100644 --- a/src/main/java/com/tvd12/gamebox/entity/MMORoom.java +++ b/src/main/java/com/tvd12/gamebox/entity/MMORoom.java @@ -1,29 +1,25 @@ package com.tvd12.gamebox.entity; -import java.util.ArrayList; -import java.util.List; - import com.tvd12.gamebox.handler.MMORoomUpdatedHandler; import com.tvd12.gamebox.manager.PlayerManager; import com.tvd12.gamebox.manager.SynchronizedPlayerManager; - import lombok.Getter; import lombok.Setter; +import java.util.ArrayList; +import java.util.List; + @SuppressWarnings("AbbreviationAsWordInName") public class MMORoom extends NormalRoom { - @Getter - @Setter - protected MMOPlayer master; - @Getter protected final double distanceOfInterest; - protected final List playerBuffer; - protected final List roomUpdatedHandlers; - + @Getter + @Setter + protected MMOPlayer master; + public MMORoom(Builder builder) { super(builder); this.playerBuffer = new ArrayList<>(); @@ -31,6 +27,10 @@ public MMORoom(Builder builder) { this.distanceOfInterest = builder.distanceOfInterest; } + public static Builder builder() { + return new Builder(); + } + @SuppressWarnings("unchecked") @Override public void addPlayer(Player player) { @@ -65,11 +65,11 @@ public void removePlayer(Player player) { } } } - + public boolean isEmpty() { return this.getPlayerManager().isEmpty(); } - + public int getMaxPlayer() { return this.getPlayerManager().getMaxPlayer(); } @@ -101,12 +101,8 @@ private void notifyUpdatedHandlers() { } } - public static Builder builder() { - return new Builder(); - } - public static class Builder extends NormalRoom.Builder { - + protected int maxPlayer = 999; protected double distanceOfInterest; protected List roomUpdatedHandlers = new ArrayList<>(); diff --git a/src/main/java/com/tvd12/gamebox/entity/MMORoomGroup.java b/src/main/java/com/tvd12/gamebox/entity/MMORoomGroup.java index 0ae51da..ad99a68 100644 --- a/src/main/java/com/tvd12/gamebox/entity/MMORoomGroup.java +++ b/src/main/java/com/tvd12/gamebox/entity/MMORoomGroup.java @@ -1,21 +1,21 @@ package com.tvd12.gamebox.entity; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; - import com.tvd12.ezyfox.builder.EzyBuilder; import com.tvd12.ezyfox.util.EzyLoggable; import com.tvd12.gamebox.manager.RoomManager; import com.tvd12.gamebox.manager.SynchronizedRoomManager; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + @SuppressWarnings("AbbreviationAsWordInName") class MMORoomGroup extends EzyLoggable { - private volatile boolean active; + private static final AtomicInteger COUNTER = new AtomicInteger(); private final long timeTickMillis; private final RoomManager roomManager; - private static final AtomicInteger COUNTER = new AtomicInteger(); + private volatile boolean active; protected MMORoomGroup(Builder builder) { this.timeTickMillis = builder.timeTickMillis; @@ -23,6 +23,10 @@ protected MMORoomGroup(Builder builder) { this.start(); } + public static Builder builder() { + return new Builder(); + } + private void start() { Thread newThread = new Thread(this::loop); newThread.setName("game-box-mmo-room-group-" + COUNTER.incrementAndGet()); @@ -83,10 +87,6 @@ public void destroy() { this.active = false; } - public static Builder builder() { - return new Builder(); - } - public static class Builder implements EzyBuilder { private long timeTickMillis; diff --git a/src/main/java/com/tvd12/gamebox/entity/MMOVirtualWorld.java b/src/main/java/com/tvd12/gamebox/entity/MMOVirtualWorld.java index 8b77cbe..bc53166 100644 --- a/src/main/java/com/tvd12/gamebox/entity/MMOVirtualWorld.java +++ b/src/main/java/com/tvd12/gamebox/entity/MMOVirtualWorld.java @@ -1,11 +1,11 @@ package com.tvd12.gamebox.entity; -import java.util.Arrays; - import com.tvd12.ezyfox.builder.EzyBuilder; import com.tvd12.ezyfox.util.EzyLoggable; import com.tvd12.gamebox.exception.MaxRoomException; +import java.util.Arrays; + @SuppressWarnings("AbbreviationAsWordInName") public class MMOVirtualWorld extends EzyLoggable { @@ -21,12 +21,16 @@ protected MMOVirtualWorld(Builder builder) { this.roomGroups = this.createRoomGroups(); } + public static Builder builder() { + return new Builder(); + } + private MMORoomGroup[] createRoomGroups() { MMORoomGroup[] groups = new MMORoomGroup[this.roomGroupCount]; for (int i = 0; i < roomGroupCount; i++) { groups[i] = MMORoomGroup.builder() - .timeTickMillis(timeTickMillis) - .build(); + .timeTickMillis(timeTickMillis) + .build(); } return groups; } @@ -57,12 +61,8 @@ public MMORoom getRoom(long roomId) { public int getRoomCount() { return Arrays.stream(roomGroups) - .map(MMORoomGroup::getRoomCount) - .reduce(0, Integer::sum); - } - - public static Builder builder() { - return new Builder(); + .map(MMORoomGroup::getRoomCount) + .reduce(0, Integer::sum); } public static class Builder implements EzyBuilder { diff --git a/src/main/java/com/tvd12/gamebox/entity/NormalRoom.java b/src/main/java/com/tvd12/gamebox/entity/NormalRoom.java index d143db1..15b82c1 100644 --- a/src/main/java/com/tvd12/gamebox/entity/NormalRoom.java +++ b/src/main/java/com/tvd12/gamebox/entity/NormalRoom.java @@ -18,6 +18,10 @@ public NormalRoom(Builder builder) { this.playerManager = builder.playerManager; } + public static Builder builder() { + return new Builder<>(); + } + public void addPlayer(Player player) { player.setCurrentRoomId(id); playerManager.addPlayer(player); @@ -31,10 +35,6 @@ public T getPlayerManager() { return (T) playerManager; } - public static Builder builder() { - return new Builder<>(); - } - public static class Builder> extends Room.Builder { protected PlayerManager playerManager; diff --git a/src/main/java/com/tvd12/gamebox/entity/Player.java b/src/main/java/com/tvd12/gamebox/entity/Player.java index fca8ace..b0f996d 100644 --- a/src/main/java/com/tvd12/gamebox/entity/Player.java +++ b/src/main/java/com/tvd12/gamebox/entity/Player.java @@ -5,7 +5,6 @@ import com.tvd12.gamebox.constant.IPlayerStatus; import com.tvd12.gamebox.constant.PlayerRole; import com.tvd12.gamebox.constant.PlayerStatus; - import lombok.Getter; import lombok.Setter; @@ -28,6 +27,10 @@ protected Player(Builder builder) { this(builder.name); } + public static Builder builder() { + return new Builder<>(); + } + @Override public boolean equals(Object obj) { if (obj == null) { @@ -49,10 +52,6 @@ public String toString() { return name; } - public static Builder builder() { - return new Builder<>(); - } - @SuppressWarnings("unchecked") public static class Builder> implements EzyBuilder { diff --git a/src/main/java/com/tvd12/gamebox/entity/Room.java b/src/main/java/com/tvd12/gamebox/entity/Room.java index a31d082..ce05af4 100644 --- a/src/main/java/com/tvd12/gamebox/entity/Room.java +++ b/src/main/java/com/tvd12/gamebox/entity/Room.java @@ -1,32 +1,33 @@ package com.tvd12.gamebox.entity; -import java.util.concurrent.atomic.AtomicLong; - import com.tvd12.ezyfox.builder.EzyBuilder; import com.tvd12.gamebox.constant.IRoomStatus; import com.tvd12.gamebox.constant.RoomStatus; - import lombok.Getter; import lombok.Setter; +import java.util.concurrent.atomic.AtomicLong; + @Getter public class Room { + protected static final String NAME_PREFIX = "Room#"; protected final long id; protected final String name; - @Setter protected String password; @Setter protected IRoomStatus status = RoomStatus.WAITING; - - protected static final String NAME_PREFIX = "Room#"; protected Room(Builder builder) { this.id = builder.id; this.name = builder.name; } + public static Builder builder() { + return new Builder<>(); + } + @Override public boolean equals(Object obj) { if (obj == null) { @@ -43,28 +44,23 @@ public int hashCode() { return Long.hashCode(id); } - public static Builder builder() { - return new Builder<>(); - } - @Override public String toString() { return new StringBuilder() - .append("(") - .append("name = ").append(name) - .append(", id = ").append(id) - .append(")") - .toString(); + .append("(") + .append("name = ").append(name) + .append(", id = ").append(id) + .append(")") + .toString(); } @SuppressWarnings("unchecked") public static class Builder> implements EzyBuilder { + protected static final AtomicLong ID_GENTOR = new AtomicLong(0); protected Long id; protected String name; - protected static final AtomicLong ID_GENTOR = new AtomicLong(0); - public B id(long id) { this.id = id; return (B) this; diff --git a/src/main/java/com/tvd12/gamebox/exception/MaxPlayerException.java b/src/main/java/com/tvd12/gamebox/exception/MaxPlayerException.java index 87346c2..edc4cd3 100644 --- a/src/main/java/com/tvd12/gamebox/exception/MaxPlayerException.java +++ b/src/main/java/com/tvd12/gamebox/exception/MaxPlayerException.java @@ -9,18 +9,18 @@ public MaxPlayerException(String msg) { public MaxPlayerException(String player, int currentPlayerCount, int maxPlayerCount) { this(new StringBuilder() - .append("can not add new player: ").append(player) - .append(", current player count is: ").append(currentPlayerCount) - .append(" when max player count is: ").append(maxPlayerCount) - .toString()); + .append("can not add new player: ").append(player) + .append(", current player count is: ").append(currentPlayerCount) + .append(" when max player count is: ").append(maxPlayerCount) + .toString()); } public MaxPlayerException(int numberOfPlayer, int currentPlayerCount, int maxPlayerCount) { this(new StringBuilder() - .append("can not add ").append(numberOfPlayer).append(" new players") - .append(", current player count is: ").append(currentPlayerCount) - .append(" when max player count is: ").append(maxPlayerCount) - .toString()); + .append("can not add ").append(numberOfPlayer).append(" new players") + .append(", current player count is: ").append(currentPlayerCount) + .append(" when max player count is: ").append(maxPlayerCount) + .toString()); } } diff --git a/src/main/java/com/tvd12/gamebox/exception/MaxRoomException.java b/src/main/java/com/tvd12/gamebox/exception/MaxRoomException.java index 3b6a171..0b49204 100644 --- a/src/main/java/com/tvd12/gamebox/exception/MaxRoomException.java +++ b/src/main/java/com/tvd12/gamebox/exception/MaxRoomException.java @@ -9,18 +9,18 @@ public MaxRoomException(String msg) { public MaxRoomException(String room, int currentRoomCount, int maxRoomCount) { this(new StringBuilder() - .append("can not add new room: ").append(room) - .append(", current room count is: ").append(currentRoomCount) - .append(" when max room count is: ").append(maxRoomCount) - .toString()); + .append("can not add new room: ").append(room) + .append(", current room count is: ").append(currentRoomCount) + .append(" when max room count is: ").append(maxRoomCount) + .toString()); } public MaxRoomException(int numberOfRoom, int currentRoomCount, int maxRoomCount) { this(new StringBuilder() - .append("can not add ").append(numberOfRoom).append(" new rooms") - .append(", current room count is: ").append(currentRoomCount) - .append(" when max room count is: ").append(maxRoomCount) - .toString()); + .append("can not add ").append(numberOfRoom).append(" new rooms") + .append(", current room count is: ").append(currentRoomCount) + .append(" when max room count is: ").append(maxRoomCount) + .toString()); } } diff --git a/src/main/java/com/tvd12/gamebox/handler/MMORoomUpdatedHandler.java b/src/main/java/com/tvd12/gamebox/handler/MMORoomUpdatedHandler.java index 2292945..9d303ef 100644 --- a/src/main/java/com/tvd12/gamebox/handler/MMORoomUpdatedHandler.java +++ b/src/main/java/com/tvd12/gamebox/handler/MMORoomUpdatedHandler.java @@ -1,12 +1,12 @@ package com.tvd12.gamebox.handler; -import java.util.List; - import com.tvd12.gamebox.entity.MMOPlayer; import com.tvd12.gamebox.entity.MMORoom; +import java.util.List; + @SuppressWarnings("AbbreviationAsWordInName") public interface MMORoomUpdatedHandler { - + void onRoomUpdated(MMORoom room, List players); } diff --git a/src/main/java/com/tvd12/gamebox/handler/SyncPositionRoomUpdatedHandler.java b/src/main/java/com/tvd12/gamebox/handler/SyncPositionRoomUpdatedHandler.java index b533822..1cecd6a 100644 --- a/src/main/java/com/tvd12/gamebox/handler/SyncPositionRoomUpdatedHandler.java +++ b/src/main/java/com/tvd12/gamebox/handler/SyncPositionRoomUpdatedHandler.java @@ -1,17 +1,16 @@ package com.tvd12.gamebox.handler; -import java.util.List; - import com.tvd12.ezyfox.bean.annotation.EzyAutoBind; import com.tvd12.ezyfoxserver.support.factory.EzyResponseFactory; import com.tvd12.gamebox.constant.Commands; import com.tvd12.gamebox.entity.MMOPlayer; import com.tvd12.gamebox.entity.MMORoom; - import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; import lombok.Setter; +import java.util.List; + @Setter @AllArgsConstructor @NoArgsConstructor @@ -19,7 +18,7 @@ public class SyncPositionRoomUpdatedHandler implements MMORoomUpdatedHandler { @EzyAutoBind private EzyResponseFactory responseFactory; - + @Override public void onRoomUpdated(MMORoom room, List players) { players.forEach(player -> { @@ -27,14 +26,14 @@ public void onRoomUpdated(MMORoom room, List players) { // Check if player's position or rotation is updated if (player.isStateChanged()) { responseFactory.newArrayResponse() - .udpTransport() - .command(Commands.SYNC_POSITION) - .param(player.getName()) - .param(player.getPosition().toArray()) - .param(player.getRotation().toArray()) - .param(player.getClientTimeTick()) - .usernames(player.getNearbyPlayerNames()) - .execute(); + .udpTransport() + .command(Commands.SYNC_POSITION) + .param(player.getName()) + .param(player.getPosition().toArray()) + .param(player.getRotation().toArray()) + .param(player.getClientTimeTick()) + .usernames(player.getNearbyPlayerNames()) + .execute(); player.setStateChanged(false); } diff --git a/src/main/java/com/tvd12/gamebox/manager/AbstractPlayerManager.java b/src/main/java/com/tvd12/gamebox/manager/AbstractPlayerManager.java index d914b48..b49b088 100644 --- a/src/main/java/com/tvd12/gamebox/manager/AbstractPlayerManager.java +++ b/src/main/java/com/tvd12/gamebox/manager/AbstractPlayerManager.java @@ -1,16 +1,5 @@ package com.tvd12.gamebox.manager; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.locks.Lock; -import java.util.function.Predicate; -import java.util.function.Supplier; -import java.util.stream.Collectors; - import com.tvd12.ezyfox.builder.EzyBuilder; import com.tvd12.ezyfox.function.EzyFunctions; import com.tvd12.ezyfox.io.EzyLists; @@ -19,12 +8,18 @@ import com.tvd12.gamebox.entity.Player; import com.tvd12.gamebox.exception.MaxPlayerException; import com.tvd12.gamebox.exception.PlayerExistsException; - import lombok.Getter; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.locks.Lock; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.stream.Collectors; + public abstract class AbstractPlayerManager

- extends EzyLoggable - implements PlayerManager

{ + extends EzyLoggable + implements PlayerManager

{ @Getter protected final int maxPlayer; @@ -49,12 +44,12 @@ public P getPlayer(String username) { public P getPlayer(String username, Supplier

playerSupplier) { return playersByName.computeIfAbsent(username, k -> playerSupplier.get()); } - + @Override public P getFirstPlayer() { return playersByName.isEmpty() ? null : playersByName.values().iterator().next(); } - + @Override public List

getPlayerList() { return new ArrayList<>(playersByName.values()); @@ -88,11 +83,11 @@ public boolean containsPlayer(String username) { public void addPlayer(P player, boolean failIfAdded) { addPlayer0(player, failIfAdded); logger.info( - "{} add player: {}, locks.size = {}, playersByName.size = {}", - getMessagePrefix(), - player, - locks.size(), - playersByName.size() + "{} add player: {}, locks.size = {}, playersByName.size = {}", + getMessagePrefix(), + player, + locks.size(), + playersByName.size() ); } @@ -115,11 +110,11 @@ protected void addPlayer0(P player) { public void addPlayers(Collection

players, boolean failIfAdded) { addPlayers0(players, failIfAdded); logger.info( - "{} add players: {}, locks.size = {}, playersByName.size = {}", - getMessagePrefix(), - players, - locks.size(), - playersByName.size() + "{} add players: {}, locks.size = {}, playersByName.size = {}", + getMessagePrefix(), + players, + locks.size(), + playersByName.size() ); } @@ -141,11 +136,11 @@ protected void addPlayers0(Collection

players, boolean failIfAdded) { public P removePlayer(P player) { removePlayer0(player); logger.info( - "{} remove player: {}, locks.size = {}, playersByName.size = {}", - getMessagePrefix(), - player, - locks.size(), - playersByName.size() + "{} remove player: {}, locks.size = {}, playersByName.size = {}", + getMessagePrefix(), + player, + locks.size(), + playersByName.size() ); return player; } @@ -165,11 +160,11 @@ protected void removePlayer1(P player) { public void removePlayers(Collection

players) { removePlayers0(players); logger.info( - "{} remove players: {}, locks.size = {}, playersByName.size = {}", - getMessagePrefix(), - players, - locks.size(), - playersByName.size() + "{} remove players: {}, locks.size = {}, playersByName.size = {}", + getMessagePrefix(), + players, + locks.size(), + playersByName.size() ); } @@ -243,7 +238,7 @@ protected Map newPlayersByNameMap() { } public abstract static class Builder> - implements EzyBuilder> { + implements EzyBuilder> { protected int maxPlayer = 999999; diff --git a/src/main/java/com/tvd12/gamebox/manager/AbstractRoomManager.java b/src/main/java/com/tvd12/gamebox/manager/AbstractRoomManager.java index dbc3e7f..de11adf 100644 --- a/src/main/java/com/tvd12/gamebox/manager/AbstractRoomManager.java +++ b/src/main/java/com/tvd12/gamebox/manager/AbstractRoomManager.java @@ -1,24 +1,19 @@ package com.tvd12.gamebox.manager; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Predicate; -import java.util.stream.Collectors; - import com.tvd12.ezyfox.builder.EzyBuilder; import com.tvd12.ezyfox.util.EzyLoggable; import com.tvd12.gamebox.entity.Room; import com.tvd12.gamebox.exception.MaxRoomException; import com.tvd12.gamebox.exception.RoomExistsException; - import lombok.Getter; +import java.util.*; +import java.util.function.Predicate; +import java.util.stream.Collectors; + public abstract class AbstractRoomManager - extends EzyLoggable - implements RoomManager { + extends EzyLoggable + implements RoomManager { @Getter protected final int maxRoom; @@ -41,11 +36,11 @@ protected AbstractRoomManager(Builder builder) { public void addRoom(R room, boolean failIfAdded) { addRoom0(room, failIfAdded); logger.info( - "{} add rooms: {}, roomsByName.size = {}, roomsById.size = {}", - getMessagePrefix(), - room, - roomsByName.size(), - roomsById.size() + "{} add rooms: {}, roomsByName.size = {}, roomsById.size = {}", + getMessagePrefix(), + room, + roomsByName.size(), + roomsById.size() ); } @@ -75,11 +70,11 @@ public void addRooms(R[] rooms, boolean failIfAdded) { public void addRooms(Iterable rooms, boolean failIfAdded) { addRooms0(rooms, failIfAdded); logger.info( - "{} add rooms: {}, roomsByName.size = {}, roomsById.size = {}", - getMessagePrefix(), - rooms, - roomsByName.size(), - roomsById.size() + "{} add rooms: {}, roomsByName.size = {}, roomsById.size = {}", + getMessagePrefix(), + rooms, + roomsByName.size(), + roomsById.size() ); } @@ -141,7 +136,7 @@ public R getRoom(Predicate predicate) { public List getRoomList() { return new ArrayList(roomsByName.values()); } - + @Override public List getRoomList(Predicate predicate) { return roomsByName @@ -166,11 +161,11 @@ public int getRoomCount() { public void removeRoom(R room) { removeRoom0(room); logger.info( - "{} remove room: {}, roomsByName.size = {}, roomsById.size = {}", - getMessagePrefix(), - room, - roomsByName.size(), - roomsById.size() + "{} remove room: {}, roomsByName.size = {}, roomsById.size = {}", + getMessagePrefix(), + room, + roomsByName.size(), + roomsById.size() ); } @@ -188,11 +183,11 @@ public void removeRoom(String name) { public void removeRooms(Iterable rooms) { removeRooms0(rooms); logger.info( - "{} remove rooms: {}, roomsByName.size = {}, roomsById.size = {}", - getMessagePrefix(), - rooms, - roomsByName.size(), - roomsById.size() + "{} remove rooms: {}, roomsByName.size = {}, roomsById.size = {}", + getMessagePrefix(), + rooms, + roomsByName.size(), + roomsById.size() ); } @@ -218,7 +213,7 @@ public boolean available() { boolean answer = roomsById.size() < maxRoom; return answer; } - + public void clear() { roomsById.clear(); roomsByName.clear(); @@ -238,7 +233,7 @@ protected Map newRoomsByNameMap() { @SuppressWarnings("unchecked") public abstract static class Builder> - implements EzyBuilder> { + implements EzyBuilder> { protected int maxRoom = 10000; diff --git a/src/main/java/com/tvd12/gamebox/manager/DefaultLocatedPlayerManager.java b/src/main/java/com/tvd12/gamebox/manager/DefaultLocatedPlayerManager.java index 867c7f3..73d318a 100644 --- a/src/main/java/com/tvd12/gamebox/manager/DefaultLocatedPlayerManager.java +++ b/src/main/java/com/tvd12/gamebox/manager/DefaultLocatedPlayerManager.java @@ -1,37 +1,31 @@ package com.tvd12.gamebox.manager; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.NavigableMap; -import java.util.TreeMap; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.function.Supplier; - import com.tvd12.ezyfox.util.EzyLoggable; import com.tvd12.gamebox.entity.LocatedPlayer; import com.tvd12.gamebox.exception.LocationNotAvailableException; import com.tvd12.gamebox.exception.PlayerExistsException; - import lombok.Getter; import lombok.Setter; +import java.util.*; +import java.util.Map.Entry; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; + public class DefaultLocatedPlayerManager - extends EzyLoggable - implements LocatedPlayerManager { + extends EzyLoggable + implements LocatedPlayerManager { + protected final Map playersByName = newPlayersByNameMap(); + protected final NavigableMap playersByLocation + = newPlayersByLocationsMap(); @Getter @Setter protected LocatedPlayer master; @Getter @Setter protected LocatedPlayer speakinger; - protected final Map playersByName = newPlayersByNameMap(); - protected final NavigableMap playersByLocation - = newPlayersByLocationsMap(); @Override public LocatedPlayer getPlayer(int location) { @@ -44,7 +38,7 @@ public void addPlayer(LocatedPlayer player, int location) { LocatedPlayer current = playersByLocation.get(location); if (current != null) { throw new LocationNotAvailableException( - "location: " + location + " has owned by: " + current.getName()); + "location: " + location + " has owned by: " + current.getName()); } if (playersByName.containsKey(player.getName())) { throw new PlayerExistsException(player.getName()); @@ -68,7 +62,7 @@ public LocatedPlayer setNewMaster() { master = nextOf(master); return master; } - + @Override public List getPlayerNames() { return new ArrayList<>(playersByName.keySet()); @@ -98,30 +92,27 @@ public LocatedPlayer nextOf(LocatedPlayer player, Predicate condi int currentLocation = player.getLocation(); LocatedPlayer leftPlayer = find(currentLocation, condition, playersByLocation::lowerEntry); LocatedPlayer rightPlayer = find( - currentLocation, - condition, - playersByLocation::higherEntry + currentLocation, + condition, + playersByLocation::higherEntry ); return getCloserPlayer(leftPlayer, rightPlayer, currentLocation); } - + /** * Find the first player that is null or satisfies condition. Use function to determine the jump * direction * - * @param currentLocation - * current considered location - * @param condition - * condition to test player - * @param function - * specify how to jump to next entry + * @param currentLocation current considered location + * @param condition condition to test player + * @param function specify how to jump to next entry * @return the first player that satisfies condition or null */ private LocatedPlayer find( - int currentLocation, - Predicate condition, - Function> function + int currentLocation, + Predicate condition, + Function> function ) { Entry next = function.apply(currentLocation); while (next != null && !condition.test(next.getValue())) { @@ -129,7 +120,7 @@ private LocatedPlayer find( } return next != null ? next.getValue() : null; } - + /** * Determine whether `leftPlayer` or `rightPlayer` is closer to `location`. * @@ -152,44 +143,40 @@ private LocatedPlayer getCloserPlayer(LocatedPlayer left, LocatedPlayer right, i @Override public LocatedPlayer rightOf(LocatedPlayer player, Predicate condition) { return findCircle( - player.getLocation(), - condition, - playersByLocation::higherEntry, - playersByLocation::firstEntry + player.getLocation(), + condition, + playersByLocation::higherEntry, + playersByLocation::firstEntry ); } @Override public LocatedPlayer leftOf(LocatedPlayer player, Predicate condition) { return findCircle( - player.getLocation(), - condition, - playersByLocation::lowerEntry, - playersByLocation::lastEntry + player.getLocation(), + condition, + playersByLocation::lowerEntry, + playersByLocation::lastEntry ); } - + /** * Find the first player that satisfies condition (in circle, not in current position) Use * jumpFunction to determine the jump direction. Use anchorSupplier to determine which entry to * go to when reaching the end. * - * @param currentLocation - * current considered location - * @param condition - * condition to test player - * @param jumpFunction - * specify how to jump to next entry - * @param anchorSupplier - * specify which entry to jump to when reaching the end (next entry = null) + * @param currentLocation current considered location + * @param condition condition to test player + * @param jumpFunction specify how to jump to next entry + * @param anchorSupplier specify which entry to jump to when reaching the end (next entry = null) * @return the first player that satisfies condition (in circle, not in current position) */ private LocatedPlayer findCircle( - int currentLocation, - Predicate condition, - Function> jumpFunction, - Supplier> anchorSupplier + int currentLocation, + Predicate condition, + Function> jumpFunction, + Supplier> anchorSupplier ) { int nextLocation = currentLocation; Entry next; @@ -208,7 +195,7 @@ private LocatedPlayer findCircle( } return next.getValue(); } - + protected Map newPlayersByNameMap() { return new HashMap<>(); } @@ -216,15 +203,15 @@ protected Map newPlayersByNameMap() { protected NavigableMap newPlayersByLocationsMap() { return new TreeMap<>(); } - + @Override public String toString() { return new StringBuilder() - .append("(") - .append("master: ").append(master).append(", ") - .append("speakinger: ").append(speakinger).append(", ") - .append("playersByLocation: ").append(playersByLocation) - .append(")") - .toString(); + .append("(") + .append("master: ").append(master).append(", ") + .append("speakinger: ").append(speakinger).append(", ") + .append("playersByLocation: ").append(playersByLocation) + .append(")") + .toString(); } } diff --git a/src/main/java/com/tvd12/gamebox/manager/DefaultPlayerManager.java b/src/main/java/com/tvd12/gamebox/manager/DefaultPlayerManager.java index bad1363..7813a81 100644 --- a/src/main/java/com/tvd12/gamebox/manager/DefaultPlayerManager.java +++ b/src/main/java/com/tvd12/gamebox/manager/DefaultPlayerManager.java @@ -21,7 +21,7 @@ protected DefaultPlayerManager(Builder builder) { } public static class Builder> - extends AbstractPlayerManager.Builder { + extends AbstractPlayerManager.Builder { @Override protected PlayerManager newProduct() { diff --git a/src/main/java/com/tvd12/gamebox/manager/DefaultRoomManager.java b/src/main/java/com/tvd12/gamebox/manager/DefaultRoomManager.java index 9e08edf..7290259 100644 --- a/src/main/java/com/tvd12/gamebox/manager/DefaultRoomManager.java +++ b/src/main/java/com/tvd12/gamebox/manager/DefaultRoomManager.java @@ -21,7 +21,7 @@ protected DefaultRoomManager(Builder builder) { } public static class Builder> - extends AbstractRoomManager.Builder { + extends AbstractRoomManager.Builder { @Override public DefaultRoomManager build() { diff --git a/src/main/java/com/tvd12/gamebox/manager/LocatedPlayerManager.java b/src/main/java/com/tvd12/gamebox/manager/LocatedPlayerManager.java index 860d096..390346c 100644 --- a/src/main/java/com/tvd12/gamebox/manager/LocatedPlayerManager.java +++ b/src/main/java/com/tvd12/gamebox/manager/LocatedPlayerManager.java @@ -1,23 +1,23 @@ package com.tvd12.gamebox.manager; -import java.util.List; -import java.util.function.Predicate; - import com.tvd12.ezyfox.function.EzyPredicates; import com.tvd12.gamebox.entity.LocatedPlayer; -public interface LocatedPlayerManager { +import java.util.List; +import java.util.function.Predicate; - void setMaster(LocatedPlayer master); +public interface LocatedPlayerManager { LocatedPlayer setNewMaster(); LocatedPlayer getMaster(); - void setSpeakinger(LocatedPlayer speakinger); + void setMaster(LocatedPlayer master); LocatedPlayer getSpeakinger(); + void setSpeakinger(LocatedPlayer speakinger); + LocatedPlayer getPlayer(int location); void addPlayer(LocatedPlayer player, int location); diff --git a/src/main/java/com/tvd12/gamebox/manager/PlayerManager.java b/src/main/java/com/tvd12/gamebox/manager/PlayerManager.java index f66f436..e4994fb 100644 --- a/src/main/java/com/tvd12/gamebox/manager/PlayerManager.java +++ b/src/main/java/com/tvd12/gamebox/manager/PlayerManager.java @@ -1,13 +1,13 @@ package com.tvd12.gamebox.manager; +import com.tvd12.gamebox.entity.Player; + import java.util.Collection; import java.util.List; import java.util.concurrent.locks.Lock; import java.util.function.Predicate; import java.util.function.Supplier; -import com.tvd12.gamebox.entity.Player; - public interface PlayerManager

{ /** @@ -21,22 +21,22 @@ public interface PlayerManager

{ /** * Get player by id. * - * @param username the player's name + * @param username the player's name * @param playerSupplier if the player's not existed, we will create a new one * @return the player */ P getPlayer(String username, Supplier

playerSupplier); - + /** * Get the first player. - * + * * @return the first player */ P getFirstPlayer(); - + /** * Get player list. - * + * * @return the player list */ List

getPlayerList(); @@ -44,8 +44,7 @@ public interface PlayerManager

{ /** * Get player list to buffer. * - * @param buffer - * buffer to get player list + * @param buffer buffer to get player list */ void getPlayerList(List

buffer); @@ -53,8 +52,7 @@ public interface PlayerManager

{ /** * Get players as a ReadOnlyList. * - * @param predicate - * the predicate to test + * @param predicate the predicate to test * @return the read-only player list */ List

getPlayerList(Predicate

predicate); @@ -90,8 +88,7 @@ public interface PlayerManager

{ /** * Check whether contains player or not. * - * @param username - * the player's name + * @param username the player's name * @return true or false */ boolean containsPlayer(String username); @@ -100,8 +97,7 @@ public interface PlayerManager

{ /** * Check whether contains player or not. * - * @param player - * the player + * @param player the player * @return true or false */ default boolean containsPlayer(P player) { @@ -111,18 +107,15 @@ default boolean containsPlayer(P player) { /** * Add player. * - * @param player - * player to add - * @param failIfAdded - * throw an exception if player has added + * @param player player to add + * @param failIfAdded throw an exception if player has added */ void addPlayer(P player, boolean failIfAdded); /** * Add player. * - * @param player - * player to add + * @param player player to add */ default void addPlayer(P player) { addPlayer(player, true); @@ -131,18 +124,15 @@ default void addPlayer(P player) { /** * Add players. * - * @param players - * players to add - * @param failIfAdded - * throw an exception if player has added + * @param players players to add + * @param failIfAdded throw an exception if player has added */ void addPlayers(Collection

players, boolean failIfAdded); /** * Add players. * - * @param players - * players to add + * @param players players to add */ default void addPlayers(Collection

players) { addPlayers(players, true); @@ -151,8 +141,7 @@ default void addPlayers(Collection

players) { /** * Remove player. * - * @param player - * the player + * @param player the player * @return removed player */ P removePlayer(P player); @@ -160,8 +149,7 @@ default void addPlayers(Collection

players) { /** * Remove player by name. * - * @param username - * the player name + * @param username the player name * @return the removed player */ default P removePlayer(String username) { @@ -171,16 +159,14 @@ default P removePlayer(String username) { /** * Remove collection of player. * - * @param players - * the player to remove + * @param players the player to remove */ void removePlayers(Collection

players); /** * Get lock mapped to player's name. * - * @param username - * the player's name + * @param username the player's name * @return the lock */ Lock getLock(String username); @@ -188,8 +174,7 @@ default P removePlayer(String username) { /** * Remove lock mapped to player's name. * - * @param username - * the player's name + * @param username the player's name */ void removeLock(String username); @@ -201,8 +186,7 @@ default P removePlayer(String username) { /** * Count player. * - * @param tester - * the test function + * @param tester the test function * @return the player count */ int countPlayers(Predicate

tester); @@ -210,8 +194,7 @@ default P removePlayer(String username) { /** * Filter player to list. * - * @param tester - * the test function + * @param tester the test function * @return list of filtered player */ List

filterPlayers(Predicate

tester); diff --git a/src/main/java/com/tvd12/gamebox/manager/RoomManager.java b/src/main/java/com/tvd12/gamebox/manager/RoomManager.java index 12b18f2..fb7a1b8 100644 --- a/src/main/java/com/tvd12/gamebox/manager/RoomManager.java +++ b/src/main/java/com/tvd12/gamebox/manager/RoomManager.java @@ -1,10 +1,10 @@ package com.tvd12.gamebox.manager; +import com.tvd12.gamebox.entity.Room; + import java.util.List; import java.util.function.Predicate; -import com.tvd12.gamebox.entity.Room; - public interface RoomManager { void addRoom(R room, boolean failIfAdded); @@ -34,7 +34,7 @@ default void addRooms(Iterable rooms) { List getRoomList(); void getRoomList(List buffer); - + List getRoomList(Predicate predicate); int getRoomCount(); diff --git a/src/main/java/com/tvd12/gamebox/manager/SimplePlayerManager.java b/src/main/java/com/tvd12/gamebox/manager/SimplePlayerManager.java index 698a15f..01d930e 100644 --- a/src/main/java/com/tvd12/gamebox/manager/SimplePlayerManager.java +++ b/src/main/java/com/tvd12/gamebox/manager/SimplePlayerManager.java @@ -1,10 +1,10 @@ package com.tvd12.gamebox.manager; +import com.tvd12.gamebox.entity.Player; + import java.util.HashMap; import java.util.Map; -import com.tvd12.gamebox.entity.Player; - public class SimplePlayerManager

extends AbstractPlayerManager

{ public SimplePlayerManager() { @@ -19,17 +19,17 @@ protected SimplePlayerManager(Builder builder) { super(builder); } + public static Builder builder() { + return new Builder<>(); + } + @Override protected Map newPlayersByNameMap() { return new HashMap<>(); } - public static Builder builder() { - return new Builder<>(); - } - public static class Builder> - extends AbstractPlayerManager.Builder { + extends AbstractPlayerManager.Builder { @Override protected PlayerManager newProduct() { diff --git a/src/main/java/com/tvd12/gamebox/manager/SimpleRoomManager.java b/src/main/java/com/tvd12/gamebox/manager/SimpleRoomManager.java index 876ebe3..d805711 100644 --- a/src/main/java/com/tvd12/gamebox/manager/SimpleRoomManager.java +++ b/src/main/java/com/tvd12/gamebox/manager/SimpleRoomManager.java @@ -1,10 +1,10 @@ package com.tvd12.gamebox.manager; +import com.tvd12.gamebox.entity.Room; + import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import com.tvd12.gamebox.entity.Room; - public class SimpleRoomManager extends AbstractRoomManager { public SimpleRoomManager() { @@ -19,6 +19,10 @@ protected SimpleRoomManager(Builder builder) { super(builder); } + public static Builder builder() { + return new Builder<>(); + } + @Override protected Map newRoomsByIdMap() { return new ConcurrentHashMap<>(); @@ -29,12 +33,8 @@ protected Map newRoomsByNameMap() { return new ConcurrentHashMap<>(); } - public static Builder builder() { - return new Builder<>(); - } - public static class Builder> - extends AbstractRoomManager.Builder { + extends AbstractRoomManager.Builder { @Override public SimpleRoomManager build() { diff --git a/src/main/java/com/tvd12/gamebox/manager/SynchronizedPlayerManager.java b/src/main/java/com/tvd12/gamebox/manager/SynchronizedPlayerManager.java index 36ed5d8..b27ec83 100644 --- a/src/main/java/com/tvd12/gamebox/manager/SynchronizedPlayerManager.java +++ b/src/main/java/com/tvd12/gamebox/manager/SynchronizedPlayerManager.java @@ -1,15 +1,14 @@ package com.tvd12.gamebox.manager; +import com.tvd12.gamebox.entity.Player; +import lombok.Getter; + import java.util.Collection; import java.util.List; import java.util.concurrent.locks.Lock; import java.util.function.Predicate; import java.util.function.Supplier; -import com.tvd12.gamebox.entity.Player; - -import lombok.Getter; - public class SynchronizedPlayerManager

extends AbstractPlayerManager

{ @Getter @@ -27,6 +26,11 @@ protected SynchronizedPlayerManager(Builder builder) { super(builder); } + @SuppressWarnings("rawtypes") + public static Builder builder() { + return new Builder<>(); + } + @Override public P getPlayer(String username) { synchronized (synchronizedLock) { @@ -40,14 +44,14 @@ public P getPlayer(String username, Supplier

playerSupplier) { return super.getPlayer(username, playerSupplier); } } - + @Override public P getFirstPlayer() { synchronized (synchronizedLock) { return super.getFirstPlayer(); } } - + @Override public List

getPlayerList() { synchronized (synchronizedLock) { @@ -89,11 +93,11 @@ public void addPlayer(P player, boolean failIfAdded) { super.addPlayer(player, failIfAdded); } logger.info( - "{} add player: {}, locks.size = {}, playersByName.size = {}", - getMessagePrefix(), - player, - locks.size(), - playersByName.size() + "{} add player: {}, locks.size = {}, playersByName.size = {}", + getMessagePrefix(), + player, + locks.size(), + playersByName.size() ); } @@ -103,11 +107,11 @@ public void addPlayers(Collection

players, boolean failIfAdded) { super.addPlayers(players, failIfAdded); } logger.info( - "{} add players: {}, locks.size = {}, playersByName.size = {}", - getMessagePrefix(), - players, - locks.size(), - playersByName.size() + "{} add players: {}, locks.size = {}, playersByName.size = {}", + getMessagePrefix(), + players, + locks.size(), + playersByName.size() ); } @@ -117,11 +121,11 @@ public P removePlayer(P player) { super.removePlayer(player); } logger.info( - "{} remove player: {}, locks.size = {}, playersByName.size = {}", - getMessagePrefix(), - player, - locks.size(), - playersByName.size() + "{} remove player: {}, locks.size = {}, playersByName.size = {}", + getMessagePrefix(), + player, + locks.size(), + playersByName.size() ); return player; } @@ -132,11 +136,11 @@ public void removePlayers(Collection

players) { super.removePlayers(players); } logger.info( - "{} remove players: {}, locks.size = {}, playersByName.size = {}", - getMessagePrefix(), - players, - locks.size(), - playersByName.size() + "{} remove players: {}, locks.size = {}, playersByName.size = {}", + getMessagePrefix(), + players, + locks.size(), + playersByName.size() ); } @@ -167,11 +171,11 @@ public void removeLock(String username) { super.removeLock(username); } } - + @Override public int countPlayers(Predicate

tester) { synchronized (synchronizedLock) { - return super.countPlayers(tester); + return super.countPlayers(tester); } } @@ -189,13 +193,8 @@ public void clear() { } } - @SuppressWarnings("rawtypes") - public static Builder builder() { - return new Builder<>(); - } - public static class Builder> - extends AbstractPlayerManager.Builder { + extends AbstractPlayerManager.Builder { @Override protected PlayerManager newProduct() { diff --git a/src/main/java/com/tvd12/gamebox/manager/SynchronizedRoomManager.java b/src/main/java/com/tvd12/gamebox/manager/SynchronizedRoomManager.java index 17ba66b..d835b93 100644 --- a/src/main/java/com/tvd12/gamebox/manager/SynchronizedRoomManager.java +++ b/src/main/java/com/tvd12/gamebox/manager/SynchronizedRoomManager.java @@ -1,12 +1,11 @@ package com.tvd12.gamebox.manager; -import java.util.List; -import java.util.function.Predicate; - import com.tvd12.gamebox.entity.Room; - import lombok.Getter; +import java.util.List; +import java.util.function.Predicate; + public class SynchronizedRoomManager extends AbstractRoomManager { @Getter @@ -24,20 +23,25 @@ protected SynchronizedRoomManager(Builder builder) { super(builder); } + @SuppressWarnings("rawtypes") + public static Builder builder() { + return new Builder<>(); + } + @Override public void addRoom(R room, boolean failIfAdded) { synchronized (synchronizedLock) { super.addRoom(room, failIfAdded); } logger.info( - "{} add rooms: {}, roomsByName.size = {}, roomsById.size = {}", - getMessagePrefix(), - room, - roomsByName.size(), - roomsById.size() + "{} add rooms: {}, roomsByName.size = {}, roomsById.size = {}", + getMessagePrefix(), + room, + roomsByName.size(), + roomsById.size() ); } - + @Override public void addRooms(R[] rooms, boolean failIfAdded) { synchronized (synchronizedLock) { @@ -51,11 +55,11 @@ public void addRooms(Iterable rooms, boolean failIfAdded) { super.addRooms(rooms, failIfAdded); } logger.info( - "{} add rooms: {}, roomsByName.size = {}, roomsById.size = {}", - getMessagePrefix(), - rooms, - roomsByName.size(), - roomsById.size() + "{} add rooms: {}, roomsByName.size = {}, roomsById.size = {}", + getMessagePrefix(), + rooms, + roomsByName.size(), + roomsById.size() ); } @@ -72,7 +76,7 @@ public R getRoom(String name) { return super.getRoom(name); } } - + @Override public R getRoom(Predicate predicate) { synchronized (synchronizedLock) { @@ -93,14 +97,14 @@ public void getRoomList(List buffer) { super.getRoomList(buffer); } } - + @Override public List getRoomList(Predicate predicate) { synchronized (synchronizedLock) { return super.getRoomList(predicate); } } - + @Override public int getRoomCount() { synchronized (synchronizedLock) { @@ -111,28 +115,28 @@ public int getRoomCount() { @Override public boolean containsRoom(long id) { synchronized (synchronizedLock) { - return super.containsRoom(id); + return super.containsRoom(id); } } - + @Override public boolean containsRoom(String name) { synchronized (synchronizedLock) { return super.containsRoom(name); } } - + @Override public void removeRoom(R room) { synchronized (synchronizedLock) { super.removeRoom(room); } logger.info( - "{} remove room: {}, roomsByName.size = {}, roomsById.size = {}", - getMessagePrefix(), - room, - roomsByName.size(), - roomsById.size() + "{} remove room: {}, roomsByName.size = {}, roomsById.size = {}", + getMessagePrefix(), + room, + roomsByName.size(), + roomsById.size() ); } @@ -156,11 +160,11 @@ public void removeRooms(Iterable rooms) { super.removeRooms(rooms); } logger.info( - "{} remove rooms: {}, roomsByName.size = {}, roomsById.size = {}", - getMessagePrefix(), - rooms, - roomsByName.size(), - roomsById.size() + "{} remove rooms: {}, roomsByName.size = {}, roomsById.size = {}", + getMessagePrefix(), + rooms, + roomsByName.size(), + roomsById.size() ); } @@ -170,21 +174,16 @@ public boolean available() { return super.available(); } } - + @Override public void clear() { synchronized (synchronizedLock) { - super.clear(); + super.clear(); } } - @SuppressWarnings("rawtypes") - public static Builder builder() { - return new Builder<>(); - } - public static class Builder> - extends AbstractRoomManager.Builder { + extends AbstractRoomManager.Builder { @Override public RoomManager build() { diff --git a/src/main/java/com/tvd12/gamebox/math/Numbers.java b/src/main/java/com/tvd12/gamebox/math/Numbers.java index f03e629..6a4ea92 100644 --- a/src/main/java/com/tvd12/gamebox/math/Numbers.java +++ b/src/main/java/com/tvd12/gamebox/math/Numbers.java @@ -18,19 +18,26 @@ package com.tvd12.gamebox.math; public final class Numbers { - - /** Offset to order signed double numbers lexicographically. */ + + /** + * Offset to order signed double numbers lexicographically. + */ private static final int SGN_MASK_FLOAT = 0x80000000; - /** Positive zero bits. */ + /** + * Positive zero bits. + */ private static final int POSITIVE_ZERO_FLOAT_BITS = Float.floatToRawIntBits(+0.0f); - /** Negative zero bits. */ + /** + * Negative zero bits. + */ private static final int NEGATIVE_ZERO_FLOAT_BITS = Float.floatToRawIntBits(-0.0f); - private Numbers() {} - + private Numbers() { + } + /** * Returns true if they are equal as defined by - * {@link #equals(float,float,int) equals(x, y, 1)}. + * {@link #equals(float, float, int) equals(x, y, 1)}. * * @param x first value * @param y second value @@ -39,7 +46,7 @@ private Numbers() {} public static boolean equals(float x, float y) { return x == y || equals(x, y, 1); } - + /** * Returns true if the arguments are equal or within the range of allowed * error (inclusive). Returns {@code false} if either of the arguments is NaN. @@ -54,12 +61,12 @@ public static boolean equals(float x, float y) { * Bruce Dawson. *

* - * @param x first value - * @param y second value + * @param x first value + * @param y second value * @param maxUlps {@code (maxUlps - 1)} is the number of floating point - * values between {@code x} and {@code y}. + * values between {@code x} and {@code y}. * @return {@code true} if there are fewer than {@code maxUlps} floating - * point values between {@code x} and {@code y}. + * point values between {@code x} and {@code y}. */ public static boolean equals(final float x, final float y, final int maxUlps) { if (Float.isNaN(x) || Float.isNaN(y)) { @@ -77,10 +84,10 @@ public static boolean equals(final float x, final float y, final int maxUlps) { final int deltaPlus; final int deltaMinus; if (xInt < yInt) { - deltaPlus = yInt - POSITIVE_ZERO_FLOAT_BITS; + deltaPlus = yInt - POSITIVE_ZERO_FLOAT_BITS; deltaMinus = xInt - NEGATIVE_ZERO_FLOAT_BITS; } else { - deltaPlus = xInt - POSITIVE_ZERO_FLOAT_BITS; + deltaPlus = xInt - POSITIVE_ZERO_FLOAT_BITS; deltaMinus = yInt - NEGATIVE_ZERO_FLOAT_BITS; } diff --git a/src/main/java/com/tvd12/gamebox/math/Rect.java b/src/main/java/com/tvd12/gamebox/math/Rect.java index ead69d9..d435d0c 100644 --- a/src/main/java/com/tvd12/gamebox/math/Rect.java +++ b/src/main/java/com/tvd12/gamebox/math/Rect.java @@ -8,7 +8,8 @@ public class Rect { public float width; public float height; - public Rect() {} + public Rect() { + } public Rect(Rect r) { this.x = r.x; @@ -55,30 +56,30 @@ public float getMinY() { return y; } - public boolean containsPoint(Vec2 point) { + public boolean containsPoint(Vec2 point) { return (point.x >= getMinX() - && point.x <= getMaxX() - && point.y >= getMinY() - && point.y <= getMaxY()); + && point.x <= getMaxX() + && point.y >= getMinY() + && point.y <= getMaxY()); } public boolean intersectsRect(Rect rect) { return !(getMaxX() < rect.getMinX() - || rect.getMaxX() < getMinX() - || getMaxY() < rect.getMinY() - || rect.getMaxY() < getMinY()); + || rect.getMaxX() < getMinX() + || getMaxY() < rect.getMinY() + || rect.getMaxY() < getMinY()); } public boolean intersectsCircle(Vec2 center, float radius) { float centerX = x + width / 2; float centerY = y + height / 2; - + float w = width / 2; float h = height / 2; - + float dx = Math.abs(center.x - centerX); float dy = Math.abs(center.y - centerY); - + if (dx > (radius + w) || dy > (radius + h)) { return false; } @@ -88,17 +89,17 @@ public boolean intersectsCircle(Vec2 center, float radius) { if (circleDistanceX <= w) { return true; } - + if (circleDistanceY <= h) { return true; } - - float cornerDistanceSq = (float) (Math.pow(circleDistanceX - w, 2) + + float cornerDistanceSq = (float) (Math.pow(circleDistanceX - w, 2) + Math.pow(circleDistanceY - h, 2)); - + return cornerDistanceSq <= (float) Math.pow(radius, 2); } - + public void merge(Rect rect) { float minX = Math.min(getMinX(), rect.getMinX()); float minY = Math.min(getMinY(), rect.getMinY()); @@ -119,7 +120,7 @@ public Rect unionWithRect(Rect rect) { thisRightX = thisLeftX; thisLeftX = tmp; } - + // This rect has negative height if (thisTopY < thisBottomY) { float tmp = thisTopY; @@ -152,9 +153,9 @@ public Rect unionWithRect(Rect rect) { float combinedBottomY = Math.min(thisBottomY, otherBottomY); return new Rect( - combinedLeftX, - combinedBottomY, - combinedRightX - combinedLeftX, + combinedLeftX, + combinedBottomY, + combinedRightX - combinedLeftX, combinedTopY - combinedBottomY ); } diff --git a/src/main/java/com/tvd12/gamebox/math/Vec2.java b/src/main/java/com/tvd12/gamebox/math/Vec2.java index 61884fe..4a9328b 100644 --- a/src/main/java/com/tvd12/gamebox/math/Vec2.java +++ b/src/main/java/com/tvd12/gamebox/math/Vec2.java @@ -2,21 +2,19 @@ import com.tvd12.ezyfox.entity.EzyArray; import com.tvd12.ezyfox.util.EzyEntityArrays; - import lombok.Getter; @Getter @SuppressWarnings("MemberName") public class Vec2 { - public float x; - public float y; - public static final Vec2 ZERO = new Vec2(); public static final Vec2 LEFT = new Vec2(-1, 0); public static final Vec2 UP = new Vec2(0, 1); public static final Vec2 RIGHT = new Vec2(1, 0); public static final Vec2 DOWN = new Vec2(0, -1); + public float x; + public float y; public Vec2() { this(0.0F, 0.0F); @@ -26,7 +24,7 @@ public Vec2(Vec2 v) { this.x = v.x; this.y = v.y; } - + public Vec2(float[] xy) { this.x = xy[0]; this.y = xy[1]; @@ -46,7 +44,7 @@ public void set(double[] xy) { x = (float) xy[0]; y = (float) xy[1]; } - + public void set(double x, double y) { this.x = (float) x; this.y = (float) y; @@ -56,22 +54,22 @@ public void set(float x, float y) { this.x = x; this.y = y; } - + public void set(Vec2 v) { this.x = v.x; this.y = v.y; } - + public void add(Vec2 v) { x += v.x; y += v.y; } - + public void negate() { x = -x; y = -y; } - + public void subtract(Vec2 v) { x -= v.x; y -= v.y; @@ -85,17 +83,17 @@ public void multiply(double a) { public Vec2 multipleNew(float a) { return new Vec2(this.x * a, this.y * a); } - + public double length() { return Math.sqrt(x * x + y * y); } - + public double distance(Vec2 v) { double dx = v.x - x; double dy = v.y - y; return Math.sqrt(dx * dx + dy * dy); } - + public float distanceSquare(Vec2 v) { float dx = x - v.x; float dy = y - v.y; @@ -105,21 +103,21 @@ public float distanceSquare(Vec2 v) { @Override public boolean equals(Object obj) { Vec2 other = (Vec2) obj; - return Numbers.equals(x, other.x) + return Numbers.equals(x, other.x) && Numbers.equals(y, other.y); } - + @Override public int hashCode() { int hashCode = 31 + Float.hashCode(x); - hashCode += 31 * hashCode + Float.hashCode(y); + hashCode += 31 * hashCode + Float.hashCode(y); return hashCode; } - + public float[] toFloatArray() { - return new float[] { x, y }; + return new float[]{x, y}; } - + public EzyArray toArray() { return EzyEntityArrays.newArray(x, y); } @@ -127,10 +125,10 @@ public EzyArray toArray() { @Override public String toString() { return new StringBuilder() - .append("(") - .append(x).append(", ") - .append(y) - .append(")") - .toString(); + .append("(") + .append(x).append(", ") + .append(y) + .append(")") + .toString(); } } diff --git a/src/main/java/com/tvd12/gamebox/math/Vec3.java b/src/main/java/com/tvd12/gamebox/math/Vec3.java index 2d05821..668ee5a 100644 --- a/src/main/java/com/tvd12/gamebox/math/Vec3.java +++ b/src/main/java/com/tvd12/gamebox/math/Vec3.java @@ -2,16 +2,11 @@ import com.tvd12.ezyfox.entity.EzyArray; import com.tvd12.ezyfox.util.EzyEntityArrays; - import lombok.Getter; @Getter @SuppressWarnings("MemberName") public class Vec3 { - public float x; - public float y; - public float z; - public static final Vec3 ZERO = new Vec3(); public static final Vec3 up = new Vec3(0.0f, 1f, 0.0f); public static final Vec3 down = new Vec3(0.0f, -1f, 0.0f); @@ -19,6 +14,9 @@ public class Vec3 { public static final Vec3 right = new Vec3(1f, 0.0f, 0.0f); public static final Vec3 forward = new Vec3(0.0f, 0.0f, 1f); public static final Vec3 backward = new Vec3(0.0f, 0.0f, -1f); + public float x; + public float y; + public float z; public Vec3() { this(0.0f, 0.0f, 0.0f); @@ -85,7 +83,7 @@ public void multiply(double value) { y *= value; z *= value; } - + public double distance(Vec3 v) { double dx = v.x - x; double dy = v.y - y; @@ -96,34 +94,34 @@ public double distance(Vec3 v) { public double length() { return Math.sqrt(x * x + y * y + z * z); } - + public float distanceSquare(Vec3 v) { float dx = x - v.x; float dy = y - v.y; float dz = z - v.z; return dx * dx + dy * dy + dz * dz; } - + @Override public boolean equals(Object obj) { Vec3 other = (Vec3) obj; - return Numbers.equals(x, other.x) + return Numbers.equals(x, other.x) && Numbers.equals(y, other.y) && Numbers.equals(z, other.z); } - + @Override public int hashCode() { int hashCode = 31 + Float.hashCode(x); - hashCode += 31 * hashCode + Float.hashCode(y); - hashCode += 31 * hashCode + Float.hashCode(z); + hashCode += 31 * hashCode + Float.hashCode(y); + hashCode += 31 * hashCode + Float.hashCode(z); return hashCode; } - + public float[] toFloatArray() { - return new float[] { x, y, z }; + return new float[]{x, y, z}; } - + public EzyArray toArray() { return EzyEntityArrays.newArray(x, y, z); } @@ -131,11 +129,11 @@ public EzyArray toArray() { @Override public String toString() { return new StringBuilder() - .append("(") - .append(x).append(", ") - .append(y).append(", ") - .append(z) - .append(")") - .toString(); + .append("(") + .append(x).append(", ") + .append(y).append(", ") + .append(z) + .append(")") + .toString(); } } diff --git a/src/test/java/com/tvd12/gamebox/entity/LocatedRoomTest.java b/src/test/java/com/tvd12/gamebox/entity/LocatedRoomTest.java index a654300..65de1de 100644 --- a/src/test/java/com/tvd12/gamebox/entity/LocatedRoomTest.java +++ b/src/test/java/com/tvd12/gamebox/entity/LocatedRoomTest.java @@ -1,10 +1,9 @@ package com.tvd12.gamebox.entity; -import org.testng.annotations.Test; - import com.tvd12.gamebox.exception.NoSlotException; import com.tvd12.gamebox.manager.DefaultLocatedPlayerManager; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; public class LocatedRoomTest { @@ -15,30 +14,30 @@ public void test() { .maxSlot(2) .playerManager(new DefaultLocatedPlayerManager()) .build(); - + LocatedPlayer player1 = LocatedPlayer.builder() .name("player1") .build(); sut.addPlayer(player1); - + LocatedPlayer player2 = LocatedPlayer.builder() .name("player2") .build(); sut.addPlayer(player2); - + LocatedPlayer playerx = LocatedPlayer.builder() .name("playerx") .build(); - + // when // then Asserts.assertEquals(sut.getMaxSlot(), 2); Asserts.assertEmpty(sut.getSlots()); - + sut.removePlayer(playerx); sut.removePlayer(player2); Asserts.assertEquals(sut.getPlayerManager().getPlayerCount(), 1); - + sut.addPlayer(player2); Throwable e = Asserts.assertThrows(() -> sut.addPlayer(playerx)); Asserts.assertEqualsType(e, NoSlotException.class); diff --git a/src/test/java/com/tvd12/gamebox/entity/MMOIntergrationTest.java b/src/test/java/com/tvd12/gamebox/entity/MMOIntergrationTest.java index 71095f2..85f32f9 100644 --- a/src/test/java/com/tvd12/gamebox/entity/MMOIntergrationTest.java +++ b/src/test/java/com/tvd12/gamebox/entity/MMOIntergrationTest.java @@ -1,5 +1,10 @@ package com.tvd12.gamebox.entity; +import com.tvd12.gamebox.handler.MMORoomUpdatedHandler; +import com.tvd12.gamebox.manager.RoomManager; +import com.tvd12.gamebox.manager.SynchronizedRoomManager; +import com.tvd12.gamebox.math.Vec3; + import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; @@ -9,11 +14,6 @@ import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.atomic.AtomicInteger; -import com.tvd12.gamebox.handler.MMORoomUpdatedHandler; -import com.tvd12.gamebox.manager.RoomManager; -import com.tvd12.gamebox.manager.SynchronizedRoomManager; -import com.tvd12.gamebox.math.Vec3; - public class MMOIntergrationTest { private final MMOVirtualWorld world; @@ -23,7 +23,7 @@ public class MMOIntergrationTest { private final AtomicInteger totalRooms; private final AtomicInteger totalPlayers; private final RoomManager roomManager; - + public MMOIntergrationTest() { this.world = MMOVirtualWorld.builder() .maxRoomCount(1000) @@ -37,12 +37,16 @@ public MMOIntergrationTest() { this.freePlayerList = Collections.synchronizedList(new ArrayList<>()); this.joinedPlayerList = Collections.synchronizedList(new ArrayList<>()); } - + + public static void main(String[] args) throws Exception { + new MMOIntergrationTest().test(); + } + public void test() throws Exception { long testTime = 5 * 60 * 1000; long startTime = System.currentTimeMillis(); long endtime = startTime + testTime; - while(true) { + while (true) { long currentTime = System.currentTimeMillis(); if (currentTime > endtime) { break; @@ -54,24 +58,24 @@ public void test() throws Exception { removePlayerFromRooms(); } } - + private void addPlayers() { int playersToAdd = ThreadLocalRandom.current().nextInt(5); - for (int i = 0 ; i < playersToAdd ; ++i) { + for (int i = 0; i < playersToAdd; ++i) { MMOPlayer player = MMOPlayer.builder() .name("Player#" + totalPlayers.incrementAndGet()) .build(); freePlayerList.add(player); } } - + private void addPlayerToRooms() { if (freePlayerList.isEmpty()) { return; } int numberOfPlayers = ThreadLocalRandom.current().nextInt(freePlayerList.size()); Iterator iterator = freePlayerList.iterator(); - for (int i = 0 ; i < numberOfPlayers ; ++i) { + for (int i = 0; i < numberOfPlayers; ++i) { MMORoom room = findAvailableRooms(); MMOPlayer player = iterator.next(); executorService.execute(() -> room.addPlayer(player)); @@ -79,27 +83,27 @@ private void addPlayerToRooms() { joinedPlayerList.add(player); } } - + private void setPlayerPositions() { for (MMOPlayer player : joinedPlayerList) { executorService.execute(() -> { Vec3 position = new Vec3( - (float)ThreadLocalRandom.current().nextDouble(300), - (float)ThreadLocalRandom.current().nextDouble(300), - (float)ThreadLocalRandom.current().nextDouble(300) + (float) ThreadLocalRandom.current().nextDouble(300), + (float) ThreadLocalRandom.current().nextDouble(300), + (float) ThreadLocalRandom.current().nextDouble(300) ); player.setPosition(position); }); } } - + private void removePlayerFromRooms() { if (joinedPlayerList.isEmpty()) { return; } int numberOfPlayers = ThreadLocalRandom.current().nextInt(joinedPlayerList.size()); Iterator iterator = joinedPlayerList.iterator(); - for (int i = 0 ; i < numberOfPlayers ; ++i) { + for (int i = 0; i < numberOfPlayers; ++i) { MMOPlayer player = iterator.next(); MMORoom room = roomManager.getRoom(player.getCurrentRoomId()); if (room == null) { @@ -115,7 +119,7 @@ private void removePlayerFromRooms() { iterator.remove(); } } - + private MMORoom findAvailableRooms() { MMORoom room = roomManager.getRoom(it -> it.getPlayerManager().getPlayerCount() == 1); if (room == null) { @@ -129,7 +133,7 @@ private MMORoom findAvailableRooms() { } return room; } - + private static class InternalPositionRoomUpdatedHandler implements MMORoomUpdatedHandler { @Override public void onRoomUpdated(MMORoom room, List players) { @@ -143,8 +147,4 @@ public void onRoomUpdated(MMORoom room, List players) { }); } } - - public static void main(String[] args) throws Exception { - new MMOIntergrationTest().test(); - } } diff --git a/src/test/java/com/tvd12/gamebox/entity/MMORoomGroupTest.java b/src/test/java/com/tvd12/gamebox/entity/MMORoomGroupTest.java index fce3719..6806bd6 100644 --- a/src/test/java/com/tvd12/gamebox/entity/MMORoomGroupTest.java +++ b/src/test/java/com/tvd12/gamebox/entity/MMORoomGroupTest.java @@ -15,121 +15,121 @@ import static org.mockito.Mockito.*; public class MMORoomGroupTest { - - @Test - public void createMMORoomGroupTest() throws InterruptedException { - // given - MMORoom room = mock(MMORoom.class); - EzyWrap roomGroupThreadName = new EzyWrap<>(); - doAnswer(invocation -> { - roomGroupThreadName.setValue(Thread.currentThread().getName()); - return null; - }).when(room).update(); - - // when - MMORoomGroup sut = MMORoomGroup.builder().timeTickMillis(100).build(); - - // then - sut.addRoom(room); - Asserts.assertNotNull(FieldUtil.getFieldValue(sut, "timeTickMillis")); - Asserts.assertNotNull(FieldUtil.getFieldValue(sut, "roomManager")); - - Thread.sleep(300); - Asserts.assertNotEquals(Thread.currentThread().getName(), roomGroupThreadName.getValue()); - } - - @Test - public void addRoomTest() throws InterruptedException { - // given - MMORoomGroup sut = MMORoomGroup.builder().timeTickMillis(100).build(); - MMORoom room = mock(MMORoom.class); - doNothing().when(room).update(); - - // when - sut.addRoom(room); - Thread.sleep(300); - - // then - verify(room, atLeastOnce()).update(); - } - - @Test - public void removeRoomTest() throws InterruptedException { - // given - MMORoomGroup sut = MMORoomGroup.builder().timeTickMillis(100).build(); - MMORoom room1 = MMORoom.builder() - .distanceOfInterest(RandomUtil.randomSmallDouble()) - .name("room1") - .build(); - - MMORoom room2 = MMORoom.builder() - .distanceOfInterest(RandomUtil.randomSmallDouble()) - .name("room2") - .build(); - - sut.addRoom(room1); - sut.addRoom(room2); - - Thread.sleep(300); - - // when - sut.removeRoom(room1); - - // then - RoomManager roomManager = FieldUtil.getFieldValue(sut, "roomManager"); - List roomsBuffer = new ArrayList<>(); - roomManager.getRoomList(roomsBuffer); - - List expectedRoomList = new ArrayList<>(); - expectedRoomList.add(room2); - - Asserts.assertEquals(expectedRoomList, roomsBuffer); - Asserts.assertEquals(sut.getRoom(room2.getName()), room2); - } - - @Test - public void destroyGroupTest() throws InterruptedException { - // given - MMORoom room = mock(MMORoom.class); - EzyWrap roomGroupThreadName = new EzyWrap<>(); - doAnswer(invocation -> { - roomGroupThreadName.setValue(Thread.currentThread().getName()); - return null; - }).when(room).update(); - - MMORoomGroup sut = MMORoomGroup.builder().timeTickMillis(100).build(); - sut.addRoom(room); - - // when - sut.destroy(); - Thread.sleep(300); - - // then - Asserts.assertEquals(FieldUtil.getFieldValue(sut, "active"), false); - - Set threadNames = Thread.getAllStackTraces().keySet() - .stream() - .map(Thread::getName) - .collect(Collectors.toSet()); - Asserts.assertFalse(threadNames.contains(roomGroupThreadName.getValue())); - } - - @Test - public void roomExceptionTest() throws InterruptedException { - // given - MMORoomGroup sut = MMORoomGroup.builder().timeTickMillis(100).build(); - MMORoom room = mock(MMORoom.class); - doThrow(InterruptedException.class).when(room).update(); - - // when - sut.addRoom(room); - Thread.sleep(300); - - // then - verify(room, atLeastOnce()).update(); - } - - @Test + + @Test + public void createMMORoomGroupTest() throws InterruptedException { + // given + MMORoom room = mock(MMORoom.class); + EzyWrap roomGroupThreadName = new EzyWrap<>(); + doAnswer(invocation -> { + roomGroupThreadName.setValue(Thread.currentThread().getName()); + return null; + }).when(room).update(); + + // when + MMORoomGroup sut = MMORoomGroup.builder().timeTickMillis(100).build(); + + // then + sut.addRoom(room); + Asserts.assertNotNull(FieldUtil.getFieldValue(sut, "timeTickMillis")); + Asserts.assertNotNull(FieldUtil.getFieldValue(sut, "roomManager")); + + Thread.sleep(300); + Asserts.assertNotEquals(Thread.currentThread().getName(), roomGroupThreadName.getValue()); + } + + @Test + public void addRoomTest() throws InterruptedException { + // given + MMORoomGroup sut = MMORoomGroup.builder().timeTickMillis(100).build(); + MMORoom room = mock(MMORoom.class); + doNothing().when(room).update(); + + // when + sut.addRoom(room); + Thread.sleep(300); + + // then + verify(room, atLeastOnce()).update(); + } + + @Test + public void removeRoomTest() throws InterruptedException { + // given + MMORoomGroup sut = MMORoomGroup.builder().timeTickMillis(100).build(); + MMORoom room1 = MMORoom.builder() + .distanceOfInterest(RandomUtil.randomSmallDouble()) + .name("room1") + .build(); + + MMORoom room2 = MMORoom.builder() + .distanceOfInterest(RandomUtil.randomSmallDouble()) + .name("room2") + .build(); + + sut.addRoom(room1); + sut.addRoom(room2); + + Thread.sleep(300); + + // when + sut.removeRoom(room1); + + // then + RoomManager roomManager = FieldUtil.getFieldValue(sut, "roomManager"); + List roomsBuffer = new ArrayList<>(); + roomManager.getRoomList(roomsBuffer); + + List expectedRoomList = new ArrayList<>(); + expectedRoomList.add(room2); + + Asserts.assertEquals(expectedRoomList, roomsBuffer); + Asserts.assertEquals(sut.getRoom(room2.getName()), room2); + } + + @Test + public void destroyGroupTest() throws InterruptedException { + // given + MMORoom room = mock(MMORoom.class); + EzyWrap roomGroupThreadName = new EzyWrap<>(); + doAnswer(invocation -> { + roomGroupThreadName.setValue(Thread.currentThread().getName()); + return null; + }).when(room).update(); + + MMORoomGroup sut = MMORoomGroup.builder().timeTickMillis(100).build(); + sut.addRoom(room); + + // when + sut.destroy(); + Thread.sleep(300); + + // then + Asserts.assertEquals(FieldUtil.getFieldValue(sut, "active"), false); + + Set threadNames = Thread.getAllStackTraces().keySet() + .stream() + .map(Thread::getName) + .collect(Collectors.toSet()); + Asserts.assertFalse(threadNames.contains(roomGroupThreadName.getValue())); + } + + @Test + public void roomExceptionTest() throws InterruptedException { + // given + MMORoomGroup sut = MMORoomGroup.builder().timeTickMillis(100).build(); + MMORoom room = mock(MMORoom.class); + doThrow(InterruptedException.class).when(room).update(); + + // when + sut.addRoom(room); + Thread.sleep(300); + + // then + verify(room, atLeastOnce()).update(); + } + + @Test public void overTimeTickTest() throws InterruptedException { // given MMORoomGroup sut = MMORoomGroup.builder().timeTickMillis(100).build(); @@ -138,16 +138,16 @@ public void overTimeTickTest() throws InterruptedException { Thread.sleep(300); return null; }).when(room).update(); - + // when sut.addRoom(room); Thread.sleep(350); - + // then verify(room, atLeastOnce()).update(); } - - @Test + + @Test public void loopException() throws InterruptedException { // given MMORoomGroup sut = MMORoomGroup.builder().timeTickMillis(100).build(); @@ -156,11 +156,11 @@ public void loopException() throws InterruptedException { Thread.currentThread().interrupt(); return null; }).when(room).update(); - + // when sut.addRoom(room); Thread.sleep(110); - + // then sut.destroy(); } diff --git a/src/test/java/com/tvd12/gamebox/entity/MMORoomTest.java b/src/test/java/com/tvd12/gamebox/entity/MMORoomTest.java index 27dc2c1..2513c9f 100644 --- a/src/test/java/com/tvd12/gamebox/entity/MMORoomTest.java +++ b/src/test/java/com/tvd12/gamebox/entity/MMORoomTest.java @@ -1,13 +1,12 @@ package com.tvd12.gamebox.entity; -import java.util.Arrays; - -import org.testng.annotations.Test; - import com.tvd12.gamebox.manager.DefaultPlayerManager; import com.tvd12.gamebox.manager.SynchronizedPlayerManager; import com.tvd12.gamebox.math.Vec3; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; + +import java.util.Arrays; public class MMORoomTest { @@ -18,38 +17,38 @@ public void test() { .defaultPlayerManager(2) .distanceOfInterest(100) .build(); - + MMOPlayer player1 = MMOPlayer.builder() .name("player1") .build(); - + MMOPlayer player2 = MMOPlayer.builder() .name("player2") .build(); - + sut.addPlayer(player1); sut.addPlayer(player2); - + // when Asserts.assertEquals(sut.getMaxPlayer(), 2); Asserts.assertEquals(sut.getDistanceOfInterest(), 100D); - + sut.setMaster(player1); Asserts.assertEquals(sut.getMaster(), player1); - + sut.removePlayer(player1); Asserts.assertEquals(sut.getMaster(), player2); sut.removePlayer(player2); Asserts.assertNull(sut.getMaster()); Asserts.assertTrue(sut.isEmpty()); - + sut.addPlayer(player1); sut.addPlayer(player1); sut.addPlayer(player2); sut.removePlayer(player2); Asserts.assertFalse(sut.isEmpty()); sut.addPlayer(player2); - + player1.setPosition(Vec3.ZERO); player2.setPosition(new Vec3(1000, 1000, 1000)); Asserts.assertEmpty(player1.getNearbyPlayerNames()); @@ -57,40 +56,40 @@ public void test() { sut.update(); Asserts.assertEquals(player1.getNearbyPlayerNames(), Arrays.asList(player1.getName()), false); Asserts.assertEquals(player2.getNearbyPlayerNames(), Arrays.asList(player2.getName()), false); - + player2.setPosition(new Vec3(1, 1, 1)); sut.update(); Asserts.assertEquals(player1.getNearbyPlayerNames(), Arrays.asList(player1.getName(), player2.getName()), false); Asserts.assertEquals(player2.getNearbyPlayerNames(), Arrays.asList(player1.getName(), player2.getName()), false); } - + @Test public void buildFailedDueToDistanceOfInterest() { // given MMORoom.Builder builder = MMORoom.builder() .playerManager(new SynchronizedPlayerManager<>()); - + // when Throwable e = Asserts.assertThrows(() -> builder.build()); - + // then Asserts.assertEqualsType(e, IllegalArgumentException.class); } - + @Test public void buildSetPlayerManagerFailed() { // given MMORoom.Builder builder = MMORoom.builder(); - + // when - Throwable e = Asserts.assertThrows(() -> + Throwable e = Asserts.assertThrows(() -> builder.playerManager(new DefaultPlayerManager<>()) ); - + // then Asserts.assertEqualsType(e, IllegalArgumentException.class); } - + @Test public void addPlayerFailed() { // given @@ -98,20 +97,20 @@ public void addPlayerFailed() { .defaultPlayerManager(2) .distanceOfInterest(100) .build(); - + Player player1 = Player.builder() .name("player1") .build(); - + // when - Throwable e = Asserts.assertThrows(() -> + Throwable e = Asserts.assertThrows(() -> sut.addPlayer(player1) ); - + // then Asserts.assertEqualsType(e, IllegalArgumentException.class); } - + @Test public void removePlayerFailed() { // given @@ -119,16 +118,16 @@ public void removePlayerFailed() { .defaultPlayerManager(2) .distanceOfInterest(100) .build(); - + Player player1 = Player.builder() .name("player1") .build(); - + // when - Throwable e = Asserts.assertThrows(() -> + Throwable e = Asserts.assertThrows(() -> sut.removePlayer(player1) ); - + // then Asserts.assertEqualsType(e, IllegalArgumentException.class); } diff --git a/src/test/java/com/tvd12/gamebox/entity/NormalRoomTest.java b/src/test/java/com/tvd12/gamebox/entity/NormalRoomTest.java index 7ceb372..1c6267d 100644 --- a/src/test/java/com/tvd12/gamebox/entity/NormalRoomTest.java +++ b/src/test/java/com/tvd12/gamebox/entity/NormalRoomTest.java @@ -1,8 +1,7 @@ package com.tvd12.gamebox.entity; -import org.testng.annotations.Test; - import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; public class NormalRoomTest { @@ -12,7 +11,7 @@ public void test() { NormalRoom sut = NormalRoom.builder() .defaultPlayerManager(100) .build(); - + // when // then Asserts.assertEquals(sut.getPlayerManager().getMaxPlayer(), 100); diff --git a/src/test/java/com/tvd12/gamebox/entity/PlayerTest.java b/src/test/java/com/tvd12/gamebox/entity/PlayerTest.java index 087ba5e..e2a1189 100644 --- a/src/test/java/com/tvd12/gamebox/entity/PlayerTest.java +++ b/src/test/java/com/tvd12/gamebox/entity/PlayerTest.java @@ -1,11 +1,10 @@ package com.tvd12.gamebox.entity; -import org.testng.Assert; -import org.testng.annotations.Test; - import com.tvd12.gamebox.constant.PlayerRole; import com.tvd12.gamebox.constant.PlayerStatus; import com.tvd12.test.assertion.Asserts; +import org.testng.Assert; +import org.testng.annotations.Test; public class PlayerTest { @@ -15,19 +14,19 @@ public void test() { Player sut = Player.builder() .name("test") .build(); - + // when sut.setRole(PlayerRole.MASTER); sut.setStatus(PlayerStatus.PLAYING); sut.setCurrentRoomId(1L); - + // then Asserts.assertEquals(sut.getRole(), PlayerRole.MASTER); Asserts.assertEquals(sut.getStatus(), PlayerStatus.PLAYING); Asserts.assertEquals(sut.getCurrentRoomId(), 1L); Asserts.assertTrue(sut.equals(sut)); Asserts.assertFalse(sut.equals(null)); - + Player me = Player.builder() .name("test") .build(); diff --git a/src/test/java/com/tvd12/gamebox/entity/RoomTest.java b/src/test/java/com/tvd12/gamebox/entity/RoomTest.java index 6bac193..0e269a8 100644 --- a/src/test/java/com/tvd12/gamebox/entity/RoomTest.java +++ b/src/test/java/com/tvd12/gamebox/entity/RoomTest.java @@ -1,10 +1,9 @@ package com.tvd12.gamebox.entity; -import org.testng.Assert; -import org.testng.annotations.Test; - import com.tvd12.gamebox.constant.RoomStatus; import com.tvd12.test.assertion.Asserts; +import org.testng.Assert; +import org.testng.annotations.Test; public class RoomTest { @@ -14,17 +13,17 @@ public void test() { Room sut = Room.builder() .name("test") .build(); - + // when sut.setPassword("123456"); sut.setStatus(RoomStatus.FINISHED); - + // then Asserts.assertEquals(sut.getPassword(), "123456"); Asserts.assertEquals(sut.getStatus(), RoomStatus.FINISHED); Asserts.assertTrue(sut.equals(sut)); Asserts.assertFalse(sut.equals(null)); - + Room me = Room.builder() .id(1) .name("test") diff --git a/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager1Test.java b/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager1Test.java index 714a721..6e061f1 100644 --- a/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager1Test.java +++ b/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager1Test.java @@ -1,47 +1,46 @@ package com.tvd12.gamebox.testing; -import org.testng.annotations.Test; - import com.tvd12.gamebox.entity.LocatedPlayer; import com.tvd12.gamebox.manager.DefaultLocatedPlayerManager; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; public class DefaultLocatedPlayerManager1Test { - @Test - public void test() { - DefaultLocatedPlayerManager manager = new DefaultLocatedPlayerManager(); - LocatedPlayer a = new LocatedPlayer("a"); - LocatedPlayer b = new LocatedPlayer("b"); - LocatedPlayer c = new LocatedPlayer("c"); - manager.setMaster(a); - manager.addPlayer(a, 1); - manager.addPlayer(b, 0); - manager.addPlayer(c, 2); - - a.setLocation(1); - b.setLocation(0); - c.setLocation(2); - - System.out.println(manager); - - System.out.println(manager.nextOf(c, p -> p != b)); - - } - - @Test - public void justOne() { - DefaultLocatedPlayerManager manager = new DefaultLocatedPlayerManager(); - LocatedPlayer a = new LocatedPlayer("a"); - manager.setMaster(a); - manager.addPlayer(a, 1); - - a.setLocation(1); - - System.out.println(manager); - - Asserts.assertEquals(manager.nextOf(a), null); - - } - + @Test + public void test() { + DefaultLocatedPlayerManager manager = new DefaultLocatedPlayerManager(); + LocatedPlayer a = new LocatedPlayer("a"); + LocatedPlayer b = new LocatedPlayer("b"); + LocatedPlayer c = new LocatedPlayer("c"); + manager.setMaster(a); + manager.addPlayer(a, 1); + manager.addPlayer(b, 0); + manager.addPlayer(c, 2); + + a.setLocation(1); + b.setLocation(0); + c.setLocation(2); + + System.out.println(manager); + + System.out.println(manager.nextOf(c, p -> p != b)); + + } + + @Test + public void justOne() { + DefaultLocatedPlayerManager manager = new DefaultLocatedPlayerManager(); + LocatedPlayer a = new LocatedPlayer("a"); + manager.setMaster(a); + manager.addPlayer(a, 1); + + a.setLocation(1); + + System.out.println(manager); + + Asserts.assertEquals(manager.nextOf(a), null); + + } + } diff --git a/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager2Test.java b/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager2Test.java index 49f6163..1d5f5e7 100644 --- a/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager2Test.java +++ b/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager2Test.java @@ -1,26 +1,25 @@ package com.tvd12.gamebox.testing; -import org.testng.annotations.Test; - import com.tvd12.gamebox.entity.LocatedPlayer; import com.tvd12.gamebox.manager.DefaultLocatedPlayerManager; +import org.testng.annotations.Test; public class DefaultLocatedPlayerManager2Test { - @Test - public void test() { - DefaultLocatedPlayerManager manager = new DefaultLocatedPlayerManager(); - LocatedPlayer a = new LocatedPlayer("a"); - LocatedPlayer b = new LocatedPlayer("b"); - manager.setMaster(a); - manager.addPlayer(a, 1); - manager.addPlayer(b, 2); - - manager.removePlayer(1); - manager.setNewMaster(); - - System.out.println(manager); - - } - + @Test + public void test() { + DefaultLocatedPlayerManager manager = new DefaultLocatedPlayerManager(); + LocatedPlayer a = new LocatedPlayer("a"); + LocatedPlayer b = new LocatedPlayer("b"); + manager.setMaster(a); + manager.addPlayer(a, 1); + manager.addPlayer(b, 2); + + manager.removePlayer(1); + manager.setNewMaster(); + + System.out.println(manager); + + } + } diff --git a/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager3Test.java b/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager3Test.java index 58e7744..85a68c9 100644 --- a/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager3Test.java +++ b/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager3Test.java @@ -1,40 +1,39 @@ package com.tvd12.gamebox.testing; -import org.testng.annotations.Test; - import com.tvd12.gamebox.entity.LocatedPlayer; import com.tvd12.gamebox.manager.DefaultLocatedPlayerManager; +import org.testng.annotations.Test; public class DefaultLocatedPlayerManager3Test { - @Test - public void test() { - DefaultLocatedPlayerManager manager = new DefaultLocatedPlayerManager(); - LocatedPlayer binh5 = new LocatedPlayer("binh5"); // CHECK 5 - LocatedPlayer havm = new LocatedPlayer("havm"); // ALL_IN 1 - LocatedPlayer binh4 = new LocatedPlayer("binh4"); //CALL 4 - LocatedPlayer huongntm2 = new LocatedPlayer("huongntm2"); // ALL_IN 3 - LocatedPlayer huongntm3 = new LocatedPlayer("huongntm3"); // CALL 2 - - manager.addPlayer(binh5, 0); - manager.addPlayer(havm, 1); - manager.addPlayer(huongntm3, 2); - manager.addPlayer(huongntm2, 3); - manager.addPlayer(binh4, 4); - - binh5.setLocation(0); - havm.setLocation(1); - huongntm3.setLocation(2); - huongntm2.setLocation(3); - binh4.setLocation(4); - - System.out.println(manager.nextOf(huongntm2)); - System.out.println(manager.nextOf(binh5, p -> p != huongntm2 && p != havm)); - System.out.println(manager.nextOf(huongntm3, p -> p != huongntm2 && p != havm)); - System.out.println(manager.nextOf(binh4, p -> p != huongntm2 && p != havm)); - System.out.println(manager.nextOf(binh5, p -> p != huongntm2 && p != havm)); - System.out.println(manager.nextOf(huongntm3, p -> p != huongntm2 && p != havm)); - - } - + @Test + public void test() { + DefaultLocatedPlayerManager manager = new DefaultLocatedPlayerManager(); + LocatedPlayer binh5 = new LocatedPlayer("binh5"); // CHECK 5 + LocatedPlayer havm = new LocatedPlayer("havm"); // ALL_IN 1 + LocatedPlayer binh4 = new LocatedPlayer("binh4"); //CALL 4 + LocatedPlayer huongntm2 = new LocatedPlayer("huongntm2"); // ALL_IN 3 + LocatedPlayer huongntm3 = new LocatedPlayer("huongntm3"); // CALL 2 + + manager.addPlayer(binh5, 0); + manager.addPlayer(havm, 1); + manager.addPlayer(huongntm3, 2); + manager.addPlayer(huongntm2, 3); + manager.addPlayer(binh4, 4); + + binh5.setLocation(0); + havm.setLocation(1); + huongntm3.setLocation(2); + huongntm2.setLocation(3); + binh4.setLocation(4); + + System.out.println(manager.nextOf(huongntm2)); + System.out.println(manager.nextOf(binh5, p -> p != huongntm2 && p != havm)); + System.out.println(manager.nextOf(huongntm3, p -> p != huongntm2 && p != havm)); + System.out.println(manager.nextOf(binh4, p -> p != huongntm2 && p != havm)); + System.out.println(manager.nextOf(binh5, p -> p != huongntm2 && p != havm)); + System.out.println(manager.nextOf(huongntm3, p -> p != huongntm2 && p != havm)); + + } + } diff --git a/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager4Test.java b/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager4Test.java index a1acce9..430b406 100644 --- a/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager4Test.java +++ b/src/test/java/com/tvd12/gamebox/testing/DefaultLocatedPlayerManager4Test.java @@ -6,40 +6,40 @@ import org.testng.annotations.Test; public class DefaultLocatedPlayerManager4Test { - - @Test - public void test() { - // given - DefaultLocatedPlayerManager manager = new DefaultLocatedPlayerManager(); - LocatedPlayer binh5 = new LocatedPlayer("binh5"); // CHECK 5 - LocatedPlayer havm = new LocatedPlayer("havm"); // ALL_IN 1 - LocatedPlayer binh4 = new LocatedPlayer("binh4"); //CALL 4 - LocatedPlayer huongntm2 = new LocatedPlayer("huongntm2"); // ALL_IN 3 - LocatedPlayer huongntm3 = new LocatedPlayer("huongntm3"); // CALL 2 - - manager.addPlayer(binh5, 0); - manager.addPlayer(havm, 1); - manager.addPlayer(huongntm3, 2); - manager.addPlayer(huongntm2, 3); - manager.addPlayer(binh4, 4); - - // when - binh5.setLocation(0); - havm.setLocation(1); - huongntm3.setLocation(2); - huongntm2.setLocation(3); - binh4.setLocation(4); - - // then - Asserts.assertEquals(manager.leftOf(huongntm2), huongntm3); - Asserts.assertEquals(manager.leftOf(binh5, p -> p != huongntm2 && p != havm), binh4); - Asserts.assertEquals(manager.leftOf(huongntm3, p -> p != huongntm2 && p != havm), binh5); - Asserts.assertEquals(manager.leftOf(binh4, p -> p != huongntm2 && p != havm), huongntm3); - - Asserts.assertEquals(manager.rightOf(huongntm2), binh4); - Asserts.assertEquals(manager.rightOf(binh5, p -> p != huongntm2 && p != havm), huongntm3); - Asserts.assertEquals(manager.rightOf(huongntm3, p -> p != huongntm2 && p != havm), binh4); - Asserts.assertEquals(manager.rightOf(binh4, p -> p != binh5 && p != havm), huongntm3); - } - + + @Test + public void test() { + // given + DefaultLocatedPlayerManager manager = new DefaultLocatedPlayerManager(); + LocatedPlayer binh5 = new LocatedPlayer("binh5"); // CHECK 5 + LocatedPlayer havm = new LocatedPlayer("havm"); // ALL_IN 1 + LocatedPlayer binh4 = new LocatedPlayer("binh4"); //CALL 4 + LocatedPlayer huongntm2 = new LocatedPlayer("huongntm2"); // ALL_IN 3 + LocatedPlayer huongntm3 = new LocatedPlayer("huongntm3"); // CALL 2 + + manager.addPlayer(binh5, 0); + manager.addPlayer(havm, 1); + manager.addPlayer(huongntm3, 2); + manager.addPlayer(huongntm2, 3); + manager.addPlayer(binh4, 4); + + // when + binh5.setLocation(0); + havm.setLocation(1); + huongntm3.setLocation(2); + huongntm2.setLocation(3); + binh4.setLocation(4); + + // then + Asserts.assertEquals(manager.leftOf(huongntm2), huongntm3); + Asserts.assertEquals(manager.leftOf(binh5, p -> p != huongntm2 && p != havm), binh4); + Asserts.assertEquals(manager.leftOf(huongntm3, p -> p != huongntm2 && p != havm), binh5); + Asserts.assertEquals(manager.leftOf(binh4, p -> p != huongntm2 && p != havm), huongntm3); + + Asserts.assertEquals(manager.rightOf(huongntm2), binh4); + Asserts.assertEquals(manager.rightOf(binh5, p -> p != huongntm2 && p != havm), huongntm3); + Asserts.assertEquals(manager.rightOf(huongntm3, p -> p != huongntm2 && p != havm), binh4); + Asserts.assertEquals(manager.rightOf(binh4, p -> p != binh5 && p != havm), huongntm3); + } + } diff --git a/src/test/java/com/tvd12/gamebox/testing/IteratorTest.java b/src/test/java/com/tvd12/gamebox/testing/IteratorTest.java index 6bfcfee..1efee15 100644 --- a/src/test/java/com/tvd12/gamebox/testing/IteratorTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/IteratorTest.java @@ -4,8 +4,8 @@ public class IteratorTest { - public static void main(String[] args) { - System.out.println(Lists.newArrayList(1, 2, 3).iterator()); - } - + public static void main(String[] args) { + System.out.println(Lists.newArrayList(1, 2, 3).iterator()); + } + } diff --git a/src/test/java/com/tvd12/gamebox/testing/LocatedRoomTest.java b/src/test/java/com/tvd12/gamebox/testing/LocatedRoomTest.java index c56b659..cc5a08c 100644 --- a/src/test/java/com/tvd12/gamebox/testing/LocatedRoomTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/LocatedRoomTest.java @@ -5,25 +5,25 @@ import org.testng.annotations.Test; public class LocatedRoomTest { - - @Test - public void masterTest() { - LocatedRoom room = LocatedRoom.builder() - .name("room") - .build(); - - LocatedPlayer player1 = new LocatedPlayer("player1"); - room.addPlayer(player1); - - LocatedPlayer player2 = new LocatedPlayer("player2"); - room.addPlayer(player2); - - LocatedPlayer player3 = new LocatedPlayer("player3"); - room.addPlayer(player3); - - room.getPlayerManager().setMaster(player2); - - System.out.println("\n\nnext master is: " + room.getPlayerManager().setNewMaster() + "\n\n"); - } - + + @Test + public void masterTest() { + LocatedRoom room = LocatedRoom.builder() + .name("room") + .build(); + + LocatedPlayer player1 = new LocatedPlayer("player1"); + room.addPlayer(player1); + + LocatedPlayer player2 = new LocatedPlayer("player2"); + room.addPlayer(player2); + + LocatedPlayer player3 = new LocatedPlayer("player3"); + room.addPlayer(player3); + + room.getPlayerManager().setMaster(player2); + + System.out.println("\n\nnext master is: " + room.getPlayerManager().setNewMaster() + "\n\n"); + } + } diff --git a/src/test/java/com/tvd12/gamebox/testing/MMOPlayerTest.java b/src/test/java/com/tvd12/gamebox/testing/MMOPlayerTest.java index 47e43c1..b25c023 100644 --- a/src/test/java/com/tvd12/gamebox/testing/MMOPlayerTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/MMOPlayerTest.java @@ -12,55 +12,55 @@ import java.util.stream.Collectors; public class MMOPlayerTest { - - @Test - public void setPositionTest() { - // given - Vec3 position = TestHelper.randomVec3(); - MMOPlayer sut = new MMOPlayer("a"); - - // when - sut.setPosition(position); - - // then - Asserts.assertEquals(position, sut.getPosition()); - } - - @Test - public void setRotationTest() { - // given - Vec3 rotation = TestHelper.randomVec3(); - MMOPlayer sut = new MMOPlayer("a"); - - // when - sut.setRotation(rotation); - - // then - Asserts.assertEquals(rotation, sut.getRotation()); - } - - @Test - public void addNearbyPlayersTest() { - // given - int nearbyPlayerCount = RandomUtil.randomSmallInt(); - MMOPlayer sut = new MMOPlayer("a"); - List nearbyPlayers = new ArrayList<>(); - for (int i = 0; i < nearbyPlayerCount; i++) { - nearbyPlayers.add(new MMOPlayer("player#" + i)); - } - - // when - nearbyPlayers.forEach((nearbyPlayer) -> { - ReflectMethodUtil.invokeMethod("addNearbyPlayer", sut, nearbyPlayer); - }); - - // then - List buffer = new ArrayList<>(); - sut.getNearbyPlayerNames(buffer); - buffer.sort(String::compareTo); - Asserts.assertEquals( - nearbyPlayers.stream().map(MMOPlayer::getName).collect(Collectors.toList()), - buffer - ); - } + + @Test + public void setPositionTest() { + // given + Vec3 position = TestHelper.randomVec3(); + MMOPlayer sut = new MMOPlayer("a"); + + // when + sut.setPosition(position); + + // then + Asserts.assertEquals(position, sut.getPosition()); + } + + @Test + public void setRotationTest() { + // given + Vec3 rotation = TestHelper.randomVec3(); + MMOPlayer sut = new MMOPlayer("a"); + + // when + sut.setRotation(rotation); + + // then + Asserts.assertEquals(rotation, sut.getRotation()); + } + + @Test + public void addNearbyPlayersTest() { + // given + int nearbyPlayerCount = RandomUtil.randomSmallInt(); + MMOPlayer sut = new MMOPlayer("a"); + List nearbyPlayers = new ArrayList<>(); + for (int i = 0; i < nearbyPlayerCount; i++) { + nearbyPlayers.add(new MMOPlayer("player#" + i)); + } + + // when + nearbyPlayers.forEach((nearbyPlayer) -> { + ReflectMethodUtil.invokeMethod("addNearbyPlayer", sut, nearbyPlayer); + }); + + // then + List buffer = new ArrayList<>(); + sut.getNearbyPlayerNames(buffer); + buffer.sort(String::compareTo); + Asserts.assertEquals( + nearbyPlayers.stream().map(MMOPlayer::getName).collect(Collectors.toList()), + buffer + ); + } } diff --git a/src/test/java/com/tvd12/gamebox/testing/MMORoomTest.java b/src/test/java/com/tvd12/gamebox/testing/MMORoomTest.java index c9120de..41810ef 100644 --- a/src/test/java/com/tvd12/gamebox/testing/MMORoomTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/MMORoomTest.java @@ -17,112 +17,112 @@ import static org.mockito.Mockito.*; public class MMORoomTest { - - @SuppressWarnings("unchecked") - @Test - public void updateMMORoomTest() { - // given - MMORoom room = MMORoom.builder() - .distanceOfInterest(RandomUtil.randomSmallDouble()) - .name("room") - .build(); - - MMOPlayer player1 = new MMOPlayer("player1"); - player1.setPosition(new Vec3(0, 0, 0)); - room.addPlayer(player1); - - MMOPlayer player2 = new MMOPlayer("player2"); - player2.setPosition(new Vec3(1, 1, 1)); - room.addPlayer(player2); - - MMOPlayer player3 = new MMOPlayer("player3"); - player3.setPosition(new Vec3(2, 2, 2)); - room.addPlayer(player3); - - // when - room.update(); - - // then - List buffer1 = new ArrayList<>(); - List buffer2 = new ArrayList<>(); - List buffer3 = new ArrayList<>(); - - player1.getNearbyPlayerNames(buffer1); - player2.getNearbyPlayerNames(buffer2); - player3.getNearbyPlayerNames(buffer3); - - List expectedNearbyPlayerNames1 = - new ArrayList<>(((Map) FieldUtil.getFieldValue(player1, "nearbyPlayers")) - .keySet()); - List expectedNearbyPlayerNames2 = - new ArrayList<>(((Map) FieldUtil.getFieldValue(player2, "nearbyPlayers")) - .keySet()); - List expectedNearbyPlayerNames3 = - new ArrayList<>(((Map) FieldUtil.getFieldValue(player3, "nearbyPlayers")) - .keySet()); - - Asserts.assertEquals(buffer1, expectedNearbyPlayerNames1); - Asserts.assertEquals(buffer2, expectedNearbyPlayerNames2); - Asserts.assertEquals(buffer3, expectedNearbyPlayerNames3); - } - - @Test - public void addRoomUpdatedHandlerTest() { - // given - A aInstance1 = mock(A.class); - A aInstance2 = mock(A.class); - - MMORoom room = MMORoom.builder() - .name("room") - .distanceOfInterest(RandomUtil.randomSmallDouble()) - .addRoomUpdatedHandler(aInstance1) - .addRoomUpdatedHandler(aInstance2) - .build(); - - List players = FieldUtil.getFieldValue(room, "playerBuffer"); - - // when - room.update(); - - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - room.update(); - - // then - verify(aInstance1, times(2)).onRoomUpdated(room, players); - verify(aInstance2, times(2)).onRoomUpdated(room, players); - } - - @Test - public void maxPlayerTest() { - // given - MMORoom room = MMORoom.builder() - .distanceOfInterest(RandomUtil.randomSmallDouble()) - .maxPlayer(2) - .name("room") - .build(); - - // when - MMOPlayer player1 = new MMOPlayer("player1"); - room.addPlayer(player1); - - MMOPlayer player2 = new MMOPlayer("player2"); - room.addPlayer(player2); - - MMOPlayer player3 = new MMOPlayer("player3"); - Throwable e = Asserts.assertThrows(() -> room.addPlayer(player3)); - - // then - Asserts.assertEquals(MaxPlayerException.class.toString(), e.getClass().toString()); - } - - public class A implements MMORoomUpdatedHandler { - @Override - public void onRoomUpdated(MMORoom room, List players) { - } - } + + @SuppressWarnings("unchecked") + @Test + public void updateMMORoomTest() { + // given + MMORoom room = MMORoom.builder() + .distanceOfInterest(RandomUtil.randomSmallDouble()) + .name("room") + .build(); + + MMOPlayer player1 = new MMOPlayer("player1"); + player1.setPosition(new Vec3(0, 0, 0)); + room.addPlayer(player1); + + MMOPlayer player2 = new MMOPlayer("player2"); + player2.setPosition(new Vec3(1, 1, 1)); + room.addPlayer(player2); + + MMOPlayer player3 = new MMOPlayer("player3"); + player3.setPosition(new Vec3(2, 2, 2)); + room.addPlayer(player3); + + // when + room.update(); + + // then + List buffer1 = new ArrayList<>(); + List buffer2 = new ArrayList<>(); + List buffer3 = new ArrayList<>(); + + player1.getNearbyPlayerNames(buffer1); + player2.getNearbyPlayerNames(buffer2); + player3.getNearbyPlayerNames(buffer3); + + List expectedNearbyPlayerNames1 = + new ArrayList<>(((Map) FieldUtil.getFieldValue(player1, "nearbyPlayers")) + .keySet()); + List expectedNearbyPlayerNames2 = + new ArrayList<>(((Map) FieldUtil.getFieldValue(player2, "nearbyPlayers")) + .keySet()); + List expectedNearbyPlayerNames3 = + new ArrayList<>(((Map) FieldUtil.getFieldValue(player3, "nearbyPlayers")) + .keySet()); + + Asserts.assertEquals(buffer1, expectedNearbyPlayerNames1); + Asserts.assertEquals(buffer2, expectedNearbyPlayerNames2); + Asserts.assertEquals(buffer3, expectedNearbyPlayerNames3); + } + + @Test + public void addRoomUpdatedHandlerTest() { + // given + A aInstance1 = mock(A.class); + A aInstance2 = mock(A.class); + + MMORoom room = MMORoom.builder() + .name("room") + .distanceOfInterest(RandomUtil.randomSmallDouble()) + .addRoomUpdatedHandler(aInstance1) + .addRoomUpdatedHandler(aInstance2) + .build(); + + List players = FieldUtil.getFieldValue(room, "playerBuffer"); + + // when + room.update(); + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + room.update(); + + // then + verify(aInstance1, times(2)).onRoomUpdated(room, players); + verify(aInstance2, times(2)).onRoomUpdated(room, players); + } + + @Test + public void maxPlayerTest() { + // given + MMORoom room = MMORoom.builder() + .distanceOfInterest(RandomUtil.randomSmallDouble()) + .maxPlayer(2) + .name("room") + .build(); + + // when + MMOPlayer player1 = new MMOPlayer("player1"); + room.addPlayer(player1); + + MMOPlayer player2 = new MMOPlayer("player2"); + room.addPlayer(player2); + + MMOPlayer player3 = new MMOPlayer("player3"); + Throwable e = Asserts.assertThrows(() -> room.addPlayer(player3)); + + // then + Asserts.assertEquals(MaxPlayerException.class.toString(), e.getClass().toString()); + } + + public class A implements MMORoomUpdatedHandler { + @Override + public void onRoomUpdated(MMORoom room, List players) { + } + } } diff --git a/src/test/java/com/tvd12/gamebox/testing/MMOVirtualWorldTest.java b/src/test/java/com/tvd12/gamebox/testing/MMOVirtualWorldTest.java index a943624..cfdac50 100644 --- a/src/test/java/com/tvd12/gamebox/testing/MMOVirtualWorldTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/MMOVirtualWorldTest.java @@ -11,89 +11,89 @@ import static org.mockito.Mockito.when; public class MMOVirtualWorldTest { - - @Test - public void createMMOVirtualWorldTest() { - // given - int expectedMMORoomGroupCount = 10; - int expectedTimeTickMillis = 100; - int expectedMaxRoomCount = 1000; - - // when - MMOVirtualWorld world = MMOVirtualWorld.builder() - .roomGroupCount(expectedMMORoomGroupCount) - .timeTickMillis(expectedTimeTickMillis) - .maxRoomCount(expectedMaxRoomCount) - .build(); - - // then - int timeTickMillis = FieldUtil.getFieldValue(world, "timeTickMillis"); - int mmoRoomGroupCount = FieldUtil.getFieldValue(world, "roomGroupCount"); - int maxRoomCount = FieldUtil.getFieldValue(world, "maxRoomCount"); - - Asserts.assertEquals(expectedTimeTickMillis, timeTickMillis); - Asserts.assertEquals(expectedMMORoomGroupCount, mmoRoomGroupCount); - Asserts.assertEquals(expectedMaxRoomCount, maxRoomCount); - Asserts.assertNotNull(FieldUtil.getFieldValue(world, "roomGroups")); - } - - @Test - public void addAndGetRoomTest() { - // given - MMOVirtualWorld world = MMOVirtualWorld.builder().build(); - MMORoom expectedRoom = mock(MMORoom.class); - long expectedRoomId = 1; - when(expectedRoom.getId()).thenReturn(expectedRoomId); - - // when - world.addRoom(expectedRoom); - - // then - MMORoom room = world.getRoom(expectedRoomId); - Asserts.assertEquals(expectedRoom, room); - } - - @Test - public void removeRoomTest() { - // given - MMOVirtualWorld world = MMOVirtualWorld.builder().build(); - MMORoom expectedRoom = mock(MMORoom.class); - long expectedRoomId = 1; - when(expectedRoom.getId()).thenReturn(expectedRoomId); - world.addRoom(expectedRoom); - - // when - world.removeRoom(expectedRoom); - - // then - MMORoom room = world.getRoom(expectedRoomId); - Asserts.assertNull(room); - } - - - @Test(expectedExceptions = MaxRoomException.class) - public void maxRoomCountTest() { - // given - int expectedMaxRoomCount = 2; - MMOVirtualWorld world = MMOVirtualWorld.builder() - .maxRoomCount(expectedMaxRoomCount).build(); - MMORoom room1 = mock(MMORoom.class); - MMORoom room2 = mock(MMORoom.class); - MMORoom room3 = mock(MMORoom.class); - long roomId1 = 1; - long roomId2 = 2; - long roomId3 = 3; - when(room1.getId()).thenReturn(roomId1); - when(room2.getId()).thenReturn(roomId2); - when(room3.getId()).thenReturn(roomId3); - - world.addRoom(room1); - world.addRoom(room2); - - // when - world.addRoom(room3); - - // then - Asserts.assertTrue(world.getRoomCount() == 1); - } + + @Test + public void createMMOVirtualWorldTest() { + // given + int expectedMMORoomGroupCount = 10; + int expectedTimeTickMillis = 100; + int expectedMaxRoomCount = 1000; + + // when + MMOVirtualWorld world = MMOVirtualWorld.builder() + .roomGroupCount(expectedMMORoomGroupCount) + .timeTickMillis(expectedTimeTickMillis) + .maxRoomCount(expectedMaxRoomCount) + .build(); + + // then + int timeTickMillis = FieldUtil.getFieldValue(world, "timeTickMillis"); + int mmoRoomGroupCount = FieldUtil.getFieldValue(world, "roomGroupCount"); + int maxRoomCount = FieldUtil.getFieldValue(world, "maxRoomCount"); + + Asserts.assertEquals(expectedTimeTickMillis, timeTickMillis); + Asserts.assertEquals(expectedMMORoomGroupCount, mmoRoomGroupCount); + Asserts.assertEquals(expectedMaxRoomCount, maxRoomCount); + Asserts.assertNotNull(FieldUtil.getFieldValue(world, "roomGroups")); + } + + @Test + public void addAndGetRoomTest() { + // given + MMOVirtualWorld world = MMOVirtualWorld.builder().build(); + MMORoom expectedRoom = mock(MMORoom.class); + long expectedRoomId = 1; + when(expectedRoom.getId()).thenReturn(expectedRoomId); + + // when + world.addRoom(expectedRoom); + + // then + MMORoom room = world.getRoom(expectedRoomId); + Asserts.assertEquals(expectedRoom, room); + } + + @Test + public void removeRoomTest() { + // given + MMOVirtualWorld world = MMOVirtualWorld.builder().build(); + MMORoom expectedRoom = mock(MMORoom.class); + long expectedRoomId = 1; + when(expectedRoom.getId()).thenReturn(expectedRoomId); + world.addRoom(expectedRoom); + + // when + world.removeRoom(expectedRoom); + + // then + MMORoom room = world.getRoom(expectedRoomId); + Asserts.assertNull(room); + } + + + @Test(expectedExceptions = MaxRoomException.class) + public void maxRoomCountTest() { + // given + int expectedMaxRoomCount = 2; + MMOVirtualWorld world = MMOVirtualWorld.builder() + .maxRoomCount(expectedMaxRoomCount).build(); + MMORoom room1 = mock(MMORoom.class); + MMORoom room2 = mock(MMORoom.class); + MMORoom room3 = mock(MMORoom.class); + long roomId1 = 1; + long roomId2 = 2; + long roomId3 = 3; + when(room1.getId()).thenReturn(roomId1); + when(room2.getId()).thenReturn(roomId2); + when(room3.getId()).thenReturn(roomId3); + + world.addRoom(room1); + world.addRoom(room2); + + // when + world.addRoom(room3); + + // then + Asserts.assertTrue(world.getRoomCount() == 1); + } } diff --git a/src/test/java/com/tvd12/gamebox/testing/SyncPositionRoomUpdatedHandlerTest.java b/src/test/java/com/tvd12/gamebox/testing/SyncPositionRoomUpdatedHandlerTest.java index f7a761a..cb6d8cc 100644 --- a/src/test/java/com/tvd12/gamebox/testing/SyncPositionRoomUpdatedHandlerTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/SyncPositionRoomUpdatedHandlerTest.java @@ -19,71 +19,71 @@ import static org.mockito.Mockito.*; public class SyncPositionRoomUpdatedHandlerTest { - - @SuppressWarnings("unchecked") - @Test - public void casePlayerChangeStateTest() { - // given - String playerName = RandomUtil.randomShortAlphabetString(); - - int nearbyPlayerCount = RandomUtil.randomSmallInt(); - Set nearbyPlayerNames = RandomUtil.randomSet(nearbyPlayerCount, String.class); - List nearbyPlayerNameList = new ArrayList<>(nearbyPlayerNames); - - Vec3 position = TestHelper.randomVec3(); - Vec3 rotation = TestHelper.randomVec3(); - int clientTimeTick = RandomUtil.randomInt(); - - EzyArrayResponse arrayResponse = mock(EzyArrayResponse.class); - when(arrayResponse.udpTransport()).thenReturn(arrayResponse); - when(arrayResponse.command(Commands.SYNC_POSITION)).thenReturn(arrayResponse); - when(arrayResponse.param(playerName)).thenReturn(arrayResponse); - when(arrayResponse.param(position.toArray())).thenReturn(arrayResponse); - when(arrayResponse.param(rotation.toArray())).thenReturn(arrayResponse); - when(arrayResponse.param(clientTimeTick)).thenReturn(arrayResponse); - when(arrayResponse.usernames(nearbyPlayerNameList)).thenReturn(arrayResponse); - doNothing().when(arrayResponse).execute(); - - EzyResponseFactory responseFactory = mock(EzyResponseFactory.class); - when(responseFactory.newArrayResponse()).thenReturn(arrayResponse); - - SyncPositionRoomUpdatedHandler sut = new SyncPositionRoomUpdatedHandler(); - sut.setResponseFactory(responseFactory); - sut = new SyncPositionRoomUpdatedHandler(responseFactory); - - MMORoom room = MMORoom.builder() - .name(RandomUtil.randomShortAlphabetString()) - .distanceOfInterest(RandomUtil.randomSmallDouble()) - .build(); - - MMOPlayer player = new MMOPlayer(playerName); - player.setPosition(position); - player.setRotation(rotation); - player.setClientTimeTick(clientTimeTick); - - Map nearbyPlayers = FieldUtil.getFieldValue(player, "nearbyPlayers"); - nearbyPlayerNames.forEach(name -> { - MMOPlayer nearbyPlayer = new MMOPlayer(name); - nearbyPlayers.put(name, nearbyPlayer); - room.getPlayerManager().addPlayer(nearbyPlayer); - }); - room.getPlayerManager().addPlayer(player); - - List players = FieldUtil.getFieldValue(room, "playerBuffer"); - room.getPlayerManager().getPlayerList(players); - - // when - sut.onRoomUpdated(room, players); - - // then - verify(responseFactory, times(1)).newArrayResponse(); - verify(arrayResponse, times(1)).udpTransport(); - verify(arrayResponse, times(1)).command(Commands.SYNC_POSITION); - verify(arrayResponse, times(1)).param(playerName); - verify(arrayResponse, times(1)).param(position.toArray()); - verify(arrayResponse, times(1)).param(rotation.toArray()); - verify(arrayResponse, times(1)).usernames(nearbyPlayerNameList); - verify(arrayResponse, times(1)).execute(); - } - + + @SuppressWarnings("unchecked") + @Test + public void casePlayerChangeStateTest() { + // given + String playerName = RandomUtil.randomShortAlphabetString(); + + int nearbyPlayerCount = RandomUtil.randomSmallInt(); + Set nearbyPlayerNames = RandomUtil.randomSet(nearbyPlayerCount, String.class); + List nearbyPlayerNameList = new ArrayList<>(nearbyPlayerNames); + + Vec3 position = TestHelper.randomVec3(); + Vec3 rotation = TestHelper.randomVec3(); + int clientTimeTick = RandomUtil.randomInt(); + + EzyArrayResponse arrayResponse = mock(EzyArrayResponse.class); + when(arrayResponse.udpTransport()).thenReturn(arrayResponse); + when(arrayResponse.command(Commands.SYNC_POSITION)).thenReturn(arrayResponse); + when(arrayResponse.param(playerName)).thenReturn(arrayResponse); + when(arrayResponse.param(position.toArray())).thenReturn(arrayResponse); + when(arrayResponse.param(rotation.toArray())).thenReturn(arrayResponse); + when(arrayResponse.param(clientTimeTick)).thenReturn(arrayResponse); + when(arrayResponse.usernames(nearbyPlayerNameList)).thenReturn(arrayResponse); + doNothing().when(arrayResponse).execute(); + + EzyResponseFactory responseFactory = mock(EzyResponseFactory.class); + when(responseFactory.newArrayResponse()).thenReturn(arrayResponse); + + SyncPositionRoomUpdatedHandler sut = new SyncPositionRoomUpdatedHandler(); + sut.setResponseFactory(responseFactory); + sut = new SyncPositionRoomUpdatedHandler(responseFactory); + + MMORoom room = MMORoom.builder() + .name(RandomUtil.randomShortAlphabetString()) + .distanceOfInterest(RandomUtil.randomSmallDouble()) + .build(); + + MMOPlayer player = new MMOPlayer(playerName); + player.setPosition(position); + player.setRotation(rotation); + player.setClientTimeTick(clientTimeTick); + + Map nearbyPlayers = FieldUtil.getFieldValue(player, "nearbyPlayers"); + nearbyPlayerNames.forEach(name -> { + MMOPlayer nearbyPlayer = new MMOPlayer(name); + nearbyPlayers.put(name, nearbyPlayer); + room.getPlayerManager().addPlayer(nearbyPlayer); + }); + room.getPlayerManager().addPlayer(player); + + List players = FieldUtil.getFieldValue(room, "playerBuffer"); + room.getPlayerManager().getPlayerList(players); + + // when + sut.onRoomUpdated(room, players); + + // then + verify(responseFactory, times(1)).newArrayResponse(); + verify(arrayResponse, times(1)).udpTransport(); + verify(arrayResponse, times(1)).command(Commands.SYNC_POSITION); + verify(arrayResponse, times(1)).param(playerName); + verify(arrayResponse, times(1)).param(position.toArray()); + verify(arrayResponse, times(1)).param(rotation.toArray()); + verify(arrayResponse, times(1)).usernames(nearbyPlayerNameList); + verify(arrayResponse, times(1)).execute(); + } + } diff --git a/src/test/java/com/tvd12/gamebox/testing/TestHelper.java b/src/test/java/com/tvd12/gamebox/testing/TestHelper.java index 9df889e..2112d53 100644 --- a/src/test/java/com/tvd12/gamebox/testing/TestHelper.java +++ b/src/test/java/com/tvd12/gamebox/testing/TestHelper.java @@ -4,15 +4,15 @@ import com.tvd12.test.util.RandomUtil; public class TestHelper { - - private TestHelper() { - } - - public static Vec3 randomVec3() { - return new Vec3( - RandomUtil.randomFloat(), - RandomUtil.randomFloat(), - RandomUtil.randomFloat() - ); - } + + private TestHelper() { + } + + public static Vec3 randomVec3() { + return new Vec3( + RandomUtil.randomFloat(), + RandomUtil.randomFloat(), + RandomUtil.randomFloat() + ); + } } diff --git a/src/test/java/com/tvd12/gamebox/testing/constant/PlayerRoleTest.java b/src/test/java/com/tvd12/gamebox/testing/constant/PlayerRoleTest.java index 7048464..190b959 100644 --- a/src/test/java/com/tvd12/gamebox/testing/constant/PlayerRoleTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/constant/PlayerRoleTest.java @@ -1,9 +1,8 @@ package com.tvd12.gamebox.testing.constant; -import org.testng.annotations.Test; - import com.tvd12.gamebox.constant.PlayerRole; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; public class PlayerRoleTest { diff --git a/src/test/java/com/tvd12/gamebox/testing/constant/PlayerStatusTest.java b/src/test/java/com/tvd12/gamebox/testing/constant/PlayerStatusTest.java index 81c63bc..01d6e74 100644 --- a/src/test/java/com/tvd12/gamebox/testing/constant/PlayerStatusTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/constant/PlayerStatusTest.java @@ -1,9 +1,8 @@ package com.tvd12.gamebox.testing.constant; -import org.testng.annotations.Test; - import com.tvd12.gamebox.constant.PlayerStatus; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; public class PlayerStatusTest { diff --git a/src/test/java/com/tvd12/gamebox/testing/constant/RoomStatusTest.java b/src/test/java/com/tvd12/gamebox/testing/constant/RoomStatusTest.java index 21203f8..43fa4b6 100644 --- a/src/test/java/com/tvd12/gamebox/testing/constant/RoomStatusTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/constant/RoomStatusTest.java @@ -1,9 +1,8 @@ package com.tvd12.gamebox.testing.constant; -import org.testng.annotations.Test; - import com.tvd12.gamebox.constant.RoomStatus; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; public class RoomStatusTest { diff --git a/src/test/java/com/tvd12/gamebox/testing/exception/PlayerNotExistsExceptionTest.java b/src/test/java/com/tvd12/gamebox/testing/exception/PlayerNotExistsExceptionTest.java index 088c59a..370c942 100644 --- a/src/test/java/com/tvd12/gamebox/testing/exception/PlayerNotExistsExceptionTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/exception/PlayerNotExistsExceptionTest.java @@ -1,9 +1,8 @@ package com.tvd12.gamebox.testing.exception; -import org.testng.annotations.Test; - import com.tvd12.gamebox.exception.PlayerNotExistsException; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; public class PlayerNotExistsExceptionTest { @@ -11,7 +10,7 @@ public class PlayerNotExistsExceptionTest { public void test() { // given PlayerNotExistsException e = new PlayerNotExistsException("player not existed"); - + // when // then Asserts.assertEquals(e.getMessage(), "player not existed"); diff --git a/src/test/java/com/tvd12/gamebox/testing/exception/RoomNotExistsExceptionTest.java b/src/test/java/com/tvd12/gamebox/testing/exception/RoomNotExistsExceptionTest.java index 2d807bb..b0c61c8 100644 --- a/src/test/java/com/tvd12/gamebox/testing/exception/RoomNotExistsExceptionTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/exception/RoomNotExistsExceptionTest.java @@ -1,9 +1,8 @@ package com.tvd12.gamebox.testing.exception; -import org.testng.annotations.Test; - import com.tvd12.gamebox.exception.RoomNotExistsException; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; public class RoomNotExistsExceptionTest { @@ -11,7 +10,7 @@ public class RoomNotExistsExceptionTest { public void test() { // given RoomNotExistsException e = new RoomNotExistsException("room not existed"); - + // when // then Asserts.assertEquals(e.getMessage(), "room not existed"); diff --git a/src/test/java/com/tvd12/gamebox/testing/manager/AbstractRoomManagerTest.java b/src/test/java/com/tvd12/gamebox/testing/manager/AbstractRoomManagerTest.java index 8f5b459..f117423 100644 --- a/src/test/java/com/tvd12/gamebox/testing/manager/AbstractRoomManagerTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/manager/AbstractRoomManagerTest.java @@ -1,10 +1,9 @@ package com.tvd12.gamebox.testing.manager; -import org.testng.annotations.Test; - import com.tvd12.gamebox.entity.Room; import com.tvd12.gamebox.manager.AbstractRoomManager; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; public class AbstractRoomManagerTest { @@ -12,12 +11,12 @@ public class AbstractRoomManagerTest { public void test() { // given InternalRoomManager sut = new InternalRoomManager(); - + // when // then Asserts.assertEquals(sut.getMaxRoom(), 10000); } - + private static class InternalRoomManager extends AbstractRoomManager { } } diff --git a/src/test/java/com/tvd12/gamebox/testing/manager/DefaultLocatedPlayerManagerTest.java b/src/test/java/com/tvd12/gamebox/testing/manager/DefaultLocatedPlayerManagerTest.java index 9668b47..f645778 100644 --- a/src/test/java/com/tvd12/gamebox/testing/manager/DefaultLocatedPlayerManagerTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/manager/DefaultLocatedPlayerManagerTest.java @@ -1,14 +1,13 @@ package com.tvd12.gamebox.testing.manager; -import java.util.Arrays; - -import org.testng.annotations.Test; - import com.tvd12.gamebox.entity.LocatedPlayer; import com.tvd12.gamebox.exception.LocationNotAvailableException; import com.tvd12.gamebox.exception.PlayerExistsException; import com.tvd12.gamebox.manager.DefaultLocatedPlayerManager; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; + +import java.util.Arrays; public class DefaultLocatedPlayerManagerTest { @@ -16,22 +15,22 @@ public class DefaultLocatedPlayerManagerTest { public void test() { // given DefaultLocatedPlayerManager sut = new DefaultLocatedPlayerManager(); - + LocatedPlayer master = LocatedPlayer.builder() .name("master") .build(); - + LocatedPlayer user = LocatedPlayer.builder() .name("user") .build(); - + // when sut.addPlayer(master, 0); sut.addPlayer(user, 1); - + sut.setMaster(master); sut.setSpeakinger(user); - + // then Asserts.assertEquals(sut.getMaster(), master); Asserts.assertEquals(sut.getPlayer(0), master); @@ -45,51 +44,51 @@ public void test() { sut.removePlayer(0); sut.removePlayer(1); } - + @Test public void addPlayerFailedDueToLocationTest() { - // given + // given DefaultLocatedPlayerManager sut = new DefaultLocatedPlayerManager(); - + LocatedPlayer player1 = LocatedPlayer.builder() .name("player1") .build(); LocatedPlayer player2 = LocatedPlayer.builder() .name("player2") .build(); - + sut.addPlayer(player1, 0); - + // when Throwable e = Asserts.assertThrows(() -> sut.addPlayer(player2, 0)); - + // then Asserts.assertEqualsType(e, LocationNotAvailableException.class); } - + @Test public void addPlayerFailedDueToPlayerTest() { // given - DefaultLocatedPlayerManager sut = new DefaultLocatedPlayerManager(); - - LocatedPlayer player1 = LocatedPlayer.builder() - .name("player1") - .build(); - - sut.addPlayer(player1, 0); - - // when - Throwable e = Asserts.assertThrows(() -> sut.addPlayer(player1, 1)); - - // then - Asserts.assertEqualsType(e, PlayerExistsException.class); - } - + DefaultLocatedPlayerManager sut = new DefaultLocatedPlayerManager(); + + LocatedPlayer player1 = LocatedPlayer.builder() + .name("player1") + .build(); + + sut.addPlayer(player1, 0); + + // when + Throwable e = Asserts.assertThrows(() -> sut.addPlayer(player1, 1)); + + // then + Asserts.assertEqualsType(e, PlayerExistsException.class); + } + @Test public void nextOfTest() { // given DefaultLocatedPlayerManager sut = new DefaultLocatedPlayerManager(); - + LocatedPlayer player1 = LocatedPlayer.builder() .name("player1") .build(); @@ -99,18 +98,18 @@ public void nextOfTest() { LocatedPlayer player3 = LocatedPlayer.builder() .name("player3") .build(); - + // when // then Asserts.assertNull(sut.nextOf(player1)); Asserts.assertNull(sut.leftOf(player1)); Asserts.assertNull(sut.rightOf(player1)); - + sut.addPlayer(player1, 0); Asserts.assertNull(sut.nextOf(player1)); Asserts.assertNull(sut.leftOf(player1)); Asserts.assertNull(sut.rightOf(player1)); - + sut.addPlayer(player2, 2); sut.addPlayer(player3, 10); Asserts.assertEquals(sut.nextOf(player2), player1); diff --git a/src/test/java/com/tvd12/gamebox/testing/manager/DefaultPlayerManagerTest.java b/src/test/java/com/tvd12/gamebox/testing/manager/DefaultPlayerManagerTest.java index d0b24a3..89da8d7 100644 --- a/src/test/java/com/tvd12/gamebox/testing/manager/DefaultPlayerManagerTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/manager/DefaultPlayerManagerTest.java @@ -1,12 +1,11 @@ package com.tvd12.gamebox.testing.manager; -import java.util.Arrays; - -import org.testng.annotations.Test; - import com.tvd12.gamebox.entity.Player; import com.tvd12.gamebox.manager.DefaultPlayerManager; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; + +import java.util.Arrays; public class DefaultPlayerManagerTest { @@ -14,42 +13,42 @@ public class DefaultPlayerManagerTest { @Test public void test() { // given - DefaultPlayerManager sut = + DefaultPlayerManager sut = (DefaultPlayerManager) DefaultPlayerManager.builder() - .maxPlayer(100) - .build(); - + .maxPlayer(100) + .build(); + Player player1 = Player.builder() .name("player1") .build(); - + Player player2 = Player.builder() .name("player2") .build(); - + // when sut.addPlayers(Arrays.asList(player1, player2)); - + // then Asserts.assertEquals(sut.getMaxPlayer(), 100); Asserts.assertEquals(sut.getPlayerCount(), 2); } - + @Test public void defaultConstructorTest() { // given DefaultPlayerManager sut = new DefaultPlayerManager<>(); - + // when // then Asserts.assertEquals(sut.getMaxPlayer(), 999999999); } - + @Test public void cConstructorWithMaxPlayerTest() { // given DefaultPlayerManager sut = new DefaultPlayerManager<>(200); - + // when // then Asserts.assertEquals(sut.getMaxPlayer(), 200); diff --git a/src/test/java/com/tvd12/gamebox/testing/manager/DefaultRoomManagerTest.java b/src/test/java/com/tvd12/gamebox/testing/manager/DefaultRoomManagerTest.java index ceee277..2adf25a 100644 --- a/src/test/java/com/tvd12/gamebox/testing/manager/DefaultRoomManagerTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/manager/DefaultRoomManagerTest.java @@ -1,13 +1,12 @@ package com.tvd12.gamebox.testing.manager; -import java.util.Arrays; - -import org.testng.annotations.Test; - import com.tvd12.gamebox.entity.NormalRoom; import com.tvd12.gamebox.entity.Room; import com.tvd12.gamebox.manager.DefaultRoomManager; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; + +import java.util.Arrays; public class DefaultRoomManagerTest { @@ -15,44 +14,44 @@ public class DefaultRoomManagerTest { @Test public void test() { // given - DefaultRoomManager sut = + DefaultRoomManager sut = (DefaultRoomManager) DefaultRoomManager.builder() - .maxRoom(100) - .build(); - + .maxRoom(100) + .build(); + Room room1 = NormalRoom.builder() .name("room1") .build(); - + Room room2 = NormalRoom.builder() .name("room2") .build(); - + // when - sut.addRooms(new Room[] { room1 }); + sut.addRooms(new Room[]{room1}); sut.addRooms(Arrays.asList(room2)); - + // then Asserts.assertEquals(sut.getMaxRoom(), 100); Asserts.assertEquals(sut.getRoomCount(), 2); Asserts.assertTrue(sut.containsRoom(room1)); } - + @Test public void defaultConstructorTest() { // given DefaultRoomManager sut = new DefaultRoomManager<>(); - + // when // then Asserts.assertEquals(sut.getMaxRoom(), 10000); } - + @Test public void cConstructorWithMaxRoomTest() { // given DefaultRoomManager sut = new DefaultRoomManager<>(200); - + // when // then Asserts.assertEquals(sut.getMaxRoom(), 200); diff --git a/src/test/java/com/tvd12/gamebox/testing/manager/SimplePlayerManagerTest.java b/src/test/java/com/tvd12/gamebox/testing/manager/SimplePlayerManagerTest.java index 5dc7601..d7c2a2b 100644 --- a/src/test/java/com/tvd12/gamebox/testing/manager/SimplePlayerManagerTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/manager/SimplePlayerManagerTest.java @@ -1,10 +1,9 @@ package com.tvd12.gamebox.testing.manager; -import org.testng.annotations.Test; - import com.tvd12.gamebox.entity.Player; import com.tvd12.gamebox.manager.SimplePlayerManager; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; public class SimplePlayerManagerTest { @@ -12,31 +11,31 @@ public class SimplePlayerManagerTest { @Test public void test() { // given - SimplePlayerManager sut = + SimplePlayerManager sut = (SimplePlayerManager) SimplePlayerManager.builder() - .maxPlayer(100) - .build(); - + .maxPlayer(100) + .build(); + // when // then Asserts.assertEquals(sut.getMaxPlayer(), 100); } - + @Test public void defaultConstructorTest() { // given SimplePlayerManager sut = new SimplePlayerManager<>(); - + // when // then Asserts.assertEquals(sut.getMaxPlayer(), 999999999); } - + @Test public void cConstructorWithMaxPlayerTest() { // given SimplePlayerManager sut = new SimplePlayerManager<>(200); - + // when // then Asserts.assertEquals(sut.getMaxPlayer(), 200); diff --git a/src/test/java/com/tvd12/gamebox/testing/manager/SimpleRoomManagerTest.java b/src/test/java/com/tvd12/gamebox/testing/manager/SimpleRoomManagerTest.java index d6c56c4..7f20150 100644 --- a/src/test/java/com/tvd12/gamebox/testing/manager/SimpleRoomManagerTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/manager/SimpleRoomManagerTest.java @@ -1,10 +1,9 @@ package com.tvd12.gamebox.testing.manager; -import org.testng.annotations.Test; - import com.tvd12.gamebox.entity.Room; import com.tvd12.gamebox.manager.SimpleRoomManager; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; public class SimpleRoomManagerTest { @@ -12,31 +11,31 @@ public class SimpleRoomManagerTest { @Test public void test() { // given - SimpleRoomManager sut = + SimpleRoomManager sut = (SimpleRoomManager) SimpleRoomManager.builder() - .maxRoom(100) - .build(); - + .maxRoom(100) + .build(); + // when // then Asserts.assertEquals(sut.getMaxRoom(), 100); } - + @Test public void defaultConstructorTest() { // given SimpleRoomManager sut = new SimpleRoomManager<>(); - + // when // then Asserts.assertEquals(sut.getMaxRoom(), 10000); } - + @Test public void cConstructorWithMaxRoomTest() { // given SimpleRoomManager sut = new SimpleRoomManager<>(200); - + // when // then Asserts.assertEquals(sut.getMaxRoom(), 200); diff --git a/src/test/java/com/tvd12/gamebox/testing/manager/SynchronizedPlayerManagerTest.java b/src/test/java/com/tvd12/gamebox/testing/manager/SynchronizedPlayerManagerTest.java index 36c7a85..da3eaea 100644 --- a/src/test/java/com/tvd12/gamebox/testing/manager/SynchronizedPlayerManagerTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/manager/SynchronizedPlayerManagerTest.java @@ -1,15 +1,14 @@ package com.tvd12.gamebox.testing.manager; -import java.util.Arrays; -import java.util.concurrent.locks.Lock; - -import org.testng.annotations.Test; - import com.tvd12.gamebox.entity.MMOPlayer; import com.tvd12.gamebox.exception.MaxPlayerException; import com.tvd12.gamebox.exception.PlayerExistsException; import com.tvd12.gamebox.manager.SynchronizedPlayerManager; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; + +import java.util.Arrays; +import java.util.concurrent.locks.Lock; public class SynchronizedPlayerManagerTest { @@ -17,24 +16,24 @@ public class SynchronizedPlayerManagerTest { @Test public void test() { // given - SynchronizedPlayerManager sut = + SynchronizedPlayerManager sut = (SynchronizedPlayerManager) SynchronizedPlayerManager.builder() - .maxPlayer(2) - .build(); - + .maxPlayer(2) + .build(); + MMOPlayer player1 = MMOPlayer.builder() .name("test") .build(); sut.addPlayer(player1); - + MMOPlayer player2 = MMOPlayer.builder() .name("player2") .build(); - + MMOPlayer playerx = MMOPlayer.builder() .name("playerx") .build(); - + // when // then Asserts.assertEquals(sut.getMaxPlayer(), 2); @@ -46,7 +45,7 @@ public void test() { Asserts.assertEquals(sut.getPlayerList(it -> true), Arrays.asList(player1), false); Asserts.assertEmpty(sut.getPlayerList(it -> it.getName().equals("unknown"))); Asserts.assertEquals(sut.getPlayerNames(), Arrays.asList("test"), false); - + Asserts.assertEquals(sut.removePlayer(player1), player1); sut.addPlayer(player1, true); Asserts.assertTrue(sut.available()); @@ -60,10 +59,10 @@ public void test() { Asserts.assertFalse(sut.available()); Asserts.assertNotNull(sut.getLock("test")); sut.removeLock("test"); - + sut.removePlayers(Arrays.asList(player1)); Asserts.assertEquals(sut.getPlayerCount(), 1); - + sut.clear(); Asserts.assertNull(sut.getFirstPlayer()); Asserts.assertEquals(sut.getPlayer("unknown", () -> playerx), playerx); @@ -75,21 +74,21 @@ public void test() { Asserts.assertEqualsType(e3, PlayerExistsException.class); Throwable e4 = Asserts.assertThrows(() -> sut.addPlayers(Arrays.asList(player2, playerx), false)); Asserts.assertEqualsType(e4, MaxPlayerException.class); - + Asserts.assertEquals(sut.countPlayers(it -> it.getName().equals("test")), 1); Asserts.assertEquals(sut.filterPlayers(it -> it.getName().equals("test")), Arrays.asList(player1), false); - + Lock lock = sut.getLock("test"); lock.lock(); sut.clear(); - sut.removePlayer((MMOPlayer)null); + sut.removePlayer((MMOPlayer) null); } - + @Test public void defaultConstructorTest() { // given SynchronizedPlayerManager sut = new SynchronizedPlayerManager<>(); - + // when // then Asserts.assertTrue(sut.available()); diff --git a/src/test/java/com/tvd12/gamebox/testing/manager/SynchronizedRoomManagerTest.java b/src/test/java/com/tvd12/gamebox/testing/manager/SynchronizedRoomManagerTest.java index e609527..5877ae7 100644 --- a/src/test/java/com/tvd12/gamebox/testing/manager/SynchronizedRoomManagerTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/manager/SynchronizedRoomManagerTest.java @@ -1,14 +1,13 @@ package com.tvd12.gamebox.testing.manager; -import java.util.Arrays; - -import org.testng.annotations.Test; - import com.tvd12.gamebox.entity.LocatedRoom; import com.tvd12.gamebox.exception.MaxRoomException; import com.tvd12.gamebox.exception.RoomExistsException; import com.tvd12.gamebox.manager.SynchronizedRoomManager; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; + +import java.util.Arrays; public class SynchronizedRoomManagerTest { @@ -16,23 +15,23 @@ public class SynchronizedRoomManagerTest { @Test public void test() { // given - SynchronizedRoomManager sut = - (SynchronizedRoomManager)SynchronizedRoomManager.builder() - .maxRoom(2) - .build(); - + SynchronizedRoomManager sut = + (SynchronizedRoomManager) SynchronizedRoomManager.builder() + .maxRoom(2) + .build(); + LocatedRoom room1 = LocatedRoom.builder() .name("room1") .build(); - + LocatedRoom room2 = LocatedRoom.builder() .name("room2") .build(); - + LocatedRoom roomx = LocatedRoom.builder() .name("roomx") .build(); - + // when // then Asserts.assertNotNull(sut.getSynchronizedLock()); @@ -44,51 +43,51 @@ public void test() { Throwable e2 = Asserts.assertThrows(() -> sut.addRoom(roomx, true)); Asserts.assertEqualsType(e2, MaxRoomException.class); sut.clear(); - + sut.addRooms(Arrays.asList(room1), false); Throwable e3 = Asserts.assertThrows(() -> sut.addRooms(Arrays.asList(room1), true)); Asserts.assertEqualsType(e3, RoomExistsException.class); sut.addRooms(Arrays.asList(room2), true); Throwable e4 = Asserts.assertThrows(() -> sut.addRooms(Arrays.asList(roomx), true)); Asserts.assertEqualsType(e4, MaxRoomException.class); - + Asserts.assertEquals(sut.getRoom("room1"), room1); Asserts.assertEquals(sut.getRoomList(), Arrays.asList(room1, room2), false); - + sut.removeRoom(room1.getId()); Asserts.assertEquals(sut.getRoomCount(), 1); - + sut.removeRoom(room2.getName()); Asserts.assertEquals(sut.getRoomCount(), 0); - + sut.addRoom(room1); - + Asserts.assertTrue(sut.available()); - + sut.addRoom(room2); sut.removeRooms(Arrays.asList(room1, room2)); Asserts.assertEquals(sut.getRoomCount(), 0); - + sut.addRoom(room1); sut.addRoom(room2); - + Asserts.assertEquals(sut.getRoom(it -> it.getName().equals("room1")), room1); Asserts.assertNull(sut.getRoom(it -> it.getName().equals("unknown"))); Asserts.assertEquals(sut.getRoomList(it -> it.getName().equals("room1")), Arrays.asList(room1), false); - + sut.clear(); - sut.addRooms(new LocatedRoom[] {room1}, false); - Throwable e5 = Asserts.assertThrows(() -> sut.addRooms(new LocatedRoom[] {room1}, true)); + sut.addRooms(new LocatedRoom[]{room1}, false); + Throwable e5 = Asserts.assertThrows(() -> sut.addRooms(new LocatedRoom[]{room1}, true)); Asserts.assertEqualsType(e5, RoomExistsException.class); - sut.addRooms(new LocatedRoom[] {room2}, true); - Throwable e6 = Asserts.assertThrows(() -> sut.addRooms(new LocatedRoom[] {roomx}, true)); + sut.addRooms(new LocatedRoom[]{room2}, true); + Throwable e6 = Asserts.assertThrows(() -> sut.addRooms(new LocatedRoom[]{roomx}, true)); Asserts.assertEqualsType(e6, MaxRoomException.class); Asserts.assertFalse(sut.available()); - + Asserts.assertTrue(sut.containsRoom(room1.getId())); Asserts.assertTrue(sut.containsRoom("room1")); - + sut.clear(); - sut.removeRoom((LocatedRoom)null); + sut.removeRoom((LocatedRoom) null); } } diff --git a/src/test/java/com/tvd12/gamebox/testing/math/NumbersTest.java b/src/test/java/com/tvd12/gamebox/testing/math/NumbersTest.java index 6763aa1..d366134 100644 --- a/src/test/java/com/tvd12/gamebox/testing/math/NumbersTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/math/NumbersTest.java @@ -1,9 +1,8 @@ package com.tvd12.gamebox.testing.math; -import org.testng.annotations.Test; - import com.tvd12.gamebox.math.Numbers; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; public class NumbersTest { @@ -12,7 +11,7 @@ public void test() { float d1 = 0; for (int i = 1; i <= 8; i++) { d1 += 0.1F; - } + } float d2 = 0.1F * 8; Asserts.assertTrue(Numbers.equals(d1, d2)); @@ -20,16 +19,16 @@ public void test() { Asserts.assertTrue(Numbers.equals(0.0F, 0.0F)); Asserts.assertTrue(Numbers.equals(0.0F, -0.0F)); Asserts.assertTrue(Numbers.equals(Float.MAX_VALUE, Float.MAX_VALUE - 1)); - Asserts.assertFalse(Numbers.equals(Float.MAX_VALUE, Float.MAX_VALUE/1000)); - + Asserts.assertFalse(Numbers.equals(Float.MAX_VALUE, Float.MAX_VALUE / 1000)); + Asserts.assertFalse(Numbers.equals(0x80000000 + 0F, 0)); Asserts.assertFalse(Numbers.equals(0F, 0x80000000 + 0F)); - + Asserts.assertFalse(Numbers.equals(0x80000000 + 0F, 0x10000000 + 1F)); - + Asserts.assertTrue(Numbers.equals(-2147483648.0F, Float.MIN_VALUE, 1325400065)); - - Asserts.assertFalse(Numbers.equals(0.0F/0.0F, 1.0F, 1)); + + Asserts.assertFalse(Numbers.equals(0.0F / 0.0F, 1.0F, 1)); Asserts.assertFalse(Numbers.equals(1.0F, 0.0F / 0.0F, 1)); } } diff --git a/src/test/java/com/tvd12/gamebox/testing/math/RectTest.java b/src/test/java/com/tvd12/gamebox/testing/math/RectTest.java index efba0fd..ed05877 100644 --- a/src/test/java/com/tvd12/gamebox/testing/math/RectTest.java +++ b/src/test/java/com/tvd12/gamebox/testing/math/RectTest.java @@ -1,10 +1,9 @@ package com.tvd12.gamebox.testing.math; -import org.testng.annotations.Test; - import com.tvd12.gamebox.math.Rect; import com.tvd12.gamebox.math.Vec2; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; public class RectTest { @@ -12,21 +11,21 @@ public class RectTest { public void test() { // given Rect sut = new Rect(1.0F, 2.0F, 3.0F, 4.0F); - + // when // then Asserts.assertEquals(sut.x, 1.0F); Asserts.assertEquals(sut.y, 2.0F); Asserts.assertEquals(sut.width, 3.0F); Asserts.assertEquals(sut.height, 4.0F); - + Asserts.assertEquals(sut.getMaxX(), 1.0F + 3.0F); Asserts.assertEquals(sut.getMaxY(), 2.0F + 4.0F); Asserts.assertEquals(sut.getMinX(), 1.0F); Asserts.assertEquals(sut.getMinY(), 2.0F); Asserts.assertEquals(sut.getMidX(), 2.5F); Asserts.assertEquals(sut.getMidY(), 4.0F); - + Asserts.assertTrue(sut.containsPoint(new Vec2(1.5F, 2.5F))); Asserts.assertFalse(sut.containsPoint(new Vec2(0.0F, 0.0F))); Asserts.assertFalse(sut.containsPoint(new Vec2(1.0F, 0.0F))); @@ -36,55 +35,55 @@ public void test() { Asserts.assertTrue(sut.intersectsRect(new Rect(1.5F, 2.5F, 1.0F, 1.0F))); Asserts.assertTrue(sut.intersectsRect(new Rect(1.5F, 2.5F, 3.0F, 4.0F))); Asserts.assertTrue(sut.intersectsRect(new Rect(0.0F, 0.0F, 3.0F, 4.0F))); - + // getMaxX() < rect.getMinX() Asserts.assertFalse(sut.intersectsRect(new Rect(5.0F, 1.0F, 3.0F, 4.0F))); - + // rect.getMaxX() < getMinX() Asserts.assertFalse(sut.intersectsRect(new Rect(-10.0F, 1.0F, 3.0F, 4.0F))); - + // getMaxY() < rect.getMinY() Asserts.assertFalse(sut.intersectsRect(new Rect(1.5F, 10F, 1.0F, 1.0F))); - + // rect.getMaxY() < getMinY()) Asserts.assertFalse(sut.intersectsRect(new Rect(1.5F, -10.0F, 1.0F, 1.0F))); - + Asserts.assertTrue(sut.intersectsCircle(new Vec2(1.5F, 2.5F), 1)); Asserts.assertTrue(sut.intersectsCircle(new Vec2(15.0F, 2.5F), 100)); Asserts.assertTrue(sut.intersectsCircle(new Vec2(0.0F, 0.0F), 3)); Asserts.assertTrue(sut.intersectsCircle(new Vec2(0.0F, 0.0F), 10)); - + // dx > (radius + w) Asserts.assertFalse(sut.intersectsCircle(new Vec2(-10.0F, 2.50F), 2)); - + // dy > (radius + h Asserts.assertFalse(sut.intersectsCircle(new Vec2(1.50F, -10.0F), 2)); - + Asserts.assertFalse(sut.intersectsCircle(new Vec2(0.0F, 0.0F), 2.2299984F)); - + sut.setRect(1.0F, 2.0F, 3.0F, 4.0F); sut.merge(new Rect()); Asserts.assertEquals(sut, new Rect(0.0F, 0.0F, 4.0F, 6.0F)); sut.merge(new Rect(new Rect(2.0F, 3.0F, 8.0F, 9.0F))); Asserts.assertEquals(sut, new Rect(0.0F, 0.0F, 10.0F, 12.0F)); - + sut.setRect(1.0F, 2.0F, 3.0F, 4.0F); Asserts.assertEquals( sut.unionWithRect(new Rect(1.0F, 2.0F, 3.0F, 4.0F)), new Rect(1.0F, 2.0F, 3.0F, 4.0F) ); - + Asserts.assertEquals( sut.unionWithRect(new Rect(1.0F, 2.0F, -3.0F, -4.0F)), new Rect(-2.0F, -2.0F, 6.0F, 8.0F) ); - + sut.setRect(1.0F, 2.0F, -3.0F, -4.0F); Asserts.assertEquals( sut.unionWithRect(new Rect(1.0F, 2.0F, 3.0F, 4.0F)), new Rect(-2.0F, -2.0F, 6.0F, 8.0F) ); - + System.out.println(sut); } } diff --git a/src/test/java/com/tvd12/gamebox/testing/math/Vec2Test.java b/src/test/java/com/tvd12/gamebox/testing/math/Vec2Test.java index 61e7271..98786cf 100644 --- a/src/test/java/com/tvd12/gamebox/testing/math/Vec2Test.java +++ b/src/test/java/com/tvd12/gamebox/testing/math/Vec2Test.java @@ -1,20 +1,19 @@ package com.tvd12.gamebox.testing.math; -import org.testng.annotations.Test; - import com.tvd12.ezyfox.factory.EzyEntityFactory; import com.tvd12.gamebox.math.Vec2; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; public class Vec2Test { @Test public void test() { // given - Vec2 a = new Vec2(new float[] {1.0F, 2.0F}); + Vec2 a = new Vec2(new float[]{1.0F, 2.0F}); Vec2 b = new Vec2(a); Vec2 c = new Vec2(1.0D, 2.0D); - + // when // then Asserts.assertEquals(b.getX(), 1.0F); @@ -22,7 +21,7 @@ public void test() { Asserts.assertEquals(a, b); Asserts.assertEquals(a, c); Asserts.assertEquals(a.hashCode(), b.hashCode()); - + a.add(new Vec2(1.0F, 2.0F)); Asserts.assertEquals(a.getX(), 2.0F); Asserts.assertEquals(a.getY(), 4.0F); @@ -30,48 +29,48 @@ public void test() { a.negate(); Asserts.assertEquals(a.getX(), -2.0F); Asserts.assertEquals(a.getY(), -4.0F); - + a.set(1.0F, 2.0F); Asserts.assertEquals(a.getX(), 1.0F); Asserts.assertEquals(a.getY(), 2.0F); - + a.set(2.0F, 4.0F); Asserts.assertEquals(a.getX(), 2.0F); Asserts.assertEquals(a.getY(), 4.0F); - + a.set(new Vec2(1.0F, 2.0F)); Asserts.assertEquals(a.getX(), 1.0F); Asserts.assertEquals(a.getY(), 2.0F); - + a.set(1.0D, 2.0D); Asserts.assertEquals(a.getX(), 1.0F); Asserts.assertEquals(a.getY(), 2.0F); - - a.set(new double[] {2.0F, 4.0F}); + + a.set(new double[]{2.0F, 4.0F}); a.subtract(new Vec2(1.0F, 2.0F)); Asserts.assertEquals(a.getX(), 1.0F); Asserts.assertEquals(a.getY(), 2.0F); - + a.multiply(2.0D); Asserts.assertEquals(a.getX(), 2.0F); Asserts.assertEquals(a.getY(), 4.0F); - + a.multiply(2.0F); Asserts.assertEquals(a.getX(), 4.0F); Asserts.assertEquals(a.getY(), 8.0F); - + Vec2 an = a.multipleNew(2.0F); Asserts.assertEquals(an.getX(), 8.0F); Asserts.assertEquals(an.getY(), 16.0F); - + Asserts.assertEquals(a.distance(b), Math.sqrt(a.distanceSquare(b))); - + Asserts.assertNotEquals(a, b); a.set(3.0, 6.0); Asserts.assertNotEquals(a, new Vec2(1.0F, 2.0F)); Asserts.assertNotEquals(a, new Vec2(3.0F, 3.0F)); - - Asserts.assertEquals(a.toFloatArray(), new float[] { 3.0F, 6.0F }); + + Asserts.assertEquals(a.toFloatArray(), new float[]{3.0F, 6.0F}); Asserts.assertEquals(a.toArray(), EzyEntityFactory.newArrayBuilder().append(3.0F, 6.0F).build()); System.out.println(a); } diff --git a/src/test/java/com/tvd12/gamebox/testing/math/Vec3Test.java b/src/test/java/com/tvd12/gamebox/testing/math/Vec3Test.java index 10f281f..751b17b 100644 --- a/src/test/java/com/tvd12/gamebox/testing/math/Vec3Test.java +++ b/src/test/java/com/tvd12/gamebox/testing/math/Vec3Test.java @@ -1,19 +1,18 @@ package com.tvd12.gamebox.testing.math; -import org.testng.annotations.Test; - import com.tvd12.ezyfox.factory.EzyEntityFactory; import com.tvd12.gamebox.math.Vec3; import com.tvd12.test.assertion.Asserts; +import org.testng.annotations.Test; public class Vec3Test { @Test public void test() { // given - Vec3 a = new Vec3(new float[] {1.0F, 2.0F, 3.0F}); + Vec3 a = new Vec3(new float[]{1.0F, 2.0F, 3.0F}); Vec3 b = new Vec3(a); - + // when // then Asserts.assertEquals(b.getX(), 1.0F); @@ -21,7 +20,7 @@ public void test() { Asserts.assertEquals(b.getZ(), 3.0F); Asserts.assertEquals(a, b); Asserts.assertEquals(a.hashCode(), b.hashCode()); - + a.add(new Vec3(1.0F, 2.0F, 3.0F)); Asserts.assertEquals(a.getX(), 2.0F); Asserts.assertEquals(a.getY(), 4.0F); @@ -31,40 +30,40 @@ public void test() { Asserts.assertEquals(a.getX(), -2.0F); Asserts.assertEquals(a.getY(), -4.0F); Asserts.assertEquals(a.getZ(), -6.0F); - + a.set(1.0F, 2.0F, 3.0F); Asserts.assertEquals(a.getX(), 1.0F); Asserts.assertEquals(a.getY(), 2.0F); Asserts.assertEquals(a.getZ(), 3.0F); - + a.set(2.0F, 4.0F, 6.0F); Asserts.assertEquals(a.getX(), 2.0F); Asserts.assertEquals(a.getY(), 4.0F); Asserts.assertEquals(a.getZ(), 6.0F); - + a.set(new Vec3(1.0F, 2.0F, 3.0F)); Asserts.assertEquals(a.getX(), 1.0F); Asserts.assertEquals(a.getY(), 2.0F); Asserts.assertEquals(a.getZ(), 3.0F); - - a.set(new double[] {2.0F, 4.0F, 6.0F}); + + a.set(new double[]{2.0F, 4.0F, 6.0F}); a.subtract(new Vec3(1.0F, 2.0F, 3.0F)); Asserts.assertEquals(a.getX(), 1.0F); Asserts.assertEquals(a.getY(), 2.0F); Asserts.assertEquals(a.getZ(), 3.0F); - + a.multiply(2.0D); Asserts.assertEquals(a.getX(), 2.0F); Asserts.assertEquals(a.getY(), 4.0F); Asserts.assertEquals(a.getZ(), 6.0F); - + Asserts.assertEquals(a.distance(b), Math.sqrt(a.distanceSquare(b))); - + Asserts.assertNotEquals(a, b); Asserts.assertNotEquals(a, new Vec3(2.0F, 3.0F, 4.0F)); Asserts.assertNotEquals(a, new Vec3(2.0F, 4.0F, 5.0F)); - - Asserts.assertEquals(a.toFloatArray(), new float[] { 2.0F, 4.0F, 6.0F }); + + Asserts.assertEquals(a.toFloatArray(), new float[]{2.0F, 4.0F, 6.0F}); Asserts.assertEquals(a.toArray(), EzyEntityFactory.newArrayBuilder().append(2.0F, 4.0F, 6.0F).build()); System.out.println(a); } diff --git a/src/test/resources/AllTests.tng.xml b/src/test/resources/AllTests.tng.xml index c36e4c1..0dd20a2 100644 --- a/src/test/resources/AllTests.tng.xml +++ b/src/test/resources/AllTests.tng.xml @@ -1,14 +1,14 @@ - - - - - - - - - - + + + + + + + + + +