001package com.fs.starfarer.api.impl.campaign.rulecmd.missions;
002
003import java.util.List;
004import java.util.Map;
005
006import com.fs.starfarer.api.Global;
007import com.fs.starfarer.api.campaign.CampaignFleetAPI;
008import com.fs.starfarer.api.campaign.CargoAPI;
009import com.fs.starfarer.api.campaign.FactionAPI;
010import com.fs.starfarer.api.campaign.InteractionDialogAPI;
011import com.fs.starfarer.api.campaign.OptionPanelAPI;
012import com.fs.starfarer.api.campaign.SectorEntityToken;
013import com.fs.starfarer.api.campaign.TextPanelAPI;
014import com.fs.starfarer.api.campaign.comm.IntelInfoPlugin;
015import com.fs.starfarer.api.campaign.econ.MarketAPI;
016import com.fs.starfarer.api.campaign.rules.MemoryAPI;
017import com.fs.starfarer.api.impl.campaign.intel.bar.events.DeliveryMissionIntel;
018import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin;
019import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD;
020import com.fs.starfarer.api.util.Misc.Token;
021
022/**
023 * 
024 */
025public class DeliveryMission extends BaseCommandPlugin {
026
027        protected CampaignFleetAPI playerFleet;
028        protected SectorEntityToken entity;
029        protected FactionAPI playerFaction;
030        protected FactionAPI entityFaction;
031        protected TextPanelAPI text;
032        protected OptionPanelAPI options;
033        protected CargoAPI playerCargo;
034        protected MemoryAPI memory;
035        protected MarketAPI market;
036        protected InteractionDialogAPI dialog;
037        protected Map<String, MemoryAPI> memoryMap;
038        protected FactionAPI faction;
039
040        
041        public DeliveryMission() {
042                
043        }
044        
045        protected void init(SectorEntityToken entity) {
046                memory = entity.getMemoryWithoutUpdate();
047                this.entity = entity;
048                playerFleet = Global.getSector().getPlayerFleet();
049                playerCargo = playerFleet.getCargo();
050                
051                playerFaction = Global.getSector().getPlayerFaction();
052                entityFaction = entity.getFaction();
053                
054                faction = entity.getFaction();
055                
056                market = entity.getMarket();
057        }
058
059        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
060                this.dialog = dialog;
061                this.memoryMap = memoryMap;
062                
063                String command = params.get(0).getString(memoryMap);
064                if (command == null) return false;
065                
066                entity = dialog.getInteractionTarget();
067                init(entity);
068                
069                memory = getEntityMemory(memoryMap);
070                
071                text = dialog.getTextPanel();
072                options = dialog.getOptionPanel();
073                
074                if (command.equals("completeMissions")) {
075                        completeMissions();
076                } else if (command.equals("checkCompletion")) {
077                        return checkCompletion();
078                }
079                
080                
081                
082                return true;
083        }
084
085        protected boolean checkCompletion() {
086                for (IntelInfoPlugin temp : Global.getSector().getIntelManager().getIntel(DeliveryMissionIntel.class)) {
087                        DeliveryMissionIntel intel = (DeliveryMissionIntel) temp;
088                        if (!intel.isAccepted()) continue;
089                        if (intel.isEnding()) continue;
090                        
091                        MarketAPI dest = intel.getDestination();
092                        if (dest != market) continue;
093                        
094                        if (intel.hasEnough()) return true;
095                }
096                return false;
097        }
098
099        protected void completeMissions() {
100                dialog.getTextPanel().addPara("You contact the relevant parties and drop off the cargo at the agreed-upon dockside locations.");
101                
102                for (IntelInfoPlugin temp : Global.getSector().getIntelManager().getIntel(DeliveryMissionIntel.class)) {
103                        DeliveryMissionIntel intel = (DeliveryMissionIntel) temp;
104                        if (!intel.isAccepted()) continue;
105                        if (intel.isEnding()) continue;
106                        
107                        MarketAPI dest = intel.getDestination();
108                        if (dest != market) continue;
109                        
110                        if (intel.hasEnough()) {
111                                intel.performDelivery(dialog);
112                        }
113                }
114                
115                options.clearOptions();
116                options.addOption("Continue", MarketCMD.DEBT_RESULT_CONTINUE);
117                
118        }
119
120
121}
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141