Starsector API
Loading...
Searching...
No Matches
ShroudedMawShipCreator.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.combat.CombatEntityAPI;
10import com.fs.starfarer.api.combat.MutableShipStatsAPI;
11import com.fs.starfarer.api.combat.ShipAPI;
12import com.fs.starfarer.api.combat.ShipAPI.HullSize;
13import com.fs.starfarer.api.combat.ShipwideAIFlags.AIFlags;
14import com.fs.starfarer.api.impl.combat.dweller.DwellerCombatPlugin.DCPPlugin;
15import com.fs.starfarer.api.impl.combat.dweller.DwellerCombatPlugin.WobblyPart;
16import com.fs.starfarer.api.impl.combat.dweller.DwellerShroud.DwellerShroudParams;
17import com.fs.starfarer.api.impl.combat.dweller.DwellerShroud.ShroudNegativeParticleFilter;
18import com.fs.starfarer.api.impl.combat.threat.RoilingSwarmEffect.SwarmMember;
19import com.fs.starfarer.api.impl.combat.threat.RoilingSwarmEffect.SwarmMemberOffsetModifier;
20import com.fs.starfarer.api.util.Misc;
21
22public class ShroudedMawShipCreator extends BaseDwellerShipCreator implements DCPPlugin {
23
24 @Override
26 DwellerCombatPlugin plugin = super.createPlugin(ship);
27 plugin.setPlugin(this);
28
29 List<DwellerShipPart> parts = plugin.getParts();
30 parts.clear();
31
32 float scale = 2f;
33
34 float xOff = 40f * scale;
35 xOff = 0f;
36 //WobblyPart part = new WobblyPart("shrouded_maw_base", 1f * scale, 1f, new Vector2f(50f * scale, 0), 0f);
37 WobblyPart part = new WobblyPart("shrouded_maw_base", 1f * scale, 0.7f, new Vector2f(xOff, 0f), 0f);
38 //part.alphaMult = 0.5f;
39 parts.add(part);
40
42
43 //branching_structureA
44 //teeth1 (glow)
45 //teeth2
46 //teeth3
47 //
48
49 xOff = 30f * scale;
50 //part = new WobblyPart("shrouded_maw_glow", 1f * scale, 5, 5, 1f, new Vector2f(-50f * scale, 0), 0f);
51 part = new WobblyPart("shrouded_maw_glow", 0.5f * scale, 5, 5, 0.5f, new Vector2f(xOff, 0f), 0f);
52 part.color = glow;
53 part.additiveBlend = true;
54 //part.alphaMult = 0.5f;
55 parts.add(part);
56
57 // eye spot cluster
58 part = new WobblyPart("shrouded_spot_cluster", 1f * scale, 5, 5, 1f, new Vector2f(-25f * scale + xOff, 0f), 0f);
59 part.color = glow;
60 part.additiveBlend = true;
61 //part.alphaMult = 0.5f;
62 parts.add(part);
63
64
65 //part = new WobblyPart("shrouded_maw_tail1", 1f * scale, 5, 5, 0.5f, new Vector2f(-100f * scale, 0f), 0f);
66 //part.alphaMult = 0.5f;
67 //parts.add(part);
68
69// part = new WobblyPart("teeth1", 1f * scale, 3, 3, 2f, new Vector2f(100f * scale, 0), 0f);
70// part.color = glow;
71// part.additiveBlend = true;
72// parts.add(part);
73
74// part = new WobblyPart("coronet_stalks", 0.5f * scale, 3, 3, 2f, new Vector2f(100f * scale, 0), 0f);
75// part.color = glow;
76// part.additiveBlend = true;
77// //part.setShieldActivated();
78// parts.add(part);
79
80 return plugin;
81 }
82
83 @Override
84 public void initBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
85 super.initBeforeShipCreation(hullSize, stats, id);
86
87 //stats.getEnergyWeaponRangeBonus().modifyFlat(id, 500f);
89 stats.getMissileWeaponRangeBonus().modifyFlat(id, 400f);
90 }
91
92 @Override
94 DwellerShroud shroud = super.createShroud(ship);
95 shroud.getShroudParams().negativeParticleFilter = new ShroudNegativeParticleFilter() {
96 @Override
97 public boolean isParticleOk(DwellerShroud shroud, Vector2f loc) {
98 float facing = shroud.getAttachedTo().getFacing();
99 Vector2f diff = Vector2f.sub(loc, shroud.getAttachedTo().getLocation(), new Vector2f());
100 diff = Misc.rotateAroundOrigin(diff, -facing);
101 return Math.abs(diff.x) < shroud.getParams().maxOffset * 0.75f;
102 }
103
104 };
105 return shroud;
106 }
107
108
109
110 @Override
111 protected void modifyBaselineShroudParams(ShipAPI ship, DwellerShroudParams params) {
112 params.maxOffset = 400f;
113 params.initialMembers = 250;
114 //params.initialMembers = 0;
115 params.baseMembersToMaintain = params.initialMembers;
116 params.numToRespawn = 5;
117 params.numToFlash *= 3;
118
119 params.spawnOffsetMult = 0.67f;
120 params.spawnOffsetMultForInitialSpawn = params.spawnOffsetMult;
121
122 params.baseSpriteSize *= 2f;
123
124 //params.flashFrequency /= 2f;
125 //params.flashFrequency = 17f;
126 //params.numToFlash = 2;
127
128 params.negativeParticleAreaMult = 0.9f;
129 //params.negativeParticleSizeMult = 0.81f;
130 params.negativeParticleSizeMult = 0.9f;
131 //params.negativeParticleGenRate = 0f;
132
133// params.negativeParticleNumBase = 3;
134// params.negativeParticleNumOverloaded = 2;
135
136 params.overloadGlowSizeMult *= 2f;
137 params.overloadArcThickness *= 2f;
138 params.overloadArcCoreThickness *= 2f;
139
140// params.maxSpeed += 500f;
141// params.springStretchMult = 30f;
142// params.baseFriction *= 10f;
143// params.frictionRange *= 1f;
144
145 params.offsetModifier = new SwarmMemberOffsetModifier() {
146 @Override
147 public void modifyOffset(SwarmMember p) {
148 p.offset.x *= 0.75f;
149 }
150 };
151 }
152
153 @Override
154 public void advance(DwellerCombatPlugin plugin, float amount) {
155 CombatEntityAPI attachedTo = plugin.getAttachedTo();
156 if (attachedTo instanceof ShipAPI) {
157 ShipAPI ship = (ShipAPI) attachedTo;
158 ship.getAIFlags().setFlag(AIFlags.DO_NOT_BACK_OFF, 1f);
159 }
160 }
161
162}
163
164
165
166
167
168
169
170
171
void modifyPercent(String source, float value)
void modifyFlat(String source, float value)
void initBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id)
void modifyBaselineShroudParams(ShipAPI ship, DwellerShroudParams params)
static Vector2f rotateAroundOrigin(Vector2f v, float angle)
Definition Misc.java:1205