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.InteractionDialogAPI;
009import com.fs.starfarer.api.campaign.OptionPanelAPI;
010import com.fs.starfarer.api.campaign.OptionPanelAPI.OptionTooltipCreator;
011import com.fs.starfarer.api.campaign.TextPanelAPI;
012import com.fs.starfarer.api.campaign.rules.MemoryAPI;
013import com.fs.starfarer.api.ui.LabelAPI;
014import com.fs.starfarer.api.ui.TooltipMakerAPI;
015import com.fs.starfarer.api.util.Misc;
016import com.fs.starfarer.api.util.Misc.Token;
017
018/**
019 *      DoCanAffordCheck <price> <option id> <with total>
020 */
021public class DoCanAffordCheck extends BaseCommandPlugin {
022
023        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
024                if (dialog == null) return false;
025                
026                float price = params.get(0).getFloat(memoryMap);
027                String option = params.get(1).getString(memoryMap);
028                boolean showCredits = params.size() >= 3;
029                boolean showTotal = params.size() >= 3 && params.get(2).getBoolean(memoryMap);
030                
031                TextPanelAPI text = dialog.getTextPanel();
032                OptionPanelAPI options = dialog.getOptionPanel();
033                
034                Color h = Misc.getHighlightColor();
035                Color n = Misc.getNegativeHighlightColor();
036                n = h; // don't do red highlights they don't seem to come across well here, I think
037                final float credits = Global.getSector().getPlayerFleet().getCargo().getCredits().get();
038                //credits = 100;
039                final boolean canAccept = (int) price <= (int) credits;
040                
041                LabelAPI label = null;
042                
043                if (showCredits) {
044                        if (showTotal) {
045                                label = text.addPara("The total price is %s. You have %s available.",
046                                                                        h,
047                                                                        Misc.getDGSCredits(price),      
048                                                                        Misc.getDGSCredits(credits));
049                                label.setHighlightColors(canAccept ? h : n, h);
050                                label.setHighlight(Misc.getDGSCredits(price), Misc.getDGSCredits(credits));
051                        } else {
052                                label = text.addPara("You have %s available.",
053                                                h,
054                                                Misc.getDGSCredits(credits));
055                                label.setHighlightColors(canAccept ? h : n);
056                                label.setHighlight(Misc.getDGSCredits(credits));
057                        }
058                }
059                
060                if (!canAccept) {
061                        options.setEnabled(option, false);
062                        //options.setTooltip(option, "Not enough credits.");
063                }
064                options.addOptionTooltipAppender(option, new OptionTooltipCreator() {
065                        public void createTooltip(TooltipMakerAPI tooltip, boolean hadOtherText) {
066                                if (canAccept) {
067                                        tooltip.addPara("You have %s credits available.", 10f, 
068                                                        Misc.getHighlightColor(), Misc.getWithDGS(credits));
069                                } else {
070                                        tooltip.addPara("You only have %s credits available.", 10f, 
071                                                        Misc.getHighlightColor(), Misc.getWithDGS(credits));
072                                }
073                        }
074                });
075                
076                return true;
077        }
078}
079
080