Starsector API
Loading...
Searching...
No Matches
ShroudedTendrilShipCreator.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.CombatFleetManagerAPI;
11import com.fs.starfarer.api.combat.DeployedFleetMemberAPI;
12import com.fs.starfarer.api.combat.MutableShipStatsAPI;
13import com.fs.starfarer.api.combat.ShipAPI;
14import com.fs.starfarer.api.combat.ShipAPI.HullSize;
15import com.fs.starfarer.api.combat.ShipwideAIFlags.AIFlags;
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.util.IntervalUtil;
20import com.fs.starfarer.api.util.Misc;
21
23
24
25 public static float FLUX_COST_MULT = 0.33f;
26
27 @Override
28 public void initBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
29 super.initBeforeShipCreation(hullSize, stats, id);
30
34 }
35
36
37 @Override
39 DwellerCombatPlugin plugin = super.createPlugin(ship);
40 plugin.setPlugin(new DCPPlugin() {
41 IntervalUtil interval = new IntervalUtil(0.5f, 1.5f);
42 boolean anythingLargerNearby = false;
43 @Override
44 public void advance(DwellerCombatPlugin plugin, float amount) {
45 interval.advance(amount);
46 if (interval.intervalElapsed()) {
48 if (fleetManager != null) {
49 anythingLargerNearby = false;
50 for (DeployedFleetMemberAPI curr : fleetManager.getDeployedCopyDFM()) {
51 if (curr.getShip() == null) continue;
52 if (curr.getShip().getHullSize().ordinal() > ship.getHullSize().ordinal()) {
53 float dist = Misc.getDistance(ship.getLocation(), curr.getLocation());
54 dist -= ship.getCollisionRadius() + curr.getShip().getCollisionRadius();
55 if (dist < 3000f) {
56 anythingLargerNearby = true;
57 break;
58 }
59 }
60 }
61 }
62 }
63 if (ship.getSinceLastDamageTaken() < 0.5f && anythingLargerNearby) {
64 ship.getAIFlags().setFlag(AIFlags.BACK_OFF, 1f);
65 ship.getAIFlags().setFlag(AIFlags.BACK_OFF_MIN_RANGE, 1f, 2000f);
66 ship.getAIFlags().unsetFlag(AIFlags.DO_NOT_BACK_OFF);
67 } else {
68 ship.getAIFlags().setFlag(AIFlags.DO_NOT_BACK_OFF, 1f);
69 ship.getAIFlags().unsetFlag(AIFlags.BACK_OFF);
70 ship.getAIFlags().unsetFlag(AIFlags.BACK_OFF_MIN_RANGE);
71 }
72 }
73 });
74
75 List<DwellerShipPart> parts = plugin.getParts();
76 parts.clear();
77
78 float scale = 1f;
79 scale = 0.75f;
80
81 WobblyPart part = new WobblyPart("shrouded_tendril_base", 2f * scale, 1f, new Vector2f(0, 0), 0f);
82 parts.add(part);
83
85
86// part = new WobblyPart("clusterA", 1f * scale, 3, 3, 2f, new Vector2f(70f * scale, 0), 0f);
87// part.color = glow;
88// part.additiveBlend = true;
89 //part.setWeaponActivated();
90 //parts.add(part);
91
92 part = new WobblyPart("clusterB", 1f * scale, 3, 3, 2f, new Vector2f(30f * scale, 0), 0f);
93 part.color = glow;
94 part.additiveBlend = true;
95 //part.setFluxActivated();
96// part.setWeaponActivated();
97// part.setShieldActivated();
98// part.setSystemActivated();
99 parts.add(part);
100
101// part = new WobblyPart("coronet_stalks", 0.5f * scale, 3, 3, 2f, new Vector2f(100f * scale, 0), 0f);
102// part.color = glow;
103// part.additiveBlend = true;
104 //part.setShieldActivated();
105 //parts.add(part);
106
107 return plugin;
108 }
109
110 @Override
111 protected void modifyBaselineShroudParams(ShipAPI ship, DwellerShroudParams params) {
112 params.maxOffset = 80f;
113 params.initialMembers = (int) (100f / 4f);
114 params.initialMembers = 70;
115 params.baseMembersToMaintain = params.initialMembers;
116
117 params.flashFrequency /= 2f;
118
119 //params.flashFrequency /= 3.5f;
120 //params.numToFlash = 1;
121 //params.flashFrequency = 17f;
122 //params.numToFlash = 2;
123
124 params.negativeParticleAreaMult = 1.25f;
125 //params.negativeParticleNumBase = 0;
126// params.negativeParticleSizeMult = 1.25f;
127
128 params.overloadGlowSizeMult *= 0.75f;
129
130// params.maxSpeed += 500f;
131// params.springStretchMult = 30f;
132// params.baseFriction *= 10f;
133// params.frictionRange *= 1f;
134 }
135
136// @Override
137// public void advance(DwellerCombatPlugin plugin, float amount) {
138// CombatEntityAPI attachedTo = plugin.getAttachedTo();
139// if (attachedTo instanceof ShipAPI) {
140// ShipAPI ship = (ShipAPI) attachedTo;
141// if (ship.getSinceLastDamageTaken() < 0.5f) {
142// ship.getAIFlags().setFlag(AIFlags.BACK_OFF, 1f);
143// ship.getAIFlags().setFlag(AIFlags.BACK_OFF_MIN_RANGE, 1f, 2000f);
144// ship.getAIFlags().unsetFlag(AIFlags.DO_NOT_BACK_OFF);
145// } else {
146// ship.getAIFlags().setFlag(AIFlags.DO_NOT_BACK_OFF, 1f);
147// ship.getAIFlags().unsetFlag(AIFlags.BACK_OFF);
148// }
149// //ship.getAIFlags().setFlag(AIFlags.DO_NOT_BACK_OFF, 1f);
150// }
151// }
152
153}
154
155
156
157
158
159
160
161
162
static CombatEngineAPI getCombatEngine()
Definition Global.java:69
void modifyMult(String source, float value)
void initBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
Definition Misc.java:599
CombatFleetManagerAPI getFleetManager(FleetSide side)
List< DeployedFleetMemberAPI > getDeployedCopyDFM()