Starsector API
Loading...
Searching...
No Matches
ShroudedMaelstromShipCreator.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.combat.dweller;
2
3import java.awt.Color;
4import java.util.List;
5
6import org.lwjgl.util.vector.Vector2f;
7
8import com.fs.starfarer.api.combat.CombatEntityAPI;
9import com.fs.starfarer.api.combat.MutableShipStatsAPI;
10import com.fs.starfarer.api.combat.ShipAPI;
11import com.fs.starfarer.api.combat.ShipAPI.HullSize;
12import com.fs.starfarer.api.combat.WeaponAPI;
13import com.fs.starfarer.api.impl.combat.dweller.DwellerCombatPlugin.DCPPlugin;
14import com.fs.starfarer.api.impl.combat.dweller.DwellerCombatPlugin.WobblyPart;
15import com.fs.starfarer.api.impl.combat.dweller.DwellerShroud.DwellerShroudParams;
16import com.fs.starfarer.api.impl.combat.threat.RoilingSwarmEffect.SwarmMember;
17import com.fs.starfarer.api.impl.combat.threat.RoilingSwarmEffect.SwarmMemberOffsetModifier;
18import com.fs.starfarer.api.loading.ProjectileWeaponSpecAPI;
19import com.fs.starfarer.api.util.ListMap;
20
22
23 public static float FLUX_COST_MULT = 1f;
24 public static float RANGE_BONUS = 200f;
25
26// public static float RL_DELAY = 0.33f;
27// public static float IE_DELAY = 0.25f;
28
29 @Override
30 public void initBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
31 super.initBeforeShipCreation(hullSize, stats, id);
32
33// stats.getEnergyWeaponFluxCostMod().modifyMult(id, FLUX_COST_MULT);
34// stats.getBallisticWeaponFluxCostMod().modifyMult(id, FLUX_COST_MULT);
35// stats.getMissileWeaponFluxCostMod().modifyMult(id, FLUX_COST_MULT);
36
39 }
40
41
42 @Override
44 DwellerCombatPlugin plugin = super.createPlugin(ship);
45 plugin.setPlugin(new DCPPlugin() {
46 ListMap<WeaponAPI> weapons = new ListMap<>();
47 int [] currIndex = new int[10];
48 float [] currElapsed = new float [10];
49 @Override
50 public void advance(DwellerCombatPlugin plugin, float amount) {
51 CombatEntityAPI attachedTo = plugin.getAttachedTo();
52 if (attachedTo instanceof ShipAPI) {
53 ShipAPI ship = (ShipAPI) attachedTo;
54
55 if (weapons.isEmpty()) {
56 for (WeaponAPI w : ship.getAllWeapons()) {
57 if (w.isDecorative()) continue;
58 weapons.add(w.getId(), w);
59 }
60 }
61
62 int i = 0;
63 for (List<WeaponAPI> list : weapons.values()) {
64
65 WeaponAPI w = list.get(0);
66 float delay = ((ProjectileWeaponSpecAPI)w.getSpec()).getRefireDelay() / (float) list.size();
67
68 currElapsed[i] += amount;
69 while (currElapsed[i] > delay) {
70 currElapsed[i] -= delay;
71 currIndex[i]++;
72 currIndex[i] %= list.size();
73 }
74
75 int index = 0;
76 for (WeaponAPI curr : list) {
77 if (index != currIndex[i]) {
78 curr.setForceDisabled(true);
79 } else {
80 curr.setForceDisabled(false);
81 }
82 index++;
83 }
84
85 i++;
86 }
87 }
88 }
89 });
90
91
92 List<DwellerShipPart> parts = plugin.getParts();
93
94 float scale = 1f;
95 scale = 1.33f;
96
97 //scale = 1.5f;
98
99 float spinMult = 1f;
100 spinMult = 0.5f;
101 spinMult = 0.125f;
102
103
104
105
106 /*part = new WobblyPart("shrouded_maelstrom_base", 2f * scale, 1f, new Vector2f(0, 0), 0f);
107 part.setSpin(360f * 2f * spinMult, 360f * 2f * spinMult, 360f * spinMult);
108 part.alphaMult = 0.5f;
109 parts.add(part);
110 */
111
112
113 WobblyPart part = new WobblyPart("shrouded_vortex_base2", 3f * scale, 3, 3, 1f, new Vector2f(0, 0), 0f);
114 part.setSpin(270f * 2f * spinMult, 360f * 2f * spinMult, 270f * spinMult);
115 part.alphaMult = 0.5f;
116 parts.add(part);
117
118 part = new WobblyPart("shrouded_vortex_base2", 2f * scale, 3, 3, 1f, new Vector2f(0, 0), 180f);
119 part.setSpin(270f * 2f * spinMult, 360f * 2f * spinMult, 270f * spinMult);
120 part.alphaMult = 0.4f;
121 parts.add(part);
122
123 //WobblyPart part = new WobblyPart("shrouded_vortex_base", 3f * scale, 1f, new Vector2f(0, 0), 0f);
124
125
127 // eye spot clusters
128 part = new WobblyPart("shrouded_eye_cluster1", 1.2f * scale, 5, 5, 1f, new Vector2f(0, 0), 0f);
129 part.setSpin(50f * 2f * spinMult, 90f * 2f * spinMult, 320f * spinMult);
130 part.color = glow;
131 part.additiveBlend = true;
132 parts.add(part);
133
134 part = new WobblyPart("shrouded_eye_cluster2", 1.2f * scale, 5, 5, 1f, new Vector2f(0, 0), 0f);
135 part.setSpin(60f * 2f * spinMult, 100f * 2f * spinMult, 320f * spinMult);
136 part.color = glow;
137 part.additiveBlend = true;
138 parts.add(part);
139
140 part = new WobblyPart("shrouded_eye_cluster3", 1.2f * scale, 5, 5, 1f, new Vector2f(0, 0), 0f);
141 part.setSpin(70f * 2f * spinMult, 110f * 2f * spinMult, 320f * spinMult);
142 part.color = glow;
143 part.additiveBlend = true;
144 parts.add(part);
145
146
147 part = new WobblyPart("shrouded_maelstrom_base", 1.8f * scale, 1f, new Vector2f(0, 0), 0f);
148 part.setSpin(300f * 2f * spinMult, 340f * 2f * spinMult, 320f * spinMult);
149 parts.add(part);
150
151
152
153
154
155// WobblyPart part = new WobblyPart("shrouded_maelstrom", 0.3f * scale, 1f, new Vector2f(0, 0), 0f);
156// parts.add(part);
157// Color glow = DwellerCombatPlugin.STANDARD_PART_GLOW_COLOR;
158// part = new WobblyPart("clusterA", 1f * scale, 3, 3, 2f, new Vector2f(70f * scale, 0), 0f);
159// part.color = glow;
160// part.additiveBlend = true;
161// //part.setWeaponActivated();
162// parts.add(part);
163//
164// part = new WobblyPart("clusterB", 1f * scale, 3, 3, 2f, new Vector2f(-10f * scale, 0), 0f);
165// part.color = glow;
166// part.additiveBlend = true;
167// //part.setFluxActivated();
168// parts.add(part);
169//
170// part = new WobblyPart("coronet_stalks", 0.5f * scale, 3, 3, 2f, new Vector2f(100f * scale, 0), 0f);
171// part.color = glow;
172// part.additiveBlend = true;
173// //part.setShieldActivated();
174// parts.add(part);
175
176 return plugin;
177 }
178
179 @Override
180 protected void modifyBaselineShroudParams(ShipAPI ship, DwellerShroudParams params) {
181// numMembers = 100;
182// radius = 150f;
183
184 params.maxOffset = 200f;
185 params.initialMembers = 200;
186 params.baseMembersToMaintain = params.initialMembers;
187
188 params.numToRespawn = 2;
189 params.numToFlash = 3;
190
191 params.maxOffset = 250f;
192 params.numToFlash = 4;
193 params.baseSpriteSize *= 1.33f;
194
195 params.spawnOffsetMult = 0.67f;
196 params.spawnOffsetMultForInitialSpawn = params.spawnOffsetMult;
197
198
199 params.offsetModifier = new SwarmMemberOffsetModifier() {
200 @Override
201 public void modifyOffset(SwarmMember p) {
202 p.offset.x *= 0.85f;
203 p.offset.y *= 1.25f;
204 }
205 };
206
207 }
208
209
210}
211
212
213
214
215
216
217
218
219
void modifyPercent(String source, float value)
void initBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id)
void add(String key, V value)
Definition ListMap.java:10
List< WeaponAPI > getAllWeapons()