001package com.fs.starfarer.api.impl.campaign.skills;
002
003import java.awt.Color;
004
005import com.fs.starfarer.api.campaign.FleetDataAPI;
006import com.fs.starfarer.api.characters.FleetStatsSkillEffect;
007import com.fs.starfarer.api.characters.FleetTotalItem;
008import com.fs.starfarer.api.characters.FleetTotalSource;
009import com.fs.starfarer.api.characters.MutableCharacterStatsAPI;
010import com.fs.starfarer.api.characters.ShipSkillEffect;
011import com.fs.starfarer.api.characters.SkillSpecAPI;
012import com.fs.starfarer.api.combat.MutableShipStatsAPI;
013import com.fs.starfarer.api.combat.ShipAPI.HullSize;
014import com.fs.starfarer.api.fleet.MutableFleetStatsAPI;
015import com.fs.starfarer.api.impl.campaign.ids.Stats;
016import com.fs.starfarer.api.ui.TooltipMakerAPI;
017import com.fs.starfarer.api.util.Misc;
018
019public class TacticalDrills {
020        
021        public static float DAMAGE_PERCENT = 5;
022        
023        public static int ATTACK_BONUS = 50;
024        public static float CASUALTIES_MULT = 0.75f;
025        
026        
027        public static class Level1 extends BaseSkillEffectDescription implements ShipSkillEffect, FleetTotalSource {
028                
029                public FleetTotalItem getFleetTotalItem() {
030                        return getCombatOPTotal();
031                }
032                
033                public void apply(MutableShipStatsAPI stats, HullSize hullSize, String id, float level) {
034                        if (!isCivilian(stats)) {
035                                float damBonus = computeAndCacheThresholdBonus(stats, "td_dam", DAMAGE_PERCENT, ThresholdBonusType.OP);
036                                stats.getBallisticWeaponDamageMult().modifyPercent(id, damBonus);
037                                stats.getEnergyWeaponDamageMult().modifyPercent(id, damBonus);
038                                stats.getMissileWeaponDamageMult().modifyPercent(id, damBonus);
039                        }
040                }
041                        
042                public void unapply(MutableShipStatsAPI stats, HullSize hullSize, String id) {
043                        stats.getBallisticWeaponDamageMult().unmodifyPercent(id);
044                        stats.getEnergyWeaponDamageMult().unmodifyPercent(id);
045                        stats.getMissileWeaponDamageMult().unmodifyPercent(id);
046                }
047                
048                public String getEffectDescription(float level) {
049                        return null;
050                }
051                        
052                public void createCustomDescription(MutableCharacterStatsAPI stats, SkillSpecAPI skill, 
053                                                                                        TooltipMakerAPI info, float width) {
054                        init(stats, skill);
055                        
056                        FleetDataAPI data = getFleetData(null);
057                        float damBonus = computeAndCacheThresholdBonus(data, stats, "td_dam", DAMAGE_PERCENT, ThresholdBonusType.OP);
058                        
059                        info.addPara("+%s weapon damage for combat ships (maximum: %s)", 0f, hc, hc,
060                                        "" + (int) damBonus + "%",
061                                        "" + (int) DAMAGE_PERCENT + "%");
062                        addOPThresholdInfo(info, data, stats, OP_THRESHOLD);
063                        
064                        //info.addSpacer(5f);
065                }
066                
067                public ScopeDescription getScopeDescription() {
068                        return ScopeDescription.ALL_SHIPS;
069                }
070        }
071        
072
073        public static class Level2 extends BaseSkillEffectDescription implements FleetStatsSkillEffect {
074                public void apply(MutableFleetStatsAPI stats, String id, float level) {
075                        stats.getDynamic().getMod(Stats.PLANETARY_OPERATIONS_MOD).modifyPercent(id, ATTACK_BONUS, "Tactical drills");
076                }
077                
078                public void unapply(MutableFleetStatsAPI stats, String id) {
079                        stats.getDynamic().getMod(Stats.PLANETARY_OPERATIONS_MOD).unmodifyPercent(id);
080                }
081                
082                public void createCustomDescription(MutableCharacterStatsAPI stats, SkillSpecAPI skill, 
083                                                TooltipMakerAPI info, float width) {
084                        init(stats, skill);
085
086                        float opad = 10f;
087                        Color c = Misc.getBasePlayerColor();
088                        //info.addPara("Affects: %s", opad + 5f, Misc.getGrayColor(), c, "fleet");
089                        info.addPara("Affects: %s", opad + 5f, Misc.getGrayColor(), c, "ground operations");
090                        info.addSpacer(opad);
091                        info.addPara("+%s effectiveness of ground operations such as raids", 0f, hc, hc,
092                                        "" + (int) ATTACK_BONUS + "%");
093                }
094                
095                public String getEffectDescription(float level) {
096                        return "+" + (int)(ATTACK_BONUS) + "% effectiveness of ground operations such as raids"; 
097                }
098                
099                public String getEffectPerLevelDescription() {
100                        return null;
101                }
102                
103                public ScopeDescription getScopeDescription() {
104                        return ScopeDescription.FLEET;
105                }
106        }
107        
108        public static class Level3 implements FleetStatsSkillEffect {
109                public void apply(MutableFleetStatsAPI stats, String id, float level) {
110                        stats.getDynamic().getStat(Stats.PLANETARY_OPERATIONS_CASUALTIES_MULT).modifyMult(id, CASUALTIES_MULT, "Tactical drills");
111                }
112                
113                public void unapply(MutableFleetStatsAPI stats, String id) {
114                        stats.getDynamic().getStat(Stats.PLANETARY_OPERATIONS_CASUALTIES_MULT).unmodifyMult(id);
115                }
116                
117                public String getEffectDescription(float level) {
118                        return "-" + (int)Math.round((1f - CASUALTIES_MULT) * 100f) + "% marine casualties suffered during ground operations such as raids"; 
119                }
120                
121                public String getEffectPerLevelDescription() {
122                        return null;
123                }
124                
125                public ScopeDescription getScopeDescription() {
126                        return ScopeDescription.FLEET;
127                }
128        }
129}
130
131
132
133
134