Starsector API
Loading...
Searching...
No Matches
LeviathanGhost.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.ghosts.types;
2
3import org.lwjgl.util.vector.Vector2f;
4
5import com.fs.starfarer.api.Global;
6import com.fs.starfarer.api.campaign.CampaignFleetAPI;
7import com.fs.starfarer.api.impl.campaign.ghosts.BaseSensorGhost;
8import com.fs.starfarer.api.impl.campaign.ghosts.GBGoInDirectionWithWobble;
9import com.fs.starfarer.api.impl.campaign.ghosts.GBIGenerateSlipstream;
10import com.fs.starfarer.api.impl.campaign.ghosts.SensorGhostManager;
11import com.fs.starfarer.api.impl.campaign.ids.Tags;
12import com.fs.starfarer.api.util.Misc;
13
14public class LeviathanGhost extends BaseSensorGhost {
15
17 super(manager, 0);
18
19 CampaignFleetAPI pf = Global.getSector().getPlayerFleet();
20
21 float size = genFloat(400f, 500f);
23 setDespawnRange(-200f);
24 entity.addTag(Tags.UNAFFECTED_BY_SLIPSTREAM);
25
26 float dirToCore = Misc.getAngleInDegrees(pf.getLocation());
27 float travelDirMin = dirToCore + 90f - 20f;
28 float travelDirMax = dirToCore + 90f + 20f;
29 float travelDir = travelDirMin + (travelDirMax - travelDirMin) * getRandom().nextFloat();
30 travelDir = Misc.normalizeAngle(travelDir);
31
32 float spawnDist = genFloat(6000, 8000);
33 float spawnAngle = (travelDir + 30f - 60f * getRandom().nextFloat()) + 180f;
34
35 if (getRandom().nextBoolean()) {
36 travelDir += 180f;
37 spawnAngle += 180f;
38 }
39
40 Vector2f loc = Misc.getUnitVectorAtDegreeAngle(spawnAngle);
41 loc.scale(spawnDist);
42 Vector2f.add(loc, pf.getLocation(), loc);
43 setLoc(loc);
44
45 int burnLevel = 25 + burnMod;
46
47 float speed = Misc.getSpeedForBurnLevel(burnLevel);
48 Vector2f vel = Misc.getUnitVectorAtDegreeAngle(travelDir);
49 vel.scale(speed);
50 setVel(vel);
51
52 float travelDur = genFloat(15f, 20f);
53 float streamDur = travelDur - (1f + getRandom().nextFloat());
54
55 setAccelMult(0.1f);
56 //addBehavior(new GBGoInDirection(genDelay(20f), travelDir, burnLevel));
57 //addBehavior(new GBGoInDirection(1000f, travelDir, burnLevel));
58 addBehavior(new GBGoInDirectionWithWobble(travelDur, travelDir,
59 0.01f + 0.04f * manager.getRandom().nextFloat(),
60 10f + 20f * manager.getRandom().nextFloat(), burnLevel));
61 addInterrupt(new GBIGenerateSlipstream(size, size * 1.2f, burnLevel - 5, 30f, 20, streamDur));
62
63
64
65// if (!placeNearPlayer()) {
66// setCreationFailed();
67// return;
68// }
69// addBehavior(new GBStayInPlace(10f));
70// addInterrupt(new GBITooClose(0f, pf, 500f));
71// addBehavior(new GBSlipstreamPath(genDelay(5f), pf, burnLevel, true));
72// addInterrupt(new GBIGenerateSlipstream(size, burnLevel - 5, 50f, 20));
73
74 }
75}
76
77
78
79
80
static SectorAPI getSector()
Definition Global.java:59
void addInterrupt(GhostBehaviorInterrupt interrupt)
LeviathanGhost(SensorGhostManager manager, int burnMod)