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}