1package com.fs.starfarer.api.impl.combat.dweller;
3import java.util.ArrayList;
4import java.util.EnumSet;
5import java.util.LinkedHashMap;
10import org.lwjgl.opengl.GL11;
11import org.lwjgl.opengl.GL14;
12import org.lwjgl.util.vector.Vector2f;
14import com.fs.starfarer.api.Global;
15import com.fs.starfarer.api.combat.BaseCombatLayeredRenderingPlugin;
16import com.fs.starfarer.api.combat.CombatEngineAPI;
17import com.fs.starfarer.api.combat.CombatEngineLayers;
18import com.fs.starfarer.api.combat.CombatEntityAPI;
19import com.fs.starfarer.api.combat.MissileAPI;
20import com.fs.starfarer.api.combat.ShipAPI;
21import com.fs.starfarer.api.combat.ViewportAPI;
22import com.fs.starfarer.api.combat.WeaponAPI;
23import com.fs.starfarer.api.combat.listeners.HullDamageAboutToBeTakenListener;
24import com.fs.starfarer.api.graphics.SpriteAPI;
25import com.fs.starfarer.api.impl.combat.ShipExplosionFlareVisual;
26import com.fs.starfarer.api.impl.combat.ShipExplosionFlareVisual.ShipExplosionFlareParams;
27import com.fs.starfarer.api.util.Misc;
28import com.fs.starfarer.api.util.MutatingValueUtil;
39 public static interface DCPPlugin {
46 public boolean negativeBlend =
false;
47 public boolean additiveBlend =
false;
49 public float angle = 0f;
51 public WobblyPart(String spriteKey,
float scale,
float warpMult, Vector2f
offset,
float facingOffset) {
54 public WobblyPart(String spriteKey,
float scale,
int verticesWide,
int verticesTall,
60 float width = sprite.
getWidth() * scale;
61 float height = sprite.
getHeight() * scale;
62 float warpAmt = width * 0.04f * warpMult;
66 renderer =
new WarpingSpriteRendererUtilV2(sprite, verticesWide, verticesTall, warpAmt, warpAmt * 1.4f, 1f);
68 spin =
new MutatingValueUtil(0, 0, 0);
71 public float getAngle() {
74 public void setAngle(
float angle) {
77 public void setSpin(
float min,
float max,
float rate) {
78 spin =
new MutatingValueUtil(min, max, rate);
81 public MutatingValueUtil getSpin() {
85 public void advance(
float amount) {
88 this.angle += spin.
getValue() * amount;
92 public void renderImpl(
float x,
float y,
float alphaMult,
float angle, CombatEngineLayers
layer) {
95 GL14.glBlendEquation(GL14.GL_FUNC_REVERSE_SUBTRACT);
111 GL14.glBlendEquation(GL14.GL_FUNC_ADD);
119 if (
entity ==
null)
return null;
125 @SuppressWarnings(
"unchecked")
127 LinkedHashMap<CombatEntityAPI, DwellerCombatPlugin> map =
130 map =
new LinkedHashMap<>();
150 protected List<DwellerShipPart>
parts =
new ArrayList<>();
224 Color color =
new Color(255,0,50,255);
240 boolean activeWeapons =
false;
242 if (w.isDecorative())
continue;
244 activeWeapons =
true;
257 float systemLevel = 0f;
259 if (systemLevel > 0) {
265 if (fluxLevel > 0f) {
276 part.advance(amount);
280 plugin.advance(
this, amount);
301 boolean allFaded =
true;
303 if (!part.getFader().isFadedOut() && part.getAlphaMult() > 0) {
321 if (alphaMult <= 0f)
return;
341 if (
id.equals(curr.getId()))
return curr;
358 part.setAlphaMult(alphaMult);
363 for (String tag : tags) key += tag +
"_";
364 if (tags.length == 1) key = tags[0];
367 part.getBrightness().shift(key, b, 0.5f, 0.5f, 1f);
371 public List<DwellerShipPart>
getParts(String ... tags) {
372 List<DwellerShipPart> result =
new ArrayList<>();
375 for (String tag : tags) {
376 if (curr.hasTag(tag)) {
395 if (size < 15) size = 15;
396 if (size > 50) size = 50;
399 float flashMult = 1f;
408 float baseSize = size;
416 for (
int i = 0; i < numSwirly; i++) {
419 float scatterMult = 0.5f;
422 float s = size * 4f * (0.5f + (float) Math.random() * 0.5f);
424 float dur = 0.5f + (float) Math.random() * 0.5f;
433 for (
int i = 0; i < numDark; i++) {
436 float scatterMult = 0.5f;
439 float s = size * 4f * (0.5f + (float) Math.random() * 0.5f);
441 float dur = 0.5f + (float) Math.random() * 0.5f;
455 float explosionScale = 1f;
457 explosionScale *= 1.7f;
459 explosionScale *= 1.5f;
461 explosionScale *= 1.5f;
464 Color flashColor =
new Color(255,50,100,255);
469 glowSize *= explosionScale;
470 glowSize *= flashMult;
472 ShipExplosionFlareParams sp =
new ShipExplosionFlareParams();
475 float mult = 475f/994f;
477 sp.flareWidth = er * 4f * explosionScale;
478 sp.flareHeight = er * 1.6f * explosionScale;
479 sp.color = flashColor;
487 engine.
addHitParticle(expLoc, expVel, glowSize * 1f, b, 1.5f * durMult, flashColor);
488 engine.
addHitParticle(expLoc, expVel, glowSize * 0.5f, b, 1.5f * durMult, flashColor);
static SettingsAPI getSettings()
static CombatEngineAPI getCombatEngine()
DwellerCombatPlugin(CombatEntityAPI attachedTo)
static String KEY_SHIP_MAP
CombatEntityAPI attachedTo
void advance(float amount)
void setPlugin(DCPPlugin plugin)
DwellerShipPart getPart(String id)
static String WEAPON_ACTIVATED
EnumSet< CombatEngineLayers > getActiveLayers()
static DwellerCombatPlugin getDwellerPluginFor(CombatEntityAPI entity)
boolean spawnedShipExplosionParticles
void fadeIn(String ... tags)
List< DwellerShipPart > parts
boolean notifyAboutToTakeHullDamage(Object param, ShipAPI ship, Vector2f point, float damageAmount)
void render(CombatEngineLayers layer, ViewportAPI viewport)
void fadeOut(String ... tags)
List< DwellerShipPart > getParts(String ... tags)
static LinkedHashMap< CombatEntityAPI, DwellerCombatPlugin > getShipMap()
void init(CombatEntityAPI entity)
EnumSet< CombatEngineLayers > layers
CombatEntityAPI getAttachedTo()
static String SYSTEM_ACTIVATED
static String SHIELD_ACTIVATED
static Color STANDARD_PART_GLOW_COLOR
void setBrightness(float b, String ... tags)
static String FLUX_ACTIVATED
void setAlphaMult(float alphaMult, String ... tags)
List< DwellerShipPart > getParts()
static Color SHROUD_COLOR
void advance(float amount)
void renderAtCenter(float x, float y)
static Vector2f getPointWithinRadius(Vector2f from, float r)
void advance(float amount)
SpriteAPI getSprite(String filename)
void addHitParticle(Vector2f loc, Vector2f vel, float size, float brightness, float duration, Color color)
boolean isShipAlive(ShipAPI ship)
CombatEntityAPI addLayeredRenderingPlugin(CombatLayeredRenderingPlugin plugin)
Map< String, Object > getCustomData()
boolean isEntityInPlay(CombatEntityAPI entity)
boolean isMissileAlive(MissileAPI missile)
void addSwirlyNebulaParticle(Vector2f loc, Vector2f vel, float size, float endSizeMult, float rampUpFraction, float fullBrightnessFraction, float totalDuration, Color color, boolean expandAsSqrt)
void addNegativeSwirlyNebulaParticle(Vector2f loc, Vector2f vel, float size, float endSizeMult, float rampUpFraction, float fullBrightnessFraction, float totalDuration, Color color)
float getCollisionRadius()
void setCircularJitter(boolean circular)
void addListener(Object listener)
List< WeaponAPI > getAllWeapons()
float getExplosionScale()
void setJitterShields(boolean jitterShields)
ShipSystemAPI getSystem()
void setJitter(Object source, Color color, float intensity, int copies, float range)
Vector2f getShieldCenterEvenIfNoShield()
void setSize(float width, float height)
void setBlendFunc(int src, int dest)
void setCenter(float x, float y)
void setAngle(float angle)
void setColor(Color color)
void setAlphaMult(float alphaMult)