78 lines
2.3 KiB
Java
78 lines
2.3 KiB
Java
package mindustry.entities.abilities;
|
|
|
|
import arc.*;
|
|
import arc.graphics.g2d.*;
|
|
import arc.math.*;
|
|
import arc.scene.ui.layout.*;
|
|
import arc.util.*;
|
|
import mindustry.*;
|
|
import mindustry.content.*;
|
|
import mindustry.entities.*;
|
|
import mindustry.game.EventType.*;
|
|
import mindustry.gen.*;
|
|
import mindustry.graphics.*;
|
|
import mindustry.type.*;
|
|
|
|
import static mindustry.Vars.*;
|
|
|
|
public class UnitSpawnAbility extends Ability{
|
|
public UnitType unit;
|
|
public float spawnTime = 60f, spawnX, spawnY;
|
|
public Effect spawnEffect = Fx.spawn;
|
|
public boolean parentizeEffects;
|
|
|
|
protected float timer;
|
|
|
|
public UnitSpawnAbility(UnitType unit, float spawnTime, float spawnX, float spawnY){
|
|
this.unit = unit;
|
|
this.spawnTime = spawnTime;
|
|
this.spawnX = spawnX;
|
|
this.spawnY = spawnY;
|
|
}
|
|
|
|
public UnitSpawnAbility(){
|
|
}
|
|
|
|
@Override
|
|
public void addStats(Table t){
|
|
super.addStats(t);
|
|
t.add(abilityStat("buildtime", Strings.autoFixed(spawnTime / 60f, 2)));
|
|
t.row();
|
|
t.add((unit.hasEmoji() ? unit.emoji() : "") + "[stat]" + unit.localizedName);
|
|
}
|
|
|
|
@Override
|
|
public void update(Unit unit){
|
|
timer += Time.delta * state.rules.unitBuildSpeed(unit.team);
|
|
|
|
if(timer >= spawnTime && Units.canCreate(unit.team, this.unit)){
|
|
float x = unit.x + Angles.trnsx(unit.rotation, spawnY, -spawnX), y = unit.y + Angles.trnsy(unit.rotation, spawnY, -spawnX);
|
|
spawnEffect.at(x, y, 0f, parentizeEffects ? unit : null);
|
|
Unit u = this.unit.create(unit.team);
|
|
u.set(x, y);
|
|
u.rotation = unit.rotation;
|
|
Events.fire(new UnitCreateEvent(u, null, unit));
|
|
if(!Vars.net.client()){
|
|
u.add();
|
|
}
|
|
|
|
timer = 0f;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void draw(Unit unit){
|
|
if(Units.canCreate(unit.team, this.unit)){
|
|
Draw.draw(Draw.z(), () -> {
|
|
float x = unit.x + Angles.trnsx(unit.rotation, spawnY, -spawnX), y = unit.y + Angles.trnsy(unit.rotation, spawnY, -spawnX);
|
|
Drawf.construct(x, y, this.unit.fullIcon, unit.rotation - 90, timer / spawnTime, 1f, timer);
|
|
});
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public String localized(){
|
|
return Core.bundle.format("ability.unitspawn", unit.localizedName);
|
|
}
|
|
}
|