001package com.fs.starfarer.api.impl.campaign.skills;
002
003import com.fs.starfarer.api.characters.ShipSkillEffect;
004import com.fs.starfarer.api.combat.MutableShipStatsAPI;
005import com.fs.starfarer.api.combat.ShipAPI.HullSize;
006import com.fs.starfarer.api.impl.campaign.ids.Stats;
007
008public class CarrierCommand {
009        
010        public static final float FIGHTER_CREW_LOSS_REDUCTION = 20f;
011        public static final float FIGHTER_RAMAGE_REDUCTION = 20f;
012        public static final float FIGHTER_REPLACEMENT_RATE_BONUS = 20f;
013        
014        
015
016        public static class Level1 implements ShipSkillEffect {
017
018                public void apply(MutableShipStatsAPI stats, HullSize hullSize, String id, float level) {
019                        stats.getDynamic().getStat(Stats.FIGHTER_CREW_LOSS_MULT).modifyMult(id, 1f - FIGHTER_CREW_LOSS_REDUCTION / 100f);
020                }
021                
022                public void unapply(MutableShipStatsAPI stats, HullSize hullSize, String id) {
023                        stats.getDynamic().getStat(Stats.FIGHTER_CREW_LOSS_MULT).unmodify(id);
024                }
025                
026                public String getEffectDescription(float level) {
027                        return "-" + (int)(FIGHTER_CREW_LOSS_REDUCTION) + "% crew lost due to fighter losses in combat";
028                }
029                
030                public String getEffectPerLevelDescription() {
031                        return null;
032                }
033                
034                public ScopeDescription getScopeDescription() {
035                        return ScopeDescription.PILOTED_SHIP;
036                }
037        }
038
039        public static class Level2 implements ShipSkillEffect {
040                public void apply(MutableShipStatsAPI stats, HullSize hullSize, String id, float level) {
041                        stats.getHullDamageTakenMult().modifyMult(id, 1f - FIGHTER_RAMAGE_REDUCTION / 100f);
042                        stats.getArmorDamageTakenMult().modifyMult(id, 1f - FIGHTER_RAMAGE_REDUCTION / 100f);
043                        stats.getShieldDamageTakenMult().modifyMult(id, 1f - FIGHTER_RAMAGE_REDUCTION / 100f);
044                }
045                
046                public void unapply(MutableShipStatsAPI stats, HullSize hullSize, String id) {
047                        stats.getHullDamageTakenMult().unmodify(id);
048                        stats.getArmorDamageTakenMult().unmodify(id);
049                        stats.getShieldDamageTakenMult().unmodify(id);
050                }
051                
052                public String getEffectDescription(float level) {
053                        return "-" + (int)(FIGHTER_RAMAGE_REDUCTION) + "% damage taken";
054                }
055                
056                public String getEffectPerLevelDescription() {
057                        return null;
058                }
059
060                public ScopeDescription getScopeDescription() {
061                        return ScopeDescription.SHIP_FIGHTERS;
062                }
063        }
064        
065        public static class Level3 implements ShipSkillEffect {
066
067                public void apply(MutableShipStatsAPI stats, HullSize hullSize, String id, float level) {
068                        float timeMult = 1f / ((100f + FIGHTER_REPLACEMENT_RATE_BONUS) / 100f);
069                        stats.getFighterRefitTimeMult().modifyMult(id, timeMult);
070                }
071                
072                public void unapply(MutableShipStatsAPI stats, HullSize hullSize, String id) {
073                        stats.getFighterRefitTimeMult().unmodify(id);
074                }       
075                
076                public String getEffectDescription(float level) {
077                        return "" + (int)(FIGHTER_REPLACEMENT_RATE_BONUS) + "% faster fighter replacements";
078                }
079                
080                public String getEffectPerLevelDescription() {
081                        return null;
082                }
083                
084                public ScopeDescription getScopeDescription() {
085                        return ScopeDescription.PILOTED_SHIP;
086                }
087        }
088        
089}