Hello everyone,
I am creating a 2D Sidesrollerer for a school project. Short Summary: it's basically a mix of super mario bros and banjo and kazooie with a kangaroo and a ostrich. I want to do a punch effect for the kangaroo, to box enemys. I dont really know how to do it with abilitys.
My Code:
Kangaroo.java:
private static Kangaroo instance;
private final Jump jump;
private int jumps;
private String playerState;
public static final int MAX_JUMPS = 1;
private KangarooPunsh punsh;
Kangaroo() {
super("kangaroo");
this.playerState = "IDLE";
this.jump = new Jump(this);
this.punsh = new KangarooPunsh(this);
this.addController(new PlatformingMovementController<>(this));
KeyboardEntityController<Kangaroo> movementController = new KeyboardEntityController<>(this);
movementController.addUpKey(KeyEvent.VK_UP);
movementController.addDownKey(KeyEvent.VK_DOWN);
movementController.addLeftKey(KeyEvent.VK_LEFT);
movementController.addRightKey(KeyEvent.VK_RIGHT);
//Attack
Input.keyboard().onKeyPressed(KeyEvent.VK_P, e->this.punsh());
}
@Action(description = "Punch the enemy in the fucking face and fuck him up")
public void punsh() {
new KangarooPunsh(this);
System.out.println("called");
}
public static Kangaroo instance() {
// Work on this
if(instance == null && GameData.getPlayerIndex() == 0) {
instance = new Kangaroo();
}
return instance;
}
KangarooPunsh.java:
package abilites;
import de.gurkenlabs.litiengine.abilities.AbilityInfo;
import de.gurkenlabs.litiengine.abilities.Ability;
import de.gurkenlabs.litiengine.abilities.effects.EffectTarget;
import de.gurkenlabs.litiengine.entities.Creature;
import de.gurkenlabs.litiengine.entities.EntityPivotType;
import de.gurkenlabs.litiengine.entities.ICombatEntity;
@AbilityInfo(cooldown = 1000, range = 0, value = 1, multiTarget = true, duration = 500, origin = EntityPivotType.COLLISIONBOX_CENTER)
public class KangarooPunsh extends Ability {
public KangarooPunsh(Creature executor) {
super(executor);
this.addEffect(new KangarooPunschEffect(this, EffectTarget.ENEMY));
}
}
KangarooPunshEffect.java:
package abilites;
import de.gurkenlabs.litiengine.Game;
import de.gurkenlabs.litiengine.abilities.Ability;
import de.gurkenlabs.litiengine.abilities.effects.Effect;
import de.gurkenlabs.litiengine.abilities.effects.EffectTarget;
import de.gurkenlabs.litiengine.entities.Creature;
import de.gurkenlabs.litiengine.entities.ICombatEntity;
import de.gurkenlabs.litiengine.physics.Collision;
import java.awt.*;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.Collection;
public class KangarooPunschEffect extends Effect {
private final Ability ability;
protected KangarooPunschEffect(final Ability ability, EffectTarget enemy) {
super(ability, enemy);
this.ability = ability;
}
@Override
public void apply(final ICombatEntity affectedEntity) {
super.apply(affectedEntity);
final int dmg = this.ability.getAttributes().value().get();
affectedEntity.hit(dmg, this.getAbility());
affectedEntity.die();
System.out.println(affectedEntity.getHitPoints());
}
@Override
protected Collection<ICombatEntity> getEntitiesInImpactArea(final Shape impactArea) {
final ArrayList<ICombatEntity> entities = new ArrayList<>();
for(final ICombatEntity entity : Game.world().environment().findCombatEntities(impactArea, x -> x instanceof Creature)) {
final Point2D collCenterExecutor = new Point2D.Double(
this.getAbility().getExecutor().getCollisionBox().getCenterX(),
this.getAbility().getExecutor().getCollisionBox().getCenterY());
final Point2D collCenterEntity = new Point2D.Double(entity.getCollisionBox().getCenterX(),
entity.getCollisionBox().getCenterY());
final Line2D rayCast = new Line2D.Double(collCenterExecutor, collCenterEntity);
boolean collision = false;
for (final Rectangle2D collisionBox : Game.physics().getCollisionBoxes(Collision.STATIC)) {
if (collisionBox.intersectsLine(rayCast)) {
collision = true;
break;
}
}
if (!collision) {
entities.add(entity);
}
}
return entities;
}
protected Ability getPunchAbility() {
return this.ability;
}
}
I need help fast. thanks for the help.