Starsector API
Loading...
Searching...
No Matches
ShroudedEyeShipCreator.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.combat.dweller;
2
3import java.util.List;
4
5import java.awt.Color;
6
7import org.lwjgl.util.vector.Vector2f;
8
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.combat.CombatEngineAPI;
11import com.fs.starfarer.api.combat.CombatEngineLayers;
12import com.fs.starfarer.api.combat.EmpArcEntityAPI;
13import com.fs.starfarer.api.combat.EmpArcEntityAPI.EmpArcParams;
14import com.fs.starfarer.api.combat.MutableShipStatsAPI;
15import com.fs.starfarer.api.combat.ShipAPI;
16import com.fs.starfarer.api.combat.ShipAPI.HullSize;
17import com.fs.starfarer.api.combat.ViewportAPI;
18import com.fs.starfarer.api.impl.combat.NegativeExplosionVisual;
19import com.fs.starfarer.api.impl.combat.NegativeExplosionVisual.NEParams;
20import com.fs.starfarer.api.impl.combat.dweller.DwellerCombatPlugin.WobblyPart;
21import com.fs.starfarer.api.impl.combat.dweller.DwellerShroud.DwellerShroudParams;
22import com.fs.starfarer.api.util.IntervalUtil;
23import com.fs.starfarer.api.util.Misc;
24
26
27 public static class PlasmaEyePart extends BaseDwellerShipPart {
28 public float radius;
29 public IntervalUtil interval = new IntervalUtil(0.75f, 1.25f);
30 public ShipAPI ship;
31 public NegativeExplosionVisual visual;
32
33 public PlasmaEyePart(Vector2f offset, float facingOffset, ShipAPI ship, float radius) {
34 super(offset, facingOffset);
35 this.ship = ship;
36 this.radius = radius;
37
38 NEParams p = new NEParams();
39 p.hitGlowSizeMult = 0.75f;
40 p.noiseMag = 1f;
41// p.radius = 35f;
42// p.noiseMult = 3f;
43 p.radius = 15f;
44 p.noiseMult = 2f;
45 p.color = new Color(255,55,255,155);
46 p.blackColor = new Color(255,155,255,255);
47 p.color = new Color(255,55,55,155);
48 p.blackColor = new Color(255,155,155,255);
49
50 //p.thickness = 25f;
51 p.underglow = null;
52 p.spawnHitGlowAt = 0f;
53 p.withHitGlow = false;
54 //p.additiveBlend = true;
55
56
57 visual = new NegativeExplosionVisual(p);
58 visual.init(ship);
59 visual.getFader().forceIn();
60 }
61
62 @Override
63 public void advance(float amount) {
64 super.advance(amount);
65
66 visual.getFader().fadeIn();
67 visual.advance(amount * 0.5f);
68
69 interval.advance(amount * 30f);
70 if (interval.intervalElapsed() && !ship.getFluxTracker().isOverloadedOrVenting()) {
71 EmpArcParams params = new EmpArcParams();
72 params.segmentLengthMult = 4f;
73 params.glowSizeMult = 2.5f;
74
75 if ((float) Math.random() < 0.1f) {
76 params.glowSizeMult = 7f;
77 }
78 //params.glowSizeMult = 1.5f;
79 //params.zigZagReductionFactor = 0f;
80 //params.brightSpotFadeFraction = 0.33f;
81
82 //params.brightSpotFullFraction = 0.33f;
83
84 params.flickerRateMult = 0.5f + (float) Math.random() * 0.5f;
85
86 params.fadeOutDist = 30f;
87 params.minFadeOutMult = 5f;
88 params.flickerRateMult *= 0.3f;
89 params.movementDurOverride = 0.3f;
90
92 fringe = new Color(150, 30, 40, 255);
93 Color core = Color.white;
94 fringe = new Color(150, 30, 40, 255);
95 core = new Color(255, 150, 190, 255);
96
97 fringe = new Color(150, 30, 30, 255);
98 core = new Color(255, 150, 150, 255);
99
100 float thickness = 80f;
101 thickness = 40f;
102
103 Vector2f loc = ship.getLocation();
104 float r = radius * 1.1f;
105 r = r * 0.5f + r * 0.5f * (float) Math.random();
106 Vector2f from = Misc.getPointAtRadius(loc, r);
107
108 Vector2f to = new Vector2f(loc);
109 to = Misc.getPointWithinRadius(to, radius * 0.1f);
110
111 boolean goingOutside = false;
112 if ((float) Math.random() < 0.4f && false) {
113 Vector2f temp = to;
114 to = from;
115 from = temp;
116 goingOutside = true;
117 }
118
121 from, ship, to, ship, thickness, fringe, core, params);
122
123 arc.setCoreWidthOverride(60f);
124 arc.setCoreWidthOverride(20f);
125 arc.setCoreWidthOverride(25f);
126
127 if (goingOutside) {
128 arc.setRenderGlowAtEnd(false);
129 } else {
130 arc.setRenderGlowAtStart(false);
131 arc.setFadedOutAtStart(true);
132 }
133
134 arc.setSingleFlickerMode(true);
135
136// arc.setRenderGlowAtStart(false);
137// arc.setFadedOutAtStart(true);
138
139 if (ship.getSystem() != null && ship.getSystem().getEffectLevel() > 0f) {
140 float level = ship.getSystem().getEffectLevel();
141 Vector2f pt = Misc.getPointWithinRadius(loc, 20f * level);
142 //engine.addHitParticle(pt, ship.getVelocity(), 75f, 0.5f, core);
143 engine.addNebulaParticle(pt, ship.getVelocity(), 35f + 30f * level, 2f,
144 0f, 0f, 1f, core);
145 }
146 }
147
149 Global.getSoundPlayer().playLoop("shrouded_eye_loop",
150 ship, 1f, 0.5f + 0.5f * ship.getFluxLevel(),
151 ship.getLocation(), ship.getVelocity());
152 }
153 }
154
155 @Override
156 protected void renderImpl(float x, float y, float alphaMult, float angle, CombatEngineLayers layer) {
157 super.renderImpl(x, y, alphaMult, angle, layer);
158
160 float vAlpha = viewport.getAlphaMult();
161 viewport.setAlphaMult(alphaMult);
164 visual.render(CombatEngineLayers.ABOVE_PARTICLES, viewport);
165 }
166// if (layer == CombatEngineLayers.ABOVE_PARTICLES_LOWER) {
167// visual.render(CombatEngineLayers.ABOVE_PARTICLES_LOWER, viewport);
168// }
169// if (layer == CombatEngineLayers.ABOVE_PARTICLES) {
170// visual.render(CombatEngineLayers.ABOVE_PARTICLES, viewport);
171// }
172 viewport.setAlphaMult(vAlpha);
173 }
174
175 }
176
177
178 public static float BEAM_RANGE_BONUS = 1200f;
179 public static float HARD_FLUX_DISSIPATION_PERCENT = 100f;
180 public static float DAMAGE_MULT = 0.75f;
181
182 @Override
183 public void initBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
184 super.initBeforeShipCreation(hullSize, stats, id);
185
189
191
193
194 // basically instant
195 stats.getShieldUnfoldRateMult().modifyPercent(id, 10000f);
196 // doesn't matter if unfold is instant
197 //stats.getShieldTurnRateMult().modifyPercent(id, SHIELD_BONUS_TURN);
198
200 }
201
202
203 @Override
205 DwellerCombatPlugin plugin = super.createPlugin(ship);
206
207 List<DwellerShipPart> parts = plugin.getParts();
208 parts.clear();
209
210 //WobblyPart part = new WobblyPart("shrouded_eye_base", 1f, 5, 5, 1f, new Vector2f(0, 0), 0f);
211 WobblyPart part = new WobblyPart("shrouded_eye_base_dark", 1f, 5, 5, 1f, new Vector2f(0, 0), 0f);
212 parts.add(part);
213
215 //glow = new Color(150, 30, 80, 255);
216
217 part = new WobblyPart("shrouded_eye_iris", 0.6f, 3, 3, 1f, new Vector2f(0, 0), 0f);
218 part.color = glow;
219 part.additiveBlend = true;
220 part.alphaMult = 0.5f;
221 //part.setWeaponActivated();
222 parts.add(part);
223
224 PlasmaEyePart eyePart = new PlasmaEyePart(new Vector2f(0, 0), 0f, ship, 110f);
225 parts.add(eyePart);
226
227// plugin.getActiveLayers().add(CombatEngineLayers.ABOVE_PARTICLES_LOWER);
228// plugin.getActiveLayers().add(CombatEngineLayers.ABOVE_PARTICLES);
229
230 return plugin;
231 }
232
233 @Override
234 protected void modifyBaselineShroudParams(ShipAPI ship, DwellerShroudParams params) {
235// params.maxOffset = 50f;
236// params.initialMembers = 50;
237// params.negativeParticleAreaMult = 1.5f;
238
239 params.maxOffset = 130f;
240// params.initialMembers = 2000;
241// params.baseMembersToMaintain = params.initialMembers;
242// params.numToRespawn = 100;
243
244 //params.negativeParticleClearCenterAreaRadius = 150f;
245 params.negativeParticleClearCenterAreaRadius = 50f;
246
247// public static Color SHROUD_COLOR = new Color(100, 0, 25, 255);
248// public static Color SHROUD_GLOW_COLOR = new Color(150, 0, 30, 255);
249// params.color = new Color(100, 10, 10, 255);
250// params.flashFringeColor = new Color(150, 12, 12, 255);
251// params.color = new Color(100, 0, 0, 255);
252// params.flashFringeColor = new Color(150, 0, 0, 255);
253// params.flashCoreColor = Misc.setBrightness(params.color, 255);
254
255 //params.negativeParticleHighContrastMode = true;
256// params.negativeParticleNumBase = 4;
257// params.negativeParticleNumOverloaded = 4;
258 //params.negativeParticleClearCenterAreaRadius = 200f;
259 //params.negativeParticleAreaMult = 0.75f;
260 }
261
262}
263
264
265
266
267
268
269
270
271
static SoundPlayerAPI getSoundPlayer()
Definition Global.java:49
static CombatEngineAPI getCombatEngine()
Definition Global.java:69
void modifyFlat(String source, float value)
void modifyPercent(String source, float value)
void modifyMult(String source, float value)
void modifyMult(String source, float value)
void modifyFlat(String source, float value)
void render(CombatEngineLayers layer, ViewportAPI viewport)
void modifyBaselineShroudParams(ShipAPI ship, DwellerShroudParams params)
void initBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id)
static Vector2f getPointAtRadius(Vector2f from, float r)
Definition Misc.java:697
static Vector2f getPointWithinRadius(Vector2f from, float r)
Definition Misc.java:711
void playLoop(String id, Object playingEntity, float pitch, float volume, Vector2f loc, Vector2f vel)
EmpArcEntityAPI spawnEmpArcVisual(Vector2f from, CombatEntityAPI fromAnchor, Vector2f to, CombatEntityAPI toAnchor, float thickness, Color fringe, Color core)
void addNebulaParticle(Vector2f loc, Vector2f vel, float size, float endSizeMult, float rampUpFraction, float fullBrightnessFraction, float totalDuration, Color color)
void setFadedOutAtStart(boolean fadedOutAtStart)
void setRenderGlowAtEnd(boolean renderGlowAtEnd)
void setRenderGlowAtStart(boolean renderGlowAtStart)
void setCoreWidthOverride(float coreWidthOverride)