use of org.terasology.engine.persistence.PlayerStore in project Terasology by MovingBlocks.
the class StorageManagerTest method testCharacterSurvivesStorage.
@Test
public void testCharacterSurvivesStorage() {
esm.waitForCompletionOfPreviousSaveAndStartSaving();
esm.finishSavingAndShutdown();
PlayerStore restored = esm.loadPlayerStore(PLAYER_ID);
restored.restoreEntities();
assertTrue(restored.hasCharacter());
assertEquals(character, restored.getCharacter());
}
use of org.terasology.engine.persistence.PlayerStore in project Terasology by MovingBlocks.
the class StorageManagerTest method testPlayerRelevanceLocationSurvivesStorage.
@Test
public void testPlayerRelevanceLocationSurvivesStorage() {
Vector3f loc = new Vector3f(1, 2, 3);
character.addComponent(new LocationComponent(loc));
esm.waitForCompletionOfPreviousSaveAndStartSaving();
esm.finishSavingAndShutdown();
PlayerStore restored = esm.loadPlayerStore(PLAYER_ID);
assertEquals(loc, restored.getRelevanceLocation());
}
use of org.terasology.engine.persistence.PlayerStore in project Terasology by MovingBlocks.
the class StorageManagerTest method testGetUnstoredPlayerReturnsNewStor.
@Test
@Order(1)
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.engine.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();
}
}
}
use of org.terasology.engine.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);
Vector3ic minViewDist = ViewDistance.LEGALLY_BLIND.getChunkDistance();
if (playerStore.hasCharacter()) {
Vector3fc 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();
Vector3ic 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 {
Vector3fc 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));
}
}
}
Aggregations