Player周りの処理の修正等. #125

Merged y-ota merged 1 commit into nitta-lab-2018:master from nitta-lab-2018:Player on 9 Oct 2018
Showing 4 changed files
View
31
src/main/java/cactusServer/entities/Player.java
private Position3D position;
private Quaternion3D angle;
private CameraState cameraState;
private EmoteState emoteState;
private long lastOperateTime = System.nanoTime();
private long lastUpdateTime = System.nanoTime();
@JSONHint(ignore = true)
public static final int UNIQUE_ID_LENGTH = 12;
@JSONHint(ignore = true)
public static final long STOP_TIME_LIMIT = (long)(30 * Math.pow(10, 9));
} else {
setEmoteState(new EmoteState());
}
Character character = getCharacter();
readCharacterData();
readCharacterData(character);
initPlaceable(character.getModelID());
}
 
private void initPlaceable(int modelID) {
return emoteState;
}
@JSONHint(ignore = true)
public long getLastOperateTime() {
return lastOperateTime;
public long getLastUpdateTime() {
return lastUpdateTime;
}
 
public void setInstanceID(String instanceID) {
this.instanceID = instanceID;
setEmoteState(new EmoteState(animationClassToStart));
}
@JSONHint(ignore = true)
public void setLastOperateTime(long lastOperateTime) {
this.lastOperateTime = lastOperateTime;
public void setLastUpdateTime(long lastUpdateTime) {
this.lastUpdateTime = lastUpdateTime;
}
 
public Player update(String characterID, Position3D position, Quaternion3D angle, CameraState cameraState,
EmoteState.EmoteType animationClassToStart) {
setCharacterID(characterID);
setPosition(position);
setAngle(angle);
if (!this.characterID.equals(characterID)) {
changeCharacter(characterID);
}
setCameraState(cameraState);
updateEmoteType(animationClassToStart);
// updateAreaURI();
return this;
 
public void changeCharacter(String characterID) {
writeCharacterData();
setCharacterID(characterID);
readCharacterData();
Character character = getCharacter();
readCharacterData(character);
initPlaceable(character.getModelID());
}
 
public void destroy() {
writeCharacterData();
setAngle(character.getAngle());
setAreaURI(character.getAreaURI());
}
 
private void readCharacterData() {
Character character = getCharacter();
readCharacterData(character);
}
// private void readCharacterData() {
// Character character = getCharacter();
// readCharacterData(character);
// }
 
private void writeCharacterData() {
Character character = getCharacter();
// if (character == null) return;
character.update(position, angle, areaURI);
}
}
View
4
src/main/java/cactusServer/models/Instances.java
return player;
}
public Player updatePlayer(String playerId, String characterID, Position3D position, Quaternion3D angle,
CameraState cameraState, EmoteState.EmoteType animationClassToStart, long lastOperateTime) {
CameraState cameraState, EmoteState.EmoteType animationClassToStart, long lastUpdateTime) {
Player player = updatePlayer(playerId, characterID, position, angle, cameraState, animationClassToStart);
player.setLastOperateTime(lastOperateTime);
player.setLastUpdateTime(lastUpdateTime);
return player;
}
 
public Instance destroyInstance(String instanceId) {
View
6
src/main/java/cactusServer/resources/PlayersRest.java
@POST
// @Produces(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
public String createPlayer(@FormParam("instanceID") String instanceID,
@FormParam("characterID") String characterID/*, @FormParam("cameraState") CameraState cameraState,
@FormParam("animationClassToStart") EmoteState.EmoteType animationClassToStart*/) {
@FormParam("characterID") String characterID) {
Instances instances = Instances.getInstance();
HashMap<String, Player> idMap = instances.createPlayer(instanceID, characterID, null,
null);
HashMap<String, Player> uriMap = new HashMap<>();
for (String id : idMap.keySet()) {
String uri = (InstancesRest.INSTANCES_URI + "/" + "/players/") + id;
String uri = (InstancesRest.INSTANCES_URI + "/players/") + id;
uriMap.put(uri, idMap.get(id));
}
return JSON.encode(uriMap);
}
View
40
src/main/java/cactusServer/utils/App.java
// //PhysicsUtility.checkCollision(instance.)
// }
// }
// }
deletePlayerOfExceedTimeLimit();
removeInactivePlayers();
}
 
public void start(int interval) {
task.scheduleWithFixedDelay(this, interval, interval, TimeUnit.MILLISECONDS);
Instances.getInstance().getPlayers().put("player2", player2);
// ダミーオブジェクト
Instances.getInstance().getInstance("test1").createObject(new Position3D(0, 0, 0), new Velocity3D(),
new AngularVelocity3D(), new Quaternion3D(), new Attribute(true,1), 0);
// 確認用
// String player1Encode = JSON.encode(player1, true);
// String player2Encode = JSON.encode(player2, true);
// Player player1Decode = JSON.decode(player1Encode, Player.class);
// Player player2Decode = JSON.decode(player2Encode, Player.class);
// System.out.println(JSON.encode(player1Decode, true));
// System.out.println(JSON.encode(player2Decode, true));
// // 確認用
// String player1Encode = JSON.encode(player1, true);
// String player2Encode = JSON.encode(player2, true);
// Player player1Decode = JSON.decode(player1Encode, Player.class);
// Player player2Decode = JSON.decode(player2Encode, Player.class);
// System.out.println(JSON.encode(player1Decode, true));
// System.out.println(JSON.encode(player2Decode, true));
// JSON json = new JSON();
// String characterId = player1.getCharacterID();
// String encodeCharacterId = json.encode(characterId);
// System.out.println(characterId);
// System.out.println(encodeCharacterId);
// String position = json.encode(player1.getPosition());
// System.out.println(position);
}
private void deletePlayerOfExceedTimeLimit() {
private void removeInactivePlayers() {
long currentTime = System.nanoTime();
Iterator<Map.Entry<String, Player>> it = Instances.getInstance().getPlayers().entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, Player> entry = it.next();
String playerId = entry.getKey();
Player player = entry.getValue();
long lastOperateTime = player.getLastOperateTime();
System.out.println(currentTime + ", " + (lastOperateTime + Player.STOP_TIME_LIMIT) + " // playerId: " + playerId);
if (currentTime > (lastOperateTime + Player.STOP_TIME_LIMIT)) {
long lastUpdateTime = player.getLastUpdateTime();
System.out.println(currentTime + ", " + (lastUpdateTime + Player.STOP_TIME_LIMIT) + " // playerId: " + playerId);
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());