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