1package com.fs.starfarer.api.impl.campaign.ghosts;
4import java.util.Random;
6import org.lwjgl.util.vector.Vector2f;
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.CampaignTerrainAPI;
11import com.fs.starfarer.api.campaign.LocationAPI;
12import com.fs.starfarer.api.impl.campaign.terrain.HyperspaceTerrainPlugin;
13import com.fs.starfarer.api.impl.campaign.velfield.SlipstreamTerrainPlugin2;
14import com.fs.starfarer.api.util.Misc;
15import com.fs.starfarer.api.util.WeightedRandomPicker;
28 return getClass().getSimpleName();
32 return 10f + manager.
getRandom().nextFloat() * 10f;
36 public static Vector2f
findClearHyperspaceArea(Vector2f from,
float minRange,
float maxRange,
float radius, Random random) {
39 public static Vector2f
findDeepHyperspaceArea(Vector2f from,
float minRange,
float maxRange,
float radius, Random random) {
42 public static Vector2f
findHyperspaceArea(Vector2f from,
float minRange,
float maxRange,
float radius, Random random,
boolean clear,
float noSlipstreamRange) {
43 if (random ==
null) random = Misc.random;
45 CampaignTerrainAPI terrain = Misc.getHyperspaceTerrain();
46 if (terrain ==
null)
return null;
48 HyperspaceTerrainPlugin plugin = (HyperspaceTerrainPlugin) terrain.getPlugin();
50 int[][] tiles = plugin.getTiles();
51 float perTile = plugin.getTileSize();
52 int areaSize = (int) Math.ceil(radius / perTile);
58 float total = (areaSize + areaSize + 1) * (areaSize + areaSize + 1);
59 if (total < 1f) total = 1f;
60 for (
int k = 0; k < 20; k++) {
61 Vector2f test = Misc.getPointWithinRadiusUniform(from, minRange, maxRange, random);
62 int [] coords = plugin.getTile(test);
63 if (coords ==
null)
continue;
65 if (noSlipstreamRange > 0) {
66 if (Misc.isInsideSlipstream(test, noSlipstreamRange))
continue;
70 for (
int i = coords[0] - areaSize; i <= coords[0] + areaSize; i++) {
72 if (i >= tiles.length)
continue;
73 for (
int j = coords[1] - areaSize; j < coords[1] + areaSize; j++) {
75 if (j >= tiles[0].length)
continue;
77 int texIndex = tiles[i][j];
89 float score = count / total;
90 if (score >= 0.75f && score > bestScore) {
102 public static SlipstreamTerrainPlugin2
pickNearbySlipstream(
float radius, LocationAPI location, Random random) {
103 WeightedRandomPicker<SlipstreamTerrainPlugin2> picker =
new WeightedRandomPicker<SlipstreamTerrainPlugin2>(random);
105 Vector2f loc = pf.getLocation();
107 for (CampaignTerrainAPI ter : location.getTerrainCopy()) {
108 if (ter.getPlugin() instanceof SlipstreamTerrainPlugin2) {
109 SlipstreamTerrainPlugin2 plugin = (SlipstreamTerrainPlugin2) ter.getPlugin();
110 if (plugin.containsPoint(loc, radius)) {
112 if (plugin.isPreventedFromAffecting(pf)) {
115 picker.add(plugin, w);
119 return picker.pick();
static SectorAPI getSector()
float getFrequency(SensorGhostManager manager)
boolean canSpawnWhilePlayerOutsideAbyss()
static Vector2f findClearHyperspaceArea(Vector2f from, float minRange, float maxRange, float radius, Random random)
boolean canSpawnWhilePlayerInAbyss()
boolean canSpawnWhilePlayerInOrNearSlipstream()
List< SensorGhost > createGhost(SensorGhostManager manager)
float getTimeoutDaysOnSuccessfulCreate(SensorGhostManager manager)
static Vector2f findHyperspaceArea(Vector2f from, float minRange, float maxRange, float radius, Random random, boolean clear, float noSlipstreamRange)
static SlipstreamTerrainPlugin2 pickNearbySlipstream(float radius, LocationAPI location, Random random)
static SlipstreamTerrainPlugin2 pickNearbySlipstream(float radius, Random random)
static Vector2f findDeepHyperspaceArea(Vector2f from, float minRange, float maxRange, float radius, Random random)