diff --git a/src/main/java/cactusServer/entities/Instance.java b/src/main/java/cactusServer/entities/Instance.java index 3688f12..51cad77 100644 --- a/src/main/java/cactusServer/entities/Instance.java +++ b/src/main/java/cactusServer/entities/Instance.java @@ -183,6 +183,26 @@ setState(state); return this; } + + public Character updateCharacter(String characterId, Position3D position, Quaternion3D angle, int modelID) { + Character character = characterMap.get(characterId); + if (character != null) { + character.update(position, angle, modelID); + } + return character; + } + + public Bullet updateBullet(String playerId, String bulletId, Position3D position, Quaternion3D angle) { + HashMap map = bulletMap.get(playerId); + if (map != null) { + Bullet bullet = map.get(bulletId); + if (bullet != null) { + bullet.update(position, angle); + } + return bullet; + } + return null; + } public Character destroyCharacter(String characterId) { return characterMap.remove(characterId); @@ -195,6 +215,16 @@ public Object destroyObject(String objId) { return objMap.remove(objId); } + + public Bullet destroyBullet(String playerId, String bulletId) { + HashMap map = bulletMap.get(playerId); + if (map != null) { + Bullet removedBullet = map.remove(bulletId); + universe.displace(removedBullet.getPlaceable()); + return removedBullet; + } + return null; + } public static enum State { AVAILABLE, MAINTENANCE; diff --git a/src/main/java/cactusServer/entities/Player.java b/src/main/java/cactusServer/entities/Player.java index 18efda5..67c333e 100644 --- a/src/main/java/cactusServer/entities/Player.java +++ b/src/main/java/cactusServer/entities/Player.java @@ -138,7 +138,7 @@ } public Player update(String characterID, Position3D position, Quaternion3D angle, CameraState cameraState, - EmoteState.EmoteType animationClassToStart) { + EmoteState.EmoteType animationClassToStart, long lastUpdateTime) { setPosition(position); setAngle(angle); if (!this.characterID.equals(characterID)) { @@ -147,6 +147,7 @@ setCameraState(cameraState); updateEmoteType(animationClassToStart); // updateAreaURI(); + setLastUpdateTime(lastUpdateTime); return this; } @@ -189,6 +190,8 @@ public void destroy() { writeCharacterData(); + Instance instance = Instances.getInstance().getInstance(instanceID); + instance.getUniverse().displace(this.getPlaceable()); } private Character getCharacter() { diff --git a/src/main/java/cactusServer/models/Instances.java b/src/main/java/cactusServer/models/Instances.java index 3f99c4a..ee2b9ee 100644 --- a/src/main/java/cactusServer/models/Instances.java +++ b/src/main/java/cactusServer/models/Instances.java @@ -107,15 +107,11 @@ public Player updatePlayer(String playerId, String characterID, Position3D position, Quaternion3D angle, CameraState cameraState, EmoteState.EmoteType animationClassToStart) { + long lastUpdateTime = System.nanoTime(); Player player = playerMap.get(playerId); - player.update(characterID, position, angle, cameraState, animationClassToStart); - return player; - } - - public Player updatePlayer(String playerId, String characterID, Position3D position, Quaternion3D angle, - CameraState cameraState, EmoteState.EmoteType animationClassToStart, long lastUpdateTime) { - Player player = updatePlayer(playerId, characterID, position, angle, cameraState, animationClassToStart); - player.setLastUpdateTime(lastUpdateTime); + if (player != null) { + player.update(characterID, position, angle, cameraState, animationClassToStart, lastUpdateTime); + } return player; } @@ -129,8 +125,6 @@ return null; } player.destroy(); - Instance instance = Instances.getInstance().getInstance(player.getInstanceID()); - instance.getUniverse().displace(player.getPlaceable()); return playerMap.remove(playerId); } } diff --git a/src/main/java/cactusServer/resources/BulletsRest.java b/src/main/java/cactusServer/resources/BulletsRest.java index 7528625..822c475 100644 --- a/src/main/java/cactusServer/resources/BulletsRest.java +++ b/src/main/java/cactusServer/resources/BulletsRest.java @@ -51,13 +51,9 @@ public String updateBullet(@PathParam("instanceId") String instanceId, @PathParam("playerId") String playerId, @PathParam("bulletId") String bulletId, @FormParam("position") Position3D position, @FormParam("angle") Quaternion3D angle) { Instance instance = Instances.getInstance().getInstance(instanceId); - HashMap map = instance.getBullets().get(playerId); - if (map != null) { - Bullet bullet = map.get(bulletId); - if (bullet != null) { - bullet.update(position, angle); - } - return JSON.encode(map); + Bullet bullet = instance.updateBullet(playerId, bulletId, position, angle); + if (bullet != null) { + return JSON.encode(bullet); } throw new WebApplicationException(400); } @@ -68,10 +64,8 @@ public String destroyBullet(@PathParam("instanceId") String instanceId, @PathParam("playerId") String playerId, @PathParam("bulletId") String bulletId) { Instance instance = Instances.getInstance().getInstance(instanceId); - HashMap map = instance.getBullets().get(playerId); - if (map != null) { - Bullet removedBullet = map.remove(bulletId); - instance.getUniverse().displace(removedBullet.getPlaceable()); + Bullet removedBullet = instance.destroyBullet(playerId, bulletId); + if (removedBullet != null) { return JSON.encode(removedBullet); } throw new WebApplicationException(400); diff --git a/src/main/java/cactusServer/resources/CharactersRest.java b/src/main/java/cactusServer/resources/CharactersRest.java index 04f85c6..0d0d838 100644 --- a/src/main/java/cactusServer/resources/CharactersRest.java +++ b/src/main/java/cactusServer/resources/CharactersRest.java @@ -71,10 +71,10 @@ public void updateCharacter(@PathParam("instanceId") String instanceId, @PathParam("characterId") String characterId, @FormParam("position") Position3D position, @FormParam("angle") Quaternion3D angle, @FormParam("modelID") int modelID) { - Character character = Instances.getInstance().getInstance(instanceId).getCharacter(characterId); + Instance instance = Instances.getInstance().getInstance(instanceId); + Character character = instance.updateCharacter(characterId, position, angle, modelID); if (character == null) { throw new WebApplicationException(400); } - character.update(position, angle, modelID); } } diff --git a/src/main/java/cactusServer/resources/PlayersRest.java b/src/main/java/cactusServer/resources/PlayersRest.java index 1e0352a..a9aefc6 100644 --- a/src/main/java/cactusServer/resources/PlayersRest.java +++ b/src/main/java/cactusServer/resources/PlayersRest.java @@ -11,6 +11,7 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; +import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import org.ntlab.radishforandroidstudio.framework.model3D.Position3D; @@ -65,10 +66,11 @@ @FormParam("cameraState") CameraState cameraState, @FormParam("animationClassToStart") EmoteState.EmoteType animationClassToStart) { Player player = Instances.getInstance().updatePlayer(playerId, characterID, position, angle, cameraState, - animationClassToStart, System.nanoTime()); - return JSON.encode(player); -// return JSON.encode(Instances.getInstance().updatePlayer(playerId, characterID, position, angle, cameraState, -// animationClassToStart)); + animationClassToStart); + if (player != null) { + return JSON.encode(player); + } + throw new WebApplicationException(400); } @Path("/{playerId}") diff --git a/src/main/java/cactusServer/utils/App.java b/src/main/java/cactusServer/utils/App.java index e0d27bc..47d12d3 100644 --- a/src/main/java/cactusServer/utils/App.java +++ b/src/main/java/cactusServer/utils/App.java @@ -129,8 +129,6 @@ if (currentTime > (lastUpdateTime + Player.STOP_TIME_LIMIT)) { System.out.println("delete started (playerId: " + playerId + ")"); player.destroy(); - Instance instance = Instances.getInstance().getInstance(player.getInstanceID()); - instance.getUniverse().displace(player.getPlaceable()); it.remove(); System.out.println("delete finished (playerId: " + playerId + ")"); }