Starsector API
Loading...
Searching...
No Matches
RemnantGhost.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.ghosts.types;
2
3import java.util.Random;
4
5import org.lwjgl.util.vector.Vector2f;
6
7import com.fs.starfarer.api.Script;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.impl.campaign.fleets.AutoDespawnScript;
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.Factions;
17import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
18import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission;
19import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality;
20import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize;
21import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerNum;
22import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerQuality;
23import com.fs.starfarer.api.util.Misc;
24
25public class RemnantGhost extends BaseSensorGhost implements Script {
26
27 protected Random random;
28
29 public RemnantGhost(SensorGhostManager manager, CampaignFleetAPI fleet) {
30 super(manager, 0);
31
32 random = Misc.getRandom(manager.getRandom().nextLong(), 5);
33
34 int maxBurn = 9 + random.nextInt(3);;
36
37 if (!placeNearPlayer()) {
39 return;
40 }
41
42 setDespawnRange(-1000f);
43
44 float speed = Misc.getSpeedForBurnLevel(maxBurn);
45 float accelMult = speed / Misc.getSpeedForBurnLevel(20f);
46 if (accelMult < 0.1f) accelMult = 0.1f;
48
49 addBehavior(new GBIntercept(fleet, 5f + random.nextFloat() * 2f, maxBurn, 450f, true));
50 addBehavior(new GBCircle(fleet, 0.7f + random.nextFloat() * 0.5f, maxBurn / 2, 300f, random.nextBoolean() ? 1f : -1f));
51 addBehavior(new GBStayInPlace(0.1f));
52 addInterrupt(new GBIRunScript(0f, this, true));
53
54 }
55
56 public void run() {
57 FleetCreatorMission m = new FleetCreatorMission(random);
58 m.beginFleet();
59
60 Vector2f loc = entity.getLocationInHyperspace();
61
62 FleetSize size = FleetSize.MEDIUM;
63 FleetQuality quality = FleetQuality.VERY_LOW;
64 OfficerQuality oQuality = OfficerQuality.AI_MIXED;
65 OfficerNum oNum = OfficerNum.DEFAULT;
66 String type = FleetTypes.PATROL_MEDIUM;
67 float r = random.nextFloat();
68 if (r < 0.25f) {
69 size = FleetSize.LARGE;
70 } else if (r < 0.5f) {
71 size = FleetSize.LARGER;
72 }
73
74 m.triggerCreateFleet(size, quality, Factions.REMNANTS, type, loc);
75 m.getPreviousCreateFleetAction().fQualityMod = -10f;
76 m.triggerSetFleetOfficers(oNum, oQuality);
77 m.triggerSetRemnantConfigDormant();
78
79 CampaignFleetAPI fleet = m.createFleet();
80 if (fleet != null) {
81 setVel(new Vector2f(0, 0));
82 entity.getContainingLocation().addEntity(fleet);
83 fleet.setLocation(entity.getLocation().x, entity.getLocation().y);
84 fleet.addScript(new AutoDespawnScript(fleet));
85 fleet.getMemoryWithoutUpdate().set("$fromGhost", true);
86 }
87 }
88
89}
90
91
92
93
94
95
96
void addInterrupt(GhostBehaviorInterrupt interrupt)
RemnantGhost(SensorGhostManager manager, CampaignFleetAPI fleet)