1package com.fs.starfarer.api.impl.combat.threat;
3import java.util.ArrayList;
8import org.lwjgl.util.vector.Vector2f;
10import com.fs.starfarer.api.Global;
11import com.fs.starfarer.api.campaign.FactionAPI;
12import com.fs.starfarer.api.combat.BaseEveryFrameCombatPlugin;
13import com.fs.starfarer.api.combat.CollisionClass;
14import com.fs.starfarer.api.combat.CombatEngineAPI;
15import com.fs.starfarer.api.combat.CombatFleetManagerAPI;
16import com.fs.starfarer.api.combat.DamageType;
17import com.fs.starfarer.api.combat.ShipAPI;
18import com.fs.starfarer.api.combat.ShipCommand;
19import com.fs.starfarer.api.combat.WeaponGroupAPI;
20import com.fs.starfarer.api.impl.campaign.ids.Factions;
21import com.fs.starfarer.api.impl.combat.RiftLanceEffect;
22import com.fs.starfarer.api.impl.combat.threat.RoilingSwarmEffect.SwarmMember;
23import com.fs.starfarer.api.input.InputEventAPI;
24import com.fs.starfarer.api.util.IntervalUtil;
25import com.fs.starfarer.api.util.Misc;
63 float facing =
source.
getFacing() + 15f * ((float) Math.random() - 0.5f);
75 if (faction !=
null) {
87 swarm.params.withInitialMembers =
false;
88 swarm.params.withRespawn =
false;
90 if (sourceSwarm !=
null) {
93 sourceSwarm.params.outspeedAttachedEntityBy = 0f;
95 swarm.params.withInitialMembers =
false;
96 swarm.params.flashFringeColor = sourceSwarm.
params.flashFringeColor;
114 public void advance(
float amount, List<InputEventAPI> events) {
125 (curr.getParentPieceId() !=
null && curr.getParentPieceId().equals(
ship.
getId()))) {
138 if (progress > 1f) progress = 1f;
147 curr.setAlphaMult(progress);
155 if (remaining > 1f) {
159 if (sourceSwarm !=
null) {
160 for (SwarmMember p : sourceSwarm.
members) {
161 Vector2f.add(p.loc, deltaLoc, p.loc);
167 float jitterLevel = progress;
169 if (jitterLevel < 0.5f) {
172 jitterLevel = (1f - jitterLevel) * 2f;
175 if (jitterLevel < 0.5f) {
177 }
else if (remaining <= 2f) {
178 jitterLevel = remaining / 2f;
183 jitterLevel = (float) Math.sqrt(jitterLevel);
186 float jitterRange = 1f;
187 if (remaining < 2f) {
188 jitterRange = remaining / 2f;
192 float maxRangeBonus = 25f;
193 float jitterRangeBonus = jitterRange * maxRangeBonus;
198 ship.
setJitter(
this, c, jitterLevel, 3, 0f, jitterRangeBonus);
203 if (sourceSwarm !=
null) {
204 float speedMult = 0.25f + 0.75f * Math.max(0f, 1f - (
elapsed -
delay) / 2f);
207 if (remaining > 3f) {
208 float numFragMult = sourceSwarm.params.initialMembers / 150f;
209 if (numFragMult < 0.25f) numFragMult = 0.25f;
210 if (numFragMult > 1f) numFragMult = 1f;
211 sourceSwarm.params.flashFrequency = 5f * progress * 2f * numFragMult;
212 sourceSwarm.params.flashProbability = 1f;
214 sourceSwarm.params.flashFringeColor =
Misc.
setAlpha(sourceSwarm.
params.flashFringeColor, 200);
216 sourceSwarm.params.flashCoreRadiusMult = 1.5f;
217 sourceSwarm.params.flashRadius = 50f;
218 sourceSwarm.params.renderFlashOnSameLayer =
true;
220 sourceSwarm.params.flashFrequency = 1f;
221 sourceSwarm.params.flashProbability = 0f;
238 if (sourceSwarm !=
null) {
239 sourceSwarm.
getParams().despawnSound =
null;
244 if (swarm !=
null && sourceSwarm !=
null) {
249 swarm.params.withRespawn =
true;
250 swarm.params.withInitialMembers =
true;
260 if (
ship ==
null)
return;
265 if (
interval.intervalElapsed() && remaining > 1f) {
269 for (SwarmMember p : swarm.
members) {
270 if ((
float) Math.random() > 0.9f) {
280 float baseDuration = 2f;
286 if (remaining < 1f) extraDur = 1f;
289 for (
int i = 0; i < 11; i++) {
292 float dur = baseDuration + baseDuration * (float) Math.random();
297 v.scale(nSize + nSize * (
float) Math.random() * 0.5f);
299 Vector2f.add(vel, v, v);
301 float maxSpeed = nSize * 1.5f * 0.2f;
302 float minSpeed = nSize * 1f * 0.2f;
303 float overMin = v.length() - minSpeed;
305 float durMult = 1f - overMin / (maxSpeed - minSpeed);
306 if (durMult < 0.1f) durMult = 0.1f;
307 dur *= 0.5f + 0.5f * durMult;
310 0.5f / dur, 0f, dur, c);
static SoundPlayerAPI getSoundPlayer()
static CombatEngineAPI getCombatEngine()
static SectorAPI getSector()
void modifyMult(String source, float value)
void modifyMult(String source, float value)
void unmodifyMult(String source)
static final String THREAT
static Color getColorForDarkening(Color from)
int getNumActiveMembers()
RoilingSwarmParams params
void transferMembersTo(RoilingSwarmEffect other, float fraction)
RoilingSwarmParams getParams()
List< SwarmMember > members
static RoilingSwarmEffect getSwarmFor(CombatEntityAPI entity)
void advance(float amount, List< InputEventAPI > events)
void spawnParticles(float amount)
static String SHIP_UNDER_CONSTRUCTION
static String SWARM_CONSTRUCTING_SHIP
static float FADE_IN_RATE_MULT_WHEN_DESTROYED
List< ShipAPI > explodedPieces
CollisionClass collisionClass
ThreatShipConstructionScript(String variantId, ShipAPI source, float delay, float fadeInTime)
static Color EMP_FRINGE_COLOR
void forceIntervalElapsed()
void advance(float amount)
static Vector2f getUnitVectorAtDegreeAngle(float degrees)
static Color setAlpha(Color color, int alpha)
static Vector2f getPointWithinRadius(Vector2f from, float r)
static Vector2f getPointWithinRadiusUniform(Vector2f from, float r, Random random)
void playLoop(String id, Object playingEntity, float pitch, float volume, Vector2f loc, Vector2f vel)
String pickRandomShipName()
FactionAPI getFaction(String factionId)
CombatFleetManagerAPI getFleetManager(FleetSide side)
void applyDamage(CombatEntityAPI entity, Vector2f point, float damageAmount, DamageType damageType, float empAmount, boolean bypassShields, boolean dealsSoftFlux, Object source, boolean playSound)
boolean isInCampaignSim()
void removePlugin(EveryFrameCombatPlugin plugin)
void addNegativeNebulaParticle(Vector2f loc, Vector2f vel, float size, float endSizeMult, float rampUpFraction, float fullBrightnessFraction, float totalDuration, Color color)
List< ShipAPI > getShips()
void setCollisionClass(CollisionClass collisionClass)
float getCollisionRadius()
CollisionClass getCollisionClass()
ShipAPI spawnShipOrWing(String specId, Vector2f location, float facing)
boolean isSuppressDeploymentMessages()
void setSuppressDeploymentMessages(boolean suppressDeploymentMessages)
MutableStat getHullDamageTakenMult()
StatBonus getEffectiveArmorBonus()
void setAlphaMult(float alphaMult)
void setDefaultAI(FleetMemberAPI member)
void setSpawnDebris(boolean spawnDebris)
void setHoldFire(boolean holdFire)
MutableShipStatsAPI getMutableStats()
void setHitpoints(float value)
FleetMemberAPI getFleetMember()
void setName(String name)
void setShipAI(ShipAIPlugin ai)
List< WeaponGroupAPI > getWeaponGroupsCopy()
void setJitter(Object source, Color color, float intensity, int copies, float range)
ShipEngineControllerAPI getEngineController()
void giveCommand(ShipCommand command, Object param, int groupNumber)
void removeTag(String tag)
void fadeToOtherColor(Object key, Color other, Color contrailColor, float effectLevel, float maxBlend)