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.SectorEntityToken;
010import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI;
011import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.ActionType;
012import com.fs.starfarer.api.campaign.rules.MemoryAPI;
013import com.fs.starfarer.api.util.Misc;
014import com.fs.starfarer.api.util.Misc.Token;
015
016
017public class BroadcastPlayerAction extends BaseCommandPlugin {
018        
019        //BroadcastPlayerAction <type> <range> <responseVariable>
020        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
021                
022                ActionType type = Enum.valueOf(ActionType.class, params.get(0).string);
023                float range = Float.parseFloat(params.get(1).string);
024                String responseVariable = params.get(2).string;
025                
026                final SectorEntityToken target = dialog.getInteractionTarget();
027                if (target.getContainingLocation() == null) return false;
028                
029                final CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet();
030
031                broadcast(type, range, responseVariable, playerFleet, target);
032                
033                return true;
034        }
035        
036        public static void broadcast(ActionType type, float range, String responseVariable, 
037                        SectorEntityToken actor, SectorEntityToken target) {
038                broadcast(type, range, responseVariable, actor, target, null);
039        }
040        public static void broadcast(ActionType type, float range, String responseVariable, 
041                                                                        SectorEntityToken actor, SectorEntityToken target, SectorEntityToken exclude) {
042                List<CampaignFleetAPI> fleets = target.getContainingLocation().getFleets();
043                for (CampaignFleetAPI fleet : fleets) {
044                        if (fleet == exclude) continue;
045                        if (fleet.getAI() instanceof CampaignFleetAIAPI) {
046                                float dist = Misc.getDistance(target.getLocation(), fleet.getLocation());
047                                if (dist <= range) {
048                                        CampaignFleetAIAPI ai = (CampaignFleetAIAPI) fleet.getAI();
049                                        ai.reportNearbyAction(type, actor, target, responseVariable);
050                                }
051                        }
052                }
053        }
054
055}
056
057
058
059
060
061