SimplyGladiators/core/src/com/saltosion/gladiator/GladiatorBrawler.java

195 lines
6.9 KiB
Java

package com.saltosion.gladiator;
import com.badlogic.ashley.core.Engine;
import com.badlogic.ashley.core.Entity;
import com.badlogic.ashley.core.EntityListener;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.math.Vector2;
import com.saltosion.gladiator.components.CCombat;
import com.saltosion.gladiator.components.CPhysics;
import com.saltosion.gladiator.components.CRenderedObject;
import com.saltosion.gladiator.gui.ButtonNode;
import com.saltosion.gladiator.gui.GUIManager;
import com.saltosion.gladiator.input.InputHandler;
import com.saltosion.gladiator.listeners.CombatListener;
import com.saltosion.gladiator.systems.CombatSystem;
import com.saltosion.gladiator.systems.MiscManagerSystem;
import com.saltosion.gladiator.systems.PhysicsSystem;
import com.saltosion.gladiator.systems.RenderingSystem;
import com.saltosion.gladiator.util.AppUtil;
import com.saltosion.gladiator.util.Direction;
import com.saltosion.gladiator.util.Global;
import com.saltosion.gladiator.util.Log;
import com.saltosion.gladiator.util.Name;
import com.saltosion.gladiator.util.SpriteLoader;
import com.saltosion.gladiator.util.SpriteSequence;
public class GladiatorBrawler extends ApplicationAdapter {
private Engine engine;
private GUIManager guiManager;
private InputHandler inputHandler;
private Entity player;
@Override
public void create() {
// Initialize the Engine
engine = new Engine();
AppUtil.engine = engine;
engine.addSystem(new PhysicsSystem());
engine.addSystem(new RenderingSystem());
engine.addSystem(new CombatSystem());
engine.addSystem(new MiscManagerSystem());
engine.addEntityListener(new EntityListener() {
@Override
public void entityAdded(Entity entity) {
PhysicsSystem ps = engine.getSystem(PhysicsSystem.class);
ps.updateEntities(engine);
RenderingSystem rs = engine.getSystem(RenderingSystem.class);
rs.updateEntities(engine);
CombatSystem cs = engine.getSystem(CombatSystem.class);
cs.updateEntities(engine);
MiscManagerSystem mms = engine.getSystem(MiscManagerSystem.class);
mms.updateEntities(engine);
}
@Override
public void entityRemoved(Entity entity) {
PhysicsSystem ps = engine.getSystem(PhysicsSystem.class);
ps.updateEntities(engine);
RenderingSystem rs = engine.getSystem(RenderingSystem.class);
rs.updateEntities(engine);
CombatSystem cs = engine.getSystem(CombatSystem.class);
cs.updateEntities(engine);
MiscManagerSystem mms = engine.getSystem(MiscManagerSystem.class);
mms.updateEntities(engine);
}
});
// Initialize GUI
guiManager = new GUIManager();
AppUtil.guiManager = this.guiManager;
initializeTestGUI();
// Initialize stuff in the world
initializePlayer();
initializeTestDummy();
initializeLevel();
// Initialize input
inputHandler = new InputHandler();
Gdx.input.setInputProcessor(inputHandler);
}
@Override
public void render() {
engine.update(Gdx.graphics.getDeltaTime());
}
public void initializePlayer() {
player = new Entity();
CRenderedObject renderedObject = new CRenderedObject();
Sprite player1 = SpriteLoader.loadSprite(Name.PLAYERIMG, 0, 0, 64, 64);
Sprite player2 = SpriteLoader.loadSprite(Name.PLAYERIMG, 1, 0, 64, 64);
SpriteSequence sequence = new SpriteSequence(1).addSprite(player1).addSprite(player2);
renderedObject.addSequence("Idle", sequence);
renderedObject.playAnimation("Idle");
player.add(renderedObject);
player.add(new CPhysics().setSize(2, 4).setPosition(0, 5));
player.add(new CCombat().setBaseDamage(100).setHealth(1000));
engine.addEntity(player);
AppUtil.player = player;
}
public void initializeTestDummy() {
Entity dummy = new Entity();
CRenderedObject renderedObject = new CRenderedObject();
Sprite player1 = SpriteLoader.loadSprite(Name.PLAYERIMG, 0, 0, 64, 64);
Sprite player2 = SpriteLoader.loadSprite(Name.PLAYERIMG, 1, 0, 64, 64);
SpriteSequence sequence = new SpriteSequence(1).addSprite(player1).addSprite(player2);
renderedObject.addSequence("Idle", sequence);
renderedObject.playAnimation("Idle");
dummy.add(renderedObject);
dummy.add(new CPhysics().setSize(2, 4).setPosition(-6, 5));
dummy.add(new CCombat().setBaseDamage(100).setHealth(1000).setSwingCD(.5f).setCombatListener(
new CombatListener() {
@Override
public void died(Entity source, int damageTaken) {
System.out.println("Nooooo! I died! I will revenge this!");
}
@Override
public void damageTaken(Entity source, int damageTaken) {
System.out.println(String.format("I took %d damage! Damnit!", damageTaken));
}
}));
engine.addEntity(dummy);
dummy.getComponent(CCombat.class).inputs.put(Direction.UP, true);
}
public void initializeLevel() {
Entity ground = new Entity();
Sprite groundSprite = SpriteLoader.loadSprite(Name.GROUNDIMG);
CRenderedObject renderedObject = new CRenderedObject(groundSprite);
ground.add(renderedObject);
CPhysics physics = new CPhysics().setMovable(false).setGravityApplied(false).setProcessCollisions(false)
.setSize(groundSprite.getRegionWidth() * Global.SPRITE_SCALE,
groundSprite.getRegionHeight() * Global.SPRITE_SCALE);
physics.getPosition().set(new Vector2(0, -4));
ground.add(physics);
Sprite wallSprite = SpriteLoader.loadSprite(Name.WALLIMG);
Entity wall0 = new Entity();
CRenderedObject wall0RenderedObject = new CRenderedObject(wallSprite);
CPhysics wall0Physics = new CPhysics().setMovable(false).setGravityApplied(false).setProcessCollisions(false)
.setSize(wallSprite.getRegionWidth() * Global.SPRITE_SCALE,
wallSprite.getRegionHeight() * Global.SPRITE_SCALE);
wall0Physics.getPosition().set(new Vector2(6, 0));
wall0.add(wall0RenderedObject);
wall0.add(wall0Physics);
Entity wall1 = new Entity();
CRenderedObject wall1RenderedObject = new CRenderedObject(wallSprite);
CPhysics wall1Physics = new CPhysics().setMovable(false).setGravityApplied(false).setProcessCollisions(false)
.setSize(wallSprite.getRegionWidth() * Global.SPRITE_SCALE,
wallSprite.getRegionHeight() * Global.SPRITE_SCALE);
wall1Physics.getPosition().set(new Vector2(-6, 0));
wall1.add(wall1RenderedObject);
wall1.add(wall1Physics);
engine.addEntity(ground);
engine.addEntity(wall0);
engine.addEntity(wall1);
}
public void initializeTestGUI() {
Sprite img = SpriteLoader.loadSprite(Name.GROUNDIMG);
ButtonNode button = new ButtonNode("test-button", img, img) {
@Override
public void click(float x, float y, Input.Buttons mouseButton) {
Log.info("I should never be pressed!");
}
};
guiManager.getRootNode().addChild(button);
}
@Override
public void resize(int width, int height) {
super.resize(width, height);
RenderingSystem rs = engine.getSystem(RenderingSystem.class);
float aspectratio = ((float) width) / ((float) height);
rs.aspectratio = aspectratio;
rs.setViewport((int) (AppUtil.VPHEIGHT_CONST * aspectratio), AppUtil.VPHEIGHT_CONST);
}
}