Starsector API
Loading...
Searching...
No Matches
ScavengerPiracyScript.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.procgen.themes;
2
3import java.util.List;
4
5import com.fs.starfarer.api.EveryFrameScript;
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.SectorEntityToken.VisibilityLevel;
9import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.EncounterOption;
10import com.fs.starfarer.api.impl.campaign.ids.Factions;
11import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
12import com.fs.starfarer.api.util.IntervalUtil;
13import com.fs.starfarer.api.util.Misc;
14
15public class ScavengerPiracyScript implements EveryFrameScript {
16
17 protected IntervalUtil piracyCheck = new IntervalUtil(0.2f, 0.4f);
18 protected CampaignFleetAPI fleet;
19 public ScavengerPiracyScript(CampaignFleetAPI fleet) {
20 this.fleet = fleet;
21 }
22
23 public void advance(float amount) {
24 float days = Global.getSector().getClock().convertToDays(amount);
25 piracyCheck.advance(days);
26 if (piracyCheck.intervalElapsed()) {
28 }
29 }
30
31 protected void doPiracyCheck() {
32 if (fleet.getBattle() != null) return;
33
34
35 boolean isCurrentlyPirate = fleet.getFaction().getId().equals(Factions.PIRATES);
36
37 if (fleet.isTransponderOn() && !isCurrentlyPirate) {
38 return;
39 }
40
41 if (isCurrentlyPirate) {
42 List<CampaignFleetAPI> visible = Misc.getVisibleFleets(fleet, false);
43 if (visible.isEmpty()) {
44 fleet.setFaction(Factions.INDEPENDENT, true);
45 Misc.clearTarget(fleet, true);
46 }
47 return;
48 }
49
50 List<CampaignFleetAPI> visible = Misc.getVisibleFleets(fleet, false);
51 if (visible.size() == 1) {
52 int weakerCount = 0;
53 for (CampaignFleetAPI other : visible) {
54 if (fleet.getAI() != null &&
55 Global.getSector().getFaction(Factions.PIRATES).isHostileTo(other.getFaction())) {
56 EncounterOption option = fleet.getAI().pickEncounterOption(null, other, true);
57 if (option == EncounterOption.ENGAGE || option == EncounterOption.HOLD) {
58 float dist = Misc.getDistance(fleet.getLocation(), other.getLocation());
59 VisibilityLevel level = other.getVisibilityLevelTo(fleet);
60 boolean seesComp = level == VisibilityLevel.COMPOSITION_AND_FACTION_DETAILS ||
61 level == VisibilityLevel.COMPOSITION_DETAILS;
62 if (dist < 800f && seesComp) {
63 weakerCount++;
64 }
65 }
66 }
67 }
68
69 if (weakerCount == 1) {
70 fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_PIRATE, true);
71 fleet.setNoFactionInName(true);
72 fleet.setFaction(Factions.PIRATES, true);
73 }
74 }
75
76 }
77
78 public boolean isDone() {
79 return false;
80 }
81
82 public boolean runWhilePaused() {
83 return false;
84 }
85
86
87
88
89
90}
91
92
93
94
95
96
97
98
99
100
static SectorAPI getSector()
Definition Global.java:59