1package com.fs.starfarer.api.impl.campaign.skills;
3import com.fs.starfarer.api.Global;
4import com.fs.starfarer.api.campaign.FleetDataAPI;
5import com.fs.starfarer.api.characters.FleetStatsSkillEffect;
6import com.fs.starfarer.api.characters.MutableCharacterStatsAPI;
7import com.fs.starfarer.api.characters.ShipSkillEffect;
8import com.fs.starfarer.api.characters.SkillSpecAPI;
9import com.fs.starfarer.api.combat.MutableShipStatsAPI;
10import com.fs.starfarer.api.combat.MutableStat;
11import com.fs.starfarer.api.combat.MutableStat.StatMod;
12import com.fs.starfarer.api.combat.ShipAPI.HullSize;
13import com.fs.starfarer.api.fleet.FleetMemberAPI;
14import com.fs.starfarer.api.fleet.MutableFleetStatsAPI;
15import com.fs.starfarer.api.impl.campaign.ids.Stats;
16import com.fs.starfarer.api.ui.TooltipMakerAPI;
17import com.fs.starfarer.api.util.Misc;
31 String desc =
"Surveying skill";
39 public String getEffectDescription(
float level) {
40 return "-" + (int) Math.round((1f -
SURVEY_COST_MULT) * 100f) +
"% resources required to survey planets";
43 public String getEffectPerLevelDescription() {
47 public ScopeDescription getScopeDescription() {
48 return ScopeDescription.FLEET;
54 String desc =
"Surveying skill";
62 public String getEffectDescription(
float level) {
63 return "+" + (int) Math.round((1f -
SURVEY_COST_MULT) * 100f) +
"% resources extracted from surface deposits on uncolonized planets";
66 public String getEffectPerLevelDescription() {
70 public ScopeDescription getScopeDescription() {
71 return ScopeDescription.FLEET;
79 float useMult = getSupplyUseMult(
id,
getFleetData(stats));
88 public String getEffectDescription(
float level) {
92 protected float getSupplyUseBase(String
id,
FleetDataAPI data) {
93 if (data ==
null)
return 0f;
97 MutableStat stat = curr.getStats().getSuppliesPerMonth();
104 stat.
modifyMult(mod.source, mod.value, mod.desc);
110 protected float getSupplyUseMult(String
id,
FleetDataAPI data) {
111 if (data ==
null)
return 0f;
113 String key =
"makeshift1";
115 if (bonus !=
null)
return bonus;
117 float supplyUse = getSupplyUseBase(
id, data);
124 useMult = 1f - maxReduced / supplyUse;
137 info.
addPara(
"Reduces monthly supply consumption for ship maintenance by %s or %s units, whichever is lower",
146 float supplyUse = getSupplyUseBase(
id, data);
147 float useMult = getSupplyUseMult(
id, data);
149 float reduction = supplyUse * (1f - useMult);
151 boolean has = stats.getSkillLevel(skill.
getId()) > 0;
153 if (!has) is =
"would be";
154 info.
addPara(
indent +
"Your fleet requires a base %s supplies per month for maintenance, which " + is +
" reduced by %s, or %s units",
157 "" + (
int)(Math.round((1f - useMult) * 100f)) +
"%",
172 public ScopeDescription getScopeDescription() {
173 return ScopeDescription.FLEET;
static SectorAPI getSector()
StatMod getMultStatMod(String source)
void unmodifyMult(String source)
void modifyMult(String source, float value)
static final String SURVEY_COST_MULT
static final String PLANET_MINING_VALUE_MULT
static FleetDataAPI getFleetData(MutableShipStatsAPI stats)
static boolean isInCampaign()
void init(MutableCharacterStatsAPI stats, SkillSpecAPI skill)
static float SUPPLY_USE_REDUCTION_MAX_UNITS
static float MINING_VALUE_MULT
static float SUPPLY_USE_REDUCTION_MAX_PERCENT
static String SUPPLIES_EFFECT_ID
static float SURVEY_COST_MULT
static String getRoundedValueMaxOneAfterDecimal(float value)
FleetDataAPI getFleetData()
List< FleetMemberAPI > getMembersListCopy()
Map< String, Object > getCacheClearedOnSync()
CampaignFleetAPI getPlayerFleet()
MutableStat getSuppliesPerMonth()
DynamicStatsAPI getDynamic()
MutableStat getStat(String id)