001package com.fs.starfarer.api.impl.combat; 002 003import java.awt.Color; 004 005import org.lwjgl.util.vector.Vector2f; 006 007import com.fs.starfarer.api.Global; 008import com.fs.starfarer.api.combat.CombatEngineAPI; 009import com.fs.starfarer.api.combat.CombatEntityAPI; 010import com.fs.starfarer.api.combat.DamageType; 011import com.fs.starfarer.api.combat.DamagingProjectileAPI; 012import com.fs.starfarer.api.combat.MissileAPI; 013import com.fs.starfarer.api.combat.OnHitEffectPlugin; 014import com.fs.starfarer.api.combat.ShipAPI; 015import com.fs.starfarer.api.combat.listeners.ApplyDamageResultAPI; 016import com.fs.starfarer.api.impl.campaign.ids.Stats; 017 018public class MoteOnHitEffect implements OnHitEffectPlugin { 019 020// public static float ANTI_FIGHTER_DAMAGE = 500; 021// public static float ANTI_FIGHTER_DAMAGE_HF = 1000; 022 023 public void onHit(DamagingProjectileAPI projectile, CombatEntityAPI target, 024 Vector2f point, boolean shieldHit, ApplyDamageResultAPI damageResult, CombatEngineAPI engine) { 025 boolean withEMP = false; 026 if (target instanceof ShipAPI) { 027 ShipAPI ship = (ShipAPI) target; 028 if (!ship.isFighter()) { 029 float pierceChance = 1f; 030 pierceChance *= ship.getMutableStats().getDynamic().getValue(Stats.SHIELD_PIERCED_MULT); 031 boolean piercedShield = shieldHit && (float) Math.random() < pierceChance; 032 033 if (!shieldHit || piercedShield) { 034 float emp = projectile.getEmpAmount(); 035 float dam = projectile.getDamageAmount(); // this should be 1 for regular and a bunch for high-frequency 036 037 engine.spawnEmpArcPierceShields(projectile.getSource(), point, target, target, 038 projectile.getDamageType(), 039 dam, 040 emp, // emp 041 100000f, // max range 042 "mote_attractor_impact_emp_arc", 043 20f, // thickness 044 //new Color(100,165,255,255), 045 MoteControlScript.getEMPColor(projectile.getSource()), 046 new Color(255,255,255,255) 047 ); 048 withEMP = true; 049 } 050 051 //ship.getFluxTracker().increaseFlux(FLUX_RAISE_AMOUNT, shieldHit); 052 053 } else { 054// float damage = ANTI_FIGHTER_DAMAGE; 055// if (MoteControlScript.isHighFrequency(projectile.getSource())) { 056// damage = ANTI_FIGHTER_DAMAGE_HF; 057// } 058 float damage = MoteControlScript.getAntiFighterDamage(projectile.getSource()); 059 Global.getCombatEngine().applyDamage(projectile, ship, point, 060 damage, DamageType.ENERGY, 0f, false, false, projectile.getSource(), true); 061 } 062 } else if (target instanceof MissileAPI) { 063 float damage = MoteControlScript.getAntiFighterDamage(projectile.getSource()); 064 Global.getCombatEngine().applyDamage(projectile, target, point, 065 damage, DamageType.ENERGY, 0f, false, false, projectile.getSource(), true); 066 } 067 068 //if (!withEMP) { 069 String impactSoundId = MoteControlScript.getImpactSoundId(projectile.getSource()); 070 Global.getSoundPlayer().playSound(impactSoundId, 1f, 1f, point, new Vector2f()); 071 //Global.getSoundPlayer().playSound("hit_glancing_energy", 1f, 1f, point, new Vector2f()); 072 //} 073 } 074} 075 076 077