Starsector API
Loading...
Searching...
No Matches
TriadShieldStats.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.combat;
2
3import java.awt.Color;
4import java.util.EnumSet;
5
6import org.lwjgl.opengl.GL11;
7import org.lwjgl.util.vector.Vector2f;
8
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.combat.CombatEngineLayers;
11import com.fs.starfarer.api.combat.CombatEntityAPI;
12import com.fs.starfarer.api.combat.DamageAPI;
13import com.fs.starfarer.api.combat.MutableShipStatsAPI;
14import com.fs.starfarer.api.combat.ShipAPI;
15import com.fs.starfarer.api.combat.ShipSystemAPI;
16import com.fs.starfarer.api.combat.ViewportAPI;
17import com.fs.starfarer.api.combat.listeners.DamageTakenModifier;
18
19public class TriadShieldStats extends BaseShipSystemScript implements DamageTakenModifier {
20
21 public static Color JITTER_COLOR = new Color(100,50,255,75);
22 public static Color JITTER_UNDER_COLOR = new Color(100,50,255,155);
23
24 public static class TriadShieldVisuals extends CombatEntityPluginWithParticles {
25 public ShipAPI ship;
26 public TriadShieldStats script;
27
28 public TriadShieldVisuals(ShipAPI ship, TriadShieldStats script) {
29 this.ship = ship;
30 this.script = script;
31 }
32
33
34 @Override
35 public EnumSet<CombatEngineLayers> getActiveLayers() {
36 //return EnumSet.of(CombatEngineLayers.ABOVE_SHIPS_AND_MISSILES_LAYER);
37 return EnumSet.of(CombatEngineLayers.ABOVE_PARTICLES_LOWER);
38 }
39 @Override
40 public boolean isExpired() {
41 return false;
42 }
43 @Override
44 public float getRenderRadius() {
45 return ship.getCollisionRadius() + 100f;
46 }
47
48 @Override
49 public void advance(float amount) {
50 super.advance(amount);
51
52 entity.getLocation().set(ship.getLocation());
53 if (Global.getCombatEngine().isPaused()) return;
54 }
55
56 @Override
57 public void render(CombatEngineLayers layer, ViewportAPI viewport) {
58 super.render(layer, viewport);
59
60 float alphaMult = viewport.getAlphaMult();
61
62 ShipSystemAPI system = ship.getPhaseCloak();
63 if (system == null) system = ship.getSystem();
64 alphaMult *= system.getEffectLevel();
65 if (alphaMult <= 0f) return;
66
67 GL11.glPushMatrix();
68 GL11.glTranslatef(ship.getLocation().x, ship.getLocation().y, 0);
69 GL11.glRotatef(ship.getFacing(), 0, 0, 1);
70
71 GL11.glPopMatrix();
72
73 }
74 }
75
76 protected TriadShieldVisuals visuals = null;
77
78 public String modifyDamageTaken(Object param, CombatEntityAPI target, DamageAPI damage, Vector2f point, boolean shieldHit) {
79 return null;
80 }
81
82 public void apply(MutableShipStatsAPI stats, String id, State state, float effectLevel) {
83 ShipAPI ship = null;
84 boolean player = false;
85 if (stats.getEntity() instanceof ShipAPI) {
86 ship = (ShipAPI) stats.getEntity();
87 player = ship == Global.getCombatEngine().getPlayerShip();
88 id = id + "_" + ship.getId();
89 } else {
90 return;
91 }
92
93 if (visuals == null) {
94 visuals = new TriadShieldVisuals(ship, this);
95 Global.getCombatEngine().addLayeredRenderingPlugin(visuals);
96 ship.addListener(this);
97 }
98
99 if (Global.getCombatEngine().isPaused()) {
100 return;
101 }
102
103 if (state == State.COOLDOWN || state == State.IDLE) {
104 unapply(stats, id);
105 return;
106 }
107
108 ShipSystemAPI system = ship.getPhaseCloak();
109 if (system == null) system = ship.getSystem();
110
111
112
113 float jitterLevel = effectLevel;
114 if (state == State.OUT) {
115 jitterLevel *= jitterLevel;
116 }
117 float jitterRangeBonus = jitterLevel * 0f;
118 if (state == State.IN || state == State.ACTIVE) {
119
120 } else if (state == State.OUT) {
121
122 }
123
124 float minJitter = 4;
125 JITTER_COLOR = new Color(100,100,255,75);
126 JITTER_UNDER_COLOR = new Color(100,100,255,155);
127
128 //JITTER_COLOR = new Color(100,50,255,125);
129// JITTER_UNDER_COLOR = new Color(100,100,255,100);
130// JITTER_UNDER_COLOR = new Color(50,50,125,100);
131// JITTER_COLOR = new Color(100,255,50,125);
132// JITTER_UNDER_COLOR = new Color(255,100,100,100);
133 if (jitterLevel > 0) {
134 ship.setCircularJitter(true);
135 ship.setJitter(this, JITTER_COLOR, jitterLevel, 1, 0f, 7f + jitterRangeBonus);
136 ship.setJitterUnder(this, JITTER_UNDER_COLOR, jitterLevel, 11, minJitter, minJitter + jitterRangeBonus);
137 }
138 }
139
140
141 public void unapply(MutableShipStatsAPI stats, String id) {
142 ShipAPI ship = null;
143 boolean player = false;
144 if (stats.getEntity() instanceof ShipAPI) {
145 ship = (ShipAPI) stats.getEntity();
146 player = ship == Global.getCombatEngine().getPlayerShip();
147 id = id + "_" + ship.getId();
148 } else {
149 return;
150 }
151
152
153 }
154
155 public StatusData getStatusData(int index, State state, float effectLevel) {
156 return null;
157 }
158
159}
static CombatEngineAPI getCombatEngine()
Definition Global.java:63
void apply(MutableShipStatsAPI stats, String id, State state, float effectLevel)
String modifyDamageTaken(Object param, CombatEntityAPI target, DamageAPI damage, Vector2f point, boolean shieldHit)
StatusData getStatusData(int index, State state, float effectLevel)
void unapply(MutableShipStatsAPI stats, String id)