Starsector API
Loading...
Searching...
No Matches
HeavyAdjudicatorEffect.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.combat;
2
3import java.util.HashMap;
4import java.util.LinkedHashMap;
5
6import java.awt.Color;
7
8import org.lwjgl.util.vector.Vector2f;
9
10import com.fs.starfarer.api.Global;
11import com.fs.starfarer.api.combat.CombatEngineAPI;
12import com.fs.starfarer.api.combat.DamagingProjectileAPI;
13import com.fs.starfarer.api.combat.OnFireEffectPlugin;
14import com.fs.starfarer.api.combat.ShipAPI;
15import com.fs.starfarer.api.combat.WeaponAPI;
16import com.fs.starfarer.api.loading.MuzzleFlashSpec;
17import com.fs.starfarer.api.loading.ProjectileWeaponSpecAPI;
18import com.fs.starfarer.api.util.Misc;
19
21
25 public static HashMap<String, Vector2f> SECOND_MUZZLE_FLASH_OFFSET_MAP = new LinkedHashMap<>();
26
27 static {
28 SECOND_MUZZLE_FLASH_OFFSET_MAP.put("onslaught_mk1_WS 016", new Vector2f(-39, 17));
29 SECOND_MUZZLE_FLASH_OFFSET_MAP.put("onslaught_mk1_WS 017", new Vector2f(-39, -18));
30 }
31
32
34 }
35
36 public void onFire(DamagingProjectileAPI projectile, WeaponAPI weapon, CombatEngineAPI engine) {
37 ShipAPI ship = projectile.getSource();
38 if (ship == null) return;
39
40 MuzzleFlashSpec spec = ((ProjectileWeaponSpecAPI)weapon.getSpec()).getMuzzleFlashSpec().clone();
41
42 spec.setLength(30f);
43 spec.setParticleCount(30);
44 spec.setSpread(90f);
45// spec.setParticleSizeMin(3);
46// spec.setParticleSizeRange(0f);
47
48 Vector2f p = projectile.getLocation();
49 float angle = weapon.getCurrAngle();
50
51 spawnMuzzleFlash(((ProjectileWeaponSpecAPI)weapon.getSpec()).getMuzzleFlashSpec(), p, angle, ship.getVelocity(), 1f, 0f);
52
53 String slotId = weapon.getSlot().getId();
54 String id = ship.getHullSpec().getBaseHullId() + "_" + slotId;
55
56 Vector2f offset = SECOND_MUZZLE_FLASH_OFFSET_MAP.get(id);
57 if (offset != null) {
58 float sign = Math.signum(offset.y);
59 offset = new Vector2f(offset);
60 offset = Misc.rotateAroundOrigin(offset, angle);
61 Vector2f.add(offset, p, offset);
62 spawnMuzzleFlash(spec, offset, angle + sign * 90f, ship.getVelocity(), 2f, 20f);
63 }
64
65 }
66
67 public static void spawnMuzzleFlash(MuzzleFlashSpec spec, Vector2f point, float angle, Vector2f shipVel,
68 float velMult, float velAdd) {
69 if (spec == null) return;
70
72
73 Color color = spec.getParticleColor();
74 float min = spec.getParticleSizeMin();
75 float range = spec.getParticleSizeRange();
76 float spread = spec.getSpread();
77 float length = spec.getLength();
78 for (int i = 0; i < spec.getParticleCount(); i++) {
79 float size = range * (float) Math.random() + min;
80 float theta = (float) (Math.random() * Math.toRadians(spread) + Math.toRadians(angle - spread/2f));
81 float r = (float) (Math.random() * length);
82 Vector2f dir = new Vector2f((float)Math.cos(theta), (float)Math.sin(theta));
83 float x = dir.x * r;
84 float y = dir.y * r;
85 Vector2f loc = new Vector2f(point.x + x, point.y + y);
86 Vector2f vel = new Vector2f(x * velMult + shipVel.x + dir.x * velAdd,
87 y * velMult + shipVel.y + dir.y * velAdd);
88 if (velAdd > 0 || true) {
89 Vector2f rand = Misc.getPointWithinRadius(new Vector2f(), spec.getLength() * 0.5f);
90 Vector2f.add(vel, rand, vel);
91 }
92 //engine.addSmoothParticle(loc, vel, size, 1f, spec.getParticleDuration(), color);
93 float dur = spec.getParticleDuration();
94 dur *= 0.75f + (float) Math.random() * 0.5f;
95 size *= 1.25f;
96 engine.addNebulaParticle(loc, vel, size,
97 0.67f, // end size
98 //2f, // end size
99 0f, // ramp up
100 0f, // full brightness
101 dur, color);
102 }
103 }
104
105}
106
107
108
109
static CombatEngineAPI getCombatEngine()
Definition Global.java:69
void onFire(DamagingProjectileAPI projectile, WeaponAPI weapon, CombatEngineAPI engine)
static void spawnMuzzleFlash(MuzzleFlashSpec spec, Vector2f point, float angle, Vector2f shipVel, float velMult, float velAdd)
static Vector2f rotateAroundOrigin(Vector2f v, float angle)
Definition Misc.java:1205
static Vector2f getPointWithinRadius(Vector2f from, float r)
Definition Misc.java:711
void addNebulaParticle(Vector2f loc, Vector2f vel, float size, float endSizeMult, float rampUpFraction, float fullBrightnessFraction, float totalDuration, Color color)