Restructured lots of things & implemented game states.
This commit is contained in:
parent
f87f44da51
commit
35eca95cd8
@ -5,40 +5,27 @@ import com.badlogic.ashley.core.Entity;
|
|||||||
import com.badlogic.ashley.core.EntityListener;
|
import com.badlogic.ashley.core.EntityListener;
|
||||||
import com.badlogic.gdx.ApplicationAdapter;
|
import com.badlogic.gdx.ApplicationAdapter;
|
||||||
import com.badlogic.gdx.Gdx;
|
import com.badlogic.gdx.Gdx;
|
||||||
import com.badlogic.gdx.graphics.g2d.Sprite;
|
|
||||||
import com.badlogic.gdx.math.Vector2;
|
|
||||||
import com.saltosion.gladiator.components.CAI;
|
|
||||||
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.gui.GUIManager;
|
||||||
import com.saltosion.gladiator.gui.GUINode;
|
|
||||||
import com.saltosion.gladiator.gui.TextNode;
|
|
||||||
import com.saltosion.gladiator.gui.TextProperty;
|
|
||||||
import com.saltosion.gladiator.input.InputHandler;
|
import com.saltosion.gladiator.input.InputHandler;
|
||||||
import com.saltosion.gladiator.listeners.CombatListener;
|
import com.saltosion.gladiator.level.EntityFactory;
|
||||||
import com.saltosion.gladiator.listeners.ai.DummyAI;
|
import com.saltosion.gladiator.state.BaseState;
|
||||||
|
import com.saltosion.gladiator.state.InGameState;
|
||||||
import com.saltosion.gladiator.systems.AISystem;
|
import com.saltosion.gladiator.systems.AISystem;
|
||||||
import com.saltosion.gladiator.systems.CombatSystem;
|
import com.saltosion.gladiator.systems.CombatSystem;
|
||||||
import com.saltosion.gladiator.systems.MiscManagerSystem;
|
import com.saltosion.gladiator.systems.MiscManagerSystem;
|
||||||
import com.saltosion.gladiator.systems.PhysicsSystem;
|
import com.saltosion.gladiator.systems.PhysicsSystem;
|
||||||
import com.saltosion.gladiator.systems.RenderingSystem;
|
import com.saltosion.gladiator.systems.RenderingSystem;
|
||||||
import com.saltosion.gladiator.util.AppUtil;
|
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.Log;
|
||||||
import com.saltosion.gladiator.util.Name;
|
|
||||||
import com.saltosion.gladiator.util.SpriteLoader;
|
|
||||||
import com.saltosion.gladiator.util.SpriteSequence;
|
|
||||||
|
|
||||||
public class GladiatorBrawler extends ApplicationAdapter {
|
public class GladiatorBrawler extends ApplicationAdapter {
|
||||||
|
|
||||||
private Engine engine;
|
private Engine engine;
|
||||||
|
private EntityFactory entityFactory;
|
||||||
private GUIManager guiManager;
|
private GUIManager guiManager;
|
||||||
private InputHandler inputHandler;
|
private InputHandler inputHandler;
|
||||||
|
|
||||||
private Entity player;
|
private BaseState currentState;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void create() {
|
public void create() {
|
||||||
@ -47,7 +34,28 @@ public class GladiatorBrawler extends ApplicationAdapter {
|
|||||||
// Initialize the Engine
|
// Initialize the Engine
|
||||||
engine = new Engine();
|
engine = new Engine();
|
||||||
AppUtil.engine = engine;
|
AppUtil.engine = engine;
|
||||||
|
setupSystems();
|
||||||
|
|
||||||
|
// Initialize the EntityFactory
|
||||||
|
entityFactory = new EntityFactory();
|
||||||
|
AppUtil.entityFactory = entityFactory;
|
||||||
|
|
||||||
|
// Initialize GUI
|
||||||
|
guiManager = new GUIManager();
|
||||||
|
AppUtil.guiManager = this.guiManager;
|
||||||
|
|
||||||
|
// Initialize input
|
||||||
|
inputHandler = new InputHandler();
|
||||||
|
Gdx.input.setInputProcessor(inputHandler);
|
||||||
|
|
||||||
|
// Initialize states
|
||||||
|
BaseState.setMainClass(this);
|
||||||
|
setState(new InGameState());
|
||||||
|
|
||||||
|
Log.info("Successfully started the game.");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupSystems() {
|
||||||
engine.addSystem(new PhysicsSystem());
|
engine.addSystem(new PhysicsSystem());
|
||||||
engine.addSystem(new RenderingSystem());
|
engine.addSystem(new RenderingSystem());
|
||||||
engine.addSystem(new CombatSystem());
|
engine.addSystem(new CombatSystem());
|
||||||
@ -82,157 +90,43 @@ public class GladiatorBrawler extends ApplicationAdapter {
|
|||||||
ais.updateEntities(engine);
|
ais.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);
|
|
||||||
|
|
||||||
Log.info("Successfully started the game.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render() {
|
public void render() {
|
||||||
engine.update(Gdx.graphics.getDeltaTime());
|
engine.update(Gdx.graphics.getDeltaTime());
|
||||||
|
currentState.update(Gdx.graphics.getDeltaTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initializePlayer() {
|
public void setState(BaseState newState) {
|
||||||
player = new Entity();
|
if (newState != null) {
|
||||||
|
if (currentState != null) {
|
||||||
CRenderedObject renderedObject = new CRenderedObject();
|
currentState.destroy();
|
||||||
Sprite playertorso1 = SpriteLoader.loadSprite(Name.PLAYERIMG, 0, 0, 128, 112);
|
|
||||||
Sprite playertorso2 = SpriteLoader.loadSprite(Name.PLAYERIMG, 0, 1, 128, 112);
|
|
||||||
Sprite playerlegs1 = SpriteLoader.loadSprite(Name.PLAYERIMG, 1, 0, 128, 112);
|
|
||||||
Sprite playerlegs2 = SpriteLoader.loadSprite(Name.PLAYERIMG, 1, 1, 128, 112);
|
|
||||||
SpriteSequence torsosequence = new SpriteSequence(1).addSprite(playertorso1).addSprite(playertorso2);
|
|
||||||
SpriteSequence legsequence = new SpriteSequence(1).addSprite(playerlegs1).addSprite(playerlegs2);
|
|
||||||
renderedObject.setChannelName("default", "torso");
|
|
||||||
renderedObject.addChannel("legs");
|
|
||||||
renderedObject.addSequence("Torso-Idle", torsosequence);
|
|
||||||
renderedObject.addSequence("Legs-Idle", legsequence);
|
|
||||||
renderedObject.playAnimation("torso", "Torso-Idle");
|
|
||||||
renderedObject.playAnimation("legs", "Legs-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 playertorso1 = SpriteLoader.loadSprite(Name.PLAYERIMG, 0, 0, 128, 112);
|
|
||||||
Sprite playertorso2 = SpriteLoader.loadSprite(Name.PLAYERIMG, 0, 1, 128, 112);
|
|
||||||
Sprite playerlegs1 = SpriteLoader.loadSprite(Name.PLAYERIMG, 1, 0, 128, 112);
|
|
||||||
Sprite playerlegs2 = SpriteLoader.loadSprite(Name.PLAYERIMG, 1, 1, 128, 112);
|
|
||||||
SpriteSequence torsosequence = new SpriteSequence(1).addSprite(playertorso1).addSprite(playertorso2);
|
|
||||||
SpriteSequence legsequence = new SpriteSequence(1).addSprite(playerlegs1).addSprite(playerlegs2);
|
|
||||||
renderedObject.setChannelName("default", "torso");
|
|
||||||
renderedObject.addChannel("legs");
|
|
||||||
renderedObject.addSequence("Torso-Idle", torsosequence);
|
|
||||||
renderedObject.addSequence("Legs-Idle", legsequence);
|
|
||||||
renderedObject.playAnimation("torso", "Torso-Idle");
|
|
||||||
renderedObject.playAnimation("legs", "Legs-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));
|
|
||||||
}
|
|
||||||
|
|
||||||
}));
|
|
||||||
dummy.add(new CAI().setReactDistance(5).setAIListener(new DummyAI()));
|
|
||||||
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 img1 = SpriteLoader.loadSprite(Name.WALLIMG, 0, 0, 32, 64);
|
|
||||||
Sprite img2 = SpriteLoader.loadSprite(Name.WALLIMG, 1, 0, 32, 64);
|
|
||||||
ButtonNode button = new ButtonNode("test-button", img1, img2) {
|
|
||||||
@Override
|
|
||||||
public void pressed(int x, int y, int mouseButton) {
|
|
||||||
Log.info("I should never be pressed against my will!");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
newState.create();
|
||||||
@Override
|
currentState = newState;
|
||||||
public void released(int x, int y, int mouseButton) {
|
} else {
|
||||||
Log.info("And now I was even released! Blasphemy!");
|
Log.error("Tried to set state to null!");
|
||||||
|
}
|
||||||
}
|
|
||||||
};
|
|
||||||
button.setPosition(0.12f, 0.5f);
|
|
||||||
guiManager.getRootNode().addChild(button);
|
|
||||||
|
|
||||||
TextNode text = new TextNode("test-text", "Test!");
|
|
||||||
text.setPosition(0.8f, 0.5f);
|
|
||||||
guiManager.getRootNode().addChild(text);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resize(int width, int height) {
|
public void resize(int width, int height) {
|
||||||
super.resize(width, height);
|
super.resize(width, height);
|
||||||
RenderingSystem.screenHeight = height;
|
|
||||||
RenderingSystem.screenWidth = width;
|
|
||||||
RenderingSystem rs = engine.getSystem(RenderingSystem.class);
|
RenderingSystem rs = engine.getSystem(RenderingSystem.class);
|
||||||
|
rs.screenHeight = height;
|
||||||
|
rs.screenWidth = width;
|
||||||
float aspectratio = ((float) width) / ((float) height);
|
float aspectratio = ((float) width) / ((float) height);
|
||||||
RenderingSystem.aspectratio = aspectratio;
|
rs.aspectratio = aspectratio;
|
||||||
rs.setViewport((int) (AppUtil.VPHEIGHT_CONST * aspectratio), AppUtil.VPHEIGHT_CONST);
|
rs.setViewport((int) (AppUtil.VPHEIGHT_CONST * aspectratio), AppUtil.VPHEIGHT_CONST);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dispose() {
|
||||||
|
if (currentState != null) {
|
||||||
|
currentState.destroy();
|
||||||
|
}
|
||||||
|
AppUtil.engine.getSystem(RenderingSystem.class).dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,23 +1,28 @@
|
|||||||
package com.saltosion.gladiator.gui;
|
package com.saltosion.gladiator.gui;
|
||||||
|
|
||||||
|
import com.saltosion.gladiator.gui.nodes.GUINode;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import com.badlogic.gdx.math.Vector2;
|
import com.badlogic.gdx.math.Vector2;
|
||||||
import com.saltosion.gladiator.systems.RenderingSystem;
|
import com.saltosion.gladiator.systems.RenderingSystem;
|
||||||
import com.saltosion.gladiator.util.AppUtil;
|
import com.saltosion.gladiator.util.AppUtil;
|
||||||
import com.saltosion.gladiator.util.Global;
|
|
||||||
|
|
||||||
public class GUIManager {
|
public class GUIManager {
|
||||||
|
|
||||||
private final GUINode rootNode;
|
private final GUINode rootNode;
|
||||||
|
|
||||||
public GUIManager() {
|
public GUIManager() {
|
||||||
this.rootNode = new GUINode("root").setPosition(-.5f, -.5f);
|
this.rootNode = new GUINode("root").setPosition(-.5f, -.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GUINode getRootNode() {
|
public GUINode getRootNode() {
|
||||||
return this.rootNode;
|
return this.rootNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void clearGUI() {
|
||||||
|
getRootNode().clearChildren();
|
||||||
|
}
|
||||||
|
|
||||||
public ArrayList<GUINode> getAllRecursiveChildren(GUINode guiNode) {
|
public ArrayList<GUINode> getAllRecursiveChildren(GUINode guiNode) {
|
||||||
ArrayList<GUINode> list = new ArrayList<GUINode>();
|
ArrayList<GUINode> list = new ArrayList<GUINode>();
|
||||||
for (GUINode child : guiNode.getChildren()) {
|
for (GUINode child : guiNode.getChildren()) {
|
||||||
@ -26,7 +31,7 @@ public class GUIManager {
|
|||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GUINode getNode(String id) {
|
public GUINode getNode(String id) {
|
||||||
for (GUINode node : getAllRecursiveChildren(rootNode)) {
|
for (GUINode node : getAllRecursiveChildren(rootNode)) {
|
||||||
if (node.getID().equals(id)) {
|
if (node.getID().equals(id)) {
|
||||||
@ -35,21 +40,21 @@ public class GUIManager {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Vector2 physicsLocationToGUILocation(Vector2 physicslocation ) {
|
public static Vector2 physicsLocationToGUILocation(Vector2 physicslocation) {
|
||||||
RenderingSystem rs = AppUtil.engine.getSystem(RenderingSystem.class);
|
RenderingSystem rs = AppUtil.engine.getSystem(RenderingSystem.class);
|
||||||
float cameraY = 1-(rs.getCameraLocation().y/AppUtil.VPHEIGHT_CONST
|
float cameraY = 1 - (rs.getCameraLocation().y / AppUtil.VPHEIGHT_CONST
|
||||||
+.5f);
|
+ .5f);
|
||||||
float cameraX = 1-(rs.getCameraLocation().x/(AppUtil.VPHEIGHT_CONST*RenderingSystem.aspectratio)
|
float cameraX = 1 - (rs.getCameraLocation().x / (AppUtil.VPHEIGHT_CONST * rs.aspectratio)
|
||||||
+.5f);
|
+ .5f);
|
||||||
System.out.println(cameraX + ":" + cameraY);
|
System.out.println(cameraX + ":" + cameraY);
|
||||||
float y = physicslocation.y/AppUtil.VPHEIGHT_CONST
|
float y = physicslocation.y / AppUtil.VPHEIGHT_CONST
|
||||||
+ cameraY;
|
+ cameraY;
|
||||||
float x = physicslocation.x/(AppUtil.VPHEIGHT_CONST*RenderingSystem.aspectratio)
|
float x = physicslocation.x / (AppUtil.VPHEIGHT_CONST * rs.aspectratio)
|
||||||
+ cameraX;
|
+ cameraX;
|
||||||
|
|
||||||
Vector2 v = new Vector2(x, y);
|
Vector2 v = new Vector2(x, y);
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
package com.saltosion.gladiator.gui;
|
|
||||||
|
|
||||||
import com.badlogic.gdx.graphics.g2d.Sprite;
|
|
||||||
|
|
||||||
public interface ImageNode {
|
|
||||||
|
|
||||||
public Sprite getImage();
|
|
||||||
}
|
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.saltosion.gladiator.gui.creators;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The GUIController is to GUI elements what the Level is to entities. A
|
||||||
|
* builder-kind-of class.
|
||||||
|
*/
|
||||||
|
public interface GUICreator {
|
||||||
|
|
||||||
|
public void create();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package com.saltosion.gladiator.gui.creators;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.graphics.g2d.Sprite;
|
||||||
|
import com.saltosion.gladiator.gui.nodes.ButtonNode;
|
||||||
|
import com.saltosion.gladiator.gui.nodes.TextNode;
|
||||||
|
import com.saltosion.gladiator.util.AppUtil;
|
||||||
|
import com.saltosion.gladiator.util.Log;
|
||||||
|
import com.saltosion.gladiator.util.Name;
|
||||||
|
import com.saltosion.gladiator.util.SpriteLoader;
|
||||||
|
|
||||||
|
public class TestGUICreator implements GUICreator {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void create() {
|
||||||
|
Sprite img1 = SpriteLoader.loadSprite(Name.WALLIMG, 0, 0, 32, 64);
|
||||||
|
Sprite img2 = SpriteLoader.loadSprite(Name.WALLIMG, 1, 0, 32, 64);
|
||||||
|
ButtonNode button = new ButtonNode("test-button", img1, img2) {
|
||||||
|
@Override
|
||||||
|
public void pressed(int x, int y, int mouseButton) {
|
||||||
|
Log.info("I should never be pressed against my will!");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void released(int x, int y, int mouseButton) {
|
||||||
|
Log.info("And now I was even released! Blasphemy!");
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
button.setPosition(0.12f, 0.5f);
|
||||||
|
AppUtil.guiManager.getRootNode().addChild(button);
|
||||||
|
|
||||||
|
TextNode text = new TextNode("test-text", "Test!");
|
||||||
|
text.setPosition(0.8f, 0.5f);
|
||||||
|
AppUtil.guiManager.getRootNode().addChild(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,8 +1,11 @@
|
|||||||
package com.saltosion.gladiator.gui;
|
package com.saltosion.gladiator.gui.nodes;
|
||||||
|
|
||||||
|
import com.saltosion.gladiator.gui.properties.ImageProperty;
|
||||||
|
import com.saltosion.gladiator.gui.properties.InteractiveProperty;
|
||||||
|
import com.saltosion.gladiator.gui.nodes.GUINode;
|
||||||
import com.badlogic.gdx.graphics.g2d.Sprite;
|
import com.badlogic.gdx.graphics.g2d.Sprite;
|
||||||
|
|
||||||
public abstract class ButtonNode extends GUINode implements InteractiveNode, ImageNode {
|
public abstract class ButtonNode extends GUINode implements InteractiveProperty, ImageProperty {
|
||||||
private final Sprite onHover;
|
private final Sprite onHover;
|
||||||
private final Sprite normal;
|
private final Sprite normal;
|
||||||
private boolean hovered = false;
|
private boolean hovered = false;
|
@ -1,4 +1,4 @@
|
|||||||
package com.saltosion.gladiator.gui;
|
package com.saltosion.gladiator.gui.nodes;
|
||||||
|
|
||||||
import com.badlogic.gdx.math.Vector2;
|
import com.badlogic.gdx.math.Vector2;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
@ -1,4 +1,6 @@
|
|||||||
package com.saltosion.gladiator.gui;
|
package com.saltosion.gladiator.gui.nodes;
|
||||||
|
|
||||||
|
import com.saltosion.gladiator.gui.properties.TextProperty;
|
||||||
|
|
||||||
public class TextNode extends GUINode implements TextProperty {
|
public class TextNode extends GUINode implements TextProperty {
|
||||||
|
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.saltosion.gladiator.gui.properties;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.graphics.g2d.Sprite;
|
||||||
|
|
||||||
|
public interface ImageProperty {
|
||||||
|
|
||||||
|
public Sprite getImage();
|
||||||
|
}
|
@ -1,17 +1,18 @@
|
|||||||
package com.saltosion.gladiator.gui;
|
package com.saltosion.gladiator.gui.properties;
|
||||||
|
|
||||||
import com.badlogic.gdx.Input.Buttons;
|
public interface InteractiveProperty {
|
||||||
|
|
||||||
public interface InteractiveNode {
|
|
||||||
/**
|
/**
|
||||||
* Called when the mouse enters the node's elements.
|
* Called when the mouse enters the node's elements.
|
||||||
|
*
|
||||||
* @param x position of the mouse.
|
* @param x position of the mouse.
|
||||||
* @param y position of the mouse.
|
* @param y position of the mouse.
|
||||||
*/
|
*/
|
||||||
public void mouseEnter(float x, float y);
|
public void mouseEnter(float x, float y);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the mouse leaves the node's elements.
|
* Called when the mouse leaves the node's elements.
|
||||||
|
*
|
||||||
* @param x position of the mouse.
|
* @param x position of the mouse.
|
||||||
* @param y position of the mouse.
|
* @param y position of the mouse.
|
||||||
*/
|
*/
|
||||||
@ -19,14 +20,17 @@ public interface InteractiveNode {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when someone presses a mouse button on the node's elements.
|
* Called when someone presses a mouse button on the node's elements.
|
||||||
|
*
|
||||||
* @param x position of the mouse.
|
* @param x position of the mouse.
|
||||||
* @param y position of the mouse.
|
* @param y position of the mouse.
|
||||||
* @param mouseButton button pressed.
|
* @param mouseButton button pressed.
|
||||||
*/
|
*/
|
||||||
public void pressed(int x, int y, int mouseButton);
|
public void pressed(int x, int y, int mouseButton);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Called when someone releases a mouse button on the node's elements.
|
* Called when someone releases a mouse button on the node's elements.
|
||||||
|
*
|
||||||
* @param x position of the mouse.
|
* @param x position of the mouse.
|
||||||
* @param y position of the mouse.
|
* @param y position of the mouse.
|
||||||
* @param mouseButton button pressed.
|
* @param mouseButton button pressed.
|
@ -1,4 +1,4 @@
|
|||||||
package com.saltosion.gladiator.gui;
|
package com.saltosion.gladiator.gui.properties;
|
||||||
|
|
||||||
public interface TextProperty {
|
public interface TextProperty {
|
||||||
|
|
@ -6,9 +6,9 @@ import com.badlogic.gdx.Input.Keys;
|
|||||||
import com.badlogic.gdx.InputProcessor;
|
import com.badlogic.gdx.InputProcessor;
|
||||||
import com.badlogic.gdx.graphics.g2d.Sprite;
|
import com.badlogic.gdx.graphics.g2d.Sprite;
|
||||||
import com.badlogic.gdx.utils.Array;
|
import com.badlogic.gdx.utils.Array;
|
||||||
import com.saltosion.gladiator.gui.GUINode;
|
import com.saltosion.gladiator.gui.nodes.GUINode;
|
||||||
import com.saltosion.gladiator.gui.ImageNode;
|
import com.saltosion.gladiator.gui.properties.ImageProperty;
|
||||||
import com.saltosion.gladiator.gui.InteractiveNode;
|
import com.saltosion.gladiator.gui.properties.InteractiveProperty;
|
||||||
import com.saltosion.gladiator.systems.RenderingSystem;
|
import com.saltosion.gladiator.systems.RenderingSystem;
|
||||||
import com.saltosion.gladiator.util.AppUtil;
|
import com.saltosion.gladiator.util.AppUtil;
|
||||||
import com.saltosion.gladiator.util.Global;
|
import com.saltosion.gladiator.util.Global;
|
||||||
@ -18,8 +18,8 @@ import com.saltosion.gladiator.util.Name;
|
|||||||
public class InputHandler implements InputProcessor {
|
public class InputHandler implements InputProcessor {
|
||||||
|
|
||||||
public HashMap<Integer, String> keys = new HashMap<Integer, String>();
|
public HashMap<Integer, String> keys = new HashMap<Integer, String>();
|
||||||
|
|
||||||
private Array<String> hoveredUIElements = new Array<String>();
|
private final Array<String> hoveredUIElements = new Array<String>();
|
||||||
|
|
||||||
public InputHandler() {
|
public InputHandler() {
|
||||||
keys.put(Keys.A, Name.MOVE_LEFT);
|
keys.put(Keys.A, Name.MOVE_LEFT);
|
||||||
@ -59,10 +59,12 @@ public class InputHandler implements InputProcessor {
|
|||||||
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
|
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
|
||||||
for (String id : hoveredUIElements) {
|
for (String id : hoveredUIElements) {
|
||||||
GUINode node = AppUtil.guiManager.getNode(id);
|
GUINode node = AppUtil.guiManager.getNode(id);
|
||||||
|
|
||||||
if (node instanceof InteractiveNode) {
|
if (node instanceof InteractiveProperty) {
|
||||||
((InteractiveNode) node).pressed(screenX, screenY, button);
|
((InteractiveProperty) node).pressed(screenX, screenY, button);
|
||||||
} else { Log.error("Attempted to call 'pressed' on a non-interactive node!"); }
|
} else {
|
||||||
|
Log.error("Attempted to call 'pressed' on a non-interactive node!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -71,10 +73,12 @@ public class InputHandler implements InputProcessor {
|
|||||||
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
|
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
|
||||||
for (String id : hoveredUIElements) {
|
for (String id : hoveredUIElements) {
|
||||||
GUINode node = AppUtil.guiManager.getNode(id);
|
GUINode node = AppUtil.guiManager.getNode(id);
|
||||||
|
|
||||||
if (node instanceof InteractiveNode) {
|
if (node instanceof InteractiveProperty) {
|
||||||
((InteractiveNode) node).released(screenX, screenY, button);
|
((InteractiveProperty) node).released(screenX, screenY, button);
|
||||||
} else { Log.error("Attempted to call 'released' on a non-interactive node!"); }
|
} else {
|
||||||
|
Log.error("Attempted to call 'released' on a non-interactive node!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -86,22 +90,24 @@ public class InputHandler implements InputProcessor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean mouseMoved(int screenX, int screenY) {
|
public boolean mouseMoved(int screenX, int screenY) {
|
||||||
float x = (float)(screenX)/RenderingSystem.screenWidth;
|
RenderingSystem rs = AppUtil.engine.getSystem(RenderingSystem.class);
|
||||||
float y = 1-(float)(screenY)/RenderingSystem.screenHeight;
|
|
||||||
|
float x = (float) (screenX) / rs.screenWidth;
|
||||||
|
float y = 1 - (float) (screenY) / rs.screenHeight;
|
||||||
|
|
||||||
for (GUINode node : AppUtil.guiManager.getAllRecursiveChildren(AppUtil.guiManager.getRootNode())) {
|
for (GUINode node : AppUtil.guiManager.getAllRecursiveChildren(AppUtil.guiManager.getRootNode())) {
|
||||||
if (node instanceof ImageNode) {
|
if (node instanceof ImageProperty) {
|
||||||
Sprite s = ((ImageNode) node).getImage();
|
Sprite s = ((ImageProperty) node).getImage();
|
||||||
float height = (s.getHeight()*Global.SPRITE_SCALE)/AppUtil.VPHEIGHT_CONST;
|
float height = (s.getHeight() * Global.SPRITE_SCALE) / AppUtil.VPHEIGHT_CONST;
|
||||||
float width = (s.getWidth()*Global.SPRITE_SCALE)/(AppUtil.VPHEIGHT_CONST*RenderingSystem.aspectratio);
|
float width = (s.getWidth() * Global.SPRITE_SCALE) / (AppUtil.VPHEIGHT_CONST * rs.aspectratio);
|
||||||
float x0 = node.getPosition().x-width/2;
|
float x0 = node.getPosition().x - width / 2;
|
||||||
float x1 = node.getPosition().x+width/2;
|
float x1 = node.getPosition().x + width / 2;
|
||||||
float y0 = node.getPosition().y-height/2;
|
float y0 = node.getPosition().y - height / 2;
|
||||||
float y1 = node.getPosition().y+height/2;
|
float y1 = node.getPosition().y + height / 2;
|
||||||
x += 0.01f;
|
x += 0.01f;
|
||||||
if (node instanceof InteractiveNode) {
|
if (node instanceof InteractiveProperty) {
|
||||||
InteractiveNode interactiveNode = (InteractiveNode) node;
|
InteractiveProperty interactiveNode = (InteractiveProperty) node;
|
||||||
|
|
||||||
if (x >= x0 && x <= x1 && y >= y0 && y <= y1) {
|
if (x >= x0 && x <= x1 && y >= y0 && y <= y1) {
|
||||||
if (hoveredUIElements.contains(node.getID(), false)) {
|
if (hoveredUIElements.contains(node.getID(), false)) {
|
||||||
continue;
|
continue;
|
||||||
|
81
core/src/com/saltosion/gladiator/level/EntityFactory.java
Normal file
81
core/src/com/saltosion/gladiator/level/EntityFactory.java
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
package com.saltosion.gladiator.level;
|
||||||
|
|
||||||
|
import com.badlogic.ashley.core.Entity;
|
||||||
|
import com.badlogic.gdx.graphics.g2d.Sprite;
|
||||||
|
import com.badlogic.gdx.math.Vector2;
|
||||||
|
import com.saltosion.gladiator.components.CAI;
|
||||||
|
import com.saltosion.gladiator.components.CCombat;
|
||||||
|
import com.saltosion.gladiator.components.CPhysics;
|
||||||
|
import com.saltosion.gladiator.components.CRenderedObject;
|
||||||
|
import com.saltosion.gladiator.listeners.CombatListener;
|
||||||
|
import com.saltosion.gladiator.listeners.ai.DummyAI;
|
||||||
|
import com.saltosion.gladiator.util.AppUtil;
|
||||||
|
import com.saltosion.gladiator.util.Direction;
|
||||||
|
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 EntityFactory {
|
||||||
|
|
||||||
|
public void createPlayer(Vector2 pos) {
|
||||||
|
Entity player = new Entity();
|
||||||
|
|
||||||
|
CRenderedObject renderedObject = new CRenderedObject();
|
||||||
|
Sprite playertorso1 = SpriteLoader.loadSprite(Name.PLAYERIMG, 0, 0, 128, 112);
|
||||||
|
Sprite playertorso2 = SpriteLoader.loadSprite(Name.PLAYERIMG, 0, 1, 128, 112);
|
||||||
|
Sprite playerlegs1 = SpriteLoader.loadSprite(Name.PLAYERIMG, 1, 0, 128, 112);
|
||||||
|
Sprite playerlegs2 = SpriteLoader.loadSprite(Name.PLAYERIMG, 1, 1, 128, 112);
|
||||||
|
SpriteSequence torsosequence = new SpriteSequence(1).addSprite(playertorso1).addSprite(playertorso2);
|
||||||
|
SpriteSequence legsequence = new SpriteSequence(1).addSprite(playerlegs1).addSprite(playerlegs2);
|
||||||
|
renderedObject.setChannelName("default", "torso");
|
||||||
|
renderedObject.addChannel("legs");
|
||||||
|
renderedObject.addSequence("Torso-Idle", torsosequence);
|
||||||
|
renderedObject.addSequence("Legs-Idle", legsequence);
|
||||||
|
renderedObject.playAnimation("torso", "Torso-Idle");
|
||||||
|
renderedObject.playAnimation("legs", "Legs-Idle");
|
||||||
|
player.add(renderedObject);
|
||||||
|
player.add(new CPhysics().setSize(2, 4).setPosition(pos.x, pos.y));
|
||||||
|
player.add(new CCombat().setBaseDamage(100).setHealth(1000));
|
||||||
|
AppUtil.engine.addEntity(player);
|
||||||
|
|
||||||
|
Log.info("Created player!");
|
||||||
|
AppUtil.player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createDummy(Vector2 pos) {
|
||||||
|
Entity dummy = new Entity();
|
||||||
|
CRenderedObject renderedObject = new CRenderedObject();
|
||||||
|
Sprite playertorso1 = SpriteLoader.loadSprite(Name.PLAYERIMG, 0, 0, 128, 112);
|
||||||
|
Sprite playertorso2 = SpriteLoader.loadSprite(Name.PLAYERIMG, 0, 1, 128, 112);
|
||||||
|
Sprite playerlegs1 = SpriteLoader.loadSprite(Name.PLAYERIMG, 1, 0, 128, 112);
|
||||||
|
Sprite playerlegs2 = SpriteLoader.loadSprite(Name.PLAYERIMG, 1, 1, 128, 112);
|
||||||
|
SpriteSequence torsosequence = new SpriteSequence(1).addSprite(playertorso1).addSprite(playertorso2);
|
||||||
|
SpriteSequence legsequence = new SpriteSequence(1).addSprite(playerlegs1).addSprite(playerlegs2);
|
||||||
|
renderedObject.setChannelName("default", "torso");
|
||||||
|
renderedObject.addChannel("legs");
|
||||||
|
renderedObject.addSequence("Torso-Idle", torsosequence);
|
||||||
|
renderedObject.addSequence("Legs-Idle", legsequence);
|
||||||
|
renderedObject.playAnimation("torso", "Torso-Idle");
|
||||||
|
renderedObject.playAnimation("legs", "Legs-Idle");
|
||||||
|
dummy.add(renderedObject);
|
||||||
|
dummy.add(new CPhysics().setSize(2, 4).setPosition(pos.x, pos.y));
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
|
}));
|
||||||
|
dummy.add(new CAI().setReactDistance(5).setAIListener(new DummyAI()));
|
||||||
|
AppUtil.engine.addEntity(dummy);
|
||||||
|
dummy.getComponent(CCombat.class).inputs.put(Direction.UP, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
7
core/src/com/saltosion/gladiator/level/Level.java
Normal file
7
core/src/com/saltosion/gladiator/level/Level.java
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package com.saltosion.gladiator.level;
|
||||||
|
|
||||||
|
public interface Level {
|
||||||
|
|
||||||
|
public void generate();
|
||||||
|
|
||||||
|
}
|
58
core/src/com/saltosion/gladiator/level/TestLevel.java
Normal file
58
core/src/com/saltosion/gladiator/level/TestLevel.java
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
package com.saltosion.gladiator.level;
|
||||||
|
|
||||||
|
import com.badlogic.ashley.core.Entity;
|
||||||
|
import com.badlogic.gdx.graphics.g2d.Sprite;
|
||||||
|
import com.badlogic.gdx.math.Vector2;
|
||||||
|
import com.saltosion.gladiator.components.CPhysics;
|
||||||
|
import com.saltosion.gladiator.components.CRenderedObject;
|
||||||
|
import com.saltosion.gladiator.util.AppUtil;
|
||||||
|
import com.saltosion.gladiator.util.Global;
|
||||||
|
import com.saltosion.gladiator.util.Name;
|
||||||
|
import com.saltosion.gladiator.util.SpriteLoader;
|
||||||
|
|
||||||
|
public class TestLevel implements Level {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void generate() {
|
||||||
|
// Generate entities
|
||||||
|
AppUtil.entityFactory.createPlayer(new Vector2(0, 5));
|
||||||
|
AppUtil.entityFactory.createDummy(new Vector2(-6, 5));
|
||||||
|
|
||||||
|
// Generate level
|
||||||
|
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);
|
||||||
|
|
||||||
|
AppUtil.engine.addEntity(ground);
|
||||||
|
AppUtil.engine.addEntity(wall0);
|
||||||
|
AppUtil.engine.addEntity(wall1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
27
core/src/com/saltosion/gladiator/state/BaseState.java
Normal file
27
core/src/com/saltosion/gladiator/state/BaseState.java
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package com.saltosion.gladiator.state;
|
||||||
|
|
||||||
|
import com.saltosion.gladiator.GladiatorBrawler;
|
||||||
|
|
||||||
|
public abstract class BaseState {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is private because it should really only be used to change states
|
||||||
|
* (for now)
|
||||||
|
*/
|
||||||
|
private static GladiatorBrawler mainClass;
|
||||||
|
|
||||||
|
public abstract void create();
|
||||||
|
|
||||||
|
public abstract void update(float deltaTime);
|
||||||
|
|
||||||
|
public abstract void destroy();
|
||||||
|
|
||||||
|
public void changeState(BaseState newState) {
|
||||||
|
mainClass.setState(newState);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setMainClass(GladiatorBrawler mainClass) {
|
||||||
|
BaseState.mainClass = mainClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
39
core/src/com/saltosion/gladiator/state/InGameState.java
Normal file
39
core/src/com/saltosion/gladiator/state/InGameState.java
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package com.saltosion.gladiator.state;
|
||||||
|
|
||||||
|
import com.saltosion.gladiator.gui.creators.GUICreator;
|
||||||
|
import com.saltosion.gladiator.gui.creators.TestGUICreator;
|
||||||
|
import com.saltosion.gladiator.level.Level;
|
||||||
|
import com.saltosion.gladiator.level.TestLevel;
|
||||||
|
import com.saltosion.gladiator.util.AppUtil;
|
||||||
|
|
||||||
|
public class InGameState extends BaseState {
|
||||||
|
|
||||||
|
private Level level;
|
||||||
|
private GUICreator guiCreator;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void create() {
|
||||||
|
// Start from a clean slate
|
||||||
|
AppUtil.engine.removeAllEntities();
|
||||||
|
AppUtil.guiManager.clearGUI();
|
||||||
|
|
||||||
|
level = new TestLevel();
|
||||||
|
level.generate();
|
||||||
|
|
||||||
|
guiCreator = new TestGUICreator();
|
||||||
|
guiCreator.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(float deltaTime) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy() {
|
||||||
|
// Clear all entities that are left as they are no longer needed
|
||||||
|
AppUtil.engine.removeAllEntities();
|
||||||
|
// Clear GUI so there's nothing leftover for the next state
|
||||||
|
AppUtil.guiManager.clearGUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -19,12 +19,13 @@ import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
|
|||||||
import com.badlogic.gdx.math.Vector2;
|
import com.badlogic.gdx.math.Vector2;
|
||||||
import com.saltosion.gladiator.components.CPhysics;
|
import com.saltosion.gladiator.components.CPhysics;
|
||||||
import com.saltosion.gladiator.components.CRenderedObject;
|
import com.saltosion.gladiator.components.CRenderedObject;
|
||||||
import com.saltosion.gladiator.gui.GUINode;
|
import com.saltosion.gladiator.gui.nodes.GUINode;
|
||||||
import com.saltosion.gladiator.gui.ImageNode;
|
import com.saltosion.gladiator.gui.properties.ImageProperty;
|
||||||
import com.saltosion.gladiator.gui.TextNode;
|
import com.saltosion.gladiator.gui.nodes.TextNode;
|
||||||
import com.saltosion.gladiator.gui.TextProperty;
|
import com.saltosion.gladiator.gui.properties.TextProperty;
|
||||||
import com.saltosion.gladiator.util.AppUtil;
|
import com.saltosion.gladiator.util.AppUtil;
|
||||||
import com.saltosion.gladiator.util.Global;
|
import com.saltosion.gladiator.util.Global;
|
||||||
|
import com.saltosion.gladiator.util.SpriteLoader;
|
||||||
import com.saltosion.gladiator.util.SpriteSequence;
|
import com.saltosion.gladiator.util.SpriteSequence;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -40,9 +41,9 @@ public class RenderingSystem extends EntitySystem {
|
|||||||
private ShapeRenderer debugRenderer;
|
private ShapeRenderer debugRenderer;
|
||||||
private OrthographicCamera camera, fontCamera;
|
private OrthographicCamera camera, fontCamera;
|
||||||
|
|
||||||
public static float aspectratio;
|
public float aspectratio;
|
||||||
public static int screenHeight = 0;
|
public int screenHeight = 0;
|
||||||
public static int screenWidth = 0;
|
public int screenWidth = 0;
|
||||||
|
|
||||||
private boolean debug = true;
|
private boolean debug = true;
|
||||||
private final Color debugColor = new Color(0, 1, 0, 1);
|
private final Color debugColor = new Color(0, 1, 0, 1);
|
||||||
@ -156,8 +157,8 @@ public class RenderingSystem extends EntitySystem {
|
|||||||
|
|
||||||
private void renderGUINode(GUINode node, Vector2 position) {
|
private void renderGUINode(GUINode node, Vector2 position) {
|
||||||
position.add(node.getPosition());
|
position.add(node.getPosition());
|
||||||
if (node instanceof ImageNode) {
|
if (node instanceof ImageProperty) {
|
||||||
Sprite s = ((ImageNode) node).getImage();
|
Sprite s = ((ImageProperty) node).getImage();
|
||||||
s.setPosition(position.x * AppUtil.VPHEIGHT_CONST * aspectratio - s.getWidth() / 2 + camera.position.x,
|
s.setPosition(position.x * AppUtil.VPHEIGHT_CONST * aspectratio - s.getWidth() / 2 + camera.position.x,
|
||||||
position.y * AppUtil.VPHEIGHT_CONST - s.getHeight() / 2 + camera.position.y);
|
position.y * AppUtil.VPHEIGHT_CONST - s.getHeight() / 2 + camera.position.y);
|
||||||
s.draw(batch);
|
s.draw(batch);
|
||||||
@ -229,6 +230,13 @@ public class RenderingSystem extends EntitySystem {
|
|||||||
return new Vector2(this.camera.position.x, this.camera.position.y);
|
return new Vector2(this.camera.position.x, this.camera.position.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void dispose() {
|
||||||
|
batch.dispose();
|
||||||
|
debugRenderer.dispose();
|
||||||
|
font.dispose();
|
||||||
|
SpriteLoader.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
private class TextObject {
|
private class TextObject {
|
||||||
|
|
||||||
public String text;
|
public String text;
|
||||||
|
@ -4,14 +4,16 @@ import com.badlogic.ashley.core.Engine;
|
|||||||
import com.badlogic.ashley.core.Entity;
|
import com.badlogic.ashley.core.Entity;
|
||||||
import com.badlogic.gdx.math.Vector2;
|
import com.badlogic.gdx.math.Vector2;
|
||||||
import com.saltosion.gladiator.gui.GUIManager;
|
import com.saltosion.gladiator.gui.GUIManager;
|
||||||
|
import com.saltosion.gladiator.level.EntityFactory;
|
||||||
|
|
||||||
public class AppUtil {
|
public class AppUtil {
|
||||||
|
|
||||||
public static Entity player;
|
public static Entity player;
|
||||||
public static Engine engine;
|
public static Engine engine;
|
||||||
|
public static EntityFactory entityFactory;
|
||||||
public static GUIManager guiManager;
|
public static GUIManager guiManager;
|
||||||
|
|
||||||
public static final int VPHEIGHT_CONST = 24;
|
public static final int VPHEIGHT_CONST = 24;
|
||||||
|
|
||||||
public static final Vector2 JUMP_FORCE = new Vector2(0, 12000);
|
public static final Vector2 JUMP_FORCE = new Vector2(0, 12000);
|
||||||
}
|
}
|
||||||
|
@ -9,61 +9,62 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
|||||||
|
|
||||||
public class SpriteLoader {
|
public class SpriteLoader {
|
||||||
|
|
||||||
public static HashMap<String, Texture> textures = new HashMap<String, Texture>();
|
public static HashMap<String, Texture> textures = new HashMap<String, Texture>();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
loadTexture(Name.STATICPLAYER, "sprites/staticplayer.png");
|
loadTexture(Name.STATICPLAYER, "sprites/staticplayer.png");
|
||||||
loadTexture(Name.PLAYERIMG, "sprites/player/player.png");
|
loadTexture(Name.PLAYERIMG, "sprites/player/player.png");
|
||||||
loadTexture(Name.GROUNDIMG, "sprites/ground.png");
|
loadTexture(Name.GROUNDIMG, "sprites/ground.png");
|
||||||
loadTexture(Name.WALLIMG, "sprites/wall.png");
|
loadTexture(Name.WALLIMG, "sprites/wall.png");
|
||||||
loadTexture(Name.SWINGHITBOXIMG, "sprites/swinghitbox.png");
|
loadTexture(Name.SWINGHITBOXIMG, "sprites/swinghitbox.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a sprite, which is a piece from texture.
|
* Returns a sprite, which is a piece from texture.
|
||||||
*
|
*
|
||||||
* @param texKey
|
* @param texKey
|
||||||
* @param x
|
* @param x
|
||||||
* @param y
|
* @param y
|
||||||
* @param width
|
* @param width
|
||||||
* @param height
|
* @param height
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static Sprite loadSprite(String texKey, int x, int y, int width, int height) {
|
public static Sprite loadSprite(String texKey, int x, int y, int width, int height) {
|
||||||
TextureRegion tr = new TextureRegion(textures.get(texKey), x * width, y * height, width, height);
|
TextureRegion tr = new TextureRegion(textures.get(texKey), x * width, y * height, width, height);
|
||||||
Sprite s = new Sprite(tr);
|
Sprite s = new Sprite(tr);
|
||||||
s.setScale(Global.SPRITE_SCALE);
|
s.setScale(Global.SPRITE_SCALE);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a sprite, which is originally a texture.
|
* Returns a sprite, which is originally a texture.
|
||||||
*
|
*
|
||||||
* @param texKey
|
* @param texKey
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static Sprite loadSprite(String texKey) {
|
public static Sprite loadSprite(String texKey) {
|
||||||
return loadSprite(texKey, 0, 0, textures.get(texKey).getWidth(), textures.get(texKey).getHeight());
|
return loadSprite(texKey, 0, 0, textures.get(texKey).getWidth(), textures.get(texKey).getHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load texture from path.
|
* Load texture from path.
|
||||||
*
|
*
|
||||||
* @param filePath
|
* @param filePath
|
||||||
*/
|
*/
|
||||||
public static Texture loadTexture(String key, String filePath) {
|
public static Texture loadTexture(String key, String filePath) {
|
||||||
Texture t = new Texture(Gdx.files.internal(filePath));
|
Texture t = new Texture(Gdx.files.internal(filePath));
|
||||||
textures.put(key, t);
|
textures.put(key, t);
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disposes all the textures loaded so far.
|
* Disposes all the textures loaded so far.
|
||||||
*/
|
*/
|
||||||
public static void dispose() {
|
public static void dispose() {
|
||||||
for (Texture tex : textures.values()) {
|
Log.info("Disposed textures!");
|
||||||
tex.dispose();
|
for (Texture tex : textures.values()) {
|
||||||
}
|
tex.dispose();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user