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