1package com.fs.starfarer.api.impl.campaign.rulecmd.salvage;
3import java.util.ArrayList;
6import java.util.Random;
8import org.lwjgl.util.vector.Vector2f;
10import com.fs.starfarer.api.Global;
11import com.fs.starfarer.api.campaign.CampaignFleetAPI;
12import com.fs.starfarer.api.campaign.CargoAPI;
13import com.fs.starfarer.api.campaign.CargoStackAPI;
14import com.fs.starfarer.api.campaign.CoreInteractionListener;
15import com.fs.starfarer.api.campaign.FactionAPI;
16import com.fs.starfarer.api.campaign.InteractionDialogAPI;
17import com.fs.starfarer.api.campaign.OptionPanelAPI;
18import com.fs.starfarer.api.campaign.PlanetAPI;
19import com.fs.starfarer.api.campaign.SectorEntityToken;
20import com.fs.starfarer.api.campaign.StarSystemAPI;
21import com.fs.starfarer.api.campaign.TextPanelAPI;
22import com.fs.starfarer.api.campaign.comm.IntelInfoPlugin;
23import com.fs.starfarer.api.campaign.rules.MemoryAPI;
24import com.fs.starfarer.api.impl.campaign.CargoPodsEntityPlugin;
25import com.fs.starfarer.api.impl.campaign.ids.Commodities;
26import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
27import com.fs.starfarer.api.impl.campaign.intel.misc.CargoPodsIntel;
28import com.fs.starfarer.api.impl.campaign.rulecmd.AddRemoveCommodity;
29import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin;
30import com.fs.starfarer.api.impl.campaign.rulecmd.FireAll;
31import com.fs.starfarer.api.util.Misc;
32import com.fs.starfarer.api.util.Misc.Token;
40 public static final String
TRAPPED =
"$trapped";
41 public static final String
LOCKED =
"$locked";
78 String command = params.get(0).getString(
memoryMap);
79 if (command ==
null)
return false;
96 if (command.equals(
"printDesc")) {
99 else if (command.equals(
"openCargo")) {
102 else if (command.equals(
"breakLocks")) {
105 else if (command.equals(
"destroy")) {
108 else if (command.equals(
"stabilize")) {
111 else if (command.equals(
"computeStabilizeData")) {
120 float stabilizeSupplies = Math.max((
int) total / 200, 2);
122 memory.
set(
"$stabilizeSupplies", (
int) stabilizeSupplies, 0f);
124 float stabilizeDays = 400;
125 memory.
set(
"$stabilizeDays", (
int) stabilizeDays, 0f);
133 float minDist = Float.MAX_VALUE;
136 potential.add(center);
140 dist -= curr.getRadius();
142 float maxDist = 400f;
144 maxDist = 100000000000f;
147 if (dist < maxDist && dist < minDist) {
159 float orbitDays = radius / (5f +
Misc.
random.nextFloat() * 20f);
166 if (makeDiscovered) {
189 text.
addParagraph(
"Your crew busy themselves attaching micro-thrusters and carefully " +
190 "sealing, balancing, and interconnecting the pods to make sure they remain in a stable orbit.");
198 memory.
set(
"$daysLeft", (
int) daysLeft, 0f);
224 vel.scale(5f + 10f * (
float) Math.random());
236 text.
addParagraph(
"Working with the cargo has destablized the orbit, but the pods should still be trackable for " + atLeastTime +
".");
251 Random random =
new Random();
254 random =
new Random(seed);
258 int qty = (int) stack.getSize();
259 for (
int i = 0; i < qty; i++) {
260 if (random.nextFloat() < fractionKeep) {
261 keep.
addItems(stack.getType(), stack.getData(), 1);
277 memory.
set(
"$daysLeft", (
int) daysLeft, 0f);
281 if (daysLeft >= 5000) {
282 text.
addParagraph(
"The cargo pods are in a stable orbit and are unlikely to drift apart any time soon.");
285 if (stabilized && daysLeft > 20) {
286 text.
addParagraph(
"The cargo pods are in a stabilized orbit, and your systems should be able to keep track of them for " + atLeastTime +
".");
290 text.
addParagraph(
"This deep in abyssal hyperspace, the cargo pods are likely to be lost forever as soon as they're out of sensor range.");
292 text.
addParagraph(
"The cargo pods are in an unstable orbit, but should not drift apart and be lost for " + atLeastTime +
".");
298 String crewText =
"Sensor readings are indicative of the presence of active life support and cryosleep equipment.";
304 text.
addParagraph(
"The pods are locked, but you are in posession of the keycode.");
307 "It's possible to force the locks, but this carries a risk to the cargo. " +
308 "Some pods are also fitted with a self-destruct mechanism, " +
309 "ensuring the total loss of all cargo in the event of a breach attempt.");
322 public void coreUIDismissed() {
static FactoryAPI getFactory()
static SectorAPI getSector()
void setElapsed(float elapsed)
void setExtraDays(float extraDays)
static final String SUPPLIES
static final String SALVAGE_SEED
SectorEntityToken getPods()
static void addCommodityLossText(String commodityId, int quantity, TextPanelAPI text)
static void updatePlayerMemoryQuantity(String commodityId)
static MemoryAPI getEntityMemory(Map< String, MemoryAPI > memoryMap)
static boolean fire(String ruleId, InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap, String params)
void computeStabilizeData()
static void stabilizeOrbit(SectorEntityToken entity, boolean makeDiscovered)
static final String TRAPPED
void pruneCargo(float fractionKeep)
Map< String, MemoryAPI > memoryMap
static SectorEntityToken findOrbitFocus(SectorEntityToken entity)
CampaignFleetAPI playerFleet
static final String LOCKED
static final float BREAK_KEEP_FRACTION
static final String CAN_UNLOCK
CargoPodsEntityPlugin plugin
InteractionDialogAPI dialog
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
static Vector2f getUnitVectorAtDegreeAngle(float degrees)
static boolean isSameCargo(CargoAPI baseOne, CargoAPI baseTwo)
static String getAtLeastStringForDays(int days)
static void fadeAndExpire(SectorEntityToken entity)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static float getAbyssalDepth(Vector2f loc)
static float getAngleInDegreesStrict(Vector2f v)
CargoAPI createCargo(boolean unlimitedStacks)
void removeSupplies(float quantity)
void addAll(CargoAPI other)
List< CargoStackAPI > getStacksCopy()
void addItems(CargoAPI.CargoItemType itemType, Object data, float quantity)
TextPanelAPI getTextPanel()
VisualPanelAPI getVisualPanel()
SectorEntityToken getInteractionTarget()
void setPromptText(String promptText)
OptionPanelAPI getOptionPanel()
List< SectorEntityToken > getJumpPoints()
List< PlanetAPI > getPlanets()
CampaignFleetAPI getPlayerFleet()
FactionAPI getPlayerFaction()
IntelManagerAPI getIntelManager()
LocationAPI getContainingLocation()
CustomCampaignEntityPlugin getCustomPlugin()
void setCircularOrbit(SectorEntityToken focus, float angle, float orbitRadius, float orbitDays)
void setSensorProfile(Float sensorProfile)
void setDiscoverable(Boolean discoverable)
void setOrbit(OrbitAPI orbit)
MemoryAPI getMemoryWithoutUpdate()
LabelAPI addParagraph(String text)
void showLoot(String title, CargoAPI otherCargo, boolean generatePods, CoreInteractionListener listener)
void addIntel(IntelInfoPlugin plugin)
List< IntelInfoPlugin > getIntel()
void addIntelToTextPanel(IntelInfoPlugin plugin, TextPanelAPI textPanel)
float getFloat(String key)
boolean contains(String key)
void set(String key, Object value)
boolean getBoolean(String key)