1package com.fs.starfarer.api.impl.campaign.terrain;
3import java.util.Random;
5import com.fs.starfarer.api.Global;
6import com.fs.starfarer.api.campaign.AsteroidAPI;
7import com.fs.starfarer.api.campaign.LocationAPI;
8import com.fs.starfarer.api.campaign.SectorEntityToken;
9import com.fs.starfarer.api.graphics.SpriteAPI;
10import com.fs.starfarer.api.util.Misc;
14 public static class AsteroidFieldParams
extends RingParams {
15 public float minRadius;
16 public float maxRadius;
17 public int minAsteroids;
18 public int maxAsteroids;
21 public int numAsteroids;
22 public AsteroidFieldParams(
float minRadius,
float maxRadius,
23 int minAsteroids,
int maxAsteroids,
float minSize,
24 float maxSize, String name) {
25 super(maxRadius, maxRadius/2f,
null, name);
26 this.minRadius = minRadius;
27 this.maxRadius = maxRadius;
28 this.minAsteroids = minAsteroids;
29 this.maxAsteroids = maxAsteroids;
30 this.minSize = minSize;
31 this.maxSize = maxSize;
39 params = (AsteroidFieldParams) param;
42 name =
"Asteroid Field";
44 params.numAsteroids =
params.minAsteroids;
46 params.numAsteroids +=
new Random().nextInt(
params.maxAsteroids -
params.minAsteroids);
74 if (!(
params instanceof AsteroidFieldParams))
return;
78 float fieldRadius = params.minRadius + (params.maxRadius -
params.minRadius) * rand.nextFloat();
79 params.bandWidthInEngine = fieldRadius;
80 params.middleRadius = fieldRadius / 2f;
84 if (location ==
null)
return;
85 for (
int i = 0; i <
params.numAsteroids; i++) {
86 float size = params.minSize + (params.maxSize -
params.minSize) * rand.nextFloat();
88 asteroid.
setFacing(rand.nextFloat() * 360f);
90 float r = rand.nextFloat();
93 float currRadius = fieldRadius * r;
95 float minOrbitDays = Math.max(1f, currRadius * 0.05f);
96 float maxOrbitDays = Math.max(2f, currRadius * 2f * 0.05f);
97 float orbitDays = minOrbitDays + rand.nextFloat() * (maxOrbitDays - minOrbitDays);
99 float angle = rand.nextFloat() * 360f;
110 super.advance(amount);
114 return "Asteroid Field";
static SectorAPI getSector()
boolean needToCreateAsteroids
void renderOnMap(float factor, float alphaMult)
void init(String terrainId, SectorEntityToken entity, Object param)
void reportAsteroidPersisted(SectorEntityToken asteroid)
void advance(float amount)
void regenerateAsteroids()
String getNameForTooltip()
void createAsteroidField()
AsteroidFieldParams params
static void setAsteroidSource(SectorEntityToken asteroid, AsteroidSource source)
static AsteroidSource getAsteroidSource(SectorEntityToken asteroid)
AsteroidAPI addAsteroid(float radius)
CampaignClockAPI getClock()
LocationAPI getContainingLocation()
void setCircularOrbit(SectorEntityToken focus, float angle, float orbitRadius, float orbitDays)
void setFacing(float facing)