Starsector API
Loading...
Searching...
No Matches
TargetingFeedStats.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.combat;
2
3import java.awt.Color;
4import java.util.ArrayList;
5import java.util.EnumSet;
6import java.util.List;
7
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.combat.MutableShipStatsAPI;
10import com.fs.starfarer.api.combat.ShipAPI;
11import com.fs.starfarer.api.combat.WeaponAPI.WeaponType;
12import com.fs.starfarer.api.util.Misc;
13
15 public static final Object KEY_JITTER = new Object();
16
17 public static final float DAMAGE_INCREASE_PERCENT = 50;
18
19 public static final Color JITTER_UNDER_COLOR = new Color(255,50,0,125);
20 public static final Color JITTER_COLOR = new Color(255,50,0,75);
21
22
23 public void apply(MutableShipStatsAPI stats, String id, State state, float effectLevel) {
24 ShipAPI ship = null;
25 if (stats.getEntity() instanceof ShipAPI) {
26 ship = (ShipAPI) stats.getEntity();
27 } else {
28 return;
29 }
30
31
32 if (effectLevel > 0) {
33 float jitterLevel = effectLevel;
34 float maxRangeBonus = 5f;
35 float jitterRangeBonus = jitterLevel * maxRangeBonus;
36 for (ShipAPI fighter : getFighters(ship)) {
37 if (fighter.isHulk()) continue;
38 MutableShipStatsAPI fStats = fighter.getMutableStats();
39// fStats.getBallisticWeaponDamageMult().modifyPercent(id, DAMAGE_INCREASE_PERCENT * effectLevel);
40// fStats.getEnergyWeaponDamageMult().modifyPercent(id, DAMAGE_INCREASE_PERCENT * effectLevel);
41// fStats.getMissileWeaponDamageMult().modifyPercent(id, DAMAGE_INCREASE_PERCENT * effectLevel);
42
43 fStats.getBallisticWeaponDamageMult().modifyMult(id, 1f + 0.01f * DAMAGE_INCREASE_PERCENT * effectLevel);
44 fStats.getEnergyWeaponDamageMult().modifyMult(id, 1f + 0.01f * DAMAGE_INCREASE_PERCENT * effectLevel);
45 fStats.getMissileWeaponDamageMult().modifyMult(id, 1f + 0.01f * DAMAGE_INCREASE_PERCENT * effectLevel);
46
47 if (jitterLevel > 0) {
48 //fighter.setWeaponGlow(effectLevel, new Color(255,50,0,125), EnumSet.allOf(WeaponType.class));
49 fighter.setWeaponGlow(effectLevel, Misc.setAlpha(JITTER_UNDER_COLOR, 255), EnumSet.allOf(WeaponType.class));
50
51 fighter.setJitterUnder(KEY_JITTER, JITTER_COLOR, jitterLevel, 5, 0f, jitterRangeBonus);
52 fighter.setJitter(KEY_JITTER, JITTER_UNDER_COLOR, jitterLevel, 2, 0f, 0 + jitterRangeBonus * 1f);
53 Global.getSoundPlayer().playLoop("system_targeting_feed_loop", ship, 1f, 1f, fighter.getLocation(), fighter.getVelocity());
54 }
55 }
56 }
57 }
58
59 private List<ShipAPI> getFighters(ShipAPI carrier) {
60 List<ShipAPI> result = new ArrayList<ShipAPI>();
61
62// this didn't catch fighters returning for refit
63// for (FighterLaunchBayAPI bay : carrier.getLaunchBaysCopy()) {
64// if (bay.getWing() == null) continue;
65// result.addAll(bay.getWing().getWingMembers());
66// }
67
68 for (ShipAPI ship : Global.getCombatEngine().getShips()) {
69 if (!ship.isFighter()) continue;
70 if (ship.getWing() == null) continue;
71 if (ship.getWing().getSourceShip() == carrier) {
72 result.add(ship);
73 }
74 }
75
76 return result;
77 }
78
79
80 public void unapply(MutableShipStatsAPI stats, String id) {
81 ShipAPI ship = null;
82 if (stats.getEntity() instanceof ShipAPI) {
83 ship = (ShipAPI) stats.getEntity();
84 } else {
85 return;
86 }
87 for (ShipAPI fighter : getFighters(ship)) {
88 if (fighter.isHulk()) continue;
89 MutableShipStatsAPI fStats = fighter.getMutableStats();
90 fStats.getBallisticWeaponDamageMult().unmodify(id);
91 fStats.getEnergyWeaponDamageMult().unmodify(id);
92 fStats.getMissileWeaponDamageMult().unmodify(id);
93 }
94 }
95
96
97 public StatusData getStatusData(int index, State state, float effectLevel) {
98 float percent = DAMAGE_INCREASE_PERCENT * effectLevel;
99 if (index == 0) {
100 //return new StatusData("+" + (int)percent + "% fighter damage", false);
101 return new StatusData("" + Misc.getRoundedValueMaxOneAfterDecimal(1f + DAMAGE_INCREASE_PERCENT * effectLevel * 0.01f) + "x fighter damage", false);
102 }
103 return null;
104 }
105
106
107}
108
109
110
111
112
113
114
115
static SoundPlayerAPI getSoundPlayer()
Definition Global.java:43
StatusData getStatusData(int index, State state, float effectLevel)
void apply(MutableShipStatsAPI stats, String id, State state, float effectLevel)
void unapply(MutableShipStatsAPI stats, String id)
void playLoop(String id, Object playingEntity, float pitch, float volume, Vector2f loc, Vector2f vel)