001package com.fs.starfarer.api.impl.combat.dweller;
002
003import com.fs.starfarer.api.combat.DamageType;
004import com.fs.starfarer.api.combat.ShipAPI;
005import com.fs.starfarer.api.impl.combat.dweller.DwellerCombatPlugin.DCPPlugin;
006import com.fs.starfarer.api.impl.combat.dweller.DwellerShroud.DwellerShroudParams;
007
008public class ShroudedEjectaShipCreator extends BaseDwellerShipCreator implements DCPPlugin {
009
010        public static float EXPLOSION_DAMAGE = 2000f;
011        public static DamageType EXPLOSION_DAMAGE_TYPE = DamageType.ENERGY;
012        
013        public static String ID_BODY_ONE = "id_body_one";
014        public static String ID_BODY_TWO = "id_body_two";
015        
016        public static String TAG_MIRRORED_VORTEX = "tag_mirrored_vortex";
017        
018        @Override
019        protected DwellerCombatPlugin createPlugin(ShipAPI ship) {
020                //DwellerCombatPlugin plugin = super.createPlugin(ship);
021                
022                DwellerCombatPlugin plugin = DwellerCombatPlugin.getDwellerPluginFor(ship);
023                if (plugin == null) {
024                        plugin = new DwellerCombatPlugin(ship);
025                }
026                
027                //plugin.setPlugin(this);
028                
029//              List<DwellerShipPart> parts = plugin.getParts();
030//              parts.clear();
031//              
032//              float scale = 1f;
033//              //scale = 0.5f;
034//              
035//              float spinMult = 1f;
036//              
037//              boolean mirror = (float) Math.random() > 0.5f;
038//              //mirror = true;
039//              if (mirror) {
040//                      ship.addTag(TAG_MIRRORED_VORTEX);
041//              }
042//              
043//              WobblyPart part = new WobblyPart("shrouded_vortex_base", 2f * scale, 1f, new Vector2f(0, 0), 0f);
044//              part.setId(ID_BODY_ONE);
045//              part.renderer.setMirror(mirror);
046//              //part.setSpin(360f * spinMult, 360f * 2f * spinMult, 360f * spinMult);
047//              parts.add(part);
048//              
049//              part = new WobblyPart("shrouded_vortex_base2", 3f * scale, 3, 3, 1f, new Vector2f(0, 0), 0f);
050//              //part.setSpin(270f * spinMult, 360f * spinMult, 270f * spinMult);
051//              part.setId(ID_BODY_TWO);
052//              part.renderer.setMirror(mirror);
053//              part.alphaMult = 0.5f;
054//              parts.add(part);
055//              
056////            Color glow = DwellerCombatPlugin.STANDARD_PART_GLOW_COLOR;
057////            
058////            part = new WobblyPart("clusterA", 1f * scale, 3, 3, 2f, new Vector2f(70f * scale, 0), 0f);
059////            part.color = glow;
060////            part.additiveBlend = true;
061////            //part.setWeaponActivated();
062////            //parts.add(part);
063////            
064////            part = new WobblyPart("clusterB", 1f * scale, 3, 3, 2f, new Vector2f(30f * scale, 0), 0f);
065////            part.color = glow;
066////            part.additiveBlend = true;
067////            //part.setFluxActivated();
068//////          part.setWeaponActivated();
069//////          part.setShieldActivated();
070//////          part.setSystemActivated();
071////            parts.add(part);
072////            
073////            part = new WobblyPart("coronet_stalks", 0.5f * scale, 3, 3, 2f, new Vector2f(100f * scale, 0), 0f);
074////            part.color = glow;
075////            part.additiveBlend = true;
076//              //part.setShieldActivated();
077//              //parts.add(part);
078                
079                return plugin;
080        }
081
082        @Override
083        protected void modifyBaselineShroudParams(ShipAPI ship, DwellerShroudParams params) {
084                params.maxOffset = 120f;
085                params.initialMembers = 30;
086                params.baseMembersToMaintain = params.initialMembers;
087                params.baseSpriteSize *= 1.33f;
088                //params.baseSpriteSize *= 1.5f;
089                
090                params.spawnOffsetMult = 1f;
091                params.spawnOffsetMultForInitialSpawn = params.spawnOffsetMult;
092                
093                //params.negativeParticleAreaMult = 1.25f;
094                //params.negativeParticleDurMult *= 0.5f;
095                //params.negativeParticleSizeMult *= 1.4f;
096                //params.negativeParticleGenRate *= 1f;
097                
098//              params.negativeParticleGenRate = 0f;
099                //params.negativeParticleGenRate *= 0.5f;
100                params.negativeParticleNumBase = 3;
101                params.negativeParticleHighContrastMode = true;
102                params.negativeParticleSizeMult = 1.5f;
103                
104//              params.alphaMult = 0.25f;
105//              params.negativeParticleGenRate = 0f;
106                
107                //params.overloadGlowSizeMult *= 0.5f;
108                
109//              params.overloadArcThickness *= 0.5f;
110//              params.overloadArcCoreThickness *= 0.5f;
111                
112//              params.maxSpeed += 500f;
113                params.springStretchMult = 1f;
114//              params.baseFriction *= 10f;
115//              params.frictionRange *= 1f;
116        }
117        
118        
119
120        @Override
121        public void initInCombat(ShipAPI ship) {
122                super.initInCombat(ship);
123                
124                ship.setExplosionScale(0f); // no explosion sound or visual, just dissipates and fades out
125        }
126
127        @Override
128        public void advance(DwellerCombatPlugin plugin, float amount) {
129//              CombatEntityAPI attachedTo = plugin.getAttachedTo();
130//              if (attachedTo instanceof ShipAPI) {
131//                      ShipAPI ship = (ShipAPI) attachedTo;
132//                      float hullLevel = ship.getHullLevel();
133//                      float mult = 1f - hullLevel;
134//                      if (mult < 0f) mult = 0f;
135//                      if (mult > 1f) mult = 1f;
136//                      
137//                      mult *= 3f;
138//                      
139//                      DwellerShipPart part = plugin.getPart(ID_BODY_ONE);
140//                      if (part != null) {
141//                              ((WobblyPart)part).getSpin().setValueMult(mult);
142//                      }
143//                      part = plugin.getPart(ID_BODY_TWO);
144//                      if (part != null) {
145//                              ((WobblyPart)part).getSpin().setValueMult(mult);
146//                      }
147                        
148//                      CombatEngineAPI engine = Global.getCombatEngine();
149//                      engine.applyDamage(ship, ship.getLocation(), 100f, DamageType.ENERGY, 0f, true, false, ship, false);
150//                      //ship.setCollisionClass(CollisionClass.SHIP);
151//                      //ship.getAIFlags().setFlag(AIFlags.DO_NOT_BACK_OFF, 1f);
152//              }
153        }
154}
155
156
157
158
159
160
161
162
163