Starsector API
Loading...
Searching...
No Matches
MoteOnHitEffect.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.DamageType;
11import com.fs.starfarer.api.combat.DamagingProjectileAPI;
12import com.fs.starfarer.api.combat.MissileAPI;
13import com.fs.starfarer.api.combat.OnHitEffectPlugin;
14import com.fs.starfarer.api.combat.ShipAPI;
15import com.fs.starfarer.api.combat.listeners.ApplyDamageResultAPI;
16import com.fs.starfarer.api.impl.campaign.ids.Stats;
17
18public class MoteOnHitEffect implements OnHitEffectPlugin {
19
20// public static float ANTI_FIGHTER_DAMAGE = 500;
21// public static float ANTI_FIGHTER_DAMAGE_HF = 1000;
22
23 public void onHit(DamagingProjectileAPI projectile, CombatEntityAPI target,
24 Vector2f point, boolean shieldHit, ApplyDamageResultAPI damageResult, CombatEngineAPI engine) {
25 boolean withEMP = false;
26 if (target instanceof ShipAPI) {
27 ShipAPI ship = (ShipAPI) target;
28 if (!ship.isFighter()) {
29 float pierceChance = 1f;
30 pierceChance *= ship.getMutableStats().getDynamic().getValue(Stats.SHIELD_PIERCED_MULT);
31 boolean piercedShield = shieldHit && (float) Math.random() < pierceChance;
32
33 if (!shieldHit || piercedShield) {
34 float emp = projectile.getEmpAmount();
35 float dam = projectile.getDamageAmount(); // this should be 1 for regular and a bunch for high-frequency
36
37 engine.spawnEmpArcPierceShields(projectile.getSource(), point, target, target,
38 projectile.getDamageType(),
39 dam,
40 emp, // emp
41 100000f, // max range
42 "mote_attractor_impact_emp_arc",
43 20f, // thickness
44 //new Color(100,165,255,255),
45 MoteControlScript.getEMPColor(projectile.getSource()),
46 new Color(255,255,255,255)
47 );
48 withEMP = true;
49 }
50
51 //ship.getFluxTracker().increaseFlux(FLUX_RAISE_AMOUNT, shieldHit);
52
53 } else {
54// float damage = ANTI_FIGHTER_DAMAGE;
55// if (MoteControlScript.isHighFrequency(projectile.getSource())) {
56// damage = ANTI_FIGHTER_DAMAGE_HF;
57// }
58 float damage = MoteControlScript.getAntiFighterDamage(projectile.getSource());
59 Global.getCombatEngine().applyDamage(projectile, ship, point,
60 damage, DamageType.ENERGY, 0f, false, false, projectile.getSource(), true);
61 }
62 } else if (target instanceof MissileAPI) {
63 float damage = MoteControlScript.getAntiFighterDamage(projectile.getSource());
64 Global.getCombatEngine().applyDamage(projectile, target, point,
65 damage, DamageType.ENERGY, 0f, false, false, projectile.getSource(), true);
66 }
67
68 //if (!withEMP) {
69 String impactSoundId = MoteControlScript.getImpactSoundId(projectile.getSource());
70 Global.getSoundPlayer().playSound(impactSoundId, 1f, 1f, point, new Vector2f());
71 //Global.getSoundPlayer().playSound("hit_glancing_energy", 1f, 1f, point, new Vector2f());
72 //}
73 }
74}
75
76
77
static SoundPlayerAPI getSoundPlayer()
Definition Global.java:43
static CombatEngineAPI getCombatEngine()
Definition Global.java:63
void onHit(DamagingProjectileAPI projectile, CombatEntityAPI target, Vector2f point, boolean shieldHit, ApplyDamageResultAPI damageResult, CombatEngineAPI engine)
SoundAPI playSound(String id, float pitch, float volume, Vector2f loc, Vector2f vel)