Starsector API
Loading...
Searching...
No Matches
ShroudedEjectaAI.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.combat.dweller;
2
3import org.lwjgl.util.vector.Vector2f;
4
5import com.fs.starfarer.api.Global;
6import com.fs.starfarer.api.combat.CombatEngineAPI;
7import com.fs.starfarer.api.combat.DamageType;
8import com.fs.starfarer.api.combat.ShipAIConfig;
9import com.fs.starfarer.api.combat.ShipAIPlugin;
10import com.fs.starfarer.api.combat.ShipAPI;
11import com.fs.starfarer.api.combat.ShipCommand;
12import com.fs.starfarer.api.combat.ShipwideAIFlags;
13import com.fs.starfarer.api.util.IntervalUtil;
14import com.fs.starfarer.api.util.Misc;
15
16public class ShroudedEjectaAI implements ShipAIPlugin {
17
18 public static class FlockingData {
19 public Vector2f loc;
20 public Vector2f vel;
21 public float minA;
22 public float maxA;
23 public float minR;
24 public float maxR;
25 public float repelAtAngleDist;
26 public float minC;
27 public float maxC;
28 public float attractWeight;
29 public float repelWeight;
30 public float cohesionWeight;
31 public float facing;
32 }
33
34
38 public static float HULL_FRACTION_LOST_PER_SECOND = 0.0667f;
39
41 protected ShipAPI ship;
42 protected boolean exploded = false;
43 protected float turnDir = 1f;
44
45 protected IntervalUtil updateInterval = new IntervalUtil(0.5f, 1.5f);
46
48 this.ship = ship;
49
51
53 }
54
55 protected void doInitialSetup() {
56 turnDir = Math.signum(0.5f - (float) Math.random() * 0.5f);
57 if (turnDir == 0) turnDir = 1f;
58 }
59
60 @Override
61 public void advance(float amount) {
62 //if (true) return;
63
64 updateInterval.advance(amount);
65 if (updateInterval.intervalElapsed()) {
66 }
67
69 float damage = ship.getMaxHitpoints() * HULL_FRACTION_LOST_PER_SECOND * 1f * amount;
71 if (ship.getHitpoints() <= 0f) {
72 engine.applyDamage(ship, ship.getLocation(), 10000f, DamageType.ENERGY, 0f, true, false, ship, false);
73 }
74
76 }
77
78 protected void giveMovementCommands() {
80
81 //ship.giveCommand(ShipCommand.DECELERATE, null, 0);
82// if (turnDir < 0f) {
83// ship.giveCommand(ShipCommand.TURN_RIGHT, null, 0);
84// } else {
85// ship.giveCommand(ShipCommand.TURN_LEFT, null, 0);
86// }
87
88 if (ship.getVelocity().length() > ship.getMaxSpeedWithoutBoost() * 0.1f) {
90 }
91
92 float heading = Misc.getAngleInDegrees(ship.getVelocity());
93 //engine.headInDirectionWithoutTurning(ship, desiredHeading, 10000);
94 }
95
96
97 @Override
99 return flags;
100 }
101
102
103
104 public void setDoNotFireDelay(float amount) {}
106 public boolean needsRefit() { return false; }
107 public void cancelCurrentManeuver() {}
108 public ShipAIConfig getConfig() { return null; }
109}
110
111
112
113
114
115
116
117
118
119
120
121
122
static CombatEngineAPI getCombatEngine()
Definition Global.java:69
static float getAngleInDegrees(Vector2f v)
Definition Misc.java:1126
void applyDamage(CombatEntityAPI entity, Vector2f point, float damageAmount, DamageType damageType, float empAmount, boolean bypassShields, boolean dealsSoftFlux, Object source, boolean playSound)
void giveCommand(ShipCommand command, Object param, int groupNumber)