Starsector API
Loading...
Searching...
No Matches
CarrierGroup.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.skills;
2
3import com.fs.starfarer.api.campaign.FleetDataAPI;
4import com.fs.starfarer.api.characters.FleetTotalItem;
5import com.fs.starfarer.api.characters.FleetTotalSource;
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.ShipAPI;
11import com.fs.starfarer.api.combat.ShipAPI.HullSize;
12import com.fs.starfarer.api.fleet.FleetMemberAPI;
13import com.fs.starfarer.api.impl.campaign.ids.Strings;
14import com.fs.starfarer.api.ui.TooltipMakerAPI;
15import com.fs.starfarer.api.util.Misc;
16
17public class CarrierGroup {
18
19 public static float REPLACEMENT_RATE_PERCENT = 50;
20
21 public static float OFFICER_MULT = 1.5f;
22 public static boolean isOfficer(MutableShipStatsAPI stats) {
23 if (stats.getEntity() instanceof ShipAPI) {
24 ShipAPI ship = (ShipAPI) stats.getEntity();
25 if (ship == null) return false;
26 return !ship.getCaptain().isDefault();
27 } else {
28 FleetMemberAPI member = stats.getFleetMember();
29 if (member == null) return false;
30 return !member.getCaptain().isDefault();
31 }
32 }
33 public static class Level1 extends BaseSkillEffectDescription implements ShipSkillEffect, FleetTotalSource {
34
35 public FleetTotalItem getFleetTotalItem() {
36 return getFighterBaysTotal();
37 }
38
39 public void apply(MutableShipStatsAPI stats, HullSize hullSize, String id, float level) {
40 if (hasFighterBays(stats)) {
41 float rateBonus = computeAndCacheThresholdBonus(stats, "cg_rep_rate", REPLACEMENT_RATE_PERCENT, ThresholdBonusType.FIGHTER_BAYS);
42 if (isOfficer(stats)) rateBonus *= OFFICER_MULT;
43 float timeMult = 1f / ((100f + rateBonus) / 100f);
44 stats.getFighterRefitTimeMult().modifyMult(id, timeMult);
45 }
46 }
47
48 public void unapply(MutableShipStatsAPI stats, HullSize hullSize, String id) {
49 stats.getFighterRefitTimeMult().unmodifyMult(id);
50 }
51
52 public String getEffectDescription(float level) {
53 return null;
54 }
55
56 public void createCustomDescription(MutableCharacterStatsAPI stats, SkillSpecAPI skill,
57 TooltipMakerAPI info, float width) {
58 init(stats, skill);
59
60 FleetDataAPI data = getFleetData(null);
61 float rateBonus = computeAndCacheThresholdBonus(data, stats, "cg_rep_rate", REPLACEMENT_RATE_PERCENT, ThresholdBonusType.FIGHTER_BAYS);
62
63 info.addPara("+%s faster fighter replacement rate (maximum: %s)", 0f, hc, hc,
64 "" + (int) rateBonus + "%",
65 "" + (int) REPLACEMENT_RATE_PERCENT + "%");
67 info.addPara(indent + "Effect increased by %s for ships with officers, including flagship",
68 0f, tc, hc,
69 "" + Misc.getRoundedValueMaxOneAfterDecimal(OFFICER_MULT) + Strings.X);
70 }
71
72 public ScopeDescription getScopeDescription() {
73 return ScopeDescription.ALL_CARRIERS;
74 }
75
76 }
77
78
79
80}
81
82
83
84
85
void init(MutableCharacterStatsAPI stats, SkillSpecAPI skill)
float computeAndCacheThresholdBonus(MutableShipStatsAPI stats, String key, float maxBonus, ThresholdBonusType type)
static boolean isOfficer(MutableShipStatsAPI stats)