001package com.fs.starfarer.api.impl.combat.threat; 002 003import java.awt.Color; 004 005import com.fs.starfarer.api.Global; 006import com.fs.starfarer.api.combat.CombatEngineAPI; 007import com.fs.starfarer.api.combat.DamagingProjectileAPI; 008import com.fs.starfarer.api.combat.GuidedMissileAI; 009import com.fs.starfarer.api.combat.MissileAIPlugin; 010import com.fs.starfarer.api.combat.MissileAPI; 011import com.fs.starfarer.api.combat.WeaponAPI; 012import com.fs.starfarer.api.impl.combat.threat.RoilingSwarmEffect.RoilingSwarmParams; 013import com.fs.starfarer.api.impl.combat.threat.RoilingSwarmEffect.SwarmMember; 014 015public class UnstableFragmentMissileEffect extends BaseFragmentMissileEffect { 016 017 public void onFire(DamagingProjectileAPI projectile, WeaponAPI weapon, CombatEngineAPI engine) { 018 super.onFire(projectile, weapon, engine); 019 } 020 021 protected void configureMissileSwarmParams(RoilingSwarmParams params) { 022 params.flashFringeColor = new Color(255,50,50,255); 023 params.flashCoreColor = Color.white; 024 params.flashRadius = 100f; 025 //params.flashCoreRadiusMult = 0.75f; 026 } 027 028 protected int getNumOtherMembersToTransfer() { 029 return 0; 030 } 031 032 protected int getEMPResistance() { 033 return 0; 034 } 035 036 protected boolean explodeOnFizzling() { 037 return false; // handled by the proximity fuse AI 038 } 039 040 @Override 041 protected boolean makePrimaryFragmentGlow() { 042 return false; 043 } 044 045 @Override 046 protected SwarmMember pickPrimaryFragment() { 047 if (missile.getAI() instanceof GuidedMissileAI) { 048 GuidedMissileAI ai = (GuidedMissileAI) missile.getAI(); 049 if (ai.getTarget() != null) { 050 return pickOuterFragmentWithinRangeClosestTo(150f, ai.getTarget().getLocation()); 051 } 052 } 053 return super.pickPrimaryFragment(); 054 } 055 056 @Override 057 protected void swarmAdvance(float amount, MissileAPI missile, RoilingSwarmEffect swarm) { 058 if (swarm.custom1 == null) { 059 swarm.custom1 = Global.getCombatEngine().createProximityFuseAI(missile); 060 } 061 ((MissileAIPlugin)swarm.custom1).advance(amount); 062 063 if (!swarm.members.isEmpty()) { 064 SwarmMember primary = swarm.members.get(0); 065 if (primary.flash == null) { 066 primary.flash(); 067 primary.flash.setDuration(0.25f, 0.75f); 068 primary.flash.setBounce(true, true); 069 } 070 } 071 } 072 073 074 075// protected String getExplosionSoundId() { 076// return "devastator_explosion"; 077// } 078 079 080} 081 082 083 084 085 086 087 088