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