Starsector API
Loading...
Searching...
No Matches
ShipGhost.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.ghosts.types;
2
3import java.util.Random;
4
5import com.fs.starfarer.api.Script;
6import com.fs.starfarer.api.campaign.CampaignFleetAPI;
7import com.fs.starfarer.api.campaign.CustomCampaignEntityAPI;
8import com.fs.starfarer.api.impl.campaign.DerelictShipEntityPlugin;
9import com.fs.starfarer.api.impl.campaign.DerelictShipEntityPlugin.DerelictShipData;
10import com.fs.starfarer.api.impl.campaign.ghosts.BaseSensorGhost;
11import com.fs.starfarer.api.impl.campaign.ghosts.GBCircle;
12import com.fs.starfarer.api.impl.campaign.ghosts.GBIRunScript;
13import com.fs.starfarer.api.impl.campaign.ghosts.GBIntercept;
14import com.fs.starfarer.api.impl.campaign.ghosts.GBStayInPlace;
15import com.fs.starfarer.api.impl.campaign.ghosts.SensorGhostManager;
16import com.fs.starfarer.api.impl.campaign.ids.Entities;
17import com.fs.starfarer.api.impl.campaign.ids.Factions;
18import com.fs.starfarer.api.impl.campaign.ids.Tags;
19import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator;
20import com.fs.starfarer.api.impl.campaign.procgen.themes.SalvageSpecialAssigner;
21import com.fs.starfarer.api.util.Misc;
22import com.fs.starfarer.api.util.WeightedRandomPicker;
23
24public class ShipGhost extends BaseSensorGhost implements Script {
25
26 protected Random random;
27
28 public ShipGhost(SensorGhostManager manager, CampaignFleetAPI fleet) {
29 super(manager, 0);
30
31 random = Misc.getRandom(manager.getRandom().nextLong(), 5);
32
33 int maxBurn = 9 + random.nextInt(3);;
35
36 if (!placeNearPlayer()) {
38 return;
39 }
40
41 setDespawnRange(-1000f);
42
43 float speed = Misc.getSpeedForBurnLevel(maxBurn);
44 float accelMult = speed / Misc.getSpeedForBurnLevel(20f);
45 if (accelMult < 0.1f) accelMult = 0.1f;
47
48 addBehavior(new GBIntercept(fleet, 5f + random.nextFloat() * 2f, maxBurn, 450f, true));
49 addBehavior(new GBCircle(fleet, 0.3f + random.nextFloat() * 0.3f, maxBurn / 2, 300f, random.nextBoolean() ? 1f : -1f));
50 addBehavior(new GBStayInPlace(0.1f));
51 addInterrupt(new GBIRunScript(0f, this, true));
52
53 }
54
55 public void run() {
56 WeightedRandomPicker<String> factions = SalvageSpecialAssigner.getNearbyFactions(
57 random, entity.getLocationInHyperspace(), 15f, 10f, 10f);
58 String faction = factions.pick();
60 if (params != null) {
61 params.durationDays = 15f + 15f * random.nextFloat();
62
63 CustomCampaignEntityAPI ship = (CustomCampaignEntityAPI) BaseThemeGenerator.addSalvageEntity(
64 random, entity.getContainingLocation(), Entities.WRECK, Factions.NEUTRAL, params);
65 SalvageSpecialAssigner.assignSpecials(ship, false, random);
66 ship.addTag(Tags.EXPIRES);
67 ship.setDiscoverable(false);
68 ship.setLocation(entity.getLocation().x, entity.getLocation().y);
69 ship.getVelocity().set(entity.getVelocity());
70 ship.getMemoryWithoutUpdate().set("$fromGhost", true);
71 }
72 }
73
74}
75
76
77
78
79
80
81
static DerelictShipData createRandom(String factionId, DerelictType type, Random random)
void addInterrupt(GhostBehaviorInterrupt interrupt)
ShipGhost(SensorGhostManager manager, CampaignFleetAPI fleet)