Starsector API
Loading...
Searching...
No Matches
SensorBurstAbilityAI.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.abilities.ai;
2
3import com.fs.starfarer.api.campaign.CampaignFleetAPI;
4import com.fs.starfarer.api.campaign.SectorEntityToken.VisibilityLevel;
5import com.fs.starfarer.api.campaign.ai.FleetAIFlags;
6import com.fs.starfarer.api.campaign.econ.MarketAPI;
7import com.fs.starfarer.api.campaign.rules.MemoryAPI;
8import com.fs.starfarer.api.impl.campaign.events.BaseEventPlugin.MarketFilter;
9import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
10import com.fs.starfarer.api.util.IntervalUtil;
11import com.fs.starfarer.api.util.Misc;
12
13public class SensorBurstAbilityAI extends BaseAbilityAI {
14
15 private IntervalUtil interval = new IntervalUtil(0.05f, 0.15f);
16
17// public SensorBurstAbilityAI(AbilityPlugin ability, ModularFleetAIAPI ai) {
18// super(ability, ai);
19// }
20
21 public void advance(float days) {
22 interval.advance(days);
23 if (!interval.intervalElapsed()) return;
24
25// if (fleet.isInCurrentLocation()) {
26// ability.activate();
27// return;
28// }
29
31
33 mem.set(FleetAIFlags.HAS_SPEED_PENALTY, true, 0.2f);
34 mem.set(FleetAIFlags.HAS_VISION_BONUS, true, 0.2f);
36 return;
37 }
38
39 if (fleet.getOrbit() != null) {
40 return;
41 }
42
45
46 // being pursued: definitely not
47 if (fleeingFrom != null) {
48 return;
49 }
50
51 // pursuing an enemy, but can't see them anymore
52 if (pursueTarget != null) {
53 VisibilityLevel level = pursueTarget.getVisibilityLevelTo(fleet);
54 if (level != VisibilityLevel.NONE) return; // can already see them
55
56
57 float daysUnseen = mem.getFloat(FleetAIFlags.DAYS_TARGET_UNSEEN);
58 float prob = (daysUnseen - 1f) * 0.1f;
59 //prob /= EmergencyBurnAbilityAI.AI_FREQUENCY_MULT;
60
61 MarketAPI nearestMarket = Misc.findNearestLocalMarket(fleet, 1000000, new MarketFilter() {
62 public boolean acceptMarket(MarketAPI market) {
63 return true;
64 }
65 });
66 if (nearestMarket != null && nearestMarket.getFaction().isHostileTo(fleet.getFaction())) {
67 prob *= 0.25f;
68 }
69
70 if (Math.random() < prob) {
72 }
73
74 return;
75 }
76
77 boolean trader = mem.getBoolean(MemFlags.MEMORY_KEY_TRADE_FLEET);
78 boolean smuggler = mem.getBoolean(MemFlags.MEMORY_KEY_SMUGGLER);
79 if (trader || smuggler) {
80 return;
81 }
82
83 // not pursuing or being pursued, use now and again; more often if nearest market is friendly
84 MarketAPI nearestMarket = Misc.findNearestLocalMarket(fleet, 1000000, new MarketFilter() {
85 public boolean acceptMarket(MarketAPI market) {
86 return true;
87 }
88 });
89 float prob = 0.01f;
90 if (nearestMarket != null && nearestMarket.getFaction().isHostileTo(fleet.getFaction())) {
91 prob *= 0.25f;
92 }
93 if (Math.random() < prob) {
95 }
96 }
97}
98
99
100
101
102
103
static MarketAPI findNearestLocalMarket(SectorEntityToken token, float maxDist, MarketFilter filter)
Definition Misc.java:1146
boolean isHostileTo(FactionAPI other)
VisibilityLevel getVisibilityLevelTo(SectorEntityToken other)
void set(String key, Object value)
CampaignFleetAPI getFleet(String key)