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