1package com.fs.starfarer.api.impl.combat.dweller;
3import java.util.Iterator;
8import org.lwjgl.util.vector.Vector2f;
10import com.fs.starfarer.api.Global;
11import com.fs.starfarer.api.combat.CollisionClass;
12import com.fs.starfarer.api.combat.CombatEngineAPI;
13import com.fs.starfarer.api.combat.CombatEntityAPI;
14import com.fs.starfarer.api.combat.DamageType;
15import com.fs.starfarer.api.combat.DamagingProjectileAPI;
16import com.fs.starfarer.api.combat.EmpArcEntityAPI;
17import com.fs.starfarer.api.combat.EmpArcEntityAPI.EmpArcParams;
18import com.fs.starfarer.api.combat.EveryFrameWeaponEffectPlugin;
19import com.fs.starfarer.api.combat.MissileAPI;
20import com.fs.starfarer.api.combat.OnFireEffectPlugin;
21import com.fs.starfarer.api.combat.ShipAPI;
22import com.fs.starfarer.api.combat.WeaponAPI;
23import com.fs.starfarer.api.combat.WeaponAPI.AIHints;
24import com.fs.starfarer.api.impl.campaign.ids.Stats;
25import com.fs.starfarer.api.impl.combat.RealityDisruptorChargeGlow;
26import com.fs.starfarer.api.impl.combat.RealityDisruptorChargeGlow.EMPArcHitType;
27import com.fs.starfarer.api.impl.combat.RealityDisruptorChargeGlow.RDRepairRateDebuff;
28import com.fs.starfarer.api.util.Misc;
58 if (ship ==
null)
return;
65 Vector2f noTargetDest =
null;
66 if (target ==
null) noTargetDest =
pickNoTargetDest(projectile, weapon, engine);
68 Vector2f towards = noTargetDest;
71 float thickness = 30f;
73 Color coreColor = Color.white;
78 color =
new Color(255,0,30,255);
80 coreColor =
new Color(255,10,255,255);
90 float coreWidthMult = 1f;
98 from.scale((0.5f + (
float) Math.random() * 0.25f) * shroud.
getShroudParams().maxOffset);
102 EmpArcParams params =
new EmpArcParams();
104 params.segmentLengthMult = 4f;
109 params.maxZigZagMult = 0.25f;
110 params.zigZagReductionFactor = 1f;
119 params.flickerRateMult = 0.75f + 0.25f * (float) Math.random();
121 params.fadeOutDist = 150f;
122 params.minFadeOutMult = 5f;
124 params.glowSizeMult = 0.5f;
138 if (target !=
null) {
145 "inimical_emanation_impact",
154 if (shroud !=
null) {
161 List<RDRepairRateDebuff> listeners = s.
getListeners(RDRepairRateDebuff.class);
162 if (listeners.isEmpty()) {
175 Vector2f to = noTargetDest;
180 if (shroud !=
null) {
194 float range = Math.min(weapon.
getRange() - spread, 300f);
198 Vector2f.add(from, dir, dir);
209 range * 2f, range * 2f);
212 float minScore = Float.MAX_VALUE;
216 ignoreFlares |= weapon.
hasAIHint(AIHints.IGNORES_FLARES);
218 boolean phaseMode =
true;
220 while (iter.hasNext()) {
221 Object o = iter.next();
224 !(o instanceof
ShipAPI))
continue;
226 if (other.
getOwner() == owner)
continue;
228 boolean phaseHit =
false;
229 if (other instanceof
ShipAPI) {
231 if (otherShip.
isHulk())
continue;
245 if (ignoreFlares && other instanceof
MissileAPI) {
247 if (missile.
isFlare())
continue;
252 if (dist > range)
continue;
258 if (score < minScore) {
static CombatEngineAPI getCombatEngine()
static final String PD_IGNORES_FLARES
static void spawnEMPParticles(EMPArcHitType type, DamagingProjectileAPI proj, Vector2f point, CombatEntityAPI target)
DwellerShroudParams getShroudParams()
static DwellerShroud getShroudFor(CombatEntityAPI entity)
static Color SHROUD_GLOW_COLOR
float extraRangeOnNextFire
CombatEntityAPI findTarget(DamagingProjectileAPI projectile, WeaponAPI weapon, CombatEngineAPI engine)
void onFire(DamagingProjectileAPI projectile, WeaponAPI weapon, CombatEngineAPI engine)
void advance(float amount, CombatEngineAPI engine, WeaponAPI weapon)
static float REPAIR_RATE_DEBUFF_DUR
Vector2f pickNoTargetDest(DamagingProjectileAPI projectile, WeaponAPI weapon, CombatEngineAPI engine)
static Vector2f getUnitVectorAtDegreeAngle(float degrees)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static float getTargetingRadius(Vector2f from, CombatEntityAPI target, boolean considerShield)
static Vector2f getPointWithinRadius(Vector2f from, float r)
static boolean isInArc(float direction, float arc, Vector2f from, Vector2f to)
static float getAngleInDegrees(Vector2f v)
Iterator< Object > getCheckIterator(Vector2f loc, float checkWidth, float checkHeight)
EmpArcEntityAPI spawnEmpArcVisual(Vector2f from, CombatEntityAPI fromAnchor, Vector2f to, CombatEntityAPI toAnchor, float thickness, Color fringe, Color core)
CollisionGridAPI getAllObjectGrid()
EmpArcEntityAPI spawnEmpArc(ShipAPI damageSource, Vector2f point, CombatEntityAPI pointAnchor, CombatEntityAPI empTargetEntity, DamageType damageType, float damAmount, float empDamAmount, float maxRange, String impactSoundId, float thickness, Color fringe, Color core)
CollisionClass getCollisionClass()
void setSingleFlickerMode()
void setFadedOutAtStart(boolean fadedOutAtStart)
Vector2f getTargetLocation()
void setRenderGlowAtStart(boolean renderGlowAtStart)
void setCoreWidthOverride(float coreWidthOverride)
void setWarping(float dur)
DynamicStatsAPI getDynamic()
MutableShipStatsAPI getMutableStats()
void addListener(Object listener)
< T > List< T > getListeners(Class< T > c)
boolean hasAIHint(AIHints hint)
float getValue(String id)