Ground support unit implementations

This commit is contained in:
Anuken
2020-07-10 12:14:24 -04:00
parent f39702e1cc
commit baa9f22a0b
35 changed files with 1267 additions and 1106 deletions

View File

@@ -0,0 +1,8 @@
package mindustry.entities.units;
import mindustry.gen.*;
public interface Ability{
default void update(Unit unit){}
default void draw(Unit unit){}
}

View File

@@ -0,0 +1,45 @@
package mindustry.entities.units;
import arc.util.*;
import mindustry.content.*;
import mindustry.entities.*;
import mindustry.gen.*;
public class HealFieldAbility implements Ability{
public float amount = 1, reload = 100, range = 60;
public Effect healEffect = Fx.heal;
public Effect activeEffect = Fx.healWave;
private boolean wasHealed = false;
HealFieldAbility(){}
public HealFieldAbility(float amount, float reload, float range){
this.amount = amount;
this.reload = reload;
this.range = range;
}
@Override
public void update(Unit unit){
unit.timer1 += Time.delta();
if(unit.timer1 >= reload){
wasHealed = false;
Units.nearby(unit.team, unit.x, unit.y, range, other -> {
if(other.damaged()){
healEffect.at(unit);
wasHealed = true;
}
other.heal(amount);
});
if(wasHealed){
activeEffect.at(unit);
}
unit.timer1 = 0f;
}
}
}

View File

@@ -0,0 +1,40 @@
package mindustry.entities.units;
import arc.util.ArcAnnotate.*;
import arc.util.*;
import mindustry.content.*;
import mindustry.entities.*;
import mindustry.gen.*;
import mindustry.type.*;
public class StatusFieldAbility implements Ability{
public @NonNull StatusEffect effect;
public float duration = 60, reload = 100, range = 20;
public Effect applyEffect = Fx.heal;
public Effect activeEffect = Fx.healWave;
StatusFieldAbility(){}
public StatusFieldAbility(@NonNull StatusEffect effect, float duration, float reload, float range){
this.duration = duration;
this.reload = reload;
this.range = range;
this.effect = effect;
}
@Override
public void update(Unit unit){
unit.timer2 += Time.delta();
if(unit.timer2 >= reload){
Units.nearby(unit.team, unit.x, unit.y, range, other -> {
other.apply(effect, duration);
});
activeEffect.at(unit);
unit.timer2 = 0f;
}
}
}