package data.scripts.plugins;
import com.fs.starfarer.api.combat.CombatEngineAPI;
import com.fs.starfarer.api.combat.EveryFrameCombatPlugin;
import com.fs.starfarer.api.combat.ShipAPI;
import com.fs.starfarer.api.combat.ShipSystemAPI;
import com.fs.starfarer.api.combat.WeaponAPI;
import com.fs.starfarer.api.combat.WeaponAPI.WeaponSize;
import com.fs.starfarer.api.plugins.ShipSystemStatsScript.State;
import com.fs.starfarer.api.util.IntervalUtil;
import java.awt.Color;
import java.util.*;
import org.lwjgl.util.vector.Vector2f;
public class OverheatSteam implements EveryFrameCombatPlugin {
private CombatEngineAPI engine;
private static final Map mag = new HashMap();
private static final Map shipIDs = new HashMap();
private State state;
static
{
// List those ships equipped with the "ms_overdrive" ship system
shipIDs.put("ms_thresher", false);
}
static {
mag.put(WeaponSize.SMALL, 1f);
mag.put(WeaponSize.MEDIUM, 1.5f);
mag.put(WeaponSize.LARGE, 2.5f);
}
@Override
public void init(CombatEngineAPI engine) {
this.engine = engine;
}
private final IntervalUtil interval = new IntervalUtil(0.1f, 0.1f);
@Override
public void advance(float amount, List events) {
//ShipAPI ship;
//CombatEntityAPI entity;
//String spec;
if (engine.isPaused()) {
return;
}
interval.advance(amount);
if (interval.intervalElapsed()) {
float smokeSize = 0.8f + 0.4f * (float) Math.random();
List<ShipAPI> ships = engine.getShips();
for (ShipAPI ship : ships) {
if (!shipIDs.containsKey(ship)) {
continue;
}
ShipSystemAPI system = ship.getSystem();
List<WeaponAPI> weapons = ship.getAllWeapons();
if (system != null) {
if (system.isActive() && state == State.OUT) {
for (WeaponAPI weapon : weapons) {
float smokeSizeValue = (Float) mag.get(weapon.getSize());
float velX = (float) Math.random() * 10f - 5f;
float velY = (float) Math.sqrt(25f - velX * velX);
if ((float) Math.random() >= 0.5f) {
velY = -velY;
}
engine.addSmokeParticle(weapon.getLocation(), new Vector2f(velX, velY), 30f * smokeSize * smokeSizeValue, 0.05f, 4f, new Color(130, 160, 130, 20));
engine.addSmokeParticle(weapon.getLocation(), new Vector2f(velX, velY), 15f * smokeSize * smokeSizeValue, 0.05f, 3f, new Color(180, 210, 180, 20));
}
}
}
}
}
}
}