51 lines
1.1 KiB
Java
51 lines
1.1 KiB
Java
package mindustry.entities.def;
|
|
|
|
import arc.util.*;
|
|
import mindustry.annotations.Annotations.*;
|
|
import mindustry.content.*;
|
|
import mindustry.gen.*;
|
|
|
|
@Component
|
|
abstract class ShieldComp implements Healthc, Posc{
|
|
@Import float health, hitTime;
|
|
@Import boolean dead;
|
|
|
|
/** Absorbs health damage. */
|
|
float shield;
|
|
/** Shield opacity. */
|
|
transient float shieldAlpha = 0f;
|
|
|
|
@Replace
|
|
@Override
|
|
public void damage(float amount){
|
|
hitTime = 1f;
|
|
|
|
boolean hadShields = shield > 0.0001f;
|
|
|
|
if(hadShields){
|
|
shieldAlpha = 1f;
|
|
}
|
|
|
|
float shieldDamage = Math.min(shield, amount);
|
|
shield -= shieldDamage;
|
|
amount -= shieldDamage;
|
|
|
|
if(amount > 0){
|
|
health -= amount;
|
|
if(health <= 0 && !dead){
|
|
kill();
|
|
}
|
|
|
|
if(hadShields && shield <= 0.0001f){
|
|
Fx.unitShieldBreak.at(x(), y(), 0, this);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void update(){
|
|
shieldAlpha -= Time.delta() / 12f;
|
|
if(shieldAlpha < 0) shieldAlpha = 0f;
|
|
}
|
|
}
|