use of org.terasology.persistence.PlayerStore in project Terasology by MovingBlocks.
the class StorageManagerTest method testGetUnstoredPlayerReturnsNewStor.
@Test
public void testGetUnstoredPlayerReturnsNewStor() {
PlayerStore store = esm.loadPlayerStore(PLAYER_ID);
assertNotNull(store);
assertEquals(new Vector3f(), store.getRelevanceLocation());
assertFalse(store.hasCharacter());
assertEquals(PLAYER_ID, store.getId());
}
use of org.terasology.persistence.PlayerStore in project Terasology by MovingBlocks.
the class PlayerSystem method onConnect.
@ReceiveEvent(components = ClientComponent.class)
public void onConnect(ConnectedEvent connected, EntityRef entity) {
LocationComponent loc = entity.getComponent(LocationComponent.class);
// for new clients, the player store will return default values
PlayerStore playerStore = connected.getPlayerStore();
Client owner = networkSystem.getOwner(entity);
Vector3i minViewDist = ViewDistance.LEGALLY_BLIND.getChunkDistance();
if (playerStore.hasCharacter()) {
Vector3f storedLocation = playerStore.getRelevanceLocation();
loc.setWorldPosition(storedLocation);
entity.saveComponent(loc);
if (worldProvider.isBlockRelevant(storedLocation)) {
// chunk for spawning location is ready, so spawn right now
playerStore.restoreEntities();
EntityRef character = playerStore.getCharacter();
Vector3i viewDist = owner.getViewDistance().getChunkDistance();
addRelevanceEntity(entity, viewDist, owner);
restoreCharacter(entity, character);
} else {
// otherwise wait until chunk is ready
addRelevanceEntity(entity, minViewDist, owner);
clientsPreparingToSpawn.add(new SpawningClientInfo(entity, storedLocation, playerStore));
}
} else {
Vector3f spawnPosition = worldGenerator.getSpawnPosition(entity);
loc.setWorldPosition(spawnPosition);
entity.saveComponent(loc);
addRelevanceEntity(entity, minViewDist, owner);
if (worldProvider.isBlockRelevant(spawnPosition)) {
spawnPlayer(entity);
} else {
clientsPreparingToSpawn.add(new SpawningClientInfo(entity, spawnPosition));
}
}
}
use of org.terasology.persistence.PlayerStore in project Terasology by MovingBlocks.
the class PlayerSystem method update.
@Override
public void update(float delta) {
Iterator<SpawningClientInfo> i = clientsPreparingToSpawn.iterator();
while (i.hasNext()) {
SpawningClientInfo spawning = i.next();
if (worldProvider.isBlockRelevant(spawning.position)) {
PlayerStore playerStore = spawning.playerStore;
if (playerStore == null) {
spawnPlayer(spawning.clientEntity);
} else {
playerStore.restoreEntities();
EntityRef character = playerStore.getCharacter();
restoreCharacter(spawning.clientEntity, character);
}
i.remove();
}
}
i = clientsPreparingToRespawn.iterator();
while (i.hasNext()) {
SpawningClientInfo spawning = i.next();
if (worldProvider.isBlockRelevant(spawning.position)) {
respawnPlayer(spawning.clientEntity);
i.remove();
}
}
}
Aggregations