Search in sources :

Example 1 with AssetState

use of com.bladecoder.engine.model.World.AssetState 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 2 with AssetState

use of com.bladecoder.engine.model.World.AssetState 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)2 AssetState (com.bladecoder.engine.model.World.AssetState)2 TextureRegion (com.badlogic.gdx.graphics.g2d.TextureRegion)1