1package com.fs.starfarer.api.impl.hullmods;
3import java.util.ArrayList;
5import java.util.Random;
7import org.lwjgl.util.vector.Vector2f;
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.combat.BaseHullMod;
11import com.fs.starfarer.api.combat.CombatEngineAPI;
12import com.fs.starfarer.api.combat.CombatEntityAPI;
13import com.fs.starfarer.api.combat.MissileAPI;
14import com.fs.starfarer.api.combat.ShipAPI;
15import com.fs.starfarer.api.combat.WeaponAPI.WeaponType;
16import com.fs.starfarer.api.util.IntervalUtil;
17import com.fs.starfarer.api.util.Misc;
18import com.fs.starfarer.api.util.WeightedRandomPicker;
23 public static class IncomingMine {
28 public static class MinefieldData {
31 List<IncomingMine> incoming =
new ArrayList<IncomingMine>();
37 super.advanceInCombat(ship, amount);
45 data =
new MinefieldData();
50 if (data.source != ship)
return;
54 for (IncomingMine inc :
new ArrayList<IncomingMine>(data.incoming)) {
58 data.incoming.remove(inc);
62 data.tracker.advance(amount);
63 if (!data.tracker.intervalElapsed())
return;
68 if (enemy == ship)
continue;
69 if (enemy.isHulk())
continue;
70 if (enemy.getOwner() == ship.
getOwner())
continue;
71 if (enemy.isFighter())
continue;
72 if (enemy.isDrone())
continue;
73 if (enemy.isStation())
continue;
74 if (enemy.isStationModule())
continue;
75 if (enemy.getTravelDrive() !=
null && enemy.getTravelDrive().isActive())
continue;
77 if ((
float) Math.random() > 0.25f)
continue;
80 enemy.getCollisionRadius() + 400f + 200f * (
float) Math.random());
81 float minOk = 400f + enemy.getCollisionRadius();
84 IncomingMine inc =
new IncomingMine();
85 inc.delay = (float) Math.random() * 1.5f;
87 inc.mineLoc = mineLoc;
92 int numToSpawn = Math.max(1, Math.min(
new Random().nextInt(6) + 5, picker.
getItems().size()));
94 for (
int i = 0; i < numToSpawn && !picker.
isEmpty(); i++) {
96 data.incoming.add(inc);
110 if (source !=
null) {
112 source, WeaponType.MISSILE,
false, mine.
getDamage());
130 if (other.isFighter())
continue;
131 if (other.isDrone())
continue;
141 if (dist < other.getCollisionRadius() + 100f) {
static SoundPlayerAPI getSoundPlayer()
static CombatEngineAPI getCombatEngine()
boolean isAreaClear(Vector2f loc, float range)
static String MINEFIELD_DATA_KEY
void advanceInCombat(ShipAPI ship, float amount)
void spawnMine(ShipAPI source, Vector2f mineLoc, ShipAPI target)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static Vector2f getPointAtRadius(Vector2f from, float r)
static float getAngleInDegrees(Vector2f v)
SoundAPI playSound(String id, float pitch, float volume, Vector2f loc, Vector2f vel)
Map< String, Object > getCustomData()
CombatEntityAPI spawnProjectile(ShipAPI ship, WeaponAPI weapon, String weaponId, Vector2f point, float angle, Vector2f shipVelocity)
List< CombatEntityAPI > getAsteroids()
void applyDamageModifiersToSpawnedProjectileWithNullWeapon(ShipAPI source, WeaponType type, boolean isBeam, DamageAPI damage)
List< ShipAPI > getShips()
void fadeOutThenIn(float inDur)
void setFlightTime(float flightTime)