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