001package com.fs.starfarer.api.impl.hullmods; 002 003import com.fs.starfarer.api.Global; 004import com.fs.starfarer.api.characters.PersonAPI; 005import com.fs.starfarer.api.combat.BaseHullMod; 006import com.fs.starfarer.api.combat.CombatEngineAPI; 007import com.fs.starfarer.api.combat.CombatFleetManagerAPI; 008import com.fs.starfarer.api.combat.DeployedFleetMemberAPI; 009import com.fs.starfarer.api.combat.MutableShipStatsAPI; 010import com.fs.starfarer.api.combat.ShipAPI; 011import com.fs.starfarer.api.combat.ShipAPI.HullSize; 012import com.fs.starfarer.api.impl.campaign.ids.Stats; 013 014public class OperationsCenter extends BaseHullMod { 015 016 public static final float RECOVERY_BONUS = 250f; 017 public static final String MOD_ID = "operations_center_mod"; 018 019 public void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) { 020 } 021 022 public String getDescriptionParam(int index, HullSize hullSize) { 023 if (index == 0) return "" + (int) RECOVERY_BONUS + "%"; 024 return null; 025 } 026 027 028 029 @Override 030 public void advanceInCombat(ShipAPI ship, float amount) { 031 CombatEngineAPI engine = Global.getCombatEngine(); 032 if (engine == null) return; 033 034 CombatFleetManagerAPI manager = engine.getFleetManager(ship.getOriginalOwner()); 035 if (manager == null) return; 036 037 DeployedFleetMemberAPI member = manager.getDeployedFleetMember(ship); 038 if (member == null) return; // happens in refit screen etc 039 040 boolean apply = ship == engine.getPlayerShip(); 041 PersonAPI commander = null; 042 if (member.getMember() != null) { 043 commander = member.getMember().getFleetCommander(); 044 if (member.getMember().getFleetCommanderForStats() != null) { 045 commander = member.getMember().getFleetCommanderForStats(); 046 } 047 } 048 apply |= commander != null && ship.getCaptain() == commander; 049 050 if (apply) { 051 ship.getMutableStats().getDynamic().getMod(Stats.COMMAND_POINT_RATE_FLAT).modifyFlat(MOD_ID, RECOVERY_BONUS * 0.01f); 052 } else { 053 ship.getMutableStats().getDynamic().getMod(Stats.COMMAND_POINT_RATE_FLAT).unmodify(MOD_ID); 054 } 055 } 056 057} 058 059 060 061 062 063 064 065