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 *      MakeHostileWhileTOff <reason> <true or false>
019 *
020 * Copyright 2015 Fractal Softworks, LLC
021 */
022public class MakeHostileWhileTOff 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 {
039                        value = params.get(0).getBoolean(memoryMap);
040                }
041                
042                boolean wasHostile = false;
043                if (dialog.getInteractionTarget() instanceof CampaignFleetAPI) {
044                        CampaignFleetAPI fleet = (CampaignFleetAPI) dialog.getInteractionTarget();
045                        wasHostile = fleet.isHostileTo(Global.getSector().getPlayerFleet());
046                }
047                
048                
049                MemoryAPI memory = dialog.getInteractionTarget().getMemoryWithoutUpdate();
050                
051                boolean stillSet = Misc.setFlagWithReason(memory, MemFlags.MEMORY_KEY_MAKE_HOSTILE_WHILE_TOFF, reason, value, expire);
052                
053                if (!stillSet && Global.getSector().getPlayerFleet().isTransponderOn()) {
054                        CampaignFleetAPI fleet = (CampaignFleetAPI) dialog.getInteractionTarget();
055                        if (fleet.getAI() instanceof ModularFleetAIAPI) {
056                                ModularFleetAIAPI mAI = (ModularFleetAIAPI) fleet.getAI();
057                                mAI.getTacticalModule().forceTargetReEval();
058                        }
059                }
060                
061                boolean isHostile = false;
062                if (dialog.getInteractionTarget() instanceof CampaignFleetAPI) {
063                        CampaignFleetAPI fleet = (CampaignFleetAPI) dialog.getInteractionTarget();
064                        isHostile = fleet.isHostileTo(Global.getSector().getPlayerFleet());
065                }
066                
067                if (isHostile != wasHostile) {
068                        Global.getSoundPlayer().restartCurrentMusic();
069                }
070                
071                return true;
072        }
073
074}
075
076
077
078
079