Starsector API
Loading...
Searching...
No Matches
LeashScript.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign;
2
3import org.lwjgl.util.vector.Vector2f;
4
5import com.fs.starfarer.api.EveryFrameScript;
6import com.fs.starfarer.api.Script;
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.SectorEntityToken;
9import com.fs.starfarer.api.util.Misc;
10
11public class LeashScript implements EveryFrameScript {
12
13 private CampaignFleetAPI fleet;
14 private float range;
15 private Script onBroken;
16
17 private SectorEntityToken anchor;
18 private Vector2f offset;
19
20 public LeashScript(CampaignFleetAPI fleet, float range, SectorEntityToken anchor, Vector2f offset, Script onBroken) {
21 this.fleet = fleet;
22 this.range = range;
23 this.onBroken = onBroken;
24 this.anchor = anchor;
25 this.offset = offset;
26 }
27
28 private boolean broken = false;
29 public void advance(float amount) {
30 if (fleet.getContainingLocation() != anchor.getContainingLocation()) {
31 broken = true;
32 onBroken.run();
33 }
34 if (broken) return;
35
36
37 Vector2f dest = new Vector2f(anchor.getLocation().x + offset.x, anchor.getLocation().y + offset.y);
38 float distToDest = Misc.getDistance(dest, fleet.getLocation());
39 fleet.setMoveDestination(dest.x, dest.y);
40 if (distToDest < 2) {
41 fleet.setLocation(dest.x, dest.y);
42 }
43
44 float dist = Misc.getDistance(anchor.getLocation(), fleet.getLocation());
45 if (dist > range + anchor.getRadius() + fleet.getRadius()) {
46 broken = true;
47 onBroken.run();
48 }
49
50 }
51
52 public boolean isDone() {
53 return broken;
54 }
55
56 public boolean runWhilePaused() {
57 return false;
58 }
59}
60
61
62
63
64
LeashScript(CampaignFleetAPI fleet, float range, SectorEntityToken anchor, Vector2f offset, Script onBroken)