64 lines
2.0 KiB
Java
64 lines
2.0 KiB
Java
package mindustry.entities.abilities;
|
|
|
|
import arc.*;
|
|
import arc.graphics.*;
|
|
import arc.math.*;
|
|
import arc.scene.ui.layout.*;
|
|
import arc.util.*;
|
|
import mindustry.content.*;
|
|
import mindustry.entities.*;
|
|
import mindustry.gen.*;
|
|
import mindustry.graphics.*;
|
|
import mindustry.type.*;
|
|
|
|
import static mindustry.Vars.*;
|
|
|
|
public class StatusFieldAbility extends Ability{
|
|
public StatusEffect effect;
|
|
public float duration = 60, reload = 100, range = 20; //
|
|
public boolean onShoot = false;
|
|
public Effect applyEffect = Fx.none;
|
|
public Effect activeEffect = Fx.overdriveWave;
|
|
public float effectX, effectY;
|
|
public boolean parentizeEffects, effectSizeParam = true;
|
|
public Color color = Pal.accent;
|
|
|
|
protected float timer;
|
|
|
|
StatusFieldAbility(){}
|
|
|
|
public StatusFieldAbility(StatusEffect effect, float duration, float reload, float range){
|
|
this.duration = duration;
|
|
this.reload = reload;
|
|
this.range = range;
|
|
this.effect = effect;
|
|
}
|
|
|
|
@Override
|
|
public void addStats(Table t){
|
|
super.addStats(t);
|
|
t.add(Core.bundle.format("bullet.range", Strings.autoFixed(range / tilesize, 2)));
|
|
t.row();
|
|
t.add(abilityStat("firingrate", Strings.autoFixed(60f / reload, 2)));
|
|
t.row();
|
|
t.add((effect.hasEmoji() ? effect.emoji() : "") + "[stat]" + effect.localizedName);
|
|
}
|
|
|
|
@Override
|
|
public void update(Unit unit){
|
|
timer += Time.delta;
|
|
|
|
if(timer >= reload && (!onShoot || unit.isShooting)){
|
|
Units.nearby(unit.team, unit.x, unit.y, range, other -> {
|
|
other.apply(effect, duration);
|
|
applyEffect.at(other, parentizeEffects);
|
|
});
|
|
|
|
float x = unit.x + Angles.trnsx(unit.rotation, effectY, effectX), y = unit.y + Angles.trnsy(unit.rotation, effectY, effectX);
|
|
activeEffect.at(x, y, effectSizeParam ? range : unit.rotation, color, parentizeEffects ? unit : null);
|
|
|
|
timer = 0f;
|
|
}
|
|
}
|
|
}
|