Starsector API
Loading...
Searching...
No Matches
CombatListenerUtil.java
Go to the documentation of this file.
1package com.fs.starfarer.api.combat.listeners;
2
3import java.util.ArrayList;
4import java.util.List;
5
6import org.lwjgl.util.vector.Vector2f;
7
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.combat.CombatEntityAPI;
10import com.fs.starfarer.api.combat.DamageAPI;
11import com.fs.starfarer.api.combat.DeployedFleetMemberAPI;
12import com.fs.starfarer.api.combat.MutableShipStatsAPI;
13import com.fs.starfarer.api.combat.ShipAPI;
14import com.fs.starfarer.api.combat.WeaponAPI;
15import com.fs.starfarer.api.loading.FighterWingSpecAPI;
16import com.fs.starfarer.api.loading.WeaponSpecAPI;
17
18
19public class CombatListenerUtil {
20
21 public static List<String> modifyDamageDealt(Object param, CombatEntityAPI target,
22 DamageAPI damage, Vector2f point, boolean shieldHit) {
23 return modifyDamageDealt(Global.getCombatEngine().getListenerManager().getListeners(DamageDealtModifier.class),
24 param, target, damage, point, shieldHit);
25 }
26
27 public static List<String> modifyDamageDealt(ShipAPI attacker, Object param, CombatEntityAPI target,
28 DamageAPI damage, Vector2f point, boolean shieldHit) {
29 if (attacker == null || attacker.getListenerManager() == null) return null;
30 return modifyDamageDealt(attacker.getListeners(DamageDealtModifier.class), param, target, damage, point, shieldHit);
31 }
32
33 protected static List<String> modifyDamageDealt(List<DamageDealtModifier> mods, Object param, CombatEntityAPI target,
34 DamageAPI damage, Vector2f point, boolean shieldHit) {
35 List<String> ids = null;
36 mods = new ArrayList<DamageDealtModifier>(mods);
37 for (DamageDealtModifier x : mods) {
38 String id = x.modifyDamageDealt(param, target, damage, point, shieldHit);
39 if (id != null) {
40 if (ids == null) ids = new ArrayList<String>();
41 ids.add(id);
42 }
43 }
44 return ids;
45 }
46
47
48
49
50 public static List<String> modifyDamageTaken(Object param, CombatEntityAPI target,
51 DamageAPI damage, Vector2f point, boolean shieldHit) {
52 return modifyDamageTaken(Global.getCombatEngine().getListenerManager().getListeners(DamageTakenModifier.class),
53 param, target, damage, point, shieldHit);
54 }
55
56 public static List<String> modifyDamageTaken(ShipAPI ship, Object param, CombatEntityAPI target,
57 DamageAPI damage, Vector2f point, boolean shieldHit) {
58 // ship == target, yes
59 if (ship == null || ship.getListenerManager() == null) return null;
60 return modifyDamageTaken(ship.getListeners(DamageTakenModifier.class), param, target, damage, point, shieldHit);
61 }
62
63 protected static List<String> modifyDamageTaken(List<DamageTakenModifier> mods, Object param, CombatEntityAPI target,
64 DamageAPI damage, Vector2f point, boolean shieldHit) {
65 List<String> ids = null;
66 mods = new ArrayList<DamageTakenModifier>(mods);
67 for (DamageTakenModifier x : mods) {
68 String id = x.modifyDamageTaken(param, target, damage, point, shieldHit);
69 if (id != null) {
70 if (ids == null) ids = new ArrayList<String>();
71 ids.add(id);
72 }
73 }
74 return ids;
75 }
76
77 public static void reportDamageApplied(ShipAPI ship, Object source, CombatEntityAPI target, ApplyDamageResultAPI result) {
78 for (DamageListener x : new ArrayList<DamageListener>(Global.getCombatEngine().getListenerManager().getListeners(DamageListener.class))) {
79 x.reportDamageApplied(source, target, result);
80 }
81 if (ship != null) {
82 for (DamageListener x : new ArrayList<DamageListener>(ship.getListeners(DamageListener.class))) {
83 x.reportDamageApplied(source, target, result);
84 }
85 }
86 }
87
88 public static boolean notifyAboutToTakeHullDamage(ShipAPI ship, Object source, Vector2f point, float damageAmount) {
89 boolean result = false;
90 for (HullDamageAboutToBeTakenListener x : new ArrayList<HullDamageAboutToBeTakenListener>(Global.getCombatEngine().getListenerManager().getListeners(HullDamageAboutToBeTakenListener.class))) {
91 result |= x.notifyAboutToTakeHullDamage(source, ship, point, damageAmount);
92 }
93 for (HullDamageAboutToBeTakenListener x : new ArrayList<HullDamageAboutToBeTakenListener>(ship.getListeners(HullDamageAboutToBeTakenListener.class))) {
94 result |= x.notifyAboutToTakeHullDamage(source, ship, point, damageAmount);
95 }
96 return result;
97 }
98
99 public static float getWeaponRangePercentMod(ShipAPI ship, WeaponAPI weapon) {
100 float mod = 0f;
101 if (ship != null) {
102 for (WeaponRangeModifier x : new ArrayList<WeaponRangeModifier>(ship.getListeners(WeaponRangeModifier.class))) {
103 mod += x.getWeaponRangePercentMod(ship, weapon);
104 }
105 }
106 return mod;
107 }
108
109 public static float getWeaponRangeMultMod(ShipAPI ship, WeaponAPI weapon) {
110 float mod = 1f;
111 if (ship != null && ship.getListenerManager() != null) {
112 for (WeaponRangeModifier x : new ArrayList<WeaponRangeModifier>(ship.getListeners(WeaponRangeModifier.class))) {
113 mod *= x.getWeaponRangeMultMod(ship, weapon);
114 }
115 }
116 return mod;
117 }
118
119 public static float getWeaponRangeFlatMod(ShipAPI ship, WeaponAPI weapon) {
120 float mod = 0f;
121 if (ship != null && ship.getListenerManager() != null) {
122 for (WeaponRangeModifier x : new ArrayList<WeaponRangeModifier>(ship.getListeners(WeaponRangeModifier.class))) {
123 mod += x.getWeaponRangeFlatMod(ship, weapon);
124 }
125 }
126 return mod;
127 }
128
129
130 public static float getWeaponBaseRangePercentMod(ShipAPI ship, WeaponAPI weapon) {
131 float mod = 0f;
132 if (ship != null) {
133 for (WeaponBaseRangeModifier x : new ArrayList<WeaponBaseRangeModifier>(ship.getListeners(WeaponBaseRangeModifier.class))) {
134 mod += x.getWeaponBaseRangePercentMod(ship, weapon);
135 }
136 }
137 return mod;
138 }
139
140 public static float getWeaponBaseRangeMultMod(ShipAPI ship, WeaponAPI weapon) {
141 float mod = 1f;
142 if (ship != null && ship.getListenerManager() != null) {
143 for (WeaponBaseRangeModifier x : new ArrayList<WeaponBaseRangeModifier>(ship.getListeners(WeaponBaseRangeModifier.class))) {
144 mod *= x.getWeaponBaseRangeMultMod(ship, weapon);
145 }
146 }
147 return mod;
148 }
149
150 public static float getWeaponBaseRangeFlatMod(ShipAPI ship, WeaponAPI weapon) {
151 float mod = 0f;
152 if (ship != null && ship.getListenerManager() != null) {
153 for (WeaponBaseRangeModifier x : new ArrayList<WeaponBaseRangeModifier>(ship.getListeners(WeaponBaseRangeModifier.class))) {
154 mod += x.getWeaponBaseRangeFlatMod(ship, weapon);
155 }
156 }
157 return mod;
158 }
159
160 public static int getWeaponOPCost(MutableShipStatsAPI stats, WeaponSpecAPI weapon, int currCost) {
161 int cost = currCost;
162 if (stats != null && stats.getListenerManager() != null) {
163 for (WeaponOPCostModifier x : new ArrayList<WeaponOPCostModifier>(stats.getListeners(WeaponOPCostModifier.class))) {
164 cost = x.getWeaponOPCost(stats, weapon, cost);
165 }
166 }
167 return cost;
168 }
169
170 public static int getFighterOPCost(MutableShipStatsAPI stats, FighterWingSpecAPI fighter, int currCost) {
171 int cost = currCost;
172 if (stats != null && stats.getListenerManager() != null) {
173 for (FighterOPCostModifier x : new ArrayList<FighterOPCostModifier>(stats.getListeners(FighterOPCostModifier.class))) {
174 cost = x.getFighterOPCost(stats, fighter, cost);
175 }
176 }
177 return cost;
178 }
179
180
181
183 for (FleetMemberDeploymentListener x : Global.getCombatEngine().getListenerManager().getListeners(FleetMemberDeploymentListener.class)) {
184 x.reportFleetMemberDeployed(member);
185 }
186// if (member.getShip() != null) {
187// for (FleetMemberDeploymentListener x : member.getShip().getListeners(FleetMemberDeploymentListener.class)) {
188// x.reportFleetMemberDeployed(member);
189// }
190// }
191 }
192}
193
194
195
196
197
198
199
200
201
202
203
204
static CombatEngineAPI getCombatEngine()
Definition Global.java:63
static List< String > modifyDamageDealt(List< DamageDealtModifier > mods, Object param, CombatEntityAPI target, DamageAPI damage, Vector2f point, boolean shieldHit)
static List< String > modifyDamageDealt(Object param, CombatEntityAPI target, DamageAPI damage, Vector2f point, boolean shieldHit)
static List< String > modifyDamageDealt(ShipAPI attacker, Object param, CombatEntityAPI target, DamageAPI damage, Vector2f point, boolean shieldHit)
static int getFighterOPCost(MutableShipStatsAPI stats, FighterWingSpecAPI fighter, int currCost)
static void reportFleetMemberDeployed(DeployedFleetMemberAPI member)
static List< String > modifyDamageTaken(Object param, CombatEntityAPI target, DamageAPI damage, Vector2f point, boolean shieldHit)
static List< String > modifyDamageTaken(ShipAPI ship, Object param, CombatEntityAPI target, DamageAPI damage, Vector2f point, boolean shieldHit)
static List< String > modifyDamageTaken(List< DamageTakenModifier > mods, Object param, CombatEntityAPI target, DamageAPI damage, Vector2f point, boolean shieldHit)
static float getWeaponBaseRangeMultMod(ShipAPI ship, WeaponAPI weapon)
static float getWeaponBaseRangeFlatMod(ShipAPI ship, WeaponAPI weapon)
static float getWeaponRangeFlatMod(ShipAPI ship, WeaponAPI weapon)
static float getWeaponRangeMultMod(ShipAPI ship, WeaponAPI weapon)
static int getWeaponOPCost(MutableShipStatsAPI stats, WeaponSpecAPI weapon, int currCost)
static float getWeaponRangePercentMod(ShipAPI ship, WeaponAPI weapon)
static float getWeaponBaseRangePercentMod(ShipAPI ship, WeaponAPI weapon)
static boolean notifyAboutToTakeHullDamage(ShipAPI ship, Object source, Vector2f point, float damageAmount)
static void reportDamageApplied(ShipAPI ship, Object source, CombatEntityAPI target, ApplyDamageResultAPI result)
< T > List< T > getListeners(Class< T > c)
CombatListenerManagerAPI getListenerManager()
CombatListenerManagerAPI getListenerManager()
< T > List< T > getListeners(Class< T > c)