Starsector API
Loading...
Searching...
No Matches
PaladinEffect.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.combat.BeamAPI;
8import com.fs.starfarer.api.combat.BeamEffectPlugin;
9import com.fs.starfarer.api.combat.CollisionClass;
10import com.fs.starfarer.api.combat.CombatEngineAPI;
11import com.fs.starfarer.api.combat.CombatEntityAPI;
12import com.fs.starfarer.api.combat.DamageType;
13import com.fs.starfarer.api.combat.DamagingProjectileAPI;
14import com.fs.starfarer.api.loading.DamagingExplosionSpec;
15import com.fs.starfarer.api.util.Misc;
16
17public class PaladinEffect implements BeamEffectPlugin {
18
19 private boolean done = false;
20
21 public void advance(float amount, CombatEngineAPI engine, BeamAPI beam) {
22 if (done) return;
23
24 CombatEntityAPI target = beam.getDamageTarget();
25 boolean first = beam.getWeapon().getBeams().indexOf(beam) == 0;
26 if (target != null && beam.getBrightness() >= 1f && first) {
27 Vector2f point = beam.getTo();
28 float maxDist = 0f;
29 for (BeamAPI curr : beam.getWeapon().getBeams()) {
30 maxDist = Math.max(maxDist, Misc.getDistance(point, curr.getTo()));
31 }
32 if (maxDist < 15f) {
33 DamagingProjectileAPI e = engine.spawnDamagingExplosion(createExplosionSpec(), beam.getSource(), point);
34 e.addDamagedAlready(target);
35 done = true;
36 }
37 }
38 }
39
40 public DamagingExplosionSpec createExplosionSpec() {
41 float damage = 100f;
42 DamagingExplosionSpec spec = new DamagingExplosionSpec(
43 0.1f, // duration
44 75f, // radius
45 50f, // coreRadius
46 damage, // maxDamage
47 damage / 2f, // minDamage
48 CollisionClass.PROJECTILE_FF, // collisionClass
49 CollisionClass.PROJECTILE_FIGHTER, // collisionClassByFighter
50 3f, // particleSizeMin
51 3f, // particleSizeRange
52 0.5f, // particleDuration
53 150, // particleCount
54 new Color(255,255,255,255), // particleColor
55 new Color(255,100,100,175) // explosionColor
56 );
57
58 spec.setDamageType(DamageType.FRAGMENTATION);
59 spec.setUseDetailedExplosion(false);
60 spec.setSoundSetId("explosion_guardian");
61 return spec;
62 }
63}
64
65
66
67
void advance(float amount, CombatEngineAPI engine, BeamAPI beam)