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.CharacterStatsSkillEffect;
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.ui.TooltipMakerAPI;
015import com.fs.starfarer.api.util.Misc;
016
017public class FluxRegulation {
018
019        public static int VENTS_BONUS = 5;
020        public static int CAPACITORS_BONUS = 5;
021        
022        public static float DISSIPATION_PERCENT = 10;
023        public static float CAPACITY_PERCENT = 10;
024        
025        public static class Level1 extends BaseSkillEffectDescription implements ShipSkillEffect, FleetTotalSource {
026                
027                public FleetTotalItem getFleetTotalItem() {
028                        return getCombatOPTotal();
029                }
030                
031                public void apply(MutableShipStatsAPI stats, HullSize hullSize, String id, float level) {
032                        if (!isCivilian(stats)) {
033                                float disBonus = computeAndCacheThresholdBonus(stats, "fr_dis", DISSIPATION_PERCENT, ThresholdBonusType.OP);
034                                float capBonus = computeAndCacheThresholdBonus(stats, "fr_cap", CAPACITY_PERCENT, ThresholdBonusType.OP);
035                                stats.getFluxDissipation().modifyPercent(id, disBonus);
036                                stats.getFluxCapacity().modifyPercent(id, capBonus);
037                        }
038                }
039                
040                public void unapply(MutableShipStatsAPI stats, HullSize hullSize, String id) {
041                        stats.getFluxDissipation().unmodifyPercent(id);
042                        stats.getFluxCapacity().unmodifyPercent(id);
043                }
044                
045                public String getEffectDescription(float level) {
046                        return null;
047                }
048                
049//                      float op = getTotalOP(data, cStats);
050//                      bonus = getThresholdBasedRoundedBonus(DISSIPATION_PERCENT, op, OP_THRESHOLD);
051//                      
052//                      float op = getTotalOP(data, cStats);
053//                      bonus = getThresholdBasedRoundedBonus(CAPACITY_PERCENT, op, FIGHTER_BAYS_THRESHOLD);
054                        
055                        
056                public void createCustomDescription(MutableCharacterStatsAPI stats, SkillSpecAPI skill, 
057                                                                                        TooltipMakerAPI info, float width) {
058                        init(stats, skill);
059                        
060                        //info.addSpacer(5f);
061                        
062                        FleetDataAPI data = getFleetData(null);
063                        float disBonus = computeAndCacheThresholdBonus(data, stats, "fr_dis", DISSIPATION_PERCENT, ThresholdBonusType.OP);
064                        float capBonus = computeAndCacheThresholdBonus(data, stats, "fr_cap", CAPACITY_PERCENT, ThresholdBonusType.OP);
065
066                        float opad = 10f;
067                        Color c = Misc.getBasePlayerColor();
068                        info.addPara("Affects: %s", opad + 5f, Misc.getGrayColor(), c, "all combat ships, including carriers and militarized civilian ships");
069                        
070                        info.addPara("+%s flux dissipation for combat ships (maximum: %s)", opad, hc, hc,
071                                        "" + (int) disBonus + "%",
072                                        "" + (int) DISSIPATION_PERCENT + "%");
073                        
074//                      addFighterBayThresholdInfo(info, data);
075//                      info.addSpacer(5f);
076                        
077                        info.addPara("+%s flux capacity for combat ships (maximum: %s)", 0f, hc, hc,
078                                        "" + (int) capBonus + "%",
079                                        "" + (int) CAPACITY_PERCENT + "%");
080                        addOPThresholdInfo(info, data, stats);
081                        
082                        //info.addSpacer(5f);
083                }
084                
085                public ScopeDescription getScopeDescription() {
086                        return ScopeDescription.ALL_SHIPS;
087                }
088        }
089        
090        public static class Level2 implements CharacterStatsSkillEffect {
091                public void apply(MutableCharacterStatsAPI stats, String id, float level) {
092                        stats.getMaxCapacitorsBonus().modifyFlat(id, CAPACITORS_BONUS);
093                }
094
095                public void unapply(MutableCharacterStatsAPI stats, String id) {
096                        stats.getMaxCapacitorsBonus().unmodify(id);
097                }
098
099                public String getEffectDescription(float level) {
100                        return "+" + (int) CAPACITORS_BONUS + " maximum flux capacitors";
101                }
102
103                public String getEffectPerLevelDescription() {
104                        return null;
105                }
106
107                public ScopeDescription getScopeDescription() {
108                        return ScopeDescription.ALL_SHIPS;
109                }
110        }
111
112        public static class Level3 implements CharacterStatsSkillEffect {
113                public void apply(MutableCharacterStatsAPI stats, String id, float level) {
114                        //stats.getShipOrdnancePointBonus().modifyPercent(id, 50f);
115                        stats.getMaxVentsBonus().modifyFlat(id, VENTS_BONUS);
116                }
117
118                public void unapply(MutableCharacterStatsAPI stats, String id) {
119                        //stats.getShipOrdnancePointBonus().unmodifyPercent(id);
120                        stats.getMaxVentsBonus().unmodify(id);
121                }
122
123                public String getEffectDescription(float level) {
124                        return "+" + (int) VENTS_BONUS + " maximum flux vents";
125                }
126
127                public String getEffectPerLevelDescription() {
128                        return null;
129                }
130
131                public ScopeDescription getScopeDescription() {
132                        return ScopeDescription.ALL_SHIPS;
133                }
134        }
135
136}
137
138
139
140
141