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