package data.scripts;
import com.fs.starfarer.api.combat.*;
import com.fs.starfarer.api.util.IntervalUtil;
import org.lazywizard.lazylib.MathUtils;
import org.lazywizard.lazylib.combat.CombatUtils;
import java.util.List;
import org.lwjgl.util.vector.Vector2f;
import java.awt.Color;
import org.lazywizard.lazylib.combat.entities.SimpleEntity;
import java.util.ListIterator;
public class TF_EF_VENT implements EveryFrameWeaponEffectPlugin {
float delay = 0.3f;
private IntervalUtil fluxInterval = new IntervalUtil(delay, delay*1.5f);
public void advance(float amount, CombatEngineAPI engine, WeaponAPI weapon) {
if (engine.isPaused()) return;
if (!weapon.getShip().isAlive()) return;
ShipAPI dfship = weapon.getShip();
Vector2f dftip = MathUtils.getPointOnCircumference(weapon.getLocation(),50f,weapon.getCurrAngle());
float fluxLevel = dfship.getFluxTracker().getFluxLevel();
float maxflux = dfship.getFluxTracker().getMaxFlux();
float dfarea = weapon.getRange();
float dfdamage = weapon.getDerivedStats().getDps()*delay;
float dfflux = weapon.getDerivedStats().getEmpPerSecond()*delay;
Color dfcolor1 = new Color(255, 150, 150);
Color dfcolor2 = new Color(255, 255, 255);
fluxInterval.advance(amount * dfship.getMutableStats().getTimeMult().getModifiedValue());
if (fluxInterval.intervalElapsed()) {
engine.spawnEmpArc(
dfship, //damageSource
dftip, //point
dfship, //pointAnchor
dfship,
DamageType.ENERGY,
0, // damage
0, // emp
100000f, // max range
"",
(dfdamage/4)*(dfship.getFluxTracker().getCurrFlux()/dfship.getFluxTracker().getMaxFlux())+1f,
dfcolor1,
dfcolor2);
if (dfship.getFluxTracker().isOverloadedOrVenting()) {
List <CombatEntityAPI> targets = CombatUtils.getEntitiesWithinRange(dftip,dfarea);
ListIterator<CombatEntityAPI> iter2 = targets.listIterator(targets.size());
while (iter2.hasPrevious()) {
CombatEntityAPI target = iter2.previous();
if (target.getOwner() == dfship.getOwner()) {
iter2.remove();
continue;
}
if (target instanceof ShipAPI) {
ShipAPI ship = (ShipAPI) target;
if (ship.getCollisionClass() == CollisionClass.NONE || !ship.isAlive()) {
iter2.remove();
continue;
}
}
if (!(target instanceof ShipAPI) && !(target instanceof MissileAPI)) {
iter2.remove();
}
}
CombatEntityAPI target = new SimpleEntity(MathUtils.getRandomPointInCircle(dftip, dfarea));
if (iter2.hasNext()){
target = iter2.next();
}
engine.spawnEmpArc(
dfship, //damageSource
dftip, //point
dfship, //pointAnchor
target,
DamageType.ENERGY,
dfdamage/2, // damage
dfflux/2, // emp
100000f, // max range
"tachyon_lance_emp_impact",
dfdamage/4,
dfcolor1,
dfcolor2);
dfship.getFluxTracker().decreaseFlux(dfflux);
if (target instanceof ShipAPI){
((ShipAPI) target).getFluxTracker().increaseFlux(dfflux,true);
}
}
}
}
}