001package com.fs.starfarer.api.impl.combat.threat;
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.MissileAPI;
012import com.fs.starfarer.api.impl.combat.threat.RoilingSwarmEffect.RoilingSwarmParams;
013import com.fs.starfarer.api.impl.combat.threat.RoilingSwarmEffect.SwarmMember;
014
015public class KineticFragmentMissileEffect extends BaseFragmentMissileEffect {
016
017        public static Color FRINGE_COLOR = new Color(235,255,215,235);
018        public static Color CORE_COLOR = new Color(225,255,205,200);
019        
020        public static float OTHER_FRAGMENT_DAMAGE = 100;
021        
022        protected void configureMissileSwarmParams(RoilingSwarmParams params) {
023//              params.flashFringeColor = new Color(235,255,215,235);
024//              params.flashCoreColor = new Color(225,255,205,200);
025                
026//              params.baseSpringConstant *= 2f;
027//              params.springConstantNegativeRange *= 2f;
028                params.maxOffset = 40f;
029                
030                params.maxSpeed = missile.getMaxSpeed() + 10f;
031                params.outspeedAttachedEntityBy = 0f;
032                
033                //params.flashFringeColor = Misc.setAlpha(FRINGE_COLOR, 50);
034                params.flashFringeColor = FRINGE_COLOR;
035                params.flashCoreColor = CORE_COLOR;
036                
037                params.flashCoreRadiusMult = 0f;
038                //params.renderFlashOnSameLayer = true;
039                params.flashRadius = 30f;
040                params.autoscale = true;
041                //params.preFlashDelay = 0.5f * (float) Math.random();
042                
043//              params.flashFrequency = 40f;
044//              params.flashProbability = 1f;
045        }
046        
047        protected void swarmCreated(MissileAPI missile, RoilingSwarmEffect missileSwarm, RoilingSwarmEffect sourceSwarm) {
048                boolean first = true;
049                for (SwarmMember p : missileSwarm.members) {
050                        p.scaler.setBrightness(p.scale);
051                        if (first) {
052                                p.scaler.setBounceDown(false);
053                                p.scaler.fadeIn();
054                        } else {
055//                              p.scaler.setBounceUp(false);
056//                              p.scaler.fadeOut();
057                                p.keepScale = true;
058                        }
059                        p.flash = null;
060                        p.flash();
061                        p.flash.setBounceDown(false);
062                        first = false;
063                }
064        }
065        
066        protected int getNumOtherMembersToTransfer() {
067                return 4;
068        }
069        
070        protected int getEMPResistance() {
071                return 3;
072        }
073        
074        protected boolean explodeOnFizzling() {
075                return false;
076        }
077        
078        protected boolean shouldMakeMissileFaceTargetOnSpawnIfAny() {
079                return true;
080        }
081        
082        @Override
083        protected FragmentBehaviorOnImpact getOtherFragmentBehaviorOnImpact() {
084                return FragmentBehaviorOnImpact.STOP_AND_FADE;
085        }
086
087        protected void reportFragmentHit(MissileAPI missile, SwarmMember p, RoilingSwarmEffect swarm, CombatEntityAPI target) {
088                CombatEngineAPI engine = Global.getCombatEngine();
089                Color color = FRINGE_COLOR;
090                //color = Misc.setAlpha(color, 255);
091                float size = 80f; // not radius
092                engine.addHitParticle(p.loc, new Vector2f(), size, 0.5f, color);
093                engine.addHitParticle(p.loc, new Vector2f(), size * 0.25f, 1f, CORE_COLOR);
094                
095                float mult = p.fader.getBrightness();
096                if (mult > 0.8f) mult = 1f;
097                engine.applyDamage(target, p.loc, OTHER_FRAGMENT_DAMAGE * mult, DamageType.KINETIC, 0f,
098                                false, false, missile.getSource(), true);
099                
100//              engine.addNegativeParticle(p.loc, new Vector2f(), 300f, 0f, 0.5f, Color.white);
101        }
102
103
104//      protected String getExplosionSoundId() {
105//              return "devastator_explosion";
106//      }
107
108}
109
110
111
112
113
114
115
116