use of com.bladecoder.engine.model.World in project bladecoder-adventure-engine by bladecoder.
the class DefaultSceneScreen method update.
private void update(float delta) {
final World world = World.getInstance();
currentActor = null;
if (!world.isDisposed()) {
world.update(delta * speed);
// if the game ends returns
if (world.isDisposed())
return;
}
AssetState assetState = world.getAssetState();
if (world.getAssetState() != AssetState.LOADED) {
resetUI();
if (assetState == AssetState.LOAD_ASSETS || assetState == AssetState.LOAD_ASSETS_AND_INIT_SCENE) {
// update() to set LOADING state
world.update(0);
}
// TRY TO LOAD THE ASSETS FOR LOADING_WAIT_TIME_MS TO AVOID
// BLACK/LOADING SCREEN
long t0 = System.currentTimeMillis();
long t = t0;
while (EngineAssetManager.getInstance().isLoading() && t - t0 < LOADING_WAIT_TIME_MS) {
t = System.currentTimeMillis();
}
if (t - t0 >= LOADING_WAIT_TIME_MS) {
// Sets loading screen if resources are not loaded yet
ui.setCurrentScreen(Screens.LOADING_SCREEN);
} else {
world.resize(viewport.getWorldWidth(), viewport.getWorldHeight());
// update() to retrieve assets and exec init verb
world.update(0);
}
return;
}
// CHECK FOR STATE CHANGES
switch(state) {
case CUT_MODE:
if (!world.inCutMode())
setUIState(UIStates.SCENE_MODE);
break;
case DIALOG_MODE:
stage.setScrollFocus(null);
if (!world.hasDialogOptions())
setUIState(UIStates.SCENE_MODE);
else if (world.inCutMode())
setUIState(UIStates.CUT_MODE);
else
stage.setScrollFocus(dialogUI);
break;
case INVENTORY_MODE:
if (!inventoryUI.isVisible())
setUIState(UIStates.SCENE_MODE);
else if (world.inCutMode())
setUIState(UIStates.CUT_MODE);
else if (world.hasDialogOptions())
setUIState(UIStates.DIALOG_MODE);
break;
case PAUSE_MODE:
if (!world.isPaused())
setUIState(UIStates.SCENE_MODE);
break;
case PLAY_MODE:
if (!recorder.isPlaying())
setUIState(UIStates.SCENE_MODE);
break;
case TESTER_BOT_MODE:
if (!testerBot.isEnabled())
setUIState(UIStates.SCENE_MODE);
break;
case SCENE_MODE:
if (world.isPaused())
setUIState(UIStates.PAUSE_MODE);
else if (world.inCutMode())
setUIState(UIStates.CUT_MODE);
else if (recorder.isPlaying())
setUIState(UIStates.PLAY_MODE);
else if (testerBot.isEnabled())
setUIState(UIStates.TESTER_BOT_MODE);
else if (inventoryUI.isVisible())
setUIState(UIStates.INVENTORY_MODE);
else if (world.hasDialogOptions())
setUIState(UIStates.DIALOG_MODE);
break;
}
stage.act(delta);
if (state == UIStates.PAUSE_MODE)
return;
recorder.update(delta * speed);
testerBot.update(delta * speed);
switch(state) {
case INVENTORY_MODE:
unproject2Tmp.set(Gdx.input.getX(), Gdx.input.getY());
inventoryUI.screenToLocalCoordinates(unproject2Tmp);
currentActor = inventoryUI.getItemAt(unproject2Tmp.x, unproject2Tmp.y);
break;
case SCENE_MODE:
final float tolerance;
if (inventoryUI.isDragging())
tolerance = DPIUtils.getTouchMinSize();
else if (Gdx.input.isPeripheralAvailable(Peripheral.MultitouchScreen))
tolerance = DPIUtils.getTouchMinSize() / 2;
else
tolerance = 0;
currentActor = world.getInteractiveActorAtInput(viewport, tolerance);
inventoryButton.setVisible(world.getInventory().isVisible());
break;
default:
}
if (!pie.isVisible()) {
if (currentActor != null) {
if (showDesc)
pointer.setDesc(currentActor.getDesc());
if (currentActor.getVerb("leave") != null) {
TextureRegion r = null;
if (currentActor.getVerb("leave").getIcon() != null && (r = getUI().getSkin().getAtlas().findRegion(currentActor.getVerb("leave").getIcon())) != null) {
pointer.setIcon(r);
} else {
pointer.setLeaveIcon(calcLeaveArrowRotation(currentActor));
}
} else
pointer.setHotspotIcon();
} else {
pointer.setDefaultIcon();
}
}
}
use of com.bladecoder.engine.model.World in project bladecoder-adventure-engine by bladecoder.
the class RetroSceneScreen method drawDebugText.
private void drawDebugText(SpriteBatch batch) {
World w = World.getInstance();
w.getSceneCamera().getInputUnProject(worldViewport, unprojectTmp);
Color color;
sbTmp.setLength(0);
if (EngineLogger.lastError != null) {
sbTmp.append(EngineLogger.lastError);
color = Color.RED;
} else {
sbTmp.append("( ");
sbTmp.append((int) unprojectTmp.x);
sbTmp.append(", ");
sbTmp.append((int) unprojectTmp.y);
sbTmp.append(") FPS:");
sbTmp.append(Gdx.graphics.getFramesPerSecond());
// sbTmp.append(" Density:");
// sbTmp.append(Gdx.graphics.getDensity());
// sbTmp.append(" UI Multiplier:");
// sbTmp.append(DPIUtils.getSizeMultiplier());
sbTmp.append(" UI STATE: ");
sbTmp.append(state.toString());
if (w.getCurrentScene().getPlayer() != null) {
sbTmp.append(" Depth Scl: ");
sbTmp.append(w.getCurrentScene().getFakeDepthScale(unprojectTmp.y));
}
color = Color.WHITE;
}
String strDebug = sbTmp.toString();
textLayout.setText(ui.getSkin().getFont("debug"), strDebug, color, worldViewport.getScreenWidth(), Align.left, true);
RectangleRenderer.draw(batch, 0, worldViewport.getScreenHeight() - textLayout.height - 10, textLayout.width, textLayout.height + 10, Color.BLACK);
ui.getSkin().getFont("debug").draw(batch, textLayout, 0, worldViewport.getScreenHeight() - 5);
// Draw actor states when debug
if (EngineLogger.getDebugLevel() == EngineLogger.DEBUG1) {
for (BaseActor a : w.getCurrentScene().getActors().values()) {
Rectangle r = a.getBBox().getBoundingRectangle();
sbTmp.setLength(0);
sbTmp.append(a.getId());
if (a instanceof InteractiveActor && ((InteractiveActor) a).getState() != null)
sbTmp.append(".").append(((InteractiveActor) a).getState());
unprojectTmp.set(r.getX(), r.getY(), 0);
w.getSceneCamera().scene2screen(worldViewport, unprojectTmp);
if (w.getInventory().isVisible()) {
// unprojectTmp.y += verbUI.getHeight();
}
ui.getSkin().getFont("debug").draw(batch, sbTmp.toString(), unprojectTmp.x, unprojectTmp.y);
}
}
}
use of com.bladecoder.engine.model.World in project bladecoder-adventure-engine by bladecoder.
the class RetroSceneScreen method resize.
@Override
public void resize(int width, int height) {
final World world = World.getInstance();
if (!world.isDisposed()) {
screenViewport.setWorldSize(world.getWidth(), world.getHeight());
screenViewport.update(width, height, true);
worldViewport.setScreenBounds(screenViewport.getScreenX(), screenViewport.getScreenY(), screenViewport.getScreenWidth(), screenViewport.getScreenHeight());
world.resize(screenViewport.getWorldWidth(), screenViewport.getWorldHeight());
}
pointer.resize();
verbUI.setSize(screenViewport.getScreenWidth(), screenViewport.getScreenHeight() * UI_SCREEN_PERCENT);
float size = DPIUtils.getPrefButtonSize();
float margin = DPIUtils.getMarginSize();
menuButton.setSize(size, size);
menuButton.setPosition(stage.getViewport().getScreenWidth() - menuButton.getWidth() - margin, stage.getViewport().getScreenHeight() - menuButton.getHeight() - margin);
}
use of com.bladecoder.engine.model.World in project bladecoder-adventure-engine by bladecoder.
the class RetroSceneScreen method drawHotspots.
private void drawHotspots(SpriteBatch batch) {
final World world = World.getInstance();
for (BaseActor a : world.getCurrentScene().getActors().values()) {
if (!(a instanceof InteractiveActor) || !a.isVisible() || a == world.getCurrentScene().getPlayer())
continue;
InteractiveActor ia = (InteractiveActor) a;
if (!ia.canInteract())
continue;
Polygon p = a.getBBox();
if (p == null) {
EngineLogger.error("ERROR DRAWING HOTSPOT FOR: " + a.getId());
}
Rectangle r = a.getBBox().getBoundingRectangle();
unprojectTmp.set(r.getX() + r.getWidth() / 2, r.getY() + r.getHeight() / 2, 0);
world.getSceneCamera().scene2screen(worldViewport, unprojectTmp);
if (world.getInventory().isVisible()) {
// unprojectTmp.y += verbUI.getHeight();
}
if (ia.getDesc() == null) {
float size = DPIUtils.ICON_SIZE * DPIUtils.getSizeMultiplier();
Drawable drawable = ((TextureRegionDrawable) getUI().getSkin().getDrawable("circle")).tint(Color.RED);
drawable.draw(batch, unprojectTmp.x - size / 2, unprojectTmp.y - size / 2, size, size);
} else {
BitmapFont font = getUI().getSkin().getFont("desc");
String desc = ia.getDesc();
if (desc.charAt(0) == I18N.PREFIX)
desc = I18N.getString(desc.substring(1));
textLayout.setText(font, desc);
float textX = unprojectTmp.x - textLayout.width / 2;
float textY = unprojectTmp.y + textLayout.height;
RectangleRenderer.draw(batch, textX - 8, textY - textLayout.height - 8, textLayout.width + 16, textLayout.height + 16, Color.BLACK);
font.draw(batch, textLayout, textX, textY);
}
}
}
use of com.bladecoder.engine.model.World in project bladecoder-adventure-engine by bladecoder.
the class RetroSceneScreen method update.
private void update(float delta) {
final World world = World.getInstance();
currentActor = null;
if (!world.isDisposed()) {
world.update(delta * speed);
}
AssetState assetState = world.getAssetState();
if (assetState != AssetState.LOADED) {
ui.setCurrentScreen(Screens.LOADING_SCREEN);
return;
}
// CHECK FOR STATE CHANGES
switch(state) {
case CUT_MODE:
if (!world.inCutMode())
setUIState(UIStates.SCENE_MODE);
break;
case DIALOG_MODE:
if (world.getCurrentDialog() == null)
setUIState(UIStates.SCENE_MODE);
else if (world.inCutMode())
setUIState(UIStates.CUT_MODE);
break;
case PAUSE_MODE:
if (!world.isPaused())
setUIState(UIStates.SCENE_MODE);
break;
case PLAY_MODE:
if (!recorder.isPlaying())
setUIState(UIStates.SCENE_MODE);
break;
case TESTER_BOT_MODE:
if (!testerBot.isEnabled())
setUIState(UIStates.SCENE_MODE);
break;
case SCENE_MODE:
if (world.isPaused())
setUIState(UIStates.PAUSE_MODE);
else if (world.inCutMode())
setUIState(UIStates.CUT_MODE);
else if (recorder.isPlaying())
setUIState(UIStates.PLAY_MODE);
else if (testerBot.isEnabled())
setUIState(UIStates.TESTER_BOT_MODE);
else if (world.getCurrentDialog() != null)
setUIState(UIStates.DIALOG_MODE);
break;
}
stage.act(delta);
worldViewportStage.act(delta);
if (state == UIStates.PAUSE_MODE)
return;
recorder.update(delta * speed);
testerBot.update(delta * speed);
if (state == UIStates.SCENE_MODE) {
final float tolerance;
if (Gdx.input.isPeripheralAvailable(Peripheral.MultitouchScreen))
tolerance = DPIUtils.getTouchMinSize();
else
tolerance = 0;
currentActor = world.getInteractiveActorAtInput(worldViewport, tolerance);
verbUI.setCurrentActor(currentActor);
if (world.getInventory().isVisible())
verbUI.show();
else
verbUI.hide();
}
}
Aggregations