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.VisibilityLevel;
010import com.fs.starfarer.api.campaign.rules.MemoryAPI;
011import com.fs.starfarer.api.fleet.FleetMemberAPI;
012import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
013import com.fs.starfarer.api.util.Misc;
014import com.fs.starfarer.api.util.Misc.Token;
015
016/**
017 * IsSeenByAnyFleet <factionId>
018 */
019public class IsSeenByAnyFleet extends BaseCommandPlugin {
020
021        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
022
023                //if (true) return false;
024                
025                String factionId = null;
026                if (params.size() >= 1) {
027                        factionId = params.get(0).getString(memoryMap);
028                }
029                
030                CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet();
031
032                for (CampaignFleetAPI fleet : playerFleet.getContainingLocation().getFleets()) {
033                        if (factionId != null && !fleet.getFaction().getId().equals(factionId)) continue;
034                        if (fleet.getFaction().isPlayerFaction()) continue;
035                        if (fleet.getBattle() != null) continue;
036                        if (fleet.isStationMode()) continue;
037                        
038                        VisibilityLevel level = playerFleet.getVisibilityLevelTo(fleet);
039                        MemoryAPI mem = fleet.getMemoryWithoutUpdate();
040                        if (!mem.contains(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_OFF) && 
041                                        !mem.contains(MemFlags.MEMORY_KEY_PURSUE_PLAYER)) {
042                                if (level == VisibilityLevel.NONE) continue;
043                        }
044                        
045                        float dist = Misc.getDistance(fleet.getLocation(), playerFleet.getLocation());
046                        if (dist > 1000f) continue;
047                        
048                        return true;
049                }
050
051                return false;
052        }
053        
054        private boolean isPatrol(CampaignFleetAPI fleet) {
055                if (!fleet.getMemoryWithoutUpdate().contains(MemFlags.MEMORY_KEY_PATROL_FLEET)) {
056                        return false;
057                }
058                
059                for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
060                        if (!member.isCivilian()) return true;
061                }
062                
063                return false;
064        }
065}
066
067
068
069