Starsector API
Loading...
Searching...
No Matches
ShroudedVortexShipCreator.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.CollisionClass;
11import com.fs.starfarer.api.combat.DamageType;
12import com.fs.starfarer.api.combat.DamagingProjectileAPI;
13import com.fs.starfarer.api.combat.ShipAPI;
14import com.fs.starfarer.api.impl.combat.RiftLanceEffect;
15import com.fs.starfarer.api.impl.combat.RiftTrailEffect;
16import com.fs.starfarer.api.impl.combat.dweller.DwellerCombatPlugin.DCPPlugin;
17import com.fs.starfarer.api.impl.combat.dweller.DwellerCombatPlugin.WobblyPart;
18import com.fs.starfarer.api.impl.combat.dweller.DwellerShroud.DwellerShroudParams;
19import com.fs.starfarer.api.impl.combat.threat.RoilingSwarmEffect.SwarmMember;
20import com.fs.starfarer.api.loading.DamagingExplosionSpec;
21
22public class ShroudedVortexShipCreator extends BaseDwellerShipCreator implements DCPPlugin {
23
24 public static float EXPLOSION_DAMAGE = 2000f;
26
27 public static String ID_BODY_ONE = "id_body_one";
28 public static String ID_BODY_TWO = "id_body_two";
29
30 public static String TAG_MIRRORED_VORTEX = "tag_mirrored_vortex";
31
32 @Override
34 //DwellerCombatPlugin plugin = super.createPlugin(ship);
35
37 if (plugin == null) {
38 plugin = new DwellerCombatPlugin(ship) {
39 protected boolean exploded = false;
40 @Override
41 public boolean notifyAboutToTakeHullDamage(Object param, ShipAPI ship, Vector2f point, float damageAmount) {
42 if (damageAmount >= ship.getHitpoints() && !exploded) {
44 if (shroud != null) {
45 for (SwarmMember p : shroud.getMembers()) {
46 Vector2f.sub(p.vel, ship.getVelocity(), p.vel);
47 }
48 }
49
51 createExplosionSpec(ship), ship, ship.getLocation());
52 exploded = true;
53 //ship.getVelocity().set(0, 0);
54 ship.getVelocity().scale(0.1f);
55 }
56
57 return super.notifyAboutToTakeHullDamage(param, ship, point, damageAmount);
58 }
59
60 };
61 }
62
63 //plugin.setPlugin(this);
64
65 List<DwellerShipPart> parts = plugin.getParts();
66 parts.clear();
67
68 float scale = 1f;
69 scale = 0.5f;
70
71 float spinMult = 1f;
72
73 boolean mirror = (float) Math.random() > 0.5f;
74 //mirror = true;
75 if (mirror) {
77 }
78
79 WobblyPart part = new WobblyPart("shrouded_vortex_base", 2f * scale, 1f, new Vector2f(0, 0), 0f);
80 part.setId(ID_BODY_ONE);
81 part.renderer.setMirror(mirror);
82 //part.setSpin(360f * spinMult, 360f * 2f * spinMult, 360f * spinMult);
83 parts.add(part);
84
85 part = new WobblyPart("shrouded_vortex_base2", 3f * scale, 3, 3, 1f, new Vector2f(0, 0), 0f);
86 //part.setSpin(270f * spinMult, 360f * spinMult, 270f * spinMult);
87 part.setId(ID_BODY_TWO);
88 part.renderer.setMirror(mirror);
89 part.alphaMult = 0.5f;
90 parts.add(part);
91
92// Color glow = DwellerCombatPlugin.STANDARD_PART_GLOW_COLOR;
93//
94// part = new WobblyPart("clusterA", 1f * scale, 3, 3, 2f, new Vector2f(70f * scale, 0), 0f);
95// part.color = glow;
96// part.additiveBlend = true;
97// //part.setWeaponActivated();
98// //parts.add(part);
99//
100// part = new WobblyPart("clusterB", 1f * scale, 3, 3, 2f, new Vector2f(30f * scale, 0), 0f);
101// part.color = glow;
102// part.additiveBlend = true;
103// //part.setFluxActivated();
107// parts.add(part);
108//
109// part = new WobblyPart("coronet_stalks", 0.5f * scale, 3, 3, 2f, new Vector2f(100f * scale, 0), 0f);
110// part.color = glow;
111// part.additiveBlend = true;
112 //part.setShieldActivated();
113 //parts.add(part);
114
115 return plugin;
116 }
117
118 @Override
119 protected void modifyBaselineShroudParams(ShipAPI ship, DwellerShroudParams params) {
120 params.maxOffset = 50f;
121 params.initialMembers = 30;
122 params.baseMembersToMaintain = params.initialMembers;
123
124 params.baseSpriteSize *= 0.65f;
125 //params.baseSpriteSize *= 0.75f;
126
127 params.flashFrequency /= 3f;
128 //params.numToFlash = 1;
129 //params.flashFrequency = 17f;
130 //params.numToFlash = 2;
131
132 params.negativeParticleAreaMult = 1.25f;
133 params.negativeParticleDurMult *= 0.5f;
134 params.negativeParticleSizeMult *= 1.4f;
135 //params.negativeParticleGenRate *= 1f;
136
137// params.negativeParticleGenRate = 0f;
138 params.negativeParticleGenRate *= 0.5f;
139
140 params.overloadGlowSizeMult *= 0.5f;
141
142// params.overloadArcThickness *= 0.5f;
143// params.overloadArcCoreThickness *= 0.5f;
144
145// params.maxSpeed += 500f;
146// params.springStretchMult = 30f;
147// params.baseFriction *= 10f;
148// params.frictionRange *= 1f;
149 }
150
151
152
153 @Override
154 public void initInCombat(ShipAPI ship) {
155 super.initInCombat(ship);
156
157 RiftTrailEffect trail = new RiftTrailEffect(ship, null) {
158 @Override
159 protected Color getUndercolor() {
160 //return super.getUndercolor();
162 //return new Color(125, 0, 25, 255);
163 }
164 @Override
165 protected Color getDarkeningColor() {
166 //return super.getDarkeningColor();
167 return RiftLanceEffect.getColorForDarkening(getUndercolor());
168 }
169 @Override
170 protected float getBaseParticleSize() {
171 return ship.getCollisionRadius() * 1f;
172 }
173 @Override
174 protected float getBaseParticleDuration() {
175 return 1.5f;
176 }
177
178 };
180 }
181
182 @Override
183 public void advance(DwellerCombatPlugin plugin, float amount) {
184// CombatEntityAPI attachedTo = plugin.getAttachedTo();
185// if (attachedTo instanceof ShipAPI) {
186// ShipAPI ship = (ShipAPI) attachedTo;
187// float hullLevel = ship.getHullLevel();
188// float mult = 1f - hullLevel;
189// if (mult < 0f) mult = 0f;
190// if (mult > 1f) mult = 1f;
191//
192// mult *= 3f;
193//
194// DwellerShipPart part = plugin.getPart(ID_BODY_ONE);
195// if (part != null) {
196// ((WobblyPart)part).getSpin().setValueMult(mult);
197// }
198// part = plugin.getPart(ID_BODY_TWO);
199// if (part != null) {
200// ((WobblyPart)part).getSpin().setValueMult(mult);
201// }
202
203// CombatEngineAPI engine = Global.getCombatEngine();
204// engine.applyDamage(ship, ship.getLocation(), 100f, DamageType.ENERGY, 0f, true, false, ship, false);
205// //ship.setCollisionClass(CollisionClass.SHIP);
206// //ship.getAIFlags().setFlag(AIFlags.DO_NOT_BACK_OFF, 1f);
207// }
208 }
209
211 float damage = EXPLOSION_DAMAGE;
212
214 float coreRadius = ship.getCollisionRadius();
215
217 0.1f, // duration
218 radius, // radius
219 coreRadius, // coreRadius
220 damage, // maxDamage
221 0f, // minDamage
222 CollisionClass.PROJECTILE_NO_FF, // collisionClass - no friendly fire damage!
223 CollisionClass.PROJECTILE_NO_FF, // collisionClassByFighter
224 3f, // particleSizeMin
225 3f, // particleSizeRange
226 0.5f, // particleDuration
227 0, // particleCount
228 new Color(255,255,255,0), // particleColor
229 new Color(255,100,100,0) // explosionColor
230 );
231
233 spec.setUseDetailedExplosion(false);
234 spec.setSoundSetId(null);
235 //spec.setSoundVolume(1f);
236 return spec;
237 }
238}
239
240
241
242
243
244
245
246
247
static CombatEngineAPI getCombatEngine()
Definition Global.java:69
static DwellerCombatPlugin getDwellerPluginFor(CombatEntityAPI entity)
boolean notifyAboutToTakeHullDamage(Object param, ShipAPI ship, Vector2f point, float damageAmount)
static DwellerShroud getShroudFor(CombatEntityAPI entity)
DamagingProjectileAPI spawnDamagingExplosion(DamagingExplosionSpec spec, ShipAPI source, Vector2f location)
void addPlugin(EveryFrameCombatPlugin plugin)