001package com.fs.starfarer.api.impl.campaign.rulecmd.salvage;
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.ai.ModularFleetAIAPI;
011import com.fs.starfarer.api.campaign.rules.MemoryAPI;
012import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin;
013import com.fs.starfarer.api.util.Misc;
014import com.fs.starfarer.api.util.Misc.Token;
015
016/**
017 * HostileFleetNearbyAndAware
018 */
019public class FactionFleetNearbyAndAware extends BaseCommandPlugin {
020
021        
022        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
023                
024                String factionId = params.get(0).getString(memoryMap);
025
026                CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet();
027                for (CampaignFleetAPI fleet : playerFleet.getContainingLocation().getFleets()) {
028                        if (fleet.getFaction().isPlayerFaction()) continue;
029                        
030                        if (!fleet.getFaction().getId().equals(factionId)) continue;
031                        if (fleet.getBattle() != null) continue;
032                        if (fleet.isStationMode()) continue;
033                        
034                        
035                        VisibilityLevel level = playerFleet.getVisibilityLevelTo(fleet);
036                        if (level == VisibilityLevel.NONE) continue;
037                        
038                        if (fleet.getFleetData().getMembersListCopy().isEmpty()) continue;
039                        
040                        float dist = Misc.getDistance(playerFleet.getLocation(), fleet.getLocation());
041                        if (dist > 750f) continue;
042                        
043                        //fleet.getAI().pickEncounterOption(null, playerFleet, true);
044                        if (fleet.getAI() instanceof ModularFleetAIAPI) {
045                                ModularFleetAIAPI ai = (ModularFleetAIAPI) fleet.getAI();
046                                if (ai.getTacticalModule() != null && 
047                                                (ai.getTacticalModule().isFleeing() || ai.getTacticalModule().isMaintainingContact() ||
048                                                                ai.getTacticalModule().isStandingDown())) {
049                                        continue;
050                                }
051                        }
052                        
053                        return true;
054                }
055
056                return false;
057        }
058        
059}
060
061
062
063