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.DamagingProjectileAPI;
011import com.fs.starfarer.api.combat.MissileAPI;
012import com.fs.starfarer.api.combat.OnFireEffectPlugin;
013import com.fs.starfarer.api.combat.OnHitEffectPlugin;
014import com.fs.starfarer.api.combat.WeaponAPI;
015import com.fs.starfarer.api.combat.listeners.ApplyDamageResultAPI;
016import com.fs.starfarer.api.impl.combat.NegativeExplosionVisual.NEParams;
017import com.fs.starfarer.api.loading.MissileSpecAPI;
018
019/**
020 * IMPORTANT: will be multiple instances of this, one for the the OnFire (per weapon) and one for the OnHit (per torpedo) effects.
021 * 
022 * (Well, no data members, so not *that* important.)
023 */
024public class RiftTorpedoEffect implements OnFireEffectPlugin, OnHitEffectPlugin {
025
026        public void onHit(DamagingProjectileAPI projectile, CombatEntityAPI target, Vector2f point, boolean shieldHit, ApplyDamageResultAPI damageResult, CombatEngineAPI engine) {
027                Color color = RiftCascadeEffect.STANDARD_RIFT_COLOR;
028                Object o = projectile.getWeapon().getSpec().getProjectileSpec();
029                if (o instanceof MissileSpecAPI) {
030                        MissileSpecAPI spec = (MissileSpecAPI) o;
031                        color = spec.getExplosionColor();
032                }
033                
034                NEParams p = RiftCascadeMineExplosion.createStandardRiftParams(color, 40f);
035                p.fadeOut = 2f;
036                p.hitGlowSizeMult = 1f;
037                // want a red rift, but still blue for subtracting from the red clouds
038                // or not - actually looks better with the red being inverted and subtracted
039                // despite this not matching the trail
040                //p.invertForDarkening = NSProjEffect.STANDARD_RIFT_COLOR;
041                RiftCascadeMineExplosion.spawnStandardRift(projectile, p);
042                
043                Vector2f vel = new Vector2f();
044                if (target != null) vel.set(target.getVelocity());
045                Global.getSoundPlayer().playSound("rifttorpedo_explosion", 1f, 1f, point, vel);
046        }
047        
048        public void onFire(DamagingProjectileAPI projectile, WeaponAPI weapon, CombatEngineAPI engine) {
049                RiftTrailEffect trail = new RiftTrailEffect((MissileAPI) projectile, "rifttorpedo_loop");
050                ((MissileAPI) projectile).setEmpResistance(1000);
051                ((MissileAPI) projectile).setEccmChanceOverride(1f);
052                Global.getCombatEngine().addPlugin(trail);
053        }
054}
055
056
057
058