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.rules.MemoryAPI; 010import com.fs.starfarer.api.fleet.FleetMemberAPI; 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 * ArePatrolsNearby <factionId> <range> 017 */ 018public class ArePatrolsNearby extends BaseCommandPlugin { 019 020 021 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) { 022 023 String factionId = params.get(0).getString(memoryMap); 024 float range = params.get(1).getFloat(memoryMap); 025 026 CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet(); 027 028 for (CampaignFleetAPI fleet : playerFleet.getContainingLocation().getFleets()) { 029 if (!fleet.getFaction().getId().equals(factionId)) continue; 030 031 float dist = Misc.getDistance(playerFleet.getLocation(), fleet.getLocation()); 032 if (dist > range) continue; 033 034 if (isPatrol(fleet)) return true; 035 } 036 037 return false; 038 } 039 040 private boolean isPatrol(CampaignFleetAPI fleet) { 041 if (!fleet.getMemoryWithoutUpdate().contains(MemFlags.MEMORY_KEY_PATROL_FLEET)) { 042 return false; 043 } 044 045 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) { 046 if (!member.isCivilian()) return true; 047 } 048 049 return false; 050 } 051} 052 053 054 055