Starsector API
Loading...
Searching...
No Matches
VoidblasterEffect.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.combat.threat;
2
3import java.awt.Color;
4
5import org.lwjgl.util.vector.Vector2f;
6
7import com.fs.starfarer.api.combat.CombatEngineAPI;
8import com.fs.starfarer.api.combat.CombatEntityAPI;
9import com.fs.starfarer.api.combat.DamageAPI;
10import com.fs.starfarer.api.combat.DamagingProjectileAPI;
11import com.fs.starfarer.api.combat.EveryFrameWeaponEffectPlugin;
12import com.fs.starfarer.api.combat.OnFireEffectPlugin;
13import com.fs.starfarer.api.combat.OnHitEffectPlugin;
14import com.fs.starfarer.api.combat.ShipAPI;
15import com.fs.starfarer.api.combat.WeaponAPI;
16import com.fs.starfarer.api.combat.listeners.ApplyDamageResultAPI;
17import com.fs.starfarer.api.combat.listeners.DamageDealtModifier;
18import com.fs.starfarer.api.util.Misc;
19
22
23 protected String weaponId;
24
25 @Override
26 public void advance(float amount, CombatEngineAPI engine, WeaponAPI weapon) {
27
28 }
29
30 @Override
31 public void onFire(DamagingProjectileAPI projectile, WeaponAPI weapon, CombatEngineAPI engine) {
32 ShipAPI ship = weapon.getShip();
33 if (!ship.hasListenerOfClass(VoidblasterEffect.class)) {
34 ship.addListener(this);
35 weaponId = weapon.getId();
36 }
37 }
38
39 public void onHit(DamagingProjectileAPI projectile, CombatEntityAPI target,
40 Vector2f point, boolean shieldHit, ApplyDamageResultAPI damageResult, CombatEngineAPI engine) {
41 Vector2f vel = target.getVelocity();
42 engine.addNegativeParticle(point, vel, 50f, 0f, 0.5f, Color.white);
43 engine.addNegativeParticle(point, vel, 30f, 0f, 0.5f, Color.white);
44 engine.addNegativeNebulaParticle(point, vel, 30f, 2f, 0f, 0f, 0.5f, Color.white);
45 //engine.addNegativeParticle(point, vel, 15f, 0f, 0.5f, Color.white);
46 if (!shieldHit) {
47 float dir = 0f;
48 float arc = 360f;
49 dir = Misc.getAngleInDegrees(target.getLocation(), point);
50 arc = 150f;
51 engine.spawnDebrisSmall(point, vel, 12, dir, arc, 20f, 20f, 720f);
52 engine.spawnDebrisMedium(point, vel, 4, dir, arc, 10f, 20f, 360f);
53 engine.spawnDebrisLarge(point, vel, 1, dir, arc, 10f, 10f, 180f);
54 }
55 }
56
57
58 public String modifyDamageDealt(Object param, CombatEntityAPI target, DamageAPI damage, Vector2f point, boolean shieldHit) {
59 if (param instanceof DamagingProjectileAPI) {
61 if (p.getWeapon() != null && p.getWeapon().getId().equals(weaponId)) {
62 if (target instanceof ShipAPI) {
63 ((ShipAPI)target).setSkipNextDamagedExplosion(true);
64 }
65 if (shieldHit) {
66 damage.setSoftFlux(true);
67 }
68 return "voidblaster";
69 }
70 }
71 return null;
72 }
73}
74
75
76
77
78
79
80
void onFire(DamagingProjectileAPI projectile, WeaponAPI weapon, CombatEngineAPI engine)
String modifyDamageDealt(Object param, CombatEntityAPI target, DamageAPI damage, Vector2f point, boolean shieldHit)
void advance(float amount, CombatEngineAPI engine, WeaponAPI weapon)
void onHit(DamagingProjectileAPI projectile, CombatEntityAPI target, Vector2f point, boolean shieldHit, ApplyDamageResultAPI damageResult, CombatEngineAPI engine)
static float getAngleInDegrees(Vector2f v)
Definition Misc.java:1126
void spawnDebrisLarge(Vector2f loc, Vector2f vel, int num, float facing, float spread, float minVel, float velRange, float maxRotation)
void spawnDebrisSmall(Vector2f loc, Vector2f vel, int num, float facing, float spread, float minVel, float velRange, float maxRotation)
void addNegativeParticle(Vector2f loc, Vector2f vel, float size, float rampUpFraction, float totalDuration, Color color)
void addNegativeNebulaParticle(Vector2f loc, Vector2f vel, float size, float endSizeMult, float rampUpFraction, float fullBrightnessFraction, float totalDuration, Color color)
void spawnDebrisMedium(Vector2f loc, Vector2f vel, int num, float facing, float spread, float minVel, float velRange, float maxRotation)
void setSoftFlux(boolean isSoftFlux)
void addListener(Object listener)
boolean hasListenerOfClass(Class<?> c)