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