001package com.fs.starfarer.api.impl.combat.dweller;
002
003import java.util.List;
004
005import java.awt.Color;
006
007import org.lwjgl.util.vector.Vector2f;
008
009import com.fs.starfarer.api.Global;
010import com.fs.starfarer.api.combat.CombatFleetManagerAPI;
011import com.fs.starfarer.api.combat.DeployedFleetMemberAPI;
012import com.fs.starfarer.api.combat.MutableShipStatsAPI;
013import com.fs.starfarer.api.combat.ShipAPI;
014import com.fs.starfarer.api.combat.ShipAPI.HullSize;
015import com.fs.starfarer.api.combat.ShipwideAIFlags.AIFlags;
016import com.fs.starfarer.api.impl.combat.dweller.DwellerCombatPlugin.DCPPlugin;
017import com.fs.starfarer.api.impl.combat.dweller.DwellerCombatPlugin.WobblyPart;
018import com.fs.starfarer.api.impl.combat.dweller.DwellerShroud.DwellerShroudParams;
019import com.fs.starfarer.api.util.IntervalUtil;
020import com.fs.starfarer.api.util.Misc;
021
022public class ShroudedTendrilShipCreator extends BaseDwellerShipCreator {
023
024        
025        public static float FLUX_COST_MULT = 0.33f;
026        
027        @Override
028        public void initBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
029                super.initBeforeShipCreation(hullSize, stats, id);
030                
031                stats.getEnergyWeaponFluxCostMod().modifyMult(id, FLUX_COST_MULT);
032                stats.getBallisticWeaponFluxCostMod().modifyMult(id, FLUX_COST_MULT);
033                stats.getMissileWeaponFluxCostMod().modifyMult(id, FLUX_COST_MULT);
034        }
035
036        
037        @Override
038        protected DwellerCombatPlugin createPlugin(final ShipAPI ship) {
039                DwellerCombatPlugin plugin = super.createPlugin(ship);
040                plugin.setPlugin(new DCPPlugin() {
041                        IntervalUtil interval = new IntervalUtil(0.5f, 1.5f);
042                        boolean anythingLargerNearby = false;
043                        @Override
044                        public void advance(DwellerCombatPlugin plugin, float amount) {
045                                interval.advance(amount);
046                                if (interval.intervalElapsed()) {
047                                        CombatFleetManagerAPI fleetManager = Global.getCombatEngine().getFleetManager(ship.getOriginalOwner());
048                                        if (fleetManager != null) {
049                                                anythingLargerNearby = false;
050                                                for (DeployedFleetMemberAPI curr : fleetManager.getDeployedCopyDFM()) {
051                                                        if (curr.getShip() == null) continue;
052                                                        if (curr.getShip().getHullSize().ordinal() > ship.getHullSize().ordinal()) {
053                                                                float dist = Misc.getDistance(ship.getLocation(), curr.getLocation());
054                                                                dist -= ship.getCollisionRadius() + curr.getShip().getCollisionRadius();
055                                                                if (dist < 3000f) {
056                                                                        anythingLargerNearby = true;
057                                                                        break;
058                                                                }
059                                                        }
060                                                }
061                                        }
062                                }
063                                if (ship.getSinceLastDamageTaken() < 0.5f && anythingLargerNearby) {
064                                        ship.getAIFlags().setFlag(AIFlags.BACK_OFF, 1f);
065                                        ship.getAIFlags().setFlag(AIFlags.BACK_OFF_MIN_RANGE, 1f, 2000f);
066                                        ship.getAIFlags().unsetFlag(AIFlags.DO_NOT_BACK_OFF);
067                                } else {
068                                        ship.getAIFlags().setFlag(AIFlags.DO_NOT_BACK_OFF, 1f);
069                                        ship.getAIFlags().unsetFlag(AIFlags.BACK_OFF);
070                                        ship.getAIFlags().unsetFlag(AIFlags.BACK_OFF_MIN_RANGE);
071                                }
072                        }
073                });
074                
075                List<DwellerShipPart> parts = plugin.getParts();
076                parts.clear();
077                
078                float scale = 1f;
079                scale = 0.75f;
080                
081                WobblyPart part = new WobblyPart("shrouded_tendril_base", 2f * scale, 1f, new Vector2f(0, 0), 0f);
082                parts.add(part);
083                
084                Color glow = DwellerCombatPlugin.STANDARD_PART_GLOW_COLOR;
085                
086//              part = new WobblyPart("clusterA", 1f * scale, 3, 3, 2f, new Vector2f(70f * scale, 0), 0f);
087//              part.color = glow;
088//              part.additiveBlend = true;
089                //part.setWeaponActivated();
090                //parts.add(part);
091                
092                part = new WobblyPart("clusterB", 1f * scale, 3, 3, 2f, new Vector2f(30f * scale, 0), 0f);
093                part.color = glow;
094                part.additiveBlend = true;
095                //part.setFluxActivated();
096//              part.setWeaponActivated();
097//              part.setShieldActivated();
098//              part.setSystemActivated();
099                parts.add(part);
100                
101//              part = new WobblyPart("coronet_stalks", 0.5f * scale, 3, 3, 2f, new Vector2f(100f * scale, 0), 0f);
102//              part.color = glow;
103//              part.additiveBlend = true;
104                //part.setShieldActivated();
105                //parts.add(part);
106                
107                return plugin;
108        }
109
110        @Override
111        protected void modifyBaselineShroudParams(ShipAPI ship, DwellerShroudParams params) {
112                params.maxOffset = 80f;
113                params.initialMembers = (int) (100f / 4f);
114                params.initialMembers = 70;
115                params.baseMembersToMaintain = params.initialMembers;
116                
117                params.flashFrequency /= 2f;
118                
119                //params.flashFrequency /= 3.5f;
120                //params.numToFlash = 1;
121                //params.flashFrequency = 17f;
122                //params.numToFlash = 2;
123                
124                params.negativeParticleAreaMult = 1.25f;
125                //params.negativeParticleNumBase = 0;
126//              params.negativeParticleSizeMult = 1.25f;
127                
128                params.overloadGlowSizeMult *= 0.75f;
129                
130//              params.maxSpeed += 500f;
131//              params.springStretchMult = 30f;
132//              params.baseFriction *= 10f;
133//              params.frictionRange *= 1f;
134        }
135
136//      @Override
137//      public void advance(DwellerCombatPlugin plugin, float amount) {
138//              CombatEntityAPI attachedTo = plugin.getAttachedTo();
139//              if (attachedTo instanceof ShipAPI) {
140//                      ShipAPI ship = (ShipAPI) attachedTo;
141//                      if (ship.getSinceLastDamageTaken() < 0.5f) {
142//                              ship.getAIFlags().setFlag(AIFlags.BACK_OFF, 1f);
143//                              ship.getAIFlags().setFlag(AIFlags.BACK_OFF_MIN_RANGE, 1f, 2000f);
144//                              ship.getAIFlags().unsetFlag(AIFlags.DO_NOT_BACK_OFF);
145//                      } else {
146//                              ship.getAIFlags().setFlag(AIFlags.DO_NOT_BACK_OFF, 1f);
147//                              ship.getAIFlags().unsetFlag(AIFlags.BACK_OFF);
148//                      }
149//                      //ship.getAIFlags().setFlag(AIFlags.DO_NOT_BACK_OFF, 1f);
150//              }
151//      }
152        
153}
154
155
156
157
158
159
160
161
162