001package com.fs.starfarer.api.impl.combat.dweller;
002
003import java.awt.Color;
004
005import com.fs.starfarer.api.combat.MutableShipStatsAPI;
006import com.fs.starfarer.api.combat.ShipAPI;
007import com.fs.starfarer.api.combat.ShipAPI.HullSize;
008import com.fs.starfarer.api.impl.campaign.ids.Stats;
009import com.fs.starfarer.api.impl.combat.dweller.DwellerShroud.DwellerShroudParams;
010import com.fs.starfarer.api.util.Misc;
011
012public class BaseDwellerShipCreator implements DwellerShipCreator {
013
014        public static float IMPACT_VOLUME_MULT = 0.33f;
015        
016        public static float AIM_BONUS = 1f;
017        public static float MISSILE_GUIDANCE_BONUS = 1f;
018        public static float CR_BONUS = 30f;
019        public static float SENSOR_PROFILE_MULT = 0f;
020        public static float EW_PENALTY_MULT = 0.5f;
021        
022        public static float FLAT_RANGE_BONUS = 200f;
023        
024        public static float FLAT_ARMOR_BONUS = 50f;
025        
026        
027//      public static String STANDARD_SWARM_EXCHANGE_CLASS = "dweller_exchange_class";
028//      public static String STANDARD_SWARM_FLOCKING_CLASS = "dweller_flocking_class";
029        
030        @Override
031        public void initBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
032                stats.getAutofireAimAccuracy().modifyFlat(id, AIM_BONUS);
033                stats.getMissileGuidance().modifyFlat(id, MISSILE_GUIDANCE_BONUS);
034                stats.getMaxCombatReadiness().modifyFlat(id, CR_BONUS * 0.01f);
035                
036                stats.getSensorProfile().modifyMult(id, SENSOR_PROFILE_MULT);
037                
038                stats.getDynamic().getMod(Stats.ELECTRONIC_WARFARE_PENALTY_MOD).modifyMult(id, EW_PENALTY_MULT);
039                
040                stats.getEnergyWeaponRangeBonus().modifyFlat(id, FLAT_RANGE_BONUS);
041                stats.getBallisticWeaponRangeBonus().modifyFlat(id, FLAT_RANGE_BONUS);
042                
043                stats.getEffectiveArmorBonus().modifyFlat(id, FLAT_ARMOR_BONUS);
044        }
045
046        @Override
047        public void initAfterShipCreation(ShipAPI ship, String id) {
048                ship.setDoNotRenderWeapons(true);
049                ship.setNoMuzzleFlash(true);
050                ship.setRenderEngines(false);
051                ship.setDoNotRenderVentingAnimation(true);
052        }
053        
054        @Override
055        public void initAfterShipAddedToCombatEngine(ShipAPI ship, String id) {
056                ship.setDoNotRenderSprite(true);
057        }
058
059
060        @Override
061        public void initInCombat(ShipAPI ship) {
062                initBasicShipProperties(ship);
063                
064                DwellerShroud shroud = createShroud(ship);
065                DwellerCombatPlugin plugin = createPlugin(ship);
066                
067                setOverloadColorAndText(ship, shroud);
068        }
069        
070        protected DwellerShroud createShroud(ShipAPI ship) {
071                DwellerShroud shroud = DwellerShroud.getShroudFor(ship);
072                if (shroud == null) {
073                        shroud = new DwellerShroud(ship, createShroudParams(ship));
074                        
075                }
076                return shroud;
077        }
078        
079        protected DwellerShroudParams createShroudParams(ShipAPI ship) {
080                DwellerShroudParams params = DwellerShroud.createBaselineParams(ship);
081                modifyBaselineShroudParams(ship, params);
082                return params;
083        }
084        
085        protected void modifyBaselineShroudParams(ShipAPI ship, DwellerShroudParams params) {
086        }
087        
088        protected DwellerCombatPlugin createPlugin(ShipAPI ship) {
089                DwellerCombatPlugin plugin = DwellerCombatPlugin.getDwellerPluginFor(ship);
090                if (plugin == null) {
091                        plugin = new DwellerCombatPlugin(ship);
092                }
093                return plugin;
094        }
095        
096        protected void initBasicShipProperties(ShipAPI ship) {
097                //ship.setDoNotRender(true);
098                                
099                //ship.setExplosionScale(0.75f);
100                ship.setExplosionScale(0.001f); // no 0 so the explosion sound plays
101                ship.setHulkChanceOverride(0f);
102                ship.setImpactVolumeMult(IMPACT_VOLUME_MULT);
103                ship.getArmorGrid().clearComponentMap(); // no damage to weapons/engines
104                ship.setNoDamagedExplosions(true);
105                ship.setSpawnDebris(false);
106
107                ship.setShipCollisionSoundOverride("dweller_collision_ships");
108                ship.setAsteroidCollisionSoundOverride("dweller_collision_asteroid_ship");
109        }
110        
111        protected void setOverloadColorAndText(ShipAPI ship, DwellerShroud shroud) {
112                Color color = Misc.setAlpha(Misc.setBrightness(shroud.getParams().flashFringeColor, 255), 255);
113                ship.getFluxTracker().setOverloadColor(color);
114                ship.getFluxTracker().setOverloadText("Stunned!");
115        }
116
117        
118}
119
120
121
122
123
124
125
126