001package com.fs.starfarer.api.impl.campaign.rulecmd;
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.InteractionDialogAPI;
009import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
010import com.fs.starfarer.api.campaign.rules.MemoryAPI;
011import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
012import com.fs.starfarer.api.util.Misc;
013import com.fs.starfarer.api.util.Misc.Token;
014
015/**
016 * @author Alex Mosolov
017 *
018 *      MakeOtherFleetHostile <reason> <true or false> <durDays>
019 *
020 * Copyright 2015 Fractal Softworks, LLC
021 */
022public class MakeOtherFleetHostile extends BaseCommandPlugin {
023
024        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
025
026                if (dialog == null) return false;
027                if (!(dialog.getInteractionTarget() instanceof CampaignFleetAPI)) return false;
028                
029                String reason = "generic";
030                boolean value;
031                float expire = 0f;
032                if (params.size() >= 2) {
033                        reason = params.get(0).getString(memoryMap);
034                        value = params.get(1).getBoolean(memoryMap);
035                        if (params.size() >= 3) {
036                                expire = params.get(2).getFloat(memoryMap);
037                        }
038                } else if (params.size() < 1) {
039                        value = true;                   
040                } else {
041                        value = params.get(0).getBoolean(memoryMap);
042                }
043                
044                MemoryAPI memory = dialog.getInteractionTarget().getMemoryWithoutUpdate();
045
046                boolean wasHostile = false;
047                if (dialog.getInteractionTarget() instanceof CampaignFleetAPI) {
048                        CampaignFleetAPI fleet = (CampaignFleetAPI) dialog.getInteractionTarget();
049                        wasHostile = fleet.isHostileTo(Global.getSector().getPlayerFleet());
050                }
051                
052                boolean stillSet = Misc.setFlagWithReason(memory, MemFlags.MEMORY_KEY_MAKE_HOSTILE, reason, value, expire);
053                
054                if (!stillSet) {
055                        CampaignFleetAPI fleet = (CampaignFleetAPI) dialog.getInteractionTarget();
056                        if (fleet.getAI() instanceof ModularFleetAIAPI) {
057                                ModularFleetAIAPI mAI = (ModularFleetAIAPI) fleet.getAI();
058                                mAI.getTacticalModule().forceTargetReEval();
059                        }
060                }
061                
062                boolean isHostile = false;
063                if (dialog.getInteractionTarget() instanceof CampaignFleetAPI) {
064                        CampaignFleetAPI fleet = (CampaignFleetAPI) dialog.getInteractionTarget();
065                        isHostile = fleet.isHostileTo(Global.getSector().getPlayerFleet());
066                }
067                
068                if (isHostile != wasHostile) {
069                        Global.getSoundPlayer().restartCurrentMusic();
070                }
071                
072                return true;
073        }
074
075}
076
077
078
079
080