Starsector API
Loading...
Searching...
No Matches
VoltaicCannonEffect.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.DamageType;
10import com.fs.starfarer.api.combat.DamagingProjectileAPI;
11import com.fs.starfarer.api.combat.EmpArcEntityAPI;
12import com.fs.starfarer.api.combat.EmpArcEntityAPI.EmpArcParams;
13import com.fs.starfarer.api.combat.EveryFrameWeaponEffectPlugin;
14import com.fs.starfarer.api.combat.OnFireEffectPlugin;
15import com.fs.starfarer.api.combat.OnHitEffectPlugin;
16import com.fs.starfarer.api.combat.ShipAPI;
17import com.fs.starfarer.api.combat.WeaponAPI;
18import com.fs.starfarer.api.combat.listeners.ApplyDamageResultAPI;
19import com.fs.starfarer.api.impl.campaign.ids.Stats;
20import com.fs.starfarer.api.util.Misc;
21
23
24 public int MIN_NUM_ARCS = 10;
25 public int MAX_NUM_ARCS = 14;
26
27 @Override
28 public void advance(float amount, CombatEngineAPI engine, WeaponAPI weapon) {
29
30 }
31
32 @Override
33 public void onFire(DamagingProjectileAPI projectile, WeaponAPI weapon, CombatEngineAPI engine) {
34
35 }
36
37 public void onHit(DamagingProjectileAPI projectile, CombatEntityAPI target,
38 Vector2f point, boolean shieldHit, ApplyDamageResultAPI damageResult, CombatEngineAPI engine) {
39 int numArcs = MIN_NUM_ARCS + Misc.random.nextInt(MAX_NUM_ARCS - MIN_NUM_ARCS + 1);
40 float pierceChance = 0f;
41 if (target instanceof ShipAPI) {
42 pierceChance = ((ShipAPI)target).getHardFluxLevel() - 0.1f;
43 pierceChance *= ((ShipAPI)target).getMutableStats().getDynamic().getValue(Stats.SHIELD_PIERCED_MULT);
44 }
45
46 float emp = projectile.getEmpAmount();
47 float dam = 0;
48
49 EmpArcParams params = new EmpArcParams();
50 params.segmentLengthMult = 8f;
51 params.zigZagReductionFactor = 0.5f;
52 params.flickerRateMult = 1f;
53 params.fadeOutDist = 1000f;
54 params.minFadeOutMult = 1f;
55 params.glowSizeMult = 0.5f;
56 params.glowAlphaMult = 0.75f;
57
58 for (int i = 0; i < numArcs; i++) {
59 boolean piercedShield = shieldHit && (float) Math.random() < pierceChance;
60 //piercedShield = true;
61
62 if (!shieldHit || piercedShield) {
64 projectile.getSource(), point, target, target,
66 dam, // damage
67 emp, // emp
68 100000f, // max range
69 "voltaic_discharge_emp_impact",
70 20f,
71 projectile.getProjectileSpec().getFringeColor(),
72 Color.white,
73 params);
74 arc.setRenderGlowAtStart(false);
75 //arc.setFadedOutAtStart(true);
76 }
77 }
78 }
79
80}
81
82
83
84
85
86
87
void advance(float amount, CombatEngineAPI engine, WeaponAPI weapon)
void onHit(DamagingProjectileAPI projectile, CombatEntityAPI target, Vector2f point, boolean shieldHit, ApplyDamageResultAPI damageResult, CombatEngineAPI engine)
void onFire(DamagingProjectileAPI projectile, WeaponAPI weapon, CombatEngineAPI engine)
EmpArcEntityAPI spawnEmpArcPierceShields(ShipAPI damageSource, Vector2f point, CombatEntityAPI pointAnchor, CombatEntityAPI empTargetEntity, DamageType damageType, float damAmount, float empDamAmount, float maxRange, String impactSoundId, float thickness, Color fringe, Color core)
void setRenderGlowAtStart(boolean renderGlowAtStart)