1package com.fs.starfarer.api.impl.combat;
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.combat.BaseEveryFrameCombatPlugin;
9import com.fs.starfarer.api.combat.MutableShipStatsAPI;
10import com.fs.starfarer.api.combat.ShipAPI;
11import com.fs.starfarer.api.combat.ShipAPI.HullSize;
12import com.fs.starfarer.api.combat.ShipSystemAPI;
13import com.fs.starfarer.api.combat.ShipSystemAPI.SystemState;
14import com.fs.starfarer.api.combat.ShipwideAIFlags.AIFlags;
15import com.fs.starfarer.api.combat.WeaponAPI;
16import com.fs.starfarer.api.combat.WeaponAPI.WeaponType;
17import com.fs.starfarer.api.input.InputEventAPI;
18import com.fs.starfarer.api.util.Misc;
29 public static final Color
JITTER_COLOR =
new Color(255,155,255,75);
46 float jitterLevel = effectLevel;
47 if (state == State.OUT) {
48 jitterLevel *= jitterLevel;
50 float maxRangeBonus = 50f;
52 float jitterRangeBonus = jitterLevel * maxRangeBonus;
53 if (state == State.OUT) {
61 String targetKey = ship.
getId() +
"_acausal_target";
63 if (state == State.IN) {
64 if (foundTarget ==
null) {
70 }
else if (effectLevel >= 1) {
71 if (foundTarget instanceof
ShipAPI) {
76 }
else if (state == State.OUT && foundTarget !=
null) {
97 if (dist > range + radSum) target =
null;
108 if (dist > range + radSum || target.
isFighter()) target =
null;
114 if (target !=
null && target.
isFighter()) target =
null;
115 if (target ==
null) {
133 if (w.getType() == WeaponType.BALLISTIC || w.getType() == WeaponType.ENERGY) {
134 float curr = w.getRange();
135 if (curr > range) range = curr;
147 if (target == ship)
return;
162 public void advance(
float amount, List<InputEventAPI> events) {
171 public StatusData
getStatusData(
int index, State state,
float effectLevel) {
174 if (index == 0 && percent > 0) {
175 return new StatusData((
int)percent +
"% less energy damage",
false);
184 if (system.
getState() != SystemState.IDLE)
return null;
187 if (target !=
null && target != ship) {
190 if ((target ==
null || target == ship) && ship.
getShipTarget() !=
null) {
191 return "OUT OF RANGE";
201 return target !=
null && target != ship;
static CombatEngineAPI getCombatEngine()
void modifyMult(String source, float value)
Object getCustom(AIFlags flag)
boolean hasFlag(AIFlags flag)
float computeEffective(float baseValue)
boolean isUsable(ShipSystemAPI system, ShipAPI ship)
StatusData getStatusData(int index, State state, float effectLevel)
void applyEffectToTarget(final ShipAPI ship, final ShipAPI target)
void unapply(MutableShipStatsAPI stats, String id)
static final Color JITTER_COLOR
static float getMaxRange(ShipAPI ship)
void apply(MutableShipStatsAPI stats, String id, State state, float effectLevel)
static float DISRUPTION_DUR
static final Color OVERLOAD_COLOR
static float ENERGY_DAM_PENALTY_MULT
static final Color JITTER_UNDER_COLOR
String getInfoText(ShipSystemAPI system, ShipAPI ship)
ShipAPI findTarget(ShipAPI ship)
static float MIN_DISRUPTION_RANGE
static ShipAPI findClosestShipEnemyOf(ShipAPI ship, Vector2f locFromForSorting, HullSize smallestToNote, float maxRange, boolean considerShipRadius)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
Map< String, Object > getCustomData()
void removePlugin(EveryFrameCombatPlugin plugin)
void addPlugin(EveryFrameCombatPlugin plugin)
float getCollisionRadius()
boolean isOverloadedOrVenting()
void beginOverloadWithTotalBaseDuration(float totalDur)
void showOverloadFloatyIfNeeded()
StatBonus getSystemRangeBonus()
MutableStat getEnergyWeaponDamageMult()
CombatEntityAPI getEntity()
void setJitterUnder(Object source, Color color, float intensity, int copies, float range)
void setOverloadColor(Color color)
MutableShipStatsAPI getMutableStats()
FluxTrackerAPI getFluxTracker()
List< WeaponAPI > getAllWeapons()
Vector2f getMouseTarget()
ShipwideAIFlags getAIFlags()
void setJitter(Object source, Color color, float intensity, int copies, float range)
void resetOverloadColor()