Starsector API
Loading...
Searching...
No Matches
DamperFieldStats.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.combat;
2
3import java.util.HashMap;
4import java.util.Map;
5
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.combat.MutableShipStatsAPI;
8import com.fs.starfarer.api.combat.ShipAPI;
9import com.fs.starfarer.api.combat.ShipAPI.HullSize;
10import com.fs.starfarer.api.combat.ShipSystemAPI;
11import com.fs.starfarer.api.impl.campaign.ids.Tags;
12
14
15 private static Map mag = new HashMap();
16 static {
17 mag.put(HullSize.FIGHTER, 0.33f);
18 mag.put(HullSize.FRIGATE, 0.33f);
19 mag.put(HullSize.DESTROYER, 0.33f);
20 mag.put(HullSize.CRUISER, 0.5f);
21 mag.put(HullSize.CAPITAL_SHIP, 0.5f);
22 }
23
24 protected Object STATUSKEY1 = new Object();
25
26 //public static final float INCOMING_DAMAGE_MULT = 0.25f;
27 //public static final float INCOMING_DAMAGE_CAPITAL = 0.5f;
28
29 public void apply(MutableShipStatsAPI stats, String id, State state, float effectLevel) {
30 effectLevel = 1f;
31
32 float mult = (Float) mag.get(HullSize.CRUISER);
33 if (stats.getVariant() != null) {
34 mult = (Float) mag.get(stats.getVariant().getHullSize());
35 }
36 stats.getHullDamageTakenMult().modifyMult(id, 1f - (1f - mult) * effectLevel);
37 stats.getArmorDamageTakenMult().modifyMult(id, 1f - (1f - mult) * effectLevel);
38 stats.getEmpDamageTakenMult().modifyMult(id, 1f - (1f - mult) * effectLevel);
39
40
41 ShipAPI ship = null;
42 boolean player = false;
43 if (stats.getEntity() instanceof ShipAPI) {
44 ship = (ShipAPI) stats.getEntity();
45 player = ship == Global.getCombatEngine().getPlayerShip();
46 }
47 if (player) {
48 ShipSystemAPI system = getDamper(ship);
49 if (system != null) {
50 float percent = (1f - mult) * effectLevel * 100;
51 Global.getCombatEngine().maintainStatusForPlayerShip(STATUSKEY1,
52 system.getSpecAPI().getIconSpriteName(), system.getDisplayName(),
53 (int) Math.round(percent) + "% less damage taken", false);
54 }
55 }
56 }
57
58 public static ShipSystemAPI getDamper(ShipAPI ship) {
59// ShipSystemAPI system = ship.getSystem();
60// if (system != null && system.getId().equals("damper")) return system;
61// if (system != null && system.getId().equals("damper_omega")) return system;
62// if (system != null && system.getSpecAPI() != null && system.getSpecAPI().hasTag(Tags.SYSTEM_USES_DAMPER_FIELD_AI)) return system;
63// return ship.getPhaseCloak();
64 ShipSystemAPI system = ship.getPhaseCloak();
65 if (system != null && system.getId().equals("damper")) return system;
66 if (system != null && system.getId().equals("damper_omega")) return system;
67 if (system != null && system.getSpecAPI() != null && system.getSpecAPI().hasTag(Tags.SYSTEM_USES_DAMPER_FIELD_AI)) return system;
68 return ship.getSystem();
69 }
70
71 public void unapply(MutableShipStatsAPI stats, String id) {
72 stats.getHullDamageTakenMult().unmodify(id);
73 stats.getArmorDamageTakenMult().unmodify(id);
74 stats.getEmpDamageTakenMult().unmodify(id);
75 }
76
77
78// public StatusData getStatusData(int index, State state, float effectLevel) {
79// float mult = (Float) mag.get(HullSize.CRUISER);
80// if (stats.getVariant() != null) {
81// mult = (Float) mag.get(stats.getVariant().getHullSize());
82// }
83// effectLevel = 1f;
84// float percent = (1f - INCOMING_DAMAGE_MULT) * effectLevel * 100;
85// if (index == 0) {
86// return new StatusData((int) percent + "% less damage taken", false);
87// }
88// return null;
89// }
90}
static CombatEngineAPI getCombatEngine()
Definition Global.java:63
void apply(MutableShipStatsAPI stats, String id, State state, float effectLevel)
void unapply(MutableShipStatsAPI stats, String id)