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