de.bitbrain.craft.screens.IngameScreen.java Source code

Java tutorial

Introduction

Here is the source code for de.bitbrain.craft.screens.IngameScreen.java

Source

/*
 * Craft - Crafting game for Android, PC and Browser.
 * Copyright (C) 2014 Miguel Gonzalez
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

package de.bitbrain.craft.screens;

import net.engio.mbassy.listener.Handler;

import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Container;
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup;
import com.badlogic.gdx.scenes.scene2d.utils.Align;
import com.badlogic.gdx.utils.viewport.FillViewport;
import com.badlogic.gdx.utils.viewport.Viewport;
import com.google.inject.Inject;

import de.bitbrain.craft.Assets;
import de.bitbrain.craft.Sizes;
import de.bitbrain.craft.audio.SoundUtils;
import de.bitbrain.craft.core.professions.ProfessionLogicFactory;
import de.bitbrain.craft.events.KeyEvent;
import de.bitbrain.craft.graphics.IconManager;
import de.bitbrain.craft.inject.PostConstruct;
import de.bitbrain.craft.models.Profession;
import de.bitbrain.craft.ui.DragDropHandler;
import de.bitbrain.craft.ui.ItemList;
import de.bitbrain.craft.ui.Tabs;
import de.bitbrain.craft.ui.widgets.CraftingWidget;
import de.bitbrain.craft.ui.widgets.ItemBagThumblist;
import de.bitbrain.craft.ui.widgets.PlayerWidget;
import de.bitbrain.craft.ui.widgets.RecipeWidget;
import de.bitbrain.craft.ui.widgets.TabWidget;

/**
 * Displays the main game
 * 
 * @author Miguel Gonzalez <miguel-gonzalez@gmx.de>
 * @since 1.0
 * @version 1.0
 */
public class IngameScreen extends AbstractScreen {

    @Inject
    private DragDropHandler dragDropHandler;

    @Inject
    private IconManager iconManager;

    @Inject
    private TabWidget tabView;

    @Inject
    private RecipeWidget recipeView;

    @Inject
    private ItemBagThumblist itemBagThumblistView;

    private PlayerWidget playerWidget;

    private ItemList itemList;

    private CraftingWidget craftingWidget;

    @PostConstruct
    public void init() {
        craftingWidget = new CraftingWidget(ProfessionLogicFactory.create(Profession.current));
        playerWidget = new PlayerWidget(Profession.current);
    }

    @Override
    protected void onCreateStage(Stage stage) {
        Container<TabWidget> container = new Container<TabWidget>(tabView);
        stage.addActor(container);
        stage.addActor(tabView);
        stage.addActor(craftingWidget);
        stage.addActor(playerWidget);
        stage.addActor(itemBagThumblistView);
        tabView.addTab(Tabs.ITEMS, Assets.TEX_ICON_ITEMS, generateItemView());
        tabView.addTab(Tabs.CRAFTING, Assets.TEX_ICON_HAMMER, recipeView);
        tabView.setTab(Tabs.ITEMS);
        tabView.hideTab(Tabs.CRAFTING);
    }

    @Override
    public void resize(int width, int height) {
        final float paddingFactor = 1.1f;
        super.resize(width, height);
        tabView.setWidth(Sizes.worldWidth() / 2f);
        tabView.setHeight(Sizes.worldHeight() / paddingFactor);
        tabView.setX((Sizes.worldHeight() - (Sizes.worldHeight() / paddingFactor)) / 2f);
        tabView.setY((Sizes.worldHeight() - (Sizes.worldHeight() / paddingFactor)) / 2f);
        craftingWidget.setWidth(Sizes.worldWidth() - tabView.getWidth() * 1.35f);
        craftingWidget.setHeight(craftingWidget.getWidth() / 2f);
        craftingWidget.setX(tabView.getX() + tabView.getWidth() + craftingWidget.getWidth() / 3.4f);
        craftingWidget.setY(Sizes.worldHeight() - craftingWidget.getHeight() - Sizes.worldHeight() / 4f);
        craftingWidget.animate();
        playerWidget.setWidth(450f);
        playerWidget.setHeight(90f);
        playerWidget.setX(Sizes.worldWidth() - playerWidget.getWidth() - Sizes.borderPadding() * 2);
        playerWidget.setY((Sizes.worldHeight() - (Sizes.worldHeight() / paddingFactor)) / 2f);
        itemBagThumblistView.setX(Sizes.worldWidth() - playerWidget.getWidth() - Sizes.borderPadding() * 2);
        itemBagThumblistView.setY((Sizes.worldHeight() - (Sizes.worldHeight() / paddingFactor)) / 2f);
        itemBagThumblistView.setWidth(450f);
        itemBagThumblistView.setHeight(200f);

    }

    /*
     * (non-Javadoc)
     * 
     * @see de.bitbrain.craft.screens.AbstractScreen#dispose()
     */
    @Override
    public void dispose() {
        super.dispose();
        iconManager.dispose();
        itemList.dispose();
        dragDropHandler.clear();
    }

    /*
     * (non-Javadoc)
     * 
     * @see de.bitbrain.craft.screens.AbstractScreen#onUpdate(float)
     */
    @Override
    protected void onUpdate(float delta) {
        iconManager.update();
    }

    @Override
    protected void onShow() {
    }

    private Actor generateItemView() {
        VerticalGroup itemView = new VerticalGroup();
        itemView.align(Align.left).fill().pad(Sizes.borderPadding());
        itemList = new ItemList(itemView);
        return generateScrollPane(itemView);
    }

    private ScrollPane generateScrollPane(Actor actor) {
        ScrollPane pane = new ScrollPane(actor);
        pane.setCancelTouchFocus(false);
        pane.setScrollingDisabled(true, false);
        return pane;
    }

    /*
     * (non-Javadoc)
     * 
     * @see de.bitbrain.craft.screens.AbstractScreen#onDraw(com.badlogic.gdx.graphics .g2d.Batch, float)
     */
    @Override
    protected void onDraw(Batch batch, float delta) {
    }

    @Override
    protected Viewport createViewport() {
        return new FillViewport(Sizes.worldWidth(), Sizes.worldHeight());
    }

    @Handler
    void onEvent(KeyEvent event) {
        if (event.getKey() == Keys.ESCAPE || event.getKey() == Keys.BACK) {
            setScreen(ProfessionScreen.class);
            SoundUtils.play(Assets.SND_ABORT, 1.0f, 0.7f);
        }
    }
}