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