net.dat.killemall.screens.GameScreen.java Source code

Java tutorial

Introduction

Here is the source code for net.dat.killemall.screens.GameScreen.java

Source

//   Copyright 2012 Anton Holm, Arez Arazu, Gustav Larsson
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.

package net.dat.killemall.screens;

import net.dat.killemall.model.World;
import net.dat.killemall.view.WorldRenderer;
import net.dat.killemall.controller.WorldController;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.Game;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class GameScreen implements Screen, InputProcessor {

    private World gameWorld;
    private WorldRenderer renderer;
    private WorldController controller;
    private Game KEAGame;

    //Sprites som skall visas p GameScreen hmtas.
    private SpriteBatch spriteBatch;
    private Texture upTexture;
    private Texture downTexture;
    private Texture fireTexture;
    private Texture heartTexture;

    //Hmtar tillten strsta storlek fr hjd och bredd
    float x = Gdx.graphics.getWidth();
    float y = Gdx.graphics.getHeight();

    private int width, height;

    //En konstruktor fr en GameScreen med koppling till aktuellt spel
    // krvs fr att kunna hnvisa korrekt mellan olika Screens i applikationen.
    public GameScreen(Game ga) {

        KEAGame = ga;

    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0.1f, 0.1f, 0.1f, 1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

        //Om boolean-variabeln win i GameWorld visar true r samtliga niver avklarade.
        // D skall applikationen istllet visa upp vr WinScreen.
        if (gameWorld.getWin()) {

            KEAGame.setScreen(new WinScreen(KEAGame));
        }

        //Om boolean-variabeln fail i GameWorld visar true r samtliga extraliv frrlorade.
        // D skall applikationen istllet visa upp vr FailedScreen.
        if (gameWorld.getFail()) {

            KEAGame.setScreen(new FailedScreen(KEAGame));
        }

        //Hmtar aktuell controller samt renderare fr aktuell skrm
        // och uppdaterar stndigt dessa fr att aktuell visad bil stmmer
        // verrens med inpus samt spellogik.
        controller.update(delta);
        renderer.render();

        spriteBatch.begin();

        //Ritar ut samtliga knappar som anvnds p skrmen. Plaeringen av dessa r enbart
        // vald utifrn optimal ergonomi fr spelaren.
        spriteBatch.draw(upTexture, width / 40, height / 3, width / 10, height / 8);
        spriteBatch.draw(downTexture, width / 40, height / 15, width / 10, height / 8);
        spriteBatch.draw(fireTexture, (width - width / 10), height / 3, width / 10, height / 8);

        // Ritar ut samtliga extraliv som spelaren har kvar. Placeringen av dessa r enbart
        // vald utifrn lmplighet p skrmen. 
        // Antal varv i for-loopen baseras p variabeln health i GameWorld.
        for (int i = 0; i < gameWorld.getHealth(); i++) {
            spriteBatch.draw(heartTexture, width / 22 + (i * (width / 20)), (height - height / 12), width / 22,
                    height / 17);
        }

        spriteBatch.end();

    }

    //Om spelaren vnder p skrmen renderas spelet p ny tillgnglig storlek.
    @Override
    public void resize(int width, int height) {
        renderer.setSize(width, height);
        this.width = width;
        this.height = height;

    }

    //Hmtar aktuell spelplan, renderer och kontroll. Input kopplas sedan till
    // aktuella tryck som grs p spelplanen.
    @Override
    public void show() {
        gameWorld = new World();
        renderer = new WorldRenderer(gameWorld, false);
        controller = new WorldController(gameWorld);
        Gdx.input.setInputProcessor(this);

        // Hmtar aktuell spritebatch fr senare anvndning.
        spriteBatch = new SpriteBatch();
        upTexture = new Texture(Gdx.files.internal("images/up2.png"));
        downTexture = new Texture(Gdx.files.internal("images/down2.png"));
        fireTexture = new Texture(Gdx.files.internal("images/fire2.png"));
        heartTexture = new Texture(Gdx.files.internal("images/heart.png"));
    }

    @Override
    public void hide() {
        // TODO Auto-generated method stub

    }

    @Override
    public void pause() {
        // TODO Auto-generated method stub

    }

    @Override
    public void resume() {
        // TODO Auto-generated method stub

    }

    //Nr denna Screen stngs ned r input ej lngre aktuell och dumpas drmed.
    @Override
    public void dispose() {
        Gdx.input.setInputProcessor(null);

    }

    //Metod fr att koppla aktuella nedtryckningar av tangenter under skrmens
    //anvndning till knapptryckningar i controller.
    @Override
    public boolean keyDown(int keycode) {
        if (keycode == Keys.UP)
            controller.upPressed();
        if (keycode == Keys.DOWN)
            controller.downPressed();
        if (keycode == Keys.X)
            controller.firePressed();
        return true;
    }

    //Metod fr att koppla upphrandet av aktuella nedtryckningar av tangenter under skrmens
    //anvndning till knapptryckningar i controller.
    @Override
    public boolean keyUp(int keycode) {
        if (keycode == Keys.UP)
            controller.upReleased();
        if (keycode == Keys.DOWN)
            controller.downReleased();
        if (keycode == Keys.X)
            controller.fireReleased();
        return false;
    }

    @Override
    public boolean keyTyped(char character) {
        // TODO Auto-generated method stub
        return false;
    }

    // Metod fr att koppla aktuell berring av skrmen i androidtelefonen
    // till controllern. If-satserna baseras p placeringen av vilka zoner som ska
    // reagera p tryck. Zonerna r bestmde efter optimal ergonomi och r kopplade
    // till knappar som mlas ut under render-metod. Kopplar knapptryck till aktuell controller.
    @Override
    public boolean touchDown(int x1, int y1, int pointer, int button) {

        if (x1 > width / 40 && x1 < (width / 40 + width / 8) && y1 > (y - (height / 3 + height / 6))
                && y1 < (y - height / 3)) {
            controller.upPressed();
        }
        if (x1 > width / 40 && x1 < (width / 40 + width / 8) && y1 > (y - (height / 15 + height / 6))
                && y1 < (y - height / 15)) {
            controller.downPressed();
        }

        if (x1 > (width - width / 6) && x1 < (width) && y1 > (y - (height / 3 + height / 6))
                && y1 < (y - height / 4)) {
            controller.firePressed();
        }

        return true;

    }

    // Metod fr att koppla aktuell upphrande av berring av skrmen i androidtelefonen
    // till controllern. If-satserna baseras p placeringen av vilka zoner som ska
    // reagera p tryck. Zonerna r bestmde efter optimal ergonomi och r kopplade
    // till knappar som mlas ut under render-metod. Kopplar knapptryck till aktuell controller.
    @Override
    public boolean touchUp(int x1, int y1, int pointer, int button) {
        if (x1 > width / 40 && x1 < (width / 40 + width / 8) && y1 > (y - (height / 3 + height / 6))
                && y1 < (y - height / 3)) {
            controller.upReleased();
        }
        if (x1 > width / 40 && x1 < (width / 40 + width / 8) && y1 > (y - (height / 15 + height / 6))
                && y1 < (y - height / 15)) {
            controller.downReleased();
        }

        if (x1 > (width - width / 10) && x1 < ((width - width / 10) + width / 8)
                && y1 > (y - (height / 3 + height / 6)) && y1 < (y - height / 3)) {
            controller.fireReleased();
        }
        return true;
    }

    // Det skall inte vara mjligt att dra fingret ver skrmen fr att rra p sig.
    @Override
    public boolean touchDragged(int x, int y, int pointer) {
        // TODO Auto-generated method stub
        return false;
    }

    // Det skall inte vara mjligt att dra fingret ver skrmen fr att rra p sig.

    @Override
    public boolean touchMoved(int x, int y) {
        // TODO Auto-generated method stub
        return false;
    }

    // Det skall inte vara mjligt att scrolla p skrmen.

    @Override
    public boolean scrolled(int amount) {
        // TODO Auto-generated method stub
        return false;
    }

}