Files
base-demo/src/main/java/com/bartlomiejpluta/demo/entity/Character.java

53 lines
1.4 KiB
Java

package com.bartlomiejpluta.demo.entity;
import lombok.*;
import org.slf4j.*;
import org.joml.Vector2i;
import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.entity.Entity;
import com.bartlomiejpluta.base.lib.entity.EntityDelegate;
import com.bartlomiejpluta.demo.world.weapon.MeleeWeapon;
public class Character extends EntityDelegate {
private static final Logger log = LoggerFactory.getLogger(Character.class);
protected final Context context;
protected int attackCooldown = 0;
@Setter
private MeleeWeapon weapon;
public Character(@NonNull Context context, @NonNull Entity entity) {
super(entity);
this.context = context;
}
public void attack() {
if(weapon == null) {
return;
}
if(attackCooldown >= weapon.getCooldown()) {
var facingNeighbour = getCoordinates().add(getFaceDirection().vector, new Vector2i());
for(var entity : getLayer().getEntities()) {
if(entity.getCoordinates().equals(facingNeighbour) && entity.isBlocking() && entity instanceof Character) {
weapon.attack((Character) entity);
attackCooldown = 0;
}
}
}
}
public void hit(int dmg) {
log.info(toString() + " received " + dmg + " damage");
}
@Override
public void update(float dt) {
super.update(dt);
if(weapon != null && attackCooldown < weapon.getCooldown()) {
attackCooldown += (int) (dt * 1000f);
}
}
}