001package com.fs.starfarer.api.impl.campaign.rulecmd;
002
003import java.util.List;
004import java.util.Map;
005
006import com.fs.starfarer.api.campaign.CampaignFleetAPI;
007import com.fs.starfarer.api.campaign.InteractionDialogAPI;
008import com.fs.starfarer.api.campaign.SectorEntityToken;
009import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI;
010import com.fs.starfarer.api.campaign.rules.MemoryAPI;
011import com.fs.starfarer.api.util.Misc;
012import com.fs.starfarer.api.util.Misc.Token;
013
014
015/**
016 * SetNearbyFleetsVariable <range> <faction id> <variable name> <value> <duration>
017 */
018public class SetNearbyFleetsVariable extends BaseCommandPlugin {
019        
020        //BroadcastPlayerAction <type> <range> <responseVariable>
021        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
022        
023                
024                float range = Float.parseFloat(params.get(0).string);
025                String factionId = params.get(1).getString(memoryMap);
026                String varName = params.get(2).string;
027                String value = params.get(3).getString(memoryMap);
028                float dur = Float.parseFloat(params.get(4).string);
029                
030                final SectorEntityToken target = dialog.getInteractionTarget();
031                if (target.getContainingLocation() == null) return false;
032                
033                List<CampaignFleetAPI> fleets = target.getContainingLocation().getFleets();
034                for (CampaignFleetAPI fleet : fleets) {
035                        if (fleet == target) continue;
036                        if (!fleet.getFaction().getId().equals(factionId)) continue;
037                        if (fleet.getAI() instanceof CampaignFleetAIAPI) {
038                                float dist = Misc.getDistance(target.getLocation(), fleet.getLocation());
039                                if (dist <= range) {
040                                        fleet.getMemoryWithoutUpdate().set(varName, value, dur);
041                                }
042                        }
043                }
044                
045                return true;
046        }
047        
048
049}
050
051
052
053
054
055