44 public void apply(MutableShipStatsAPI stats,
final String
id, State state,
float effectLevel) {
46 if (stats.getEntity() instanceof ShipAPI) {
47 ship = (ShipAPI) stats.getEntity();
52 final String targetDataKey = ship.getId() +
"_entropy_target_data";
55 if (state == State.IN && targetDataObj ==
null) {
59 if (target.getFluxTracker().showFloaty() ||
62 target.getFluxTracker().showOverloadFloatyIfNeeded(
"Amplified Entropy!",
TEXT_COLOR, 4f,
true);
65 }
else if (state == State.IDLE && targetDataObj !=
null) {
67 ((TargetData)targetDataObj).currDamMult = 1f;
70 if (targetDataObj ==
null || ((TargetData) targetDataObj).target ==
null)
return;
72 final TargetData targetData = (TargetData) targetDataObj;
73 targetData.currDamMult = 1f + (
DAM_MULT - 1f) * effectLevel;
75 if (targetData.targetEffectPlugin ==
null) {
76 targetData.targetEffectPlugin =
new BaseEveryFrameCombatPlugin() {
78 public void advance(
float amount, List<InputEventAPI> events) {
82 targetData.ship.getSystem().getSpecAPI().getIconSpriteName(),
83 targetData.ship.getSystem().getDisplayName(),
84 "" + (
int)((targetData.currDamMult - 1f) * 100f) +
"% more damage taken",
true);
87 if (targetData.currDamMult <= 1f || !targetData.ship.isAlive()) {
88 targetData.target.getMutableStats().getHullDamageTakenMult().unmodify(
id);
89 targetData.target.getMutableStats().getArmorDamageTakenMult().unmodify(
id);
90 targetData.target.getMutableStats().getShieldDamageTakenMult().unmodify(
id);
91 targetData.target.getMutableStats().getEmpDamageTakenMult().unmodify(
id);
94 targetData.target.getMutableStats().getHullDamageTakenMult().modifyMult(
id, targetData.currDamMult);
95 targetData.target.getMutableStats().getArmorDamageTakenMult().modifyMult(
id, targetData.currDamMult);
96 targetData.target.getMutableStats().getShieldDamageTakenMult().modifyMult(
id, targetData.currDamMult);
97 targetData.target.getMutableStats().getEmpDamageTakenMult().modifyMult(
id, targetData.currDamMult);
105 if (effectLevel > 0) {
106 if (state != State.IN) {
109 float shipJitterLevel = 0;
110 if (state == State.IN) {
111 shipJitterLevel = effectLevel;
114 shipJitterLevel = Math.max(0, durOut - targetData.elaspedAfterInState) / durOut;
116 float targetJitterLevel = effectLevel;
118 float maxRangeBonus = 50f;
119 float jitterRangeBonus = shipJitterLevel * maxRangeBonus;
122 if (shipJitterLevel > 0) {
124 ship.setJitter(
KEY_SHIP, color, shipJitterLevel, 4, 0f, 0 + jitterRangeBonus * 1f);
127 if (targetJitterLevel > 0) {
129 targetData.target.setJitter(
KEY_TARGET, color, targetJitterLevel, 3, 0f, 5f);
142 ShipAPI target = ship.getShipTarget();
144 if (ship.getShipAI() !=
null && ship.getAIFlags().hasFlag(AIFlags.TARGET_FOR_SHIP_SYSTEM)){
145 target = (ShipAPI) ship.getAIFlags().getCustom(AIFlags.TARGET_FOR_SHIP_SYSTEM);
148 if (target !=
null) {
149 float dist = Misc.getDistance(ship.getLocation(), target.getLocation());
150 float radSum = ship.getCollisionRadius() + target.getCollisionRadius();
151 if (dist > range + radSum) target =
null;
153 if (target ==
null || target.getOwner() == ship.getOwner()) {
155 target = Misc.findClosestShipEnemyOf(ship, ship.getMouseTarget(), HullSize.FIGHTER, range,
true);
157 Object test = ship.getAIFlags().getCustom(AIFlags.MANEUVER_TARGET);
158 if (test instanceof ShipAPI) {
159 target = (ShipAPI) test;
160 float dist = Misc.getDistance(ship.getLocation(), target.getLocation());
161 float radSum = ship.getCollisionRadius() + target.getCollisionRadius();
162 if (dist > range + radSum) target =
null;
166 if (target ==
null) {
167 target = Misc.findClosestShipEnemyOf(ship, ship.getLocation(), HullSize.FIGHTER, range,
true);