Starsector API
Loading...
Searching...
No Matches
RiftCascadeMineExplosion.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.combat;
2
3import java.awt.Color;
4
5import org.lwjgl.util.vector.Vector2f;
6
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.combat.CombatEngineAPI;
9import com.fs.starfarer.api.combat.CombatEntityAPI;
10import com.fs.starfarer.api.combat.DamagingProjectileAPI;
11import com.fs.starfarer.api.combat.ProximityExplosionEffect;
12import com.fs.starfarer.api.impl.combat.NegativeExplosionVisual.NEParams;
13import com.fs.starfarer.api.loading.MissileSpecAPI;
14import com.fs.starfarer.api.util.Misc;
15
16public class RiftCascadeMineExplosion implements ProximityExplosionEffect {
17
18 public static String SIZE_MULT_KEY = "core_sizeMultKey";
19
20 public void onExplosion(DamagingProjectileAPI explosion, DamagingProjectileAPI originalProjectile) {
21 Float sizeMult = null;
22 if (originalProjectile.getCustomData() != null) {
23 sizeMult = (Float) originalProjectile.getCustomData().get(SIZE_MULT_KEY);
24 }
25 if (sizeMult == null) sizeMult = 1f;
26
27 NEParams p = createStandardRiftParams("riftcascade_minelayer", 25f * sizeMult);
28 p.fadeOut = 1f;
29 //p.hitGlowSizeMult = 0.5f;
30 spawnStandardRift(explosion, p);
31 }
32
33// public static void spawnStandardRift(DamagingProjectileAPI explosion, String minelayerId, float baseRadius) {
34// NEParams p = createStandardRiftParams(minelayerId, baseRadius);
35// spawnStandardRift(explosion, p);
36// }
37
38 public static void spawnStandardRift(DamagingProjectileAPI explosion, NEParams params) {
39 CombatEngineAPI engine = Global.getCombatEngine();
40 explosion.addDamagedAlready(explosion.getSource());
41
42 CombatEntityAPI prev = null;
43 for (int i = 0; i < 2; i++) {
44 NEParams p = params.clone();
45 p.radius *= 0.75f + 0.5f * (float) Math.random();
46
47 p.withHitGlow = prev == null;
48
49 Vector2f loc = new Vector2f(explosion.getLocation());
50 //loc = Misc.getPointWithinRadius(loc, p.radius * 1f);
51 loc = Misc.getPointAtRadius(loc, p.radius * 0.4f);
52
53 CombatEntityAPI e = engine.addLayeredRenderingPlugin(new NegativeExplosionVisual(p));
54 e.getLocation().set(loc);
55
56 if (prev != null) {
57 float dist = Misc.getDistance(prev.getLocation(), loc);
58 Vector2f vel = Misc.getUnitVectorAtDegreeAngle(Misc.getAngleInDegrees(loc, prev.getLocation()));
59 vel.scale(dist / (p.fadeIn + p.fadeOut) * 0.7f);
60 e.getVelocity().set(vel);
61 }
62
63 prev = e;
64 }
65
66 }
67
68
69 public static NEParams createStandardRiftParams(String minelayerId, float baseRadius) {
70 Color color = new Color(100,100,255,255);
71 Object o = Global.getSettings().getWeaponSpec(minelayerId).getProjectileSpec();
72 if (o instanceof MissileSpecAPI) {
73 MissileSpecAPI spec = (MissileSpecAPI) o;
74 color = spec.getGlowColor();
75 }
76 NEParams p = createStandardRiftParams(color, baseRadius);
77 return p;
78 }
79
80 public static NEParams createStandardRiftParams(Color borderColor, float radius) {
81 NEParams p = new NEParams();
82 //p.radius = 50f;
83 p.hitGlowSizeMult = .75f;
84 //p.hitGlowSizeMult = .67f;
85 p.spawnHitGlowAt = 0f;
86 p.noiseMag = 1f;
87 //p.fadeIn = 0f;
88 //p.fadeOut = 0.25f;
89
90 //p.color = new Color(175,100,255,255);
91
92 //p.hitGlowSizeMult = .75f;
93 p.fadeIn = 0.1f;
94 //p.noisePeriod = 0.05f;
96 //p.withHitGlow = i == 0;
97 p.withHitGlow = true;
98
99 //p.radius = 20f;
100 p.radius = radius;
101 //p.radius *= 0.75f + 0.5f * (float) Math.random();
102
103 p.color = borderColor;
104 return p;
105 }
106
107
108}
109
110
111
static SettingsAPI getSettings()
Definition Global.java:51
static CombatEngineAPI getCombatEngine()
Definition Global.java:63
static void spawnStandardRift(DamagingProjectileAPI explosion, NEParams params)
static NEParams createStandardRiftParams(String minelayerId, float baseRadius)
static NEParams createStandardRiftParams(Color borderColor, float radius)
void onExplosion(DamagingProjectileAPI explosion, DamagingProjectileAPI originalProjectile)
WeaponSpecAPI getWeaponSpec(String weaponId)