SimplyGladiators/core/src/com/saltosion/gladiator/systems/CombatSystem.java

93 lines
3.1 KiB
Java
Raw Normal View History

2015-05-10 19:34:55 +02:00
package com.saltosion.gladiator.systems;
import com.badlogic.ashley.core.ComponentMapper;
import com.badlogic.ashley.core.Engine;
import com.badlogic.ashley.core.Entity;
import com.badlogic.ashley.core.EntitySystem;
import com.badlogic.ashley.core.Family;
import com.badlogic.ashley.utils.ImmutableArray;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.math.Vector2;
import com.saltosion.gladiator.components.CCombat;
import com.saltosion.gladiator.components.CDestructive;
import com.saltosion.gladiator.components.CPhysics;
import com.saltosion.gladiator.components.CRenderedObject;
import com.saltosion.gladiator.listeners.SwingHitboxListener;
2015-05-10 19:34:55 +02:00
import com.saltosion.gladiator.util.AppUtil;
import com.saltosion.gladiator.util.Direction;
import com.saltosion.gladiator.util.Name;
import com.saltosion.gladiator.util.SpriteLoader;
public class CombatSystem extends EntitySystem {
private ComponentMapper<CCombat> cm = ComponentMapper.getFor(CCombat.class);
private ComponentMapper<CPhysics> pm = ComponentMapper.getFor(CPhysics.class);
private ImmutableArray<Entity> entities;
@Override
public void addedToEngine(Engine engine) {
updateEntities(engine);
}
@Override
public void update(float deltaTime) {
for (int i=0; i<entities.size(); i++) {
Entity e = entities.get(i);
CCombat combat = cm.get(e);
CPhysics obj = pm.get(e);
if (combat.swingCdCounter > 0) {
combat.swingCdCounter -= deltaTime;
} if (combat.swingCdCounter > 0) { return; }
// Ready to swing !
combat.getSwing().setZero();
if (combat.inputs.get(Direction.LEFT)) {
combat.getSwing().add(-1, 0);
} if (combat.inputs.get(Direction.RIGHT)) {
combat.getSwing().add(1, 0);
} if (combat.inputs.get(Direction.UP)) {
combat.getSwing().add(0, 1);
} if (combat.inputs.get(Direction.DOWN)) {
combat.getSwing().add(0, -1);
}
if (!combat.getSwing().isZero() && combat.swingCdCounter <= 0) {
Vector2 pos = obj.getPosition().cpy();
if (combat.getSwingDirection() == Direction.LEFT) {
pos.add(-combat.getSwingSize().x/2, 0);
2015-05-10 19:34:55 +02:00
} else if (combat.getSwingDirection() == Direction.RIGHT) {
pos.add(combat.getSwingSize().x/2, 0);
2015-05-10 19:34:55 +02:00
} else if (combat.getSwingDirection() == Direction.UP) {
pos.add(0, combat.getSwingSize().y);
2015-05-10 19:34:55 +02:00
} else if (combat.getSwingDirection() == Direction.DOWN) {
pos.add(0, -combat.getSwingSize().y/3*2);
2015-05-10 19:34:55 +02:00
}
createSwingHitbox(e, pos);
combat.swingCdCounter = combat.getSwingCD();
}
}
}
public void createSwingHitbox(Entity source, Vector2 position) {
Entity e = new Entity();
CCombat combat = cm.get(source);
Sprite s = SpriteLoader.loadSprite(Name.SWINGHITBOXIMG);
2015-05-10 19:34:55 +02:00
e.add(new CRenderedObject(s));
e.add(new CPhysics().setGhost(true).setGravityApplied(false).setMovable(false)
.setSize(combat.getSwingSize()));
2015-05-10 20:07:37 +02:00
e.getComponent(CPhysics.class).setPosition(position).setCollisionListener(new SwingHitboxListener(source));
2015-05-10 19:34:55 +02:00
e.add(new CDestructive(.1f));
AppUtil.engine.addEntity(e);
}
public void updateEntities(Engine engine) {
entities = engine.getEntitiesFor(Family.getFor(CCombat.class));
}
}