001package com.fs.starfarer.api.impl.campaign.rulecmd; 002 003import java.util.ArrayList; 004import java.util.List; 005import java.util.Map; 006 007import com.fs.starfarer.api.campaign.InteractionDialogAPI; 008import com.fs.starfarer.api.campaign.rules.MemoryAPI; 009import com.fs.starfarer.api.util.Misc; 010import com.fs.starfarer.api.util.Misc.Token; 011 012/** 013 * ShowResCost <commotity id> <quantity> <optional: consumed> (repeated); optional: width of each panel 014 * 015 * ShowResCost crew 1000 supplies 100 true 200 016 * = requires 1000 crew, 100 supplis (consumed), each item is 200 pixels wide 017 */ 018public class ShowResCost extends BaseCommandPlugin { 019 020 public static class ResData { 021 String id; 022 int qty; 023 boolean consumed; 024 } 025 026 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) { 027 List<ResData> data = new ArrayList<ResData>(); 028 029 float widthOverride = -1f; 030 for (int i = 0; i < params.size(); i++) { 031 Token t = params.get(i); 032 033 boolean commodityId = !t.isBoolean(memoryMap) && !t.isFloat(memoryMap); 034 if (commodityId) { 035 ResData curr = new ResData(); 036 curr.id = t.getString(memoryMap); 037 038 i++; 039 t = params.get(i); 040 curr.qty = (int) t.getFloat(memoryMap); 041 042 if (params.size() > i + 1) { 043 t = params.get(i + 1); 044 if (t.isBoolean(memoryMap)) { 045 curr.consumed = t.getBoolean(memoryMap); 046 i++; 047 } 048 } 049 data.add(curr); 050 continue; 051 } else if (t.isFloat(memoryMap)) { 052 widthOverride = t.getFloat(memoryMap); 053 break; 054 } 055 } 056 057 String [] ids = new String [data.size()]; 058 int [] qty = new int [data.size()]; 059 boolean [] consumed = new boolean [data.size()]; 060 061 for (int i = 0; i < data.size(); i++) { 062 ResData curr = data.get(i); 063 ids[i] = curr.id; 064 qty[i] = curr.qty; 065 consumed[i] = curr.consumed; 066 } 067 068 Misc.showCost(dialog.getTextPanel(), "Resources: required (available)", true, widthOverride, null, null, ids, qty, consumed); 069 070 return true; 071 } 072 073} 074 075