Starsector API
Loading...
Searching...
No Matches
IsSeenByPatrols.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd;
2
3import java.util.List;
4import java.util.Map;
5
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.InteractionDialogAPI;
9import com.fs.starfarer.api.campaign.SectorEntityToken.VisibilityLevel;
10import com.fs.starfarer.api.campaign.rules.MemoryAPI;
11import com.fs.starfarer.api.fleet.FleetMemberAPI;
12import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
13import com.fs.starfarer.api.util.Misc;
14import com.fs.starfarer.api.util.Misc.Token;
15
19public class IsSeenByPatrols extends BaseCommandPlugin {
20
21 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
22
23 //if (true) return false;
24
25 String factionId = params.get(0).getString(memoryMap);
26
27 boolean patrolMustCareAboutTransponder = false;
28 if (params.size() > 1) {
29 patrolMustCareAboutTransponder = params.get(1).getBoolean(memoryMap);
30 }
31 //float range = Global.getSettings().getFloat("sensorRangeMax");
32
33 CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet();
34
35 for (CampaignFleetAPI fleet : playerFleet.getContainingLocation().getFleets()) {
36 if (!fleet.getFaction().getId().equals(factionId)) continue;
37 if (fleet.getFaction().isPlayerFaction()) continue;
38 if (fleet.getBattle() != null) continue;
39
40 if (patrolMustCareAboutTransponder && !Misc.caresAboutPlayerTransponder(fleet)) continue;
41// float dist = Misc.getDistance(playerFleet.getLocation(), fleet.getLocation()) - playerFleet.getRadius() - fleet.getRadius();
42// if (dist > range) continue;
43
44 VisibilityLevel level = playerFleet.getVisibilityLevelTo(fleet);
45 MemoryAPI mem = fleet.getMemoryWithoutUpdate();
46 if (!mem.contains(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_OFF) &&
47 !mem.contains(MemFlags.MEMORY_KEY_PURSUE_PLAYER)) {
48 if (level == VisibilityLevel.NONE) continue;
49 }
50
51 float dist = Misc.getDistance(fleet.getLocation(), playerFleet.getLocation());
52 if (dist > 1000f) continue;
53
54 if (isPatrol(fleet)) return true;
55 }
56
57 return false;
58 }
59
60 private boolean isPatrol(CampaignFleetAPI fleet) {
61 if (!fleet.getMemoryWithoutUpdate().contains(MemFlags.MEMORY_KEY_PATROL_FLEET)) {
62 return false;
63 }
64
65 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
66 if (!member.isCivilian()) return true;
67 }
68
69 return false;
70 }
71}
72
73
74
75
static SectorAPI getSector()
Definition Global.java:59
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)