001package com.fs.starfarer.api.impl.campaign.skills;
002
003import com.fs.starfarer.api.campaign.FleetDataAPI;
004import com.fs.starfarer.api.characters.FleetTotalItem;
005import com.fs.starfarer.api.characters.FleetTotalSource;
006import com.fs.starfarer.api.characters.MutableCharacterStatsAPI;
007import com.fs.starfarer.api.characters.ShipSkillEffect;
008import com.fs.starfarer.api.characters.SkillSpecAPI;
009import com.fs.starfarer.api.combat.MutableShipStatsAPI;
010import com.fs.starfarer.api.combat.ShipAPI.HullSize;
011import com.fs.starfarer.api.ui.TooltipMakerAPI;
012
013public class CrewTraining {
014        
015        public static float PEAK_SECONDS = 30f;
016        public static float CR_PERCENT = 15f;
017        
018        public static class Level1 extends BaseSkillEffectDescription implements ShipSkillEffect, FleetTotalSource {
019                
020                public FleetTotalItem getFleetTotalItem() {
021                        return getCombatOPTotal();
022                }
023                
024                public void apply(MutableShipStatsAPI stats, HullSize hullSize, String id, float level) {
025                        if (!isCivilian(stats)) {
026                                float crBonus = computeAndCacheThresholdBonus(stats, "ct_cr", CR_PERCENT, ThresholdBonusType.OP);
027                                stats.getMaxCombatReadiness().modifyFlat(id, crBonus * 0.01f, "Crew Training skill");
028                        }
029                }
030                
031                public void unapply(MutableShipStatsAPI stats, HullSize hullSize, String id) {
032                        stats.getMaxCombatReadiness().unmodify(id);
033                }
034                
035                public String getEffectDescription(float level) {
036                        return null;
037                }
038                        
039                public void createCustomDescription(MutableCharacterStatsAPI stats, SkillSpecAPI skill, 
040                                                                                        TooltipMakerAPI info, float width) {
041                        init(stats, skill);
042                        
043                        FleetDataAPI data = getFleetData(null);
044                        float crBonus = computeAndCacheThresholdBonus(data, stats, "ct_cr", CR_PERCENT, ThresholdBonusType.OP);
045                        
046                        info.addPara("+%s maximum combat readiness for combat ships (maximum: %s)", 0f, hc, hc,
047                                        "" + (int) crBonus + "%",
048                                        "" + (int) CR_PERCENT + "%");
049                        addOPThresholdInfo(info, data, stats, OP_THRESHOLD);
050                }
051        }
052        public static class Level2 extends BaseSkillEffectDescription implements ShipSkillEffect, FleetTotalSource {
053                
054                public FleetTotalItem getFleetTotalItem() {
055                        return getCombatOPTotal();
056                }
057                
058                public void apply(MutableShipStatsAPI stats, HullSize hullSize, String id, float level) {
059                        if (!isCivilian(stats)) {
060                                float peakTimeBonus = computeAndCacheThresholdBonus(stats, "ct_peak", PEAK_SECONDS, ThresholdBonusType.OP);
061                                stats.getPeakCRDuration().modifyFlat(id, peakTimeBonus);
062                        }
063                }
064                
065                public void unapply(MutableShipStatsAPI stats, HullSize hullSize, String id) {
066                        stats.getPeakCRDuration().unmodifyFlat(id);
067                }
068                
069                public String getEffectDescription(float level) {
070                        return null;
071                }
072                
073                public void createCustomDescription(MutableCharacterStatsAPI stats, SkillSpecAPI skill, 
074                                TooltipMakerAPI info, float width) {
075                        init(stats, skill);
076                        
077                        FleetDataAPI data = getFleetData(null);
078                        float peakTimeBonus = computeAndCacheThresholdBonus(data, stats, "ct_peak", PEAK_SECONDS, ThresholdBonusType.OP);
079                        
080                        info.addPara("+%s seconds peak operating time for combat ships (maximum: %s)", 0f, hc, hc,
081                                        "" + (int) peakTimeBonus,
082                                        "" + (int) PEAK_SECONDS);
083                        addOPThresholdInfo(info, data, stats, OP_THRESHOLD);
084                }
085        }
086        
087
088
089}
090
091
092
093
094