Search in sources :

Example 16 with World

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();
        }
    }
}
Also used : TextureRegion(com.badlogic.gdx.graphics.g2d.TextureRegion) AssetState(com.bladecoder.engine.model.World.AssetState) World(com.bladecoder.engine.model.World)

Example 17 with World

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);
        }
    }
}
Also used : Color(com.badlogic.gdx.graphics.Color) InteractiveActor(com.bladecoder.engine.model.InteractiveActor) Rectangle(com.badlogic.gdx.math.Rectangle) BaseActor(com.bladecoder.engine.model.BaseActor) World(com.bladecoder.engine.model.World)

Example 18 with World

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);
}
Also used : World(com.bladecoder.engine.model.World)

Example 19 with World

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);
        }
    }
}
Also used : InteractiveActor(com.bladecoder.engine.model.InteractiveActor) Rectangle(com.badlogic.gdx.math.Rectangle) TextureRegionDrawable(com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable) Drawable(com.badlogic.gdx.scenes.scene2d.utils.Drawable) TextureRegionDrawable(com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable) BaseActor(com.bladecoder.engine.model.BaseActor) World(com.bladecoder.engine.model.World) Polygon(com.badlogic.gdx.math.Polygon) BitmapFont(com.badlogic.gdx.graphics.g2d.BitmapFont)

Example 20 with World

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();
    }
}
Also used : AssetState(com.bladecoder.engine.model.World.AssetState) World(com.bladecoder.engine.model.World)

Aggregations

World (com.bladecoder.engine.model.World)20 BaseActor (com.bladecoder.engine.model.BaseActor)7 Rectangle (com.badlogic.gdx.math.Rectangle)6 InteractiveActor (com.bladecoder.engine.model.InteractiveActor)6 Scene (com.bladecoder.engine.model.Scene)5 Drawable (com.badlogic.gdx.scenes.scene2d.utils.Drawable)4 BitmapFont (com.badlogic.gdx.graphics.g2d.BitmapFont)3 TextureRegion (com.badlogic.gdx.graphics.g2d.TextureRegion)3 TextureRegionDrawable (com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable)3 CharacterActor (com.bladecoder.engine.model.CharacterActor)3 SpriteActor (com.bladecoder.engine.model.SpriteActor)3 Color (com.badlogic.gdx.graphics.Color)2 Texture (com.badlogic.gdx.graphics.Texture)2 SpriteBatch (com.badlogic.gdx.graphics.g2d.SpriteBatch)2 Polygon (com.badlogic.gdx.math.Polygon)2 Vector2 (com.badlogic.gdx.math.Vector2)2 InputEvent (com.badlogic.gdx.scenes.scene2d.InputEvent)2 InputListener (com.badlogic.gdx.scenes.scene2d.InputListener)2 Stage (com.badlogic.gdx.scenes.scene2d.Stage)2 Button (com.badlogic.gdx.scenes.scene2d.ui.Button)2