You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

237 lines
6.6 KiB

package com.trs.game;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.PolygonRegion;
import com.badlogic.gdx.graphics.g2d.PolygonSprite;
import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.math.Polygon;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.utils.Timer;
import com.trs.game.model.Model;
import com.trs.game.model.Projectile;
import com.trs.game.model.Wall;
import com.trs.game.view.View;
import com.trs.game.view.Button;
import com.trs.game.view.Screen;
import com.trs.game.view.Screens.EndScreen;
import com.trs.game.view.Screens.GameScreen;
import com.trs.game.view.Screens.MainMenuScreen;
public class Controller extends ApplicationAdapter implements InputProcessor {
final int GAME_WORLD_WIDTH = 1600;
final int GAME_WORLD_HEIGHT = 900;
SpriteBatch batch;
ShapeRenderer renderer;
PolygonSpriteBatch polygonSpriteBatch;
Timer wallTimer;
Model model;
View view;
BitmapFont font;
Texture textureSolid;
Pixmap pix;
Screen screen;
@Override
public void create () {
batch = new SpriteBatch();
renderer = new ShapeRenderer();
polygonSpriteBatch = new PolygonSpriteBatch();
model = new Model();
view = new View();
wallTimer = new Timer();
wallTimer.scheduleTask(new Timer.Task() {
@Override
public void run() {
screen.timer();
if(screen.getId() == 1) {
model.timerStep();
}
}
}, 0, 0.05f);
font = new BitmapFont();
// BITMAP FONT
font = new BitmapFont();
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("font.ttf"));
FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
parameter.size = 21;
font = generator.generateFont(parameter);
generator.dispose();
font.setColor(Color.BLACK);
//
//POLYGON STUFF
pix = new Pixmap(1, 1, Pixmap.Format.RGBA8888);
pix.setColor(Color.BLACK); // DE is red, AD is green and BE is blue.
pix.fill();
textureSolid = new Texture(pix);
screen = new MainMenuScreen(GAME_WORLD_WIDTH,GAME_WORLD_HEIGHT);
Gdx.input.setInputProcessor(this);
}
@Override
public void render () {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
// WORKAROUND, BECAUSE MOUSEMOVED NOT WORKING WHILE TOUCHDOWN
if(screen.getId() == 1) model.adjustWall(Gdx.input.getX(), GAME_WORLD_HEIGHT - Gdx.input.getY());
screen.render(batch,renderer,font);
// MODEL DRAWING
if(screen.getId() == 1){
// DRAW WALLS
for(Wall wall : model.getWalls()){
PolygonSprite poly;
PolygonRegion polyReg = new PolygonRegion(new TextureRegion(textureSolid),
wall.getPolygon().getVertices(), new short[] {
0, 1, 2, // Two triangles using vertex indices.
0, 2, 3 // Take care of the counter-clockwise direction.
});
poly = new PolygonSprite(polyReg);
polygonSpriteBatch.begin();
poly.draw(polygonSpriteBatch);
polygonSpriteBatch.end();
}
// DRAW PROJECTILES
renderer.begin(ShapeRenderer.ShapeType.Filled);
for(Projectile projectile : model.getProjectiles()){
PolygonSprite poly;
PolygonRegion polyReg = new PolygonRegion(new TextureRegion(textureSolid),
projectile.getPolygon().getVertices(), new short[] {
0, 1, 2, // Two triangles using vertex indices.
0, 2, 3 // Take care of the counter-clockwise direction.
});
poly = new PolygonSprite(polyReg);
polygonSpriteBatch.begin();
poly.draw(polygonSpriteBatch);
polygonSpriteBatch.end();
}
// TEMP POLYGON
if(model.getTempPolygon() != null){
PolygonSprite poly2;
PolygonRegion polyReg = new PolygonRegion(new TextureRegion(textureSolid),
model.getTempPolygon().getVertices(), new short[]{
0, 1, 2, // Two triangles using vertex indices.
0, 2, 3 // Take care of the counter-clockwise direction.
});
poly2 = new PolygonSprite(polyReg);
polygonSpriteBatch.begin();
poly2.draw(polygonSpriteBatch);
polygonSpriteBatch.end();
renderer.end();
batch.begin();
font.setColor(Color.BLACK);
if(model.getCurrentLength()!=0)font.draw(batch, ""+model.getCurrentLength(), Gdx.input.getX()+10, GAME_WORLD_HEIGHT - Gdx.input.getY()+10);
batch.end();
renderer.begin(ShapeRenderer.ShapeType.Filled);
}
//
renderer.end();
// write left Length
batch.begin();
font.setColor(Color.BLACK);
font.draw(batch, ""+model.getLeftWallLength(), 1500f,800f);
batch.end();
// DRAW MONSTER
//model.getMonster().drawMonster(renderer,polygonSpriteBatch);
}
}
@Override
public void dispose () {
batch.dispose();
renderer.dispose();
}
public void timerStart(){
wallTimer.start();
}
public void timerStop(){
wallTimer.stop();
}
@Override
public boolean keyDown(int keycode) {
return false;
}
@Override
public boolean keyUp(int keycode) {
return false;
}
@Override
public boolean keyTyped(char character) {
return false;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
ManageButtonEvent(screen.touchDown(screenX,GAME_WORLD_HEIGHT-screenY));
if(screen.getId() == 1) model.startWall(screenX, GAME_WORLD_HEIGHT - screenY);
return true;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
if(screen.getId() == 1) model.finishWall(screenX, GAME_WORLD_HEIGHT - screenY);
return true;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
//if(screen.getId() == 1) model.adjustWall(screenX, GAME_WORLD_HEIGHT - screenY);
//return true;
return false;
}
@Override
public boolean scrolled(int amount) {
return false;
}
public void ManageButtonEvent(int keycode){
switch(keycode){
case 0: //GOTO MAINMENU
screen = new MainMenuScreen(GAME_WORLD_WIDTH,GAME_WORLD_HEIGHT);
break;
case 1: //GOTO GAMESCREEN
model = new Model();
screen = new GameScreen(GAME_WORLD_WIDTH,GAME_WORLD_HEIGHT);
break;
case 2: //GOTO ENDSCREEN
screen = new EndScreen(GAME_WORLD_WIDTH,GAME_WORLD_HEIGHT);
break;
}
}
}