1package com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special;
3import org.lwjgl.util.vector.Vector2f;
5import com.fs.starfarer.api.Global;
6import com.fs.starfarer.api.campaign.CampaignFleetAPI;
7import com.fs.starfarer.api.campaign.FleetAssignment;
8import com.fs.starfarer.api.campaign.InteractionDialogAPI;
9import com.fs.starfarer.api.campaign.PlanetAPI;
10import com.fs.starfarer.api.campaign.SectorEntityToken;
11import com.fs.starfarer.api.campaign.ai.FleetAIFlags;
12import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
13import com.fs.starfarer.api.fleet.FleetMemberAPI;
14import com.fs.starfarer.api.impl.campaign.fleets.FleetFactoryV3;
15import com.fs.starfarer.api.impl.campaign.fleets.FleetParamsV3;
16import com.fs.starfarer.api.impl.campaign.ids.Factions;
17import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
18import com.fs.starfarer.api.impl.campaign.procgen.themes.RemnantSeededFleetManager;
19import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.SalvageSpecialInteraction.SalvageSpecialData;
20import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.SalvageSpecialInteraction.SalvageSpecialPlugin;
21import com.fs.starfarer.api.util.Misc;
26 public static class TransmitterTrapSpecialData
implements SalvageSpecialData {
27 public float prob = 0.5f;
29 public String fleetId;
31 public String nearbyFleetFaction =
null;
32 public Boolean useClosestFleetInRange =
null;
33 public Boolean useAllFleetsInRange =
null;
37 public float minRange = 2500;
38 public float maxRange = 5000;
40 public TransmitterTrapSpecialData() {
47 public TransmitterTrapSpecialData(
float prob,
FleetParamsV3 params) {
52 public SalvageSpecialPlugin createSpecialPlugin() {
57 private TransmitterTrapSpecialData data;
65 super.init(
dialog, specialData);
67 data = (TransmitterTrapSpecialData) specialData;
72 private void initEntityLocation() {
74 if (
random.nextFloat() > data.prob) {
76 if (
random.nextFloat() > 0.5f) {
77 addText(
"Your salvage crews discover a transmitter set to send a signal when " +
78 "tripped by an alarm system, but it doesn't appear to be functional. " +
79 "Closer examination indicates it was probably set many cycles ago.");
81 addText(
"Your salvage crews discover a transmitter set to send a signal when " +
82 "tripped by an alarm system. The alarm went off as intended, but the transmitter " +
83 "was fried by a power surge before it could do its job.");
93 addText(
"As your salvage crews begin their work, a transmitter hidden somewhere planetside " +
94 "sends out an encrypted, broadwave signal. Whatever destination it's meant for, " +
95 "it has to be nearby.");
97 addText(
"As your salvage crews begin their work, a transmitter inside the $shortName " +
98 "sends out an encrypted, broadwave signal. Whatever destination it's meant for, " +
99 "it has to be nearby.");
111 if (data ==
null)
return;
112 if (
entity ==
null)
return;
114 if (data.fleetId !=
null) {
119 boolean makeAggressive =
false;
120 if (flagship !=
null) {
128 if (data.useAllFleetsInRange !=
null && data.useAllFleetsInRange) {
129 boolean foundSomeFleets =
false;
131 if (data.nearbyFleetFaction !=
null &&
132 !data.nearbyFleetFaction.equals(fleet.getFaction().getId())) {
136 if (fleet.isStationMode())
continue;
141 if (dist < data.maxRange) {
143 boolean makeAggressive =
false;
144 if (flagship !=
null) {
148 foundSomeFleets =
true;
151 if (foundSomeFleets)
return;
154 if (data.useClosestFleetInRange !=
null && data.useClosestFleetInRange) {
156 float minDist = Float.MAX_VALUE;
158 if (data.nearbyFleetFaction !=
null &&
159 !data.nearbyFleetFaction.equals(fleet.getFaction().getId())) {
163 if (fleet.isStationMode())
continue;
168 if (dist < data.maxRange && dist < minDist) {
173 if (closest !=
null) {
175 boolean makeAggressive =
false;
176 if (flagship !=
null) {
184 if (data.params !=
null) {
186 if (fleet ==
null || fleet.
isEmpty())
return;
196 float range = data.minRange +
random.nextFloat() * (data.maxRange - data.minRange);
203 boolean makeAggressive =
false;
204 if (flagship !=
null) {
226 if (fleet.
getAI() ==
null) {
231 if (makeAggressive) {
243 if (makeLowRepImpact) {
257 super.optionSelected(optionText, optionData);
261 public static void main(String[] args) {
263 System.out.println(b ==
true);
static FactoryAPI getFactory()
static SectorAPI getSector()
static final String PLACE_TO_LOOK_FOR_TARGET
static CampaignFleetAPI createFleet(FleetParamsV3 params)
static final String REMNANTS
static final String MEMORY_KEY_MAKE_HOSTILE
static final String MEMORY_KEY_MAKE_ALLOW_DISENGAGE
static final String MEMORY_KEY_MAKE_AGGRESSIVE
static final String MEMORY_KEY_PIRATE
static final String MEMORY_KEY_TRADE_FLEET
static final String MEMORY_KEY_MAKE_AGGRESSIVE_ONE_BATTLE_ONLY
static void initRemnantFleetProperties(Random random, CampaignFleetAPI fleet, boolean dormant)
void setDone(boolean done)
InteractionDialogAPI dialog
void addText(String format)
void setShowAgain(boolean showAgain)
void setEndWithContinue(boolean endWithContinue)
CampaignFleetAPI playerFleet
void transmitterActivated()
static void main(String[] args)
static void makeFleetInterceptPlayer(CampaignFleetAPI fleet, boolean makeAggressive, boolean makeLowRepImpact, float interceptDays)
static void makeFleetInterceptPlayer(CampaignFleetAPI fleet, boolean makeAggressive, boolean makeLowRepImpact, boolean makeHostile, float interceptDays)
void init(InteractionDialogAPI dialog, Object specialData)
void optionSelected(String optionText, Object optionData)
static boolean isAutomated(MutableShipStatsAPI stats)
static void giveStandardReturnToSourceAssignments(CampaignFleetAPI fleet)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static Vector2f getPointAtRadius(Vector2f from, float r)
static void makeNoRepImpact(CampaignFleetAPI fleet, String reason)
static void makeLowRepImpact(CampaignFleetAPI fleet, String reason)
CampaignFleetAIAPI createFleetAI(CampaignFleetAPI fleet)
CampaignFleetAIAPI getAI()
FleetMemberAPI getFlagship()
void setAI(CampaignFleetAIAPI campaignFleetAI)
void setLocation(float x, float y)
void addAssignmentAtStart(FleetAssignment assignment, SectorEntityToken target, float maxDurationInDays, String actionText, Script onCompletion)
void addEntity(SectorEntityToken entity)
List< CampaignFleetAPI > getFleets()
CampaignFleetAPI getPlayerFleet()
SectorEntityToken getEntityById(String id)
LocationAPI getContainingLocation()
MemoryAPI getMemoryWithoutUpdate()
void setTransponderOn(boolean transponderOn)
float getExpire(String key)
void set(String key, Object value)
ShipVariantAPI getVariant()