use of org.terasology.engine.core.Time in project Terasology by MovingBlocks.
the class StateLoading method init.
@Override
public void init(GameEngine engine) {
this.context = engine.createChildContext();
headless = context.get(DisplayDevice.class).isHeadless();
CoreRegistry.setContext(context);
systemConfig = context.get(SystemConfig.class);
if (!headless) {
this.nuiManager = new NUIManagerInternal((TerasologyCanvasRenderer) context.get(CanvasRenderer.class), context);
context.put(NUIManager.class, nuiManager);
}
EngineTime time = (EngineTime) context.get(Time.class);
time.setPaused(true);
time.setGameTime(gameManifest.getTime());
context.get(Game.class).load(gameManifest);
switch(netMode) {
case CLIENT:
initClient();
break;
default:
initHost();
break;
}
progress = 0;
maxProgress = 0;
for (LoadProcess process : loadProcesses) {
maxProgress += process.getExpectedCost();
}
popStep();
if (nuiManager != null) {
loadingScreen = nuiManager.pushScreen("engine:loadingScreen", LoadingScreen.class);
loadingScreen.updateStatus(current.getMessage(), current.getProgress());
}
chunkGenerationStarted = false;
}
use of org.terasology.engine.core.Time in project Terasology by MovingBlocks.
the class StateLoading method onChunkLoaded.
@Override
public void onChunkLoaded(OnChunkLoaded chunkAvailable, EntityRef worldEntity) {
EngineTime time = (EngineTime) context.get(Time.class);
timeLastChunkGenerated = time.getRealTimeInMs();
}
use of org.terasology.engine.core.Time in project Terasology by MovingBlocks.
the class StateLoading method dispose.
@Override
public void dispose(boolean shuttingDown) {
EngineTime time = (EngineTime) context.get(Time.class);
time.setPaused(false);
}
use of org.terasology.engine.core.Time in project Terasology by MovingBlocks.
the class PrepareWorld method step.
@Override
public boolean step() {
if (worldRenderer.pregenerateChunks()) {
return true;
}
EngineTime time = (EngineTime) context.get(Time.class);
timeElapsed = time.getRealTimeInMs() - startTime;
return timeElapsed > 5000;
}
use of org.terasology.engine.core.Time in project Terasology by MovingBlocks.
the class StateLoading method update.
@Override
public void update(float delta) {
GameEngine gameEngine = context.get(GameEngine.class);
EngineTime time = (EngineTime) context.get(Time.class);
long startTime = time.getRealTimeInMs();
while (current != null && time.getRealTimeInMs() - startTime < 20 && !gameEngine.hasPendingState()) {
try {
if (current.step()) {
popStep();
}
} catch (Exception e) {
logger.error("Error while loading {}", current, e);
String errorMessage = String.format("Failed to load game. There was an error during \"%s\".", current == null ? "the last part" : current.getMessage());
gameEngine.changeState(new StateMainMenu(errorMessage));
CrashReporter.report(e, LoggingContext.getLoggingPath());
return;
}
}
if (current == null) {
if (nuiManager != null) {
nuiManager.closeScreen(loadingScreen);
nuiManager.setHUDVisible(true);
}
context.get(GameEngine.class).changeState(new StateIngame(gameManifest, context));
} else {
float progressValue = (progress + current.getExpectedCost() * current.getProgress()) / maxProgress;
if (nuiManager != null) {
loadingScreen.updateStatus(current.getMessage(), progressValue);
nuiManager.update(delta);
}
// chunk generation begins at the AwaitCharacterSpawn step
if (current instanceof AwaitCharacterSpawn && !chunkGenerationStarted) {
chunkGenerationStarted = true;
// in case no chunks generate, this should be set for a basis
timeLastChunkGenerated = time.getRealTimeInMs();
}
if (chunkGenerationStarted) {
long timeSinceLastChunk = time.getRealTimeInMs() - timeLastChunkGenerated;
long chunkGenerationTimeout = systemConfig.chunkGenerationFailTimeoutInMs.get();
if (timeSinceLastChunk > chunkGenerationTimeout) {
String errorMessage = "World generation timed out, check the log for more info";
gameEngine.changeState(new StateMainMenu(errorMessage));
}
}
}
}
Aggregations