mirror of
https://github.com/Anuken/Mindustry.git
synced 2026-03-15 19:30:51 -07:00
107 lines
3.2 KiB
Java
107 lines
3.2 KiB
Java
package mindustry.content;
|
|
|
|
import arc.*;
|
|
import arc.graphics.*;
|
|
import arc.math.Mathf;
|
|
import mindustry.ctype.ContentList;
|
|
import mindustry.game.EventType.*;
|
|
import mindustry.type.StatusEffect;
|
|
import static mindustry.Vars.*;
|
|
|
|
public class StatusEffects implements ContentList{
|
|
public static StatusEffect none, burning, freezing, wet, melting, tarred, overdrive, shielded, shocked, corroded, boss;
|
|
|
|
@Override
|
|
public void load(){
|
|
|
|
none = new StatusEffect("none");
|
|
|
|
burning = new StatusEffect("burning"){{
|
|
damage = 0.06f;
|
|
effect = Fx.burning;
|
|
|
|
init(() -> {
|
|
opposite(wet,freezing);
|
|
trans(tarred, ((unit, time, newTime, result) -> {
|
|
unit.damage(1f);
|
|
Fx.burning.at(unit.x() + Mathf.range(unit.bounds() / 2f), unit.y() + Mathf.range(unit.bounds() / 2f));
|
|
result.set(this, Math.min(time + newTime, 300f));
|
|
}));
|
|
});
|
|
}};
|
|
|
|
freezing = new StatusEffect("freezing"){{
|
|
speedMultiplier = 0.6f;
|
|
armorMultiplier = 0.8f;
|
|
effect = Fx.freezing;
|
|
|
|
init(() -> {
|
|
opposite(melting, burning);
|
|
});
|
|
}};
|
|
|
|
wet = new StatusEffect("wet"){{
|
|
color = Color.royal;
|
|
speedMultiplier = 0.9f;
|
|
effect = Fx.wet;
|
|
|
|
init(() -> {
|
|
trans(shocked, ((unit, time, newTime, result) -> {
|
|
unit.damage(20f);
|
|
if(unit.team() == state.rules.waveTeam){
|
|
Events.fire(Trigger.shock);
|
|
}
|
|
result.set(this, time);
|
|
}));
|
|
opposite(burning);
|
|
});
|
|
}};
|
|
|
|
melting = new StatusEffect("melting"){{
|
|
speedMultiplier = 0.8f;
|
|
armorMultiplier = 0.8f;
|
|
damage = 0.3f;
|
|
effect = Fx.melting;
|
|
|
|
init(() -> {
|
|
trans(tarred, ((unit, time, newTime, result) -> result.set(this, Math.min(time + newTime / 2f, 140f))));
|
|
opposite(wet, freezing);
|
|
});
|
|
}};
|
|
|
|
tarred = new StatusEffect("tarred"){{
|
|
speedMultiplier = 0.6f;
|
|
effect = Fx.oily;
|
|
|
|
init(() -> {
|
|
trans(melting, ((unit, time, newTime, result) -> result.set(burning, newTime + time)));
|
|
trans(burning, ((unit, time, newTime, result) -> result.set(burning, newTime + time)));
|
|
});
|
|
}};
|
|
|
|
overdrive = new StatusEffect("overdrive"){{
|
|
armorMultiplier = 0.95f;
|
|
speedMultiplier = 1.15f;
|
|
damageMultiplier = 1.4f;
|
|
damage = -0.01f;
|
|
effect = Fx.overdriven;
|
|
}};
|
|
|
|
shielded = new StatusEffect("shielded"){{
|
|
armorMultiplier = 3f;
|
|
}};
|
|
|
|
boss = new StatusEffect("boss"){{
|
|
armorMultiplier = 3f;
|
|
damageMultiplier = 3f;
|
|
speedMultiplier = 1.1f;
|
|
}};
|
|
|
|
shocked = new StatusEffect("shocked");
|
|
|
|
//no effects, just small amounts of damage.
|
|
corroded = new StatusEffect("corroded"){{
|
|
damage = 0.1f;
|
|
}};
|
|
}
|
|
}
|