001package com.fs.starfarer.api.impl.campaign.rulecmd;
002
003import java.awt.Color;
004import java.util.List;
005import java.util.Map;
006
007import com.fs.starfarer.api.Global;
008import com.fs.starfarer.api.campaign.CampaignFleetAPI;
009import com.fs.starfarer.api.campaign.InteractionDialogAPI;
010import com.fs.starfarer.api.campaign.rules.MemoryAPI;
011import com.fs.starfarer.api.fleet.FleetMemberAPI;
012import com.fs.starfarer.api.util.Misc.Token;
013
014/**
015 * 
016 * RepairAll <useSupplies, true by default>
017 *
018 * Copyright 2017 Fractal Softworks, LLC
019 */
020public class RepairAll extends BaseCommandPlugin {
021
022        private static final Color HIGHLIGHT_COLOR = Global.getSettings().getColor("buttonShortcut");
023        
024        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
025                CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet();
026                
027//              TextPanelAPI textPanel = dialog.getTextPanel();
028                
029//              textPanel.addParagraph(getString("repair"));
030                
031                boolean useSupplies = true;
032                if (params.size() >= 1) {
033                        useSupplies = params.get(0).getBoolean(memoryMap);
034                }
035                
036                float supplies = playerFleet.getCargo().getSupplies();
037                float needed = playerFleet.getLogistics().getTotalRepairAndRecoverySupplyCost();
038                if (needed > 0) needed = Math.max(1, Math.round(needed));
039                
040//              memoryMap.get("global").set("$repairSupplyCost", (int) needed);
041                
042//              textPanel.highlightLastInLastPara("" + (int) needed, HIGHLIGHT_COLOR);
043                
044                for (FleetMemberAPI member : playerFleet.getFleetData().getMembersListCopy()) {
045                        if (member.canBeRepaired() || (member.isFighterWing() && !member.getRepairTracker().isSuspendRepairs())) {
046                                member.getStatus().repairFully();
047                                float max = member.getRepairTracker().getMaxCR();
048                                float curr = member.getRepairTracker().getBaseCR();
049                                if (max > curr) {
050                                        member.getRepairTracker().applyCREvent(max - curr, "Repaired at dockyard");
051                                }
052                        }
053                }
054                
055                if (needed > 0 && useSupplies) {
056                        playerFleet.getCargo().removeSupplies(needed);
057                        playerFleet.getLogistics().updateRepairUtilizationForUI();
058                }
059                
060                return true;
061        }
062        
063        
064        private String getString(String id) {
065                CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet();
066                
067                String str = Global.getSettings().getString("stationInteractionDialog", id);
068
069                float needed = playerFleet.getLogistics().getTotalRepairAndRecoverySupplyCost();
070                float supplies = playerFleet.getCargo().getSupplies();
071                str = str.replaceAll("\\$supplies", "" + (int) supplies);
072                str = str.replaceAll("\\$repairSupplyCost", "" + (int) Math.ceil(needed));
073                return str;
074        }
075}