Starsector API
Loading...
Searching...
No Matches
ZigLeashAssignmentAI.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.world;
2
3import java.awt.Color;
4
5import org.lwjgl.util.vector.Vector2f;
6
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.FleetAssignment;
9import com.fs.starfarer.api.campaign.SectorEntityToken;
10import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI;
11import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
12import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseAssignmentAI;
13import com.fs.starfarer.api.util.IntervalUtil;
14import com.fs.starfarer.api.util.Misc;
15
16public class ZigLeashAssignmentAI extends BaseAssignmentAI {
17
18 protected float elapsed = 0f;
19 protected float dur = 30f + (float) Math.random() * 20f;
20 protected SectorEntityToken toGuard;
21
22 protected IntervalUtil moteSpawn = new IntervalUtil(0.01f, 0.1f);
23
24 public ZigLeashAssignmentAI(CampaignFleetAPI fleet, SectorEntityToken toGuard) {
25 super();
26 this.fleet = fleet;
27 this.toGuard = toGuard;
28
30 }
31
32 @Override
33 protected void giveInitialAssignments() {
34 pickNext();
35 }
36
37 @Override
38 protected void pickNext() {
39 fleet.addAssignment(FleetAssignment.ORBIT_AGGRESSIVE, toGuard, 100f);
40 }
41
42 @Override
43 public void advance(float amount) {
44 super.advance(amount);
45
46// if (fleet.getCurrentAssignment() == null || fleet.getCurrentAssignment().getAssignment() != FleetAssignment.HOLD) {
47// fleet.addAssignmentAtStart(FleetAssignment.HOLD, null, 1000f, null);
48// }
49
50 if (toGuard != null) {
51 float dist = Misc.getDistance(fleet.getLocation(), toGuard.getLocation());
52 if (dist > toGuard.getRadius() + fleet.getRadius() + 1500 &&
53 fleet.getAI().getCurrentAssignmentType() == FleetAssignment.ORBIT_AGGRESSIVE) {
54 fleet.addAssignmentAtStart(FleetAssignment.ORBIT_PASSIVE, toGuard, 1f, null);
55 CampaignFleetAIAPI ai = fleet.getAI();
56 if (ai instanceof ModularFleetAIAPI) {
57 // needed to interrupt an in-progress pursuit
58 ModularFleetAIAPI m = (ModularFleetAIAPI) ai;
59 m.getStrategicModule().getDoNotAttack().add(m.getTacticalModule().getTarget(), 1f);
60 m.getTacticalModule().setTarget(null);
61 }
62 }
63 }
64
65 float days = Misc.getDays(amount);
66 moteSpawn.advance(days * 1f);
67 if (moteSpawn.intervalElapsed()) {
68 spawnMote(fleet);
69 }
70 }
71
72
73 public static void spawnMote(SectorEntityToken from) {
74 if (!from.isInCurrentLocation()) return;
75
76 float dur = 1f + 2f * (float) Math.random();
77 dur *= 2f;
78 float size = 3f + (float) Math.random() * 5f;
79 size *= 3f;
80 Color color = new Color(255,100,255,175);
81
82 Vector2f loc = Misc.getPointWithinRadius(from.getLocation(), from.getRadius());
83 Vector2f vel = Misc.getUnitVectorAtDegreeAngle((float) Math.random() * 360f);
84 vel.scale(5f + (float) Math.random() * 10f);
85 Vector2f.add(vel, from.getVelocity(), vel);
86 Misc.addGlowyParticle(from.getContainingLocation(), loc, vel, size, 0.5f, dur, color);
87 }
88}
89
90
91
92
93
94
95
96
97
98
99
100
ZigLeashAssignmentAI(CampaignFleetAPI fleet, SectorEntityToken toGuard)