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 HostileFleetNearbyAndAware extends BaseCommandPlugin {
020
021        
022        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
023                
024                //float range = params.get(0).getFloat(memoryMap);
025
026                CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet();
027                for (CampaignFleetAPI fleet : playerFleet.getContainingLocation().getFleets()) {
028                        if (fleet.getAI() == null) continue; // dormant Remnant fleets
029                        if (fleet.getFaction().isPlayerFaction()) continue;
030                        if (fleet.isStationMode()) continue;
031                        
032                        if (!fleet.isHostileTo(playerFleet)) continue;
033                        if (fleet.getBattle() != null) continue;
034                        
035                        if (Misc.isInsignificant(fleet)) {
036                                continue;
037                        }
038                        
039                        
040                        VisibilityLevel level = playerFleet.getVisibilityLevelTo(fleet);
041//                      MemoryAPI mem = fleet.getMemoryWithoutUpdate();
042//                      if (!mem.contains(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_OFF) && 
043//                                      !mem.contains(MemFlags.MEMORY_KEY_PURSUE_PLAYER)) {
044//                              if (level == VisibilityLevel.NONE) continue;
045//                      }
046                        if (level == VisibilityLevel.NONE) continue;
047                        
048                        if (fleet.getFleetData().getMembersListCopy().isEmpty()) continue;
049                        
050                        float dist = Misc.getDistance(playerFleet.getLocation(), fleet.getLocation());
051                        if (dist > 1500f) continue;
052                        
053                        //fleet.getAI().pickEncounterOption(null, playerFleet, true);
054                        if (fleet.getAI() instanceof ModularFleetAIAPI) {
055                                ModularFleetAIAPI ai = (ModularFleetAIAPI) fleet.getAI();
056                                if (ai.getTacticalModule() != null && 
057                                                (ai.getTacticalModule().isFleeing() || ai.getTacticalModule().isMaintainingContact() ||
058                                                                ai.getTacticalModule().isStandingDown())) {
059                                        continue;
060                                }
061                        }
062                        
063                        return true;
064                }
065
066                return false;
067        }
068        
069}
070
071
072
073