37 super.advanceInCombat(ship, amount);
45 data =
new MinefieldData();
50 if (data.source != ship)
return;
51 if (!ship.isAlive())
return;
54 for (IncomingMine inc :
new ArrayList<IncomingMine>(data.incoming)) {
58 data.incoming.remove(inc);
62 data.tracker.advance(amount);
63 if (!data.tracker.intervalElapsed())
return;
65 WeightedRandomPicker<IncomingMine> picker =
new WeightedRandomPicker<IncomingMine>();
67 for (ShipAPI enemy : engine.getShips()) {
68 if (enemy == ship)
continue;
69 if (enemy.isHulk())
continue;
70 if (enemy.getOwner() == ship.getOwner())
continue;
71 if (enemy.isFighter())
continue;
72 if (enemy.isDrone())
continue;
73 if (enemy.isStation())
continue;
74 if (enemy.isStationModule())
continue;
75 if (enemy.getTravelDrive() !=
null && enemy.getTravelDrive().isActive())
continue;
77 if ((
float) Math.random() > 0.25f)
continue;
79 Vector2f mineLoc = Misc.getPointAtRadius(enemy.getLocation(),
80 enemy.getCollisionRadius() + 400f + 200f * (float) Math.random());
81 float minOk = 400f + enemy.getCollisionRadius();
84 IncomingMine inc =
new IncomingMine();
85 inc.delay = (float) Math.random() * 1.5f;
87 inc.mineLoc = mineLoc;
92 int numToSpawn = Math.max(1, Math.min(
new Random().nextInt(6) + 5, picker.getItems().size()));
94 for (
int i = 0; i < numToSpawn && !picker.isEmpty(); i++) {
95 IncomingMine inc = picker.pickAndRemove();
96 data.incoming.add(inc);
102 public void spawnMine(ShipAPI source, Vector2f mineLoc, ShipAPI target) {
103 float mineDir = Misc.getAngleInDegrees(mineLoc, target.getLocation());
105 Vector2f currLoc = Misc.getPointAtRadius(mineLoc, 50f + (
float) Math.random() * 50f);
106 MissileAPI mine = (MissileAPI) engine.spawnProjectile(source,
null,
110 if (source !=
null) {
112 source, WeaponType.MISSILE,
false, mine.getDamage());
117 mine.setFlightTime((
float) Math.random());
118 mine.fadeOutThenIn(1f);