1package com.fs.starfarer.api.impl.hullmods;
5import com.fs.starfarer.api.GameState;
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.combat.BaseHullMod;
8import com.fs.starfarer.api.combat.MutableShipStatsAPI;
9import com.fs.starfarer.api.combat.ShipAPI;
10import com.fs.starfarer.api.combat.ShipAPI.HullSize;
11import com.fs.starfarer.api.combat.ShipHullSpecAPI.ShipTypeHints;
12import com.fs.starfarer.api.combat.ShipSystemAPI;
13import com.fs.starfarer.api.impl.campaign.ids.Stats;
14import com.fs.starfarer.api.impl.campaign.ids.Strings;
15import com.fs.starfarer.api.impl.campaign.skills.NeuralLinkScript;
16import com.fs.starfarer.api.impl.campaign.skills.SupportDoctrine;
17import com.fs.starfarer.api.ui.Alignment;
18import com.fs.starfarer.api.ui.TooltipMakerAPI;
19import com.fs.starfarer.api.util.Misc;
40 Float timeout = (Float) ship.getCustomData().get(key);
41 if (timeout ==
null) timeout = 0f;
43 if (timeout < 0) timeout = 0f;
44 ship.setCustomData(key, timeout);
48 if (ship.getCustomData().containsKey(NeuralLinkScript.TRANSFER_COMPLETE_KEY)) {
49 ShipSystemAPI system = ship.getSystem();
50 if (system !=
null && timeout <= 0) {
51 boolean didSomething =
false;
53 float maxTimeout = 0f;
54 if (system.getCooldownRemaining() > 0f && system.isCoolingDown()) {
55 maxTimeout = Math.max(system.getCooldownRemaining(), maxTimeout);
56 system.setCooldownRemaining(0);
59 if (system.getAmmo() < system.getMaxAmmo() && system.getAmmoPerSecond() > 0) {
60 system.setAmmo(system.getAmmo() + 1);
62 maxTimeout = Math.max(1f / system.getAmmoPerSecond() * (1f - system.getAmmoReloadProgress()), maxTimeout);
68 ship.setCustomData(key, maxTimeout);
71 ship.removeCustomData(NeuralLinkScript.TRANSFER_COMPLETE_KEY);
74 ship.removeCustomData(NeuralLinkScript.TRANSFER_COMPLETE_KEY);
80 stats.getDynamic().getMod(Stats.HAS_NEURAL_LINK).modifyFlat(
id, 1f);
82 stats.getDynamic().getMod(Stats.DEPLOYMENT_POINTS_MOD).unmodify(SupportDoctrine.SUPPORT_DOCTRINE_DP_REDUCTION_ID);
99 if (index == 0)
return "benefit from your combat skills";
100 if (index == 1)
return "" + (int)NeuralLinkScript.INSTANT_TRANSFER_DP;
103 if (index == 0)
return "benefit from your combat skills";
104 if (index == 1)
return "" + (int)NeuralLinkScript.INSTANT_TRANSFER_DP;
112 Color h = Misc.getHighlightColor();
113 Color bad = Misc.getNegativeHighlightColor();
114 Color g = Misc.getGrayColor();
116 tooltip.addSectionHeading(
"Neural system reset", Alignment.MID, opad);
117 tooltip.addPara(
"After the transfer is complete, the target ship's system cooldown (if any) will be reset, "
118 +
"and if the ship system uses charges, it will gain an additonal charge. This effect operates on "
119 +
"a cooldown equal to %s the cooldown/charge regeneration time saved by it.", opad, h,
126 if (
Global.
getSector().getPlayerStats().getDynamic().getMod(Stats.HAS_NEURAL_LINK).computeEffective(0f) <= 0f) {
127 tooltip.addPara(
"Requires the Neural Link skill to function", Misc.getNegativeHighlightColor(), opad);
131 if (isForModSpec || ship ==
null)
return;
135 tooltip.addPara(
"Use the \"" + desc +
"\" control [" + control +
"] to switch between ships.", opad,
142 if (Misc.isAutomated(ship)) {
145 if (ship.getHullSpec().getHints().contains(ShipTypeHints.NO_NEURAL_LINK)) {
152 if (Misc.isAutomated(ship)) {
153 return "Can not be installed on automated ships, install Neural Integrator instead";
155 if (ship.getHullSpec().getHints().contains(ShipTypeHints.NO_NEURAL_LINK)) {
156 return "Can not be installed on this ship";
static SettingsAPI getSettings()
static CombatEngineAPI getCombatEngine()
static GameState getCurrentState()
static SectorAPI getSector()
static float DP_INCREASE_PERCENT
static final String SYSTEM_RESET_TIMEOUT_KEY
void addPostDescriptionSection(TooltipMakerAPI tooltip, HullSize hullSize, ShipAPI ship, float width, boolean isForModSpec)
void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id)
static float SYSTEM_RESET_TIMEOUT_MULT
boolean isApplicableToShip(ShipAPI ship)
String getDescriptionParam(int index, HullSize hullSize)
void advanceInCombat(ShipAPI ship, float amount)
String getUnapplicableReason(ShipAPI ship)
String getControlDescriptionForEnumName(String name)
String getControlStringForEnumName(String name)