Starsector API
Loading...
Searching...
No Matches
SlipstreamVisibilityManager.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.velfield;
2
3import java.util.Iterator;
4import java.util.List;
5
6import org.lwjgl.util.vector.Vector2f;
7
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.CampaignTerrainAPI;
10import com.fs.starfarer.api.campaign.CoreUITabId;
11import com.fs.starfarer.api.campaign.econ.MarketAPI;
12import com.fs.starfarer.api.campaign.listeners.CoreUITabListener;
13import com.fs.starfarer.api.impl.campaign.ids.Stats;
14import com.fs.starfarer.api.impl.campaign.intel.events.ht.HyperspaceTopographyEventIntel;
15import com.fs.starfarer.api.impl.campaign.velfield.SlipstreamManager.CustomStreamRevealer;
16import com.fs.starfarer.api.impl.campaign.velfield.SlipstreamTerrainPlugin2.SlipstreamSegment;
17import com.fs.starfarer.api.util.CollisionGridUtil;
18import com.fs.starfarer.api.util.Misc;
19
20public class SlipstreamVisibilityManager implements CoreUITabListener {
21
22// public static String KEY = "$svm_ref";
23//
24// protected transient CollisionGridUtil grid;
25// protected IntervalUtil interval = new IntervalUtil(1f, 2f);
26// protected Random random = new Random();
27//
28// public static SlipstreamVisibilityManager get() {
29// return (SlipstreamVisibilityManager) Global.getSector().getMemoryWithoutUpdate().get(KEY);
30// }
31//
32// public SlipstreamVisibilityManager() {
33// Global.getSector().getMemoryWithoutUpdate().set(KEY, this);
34// }
35//
36// protected Object readResolve() {
37// return this;
38// }
39
40 public void reportAboutToOpenCoreTab(CoreUITabId tab, Object param) {
41 if (tab == CoreUITabId.MAP) {
42
43 HyperspaceTopographyEventIntel intel = HyperspaceTopographyEventIntel.get();
44 if (intel != null) {
45 intel.updateMarketDetectionRanges();
46 }
47 //System.out.println("OPENING MAP");
48 //for (int i = 0; i < 100; i++) {
50 //}
51 }
52 }
53
54 public static void updateSlipstreamVisibility(Vector2f extraPoint, float extraRangeLY) {
55 float sw = Global.getSettings().getFloat("sectorWidth");
56 float sh = Global.getSettings().getFloat("sectorHeight");
57 float minCellSize = 12000f;
58 float cellSize = Math.max(minCellSize, sw * 0.05f);
59
60 CollisionGridUtil grid = new CollisionGridUtil(-sw/2f, sw/2f, -sh/2f, sh/2f, cellSize);
61
62 for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) {
63 if (market.isHidden()) continue;
64 if (market.getContainingLocation() == null) continue;
65 if (!market.isPlayerOwned()) continue;
66
67 float range = market.getStats().getDynamic().getMod(Stats.SLIPSTREAM_REVEAL_RANGE_LY_MOD).computeEffective(0f);
68 range *= Misc.getUnitsPerLightYear();
69 if (range <= 0) continue;
70
71// Industry spaceport = market.getIndustry(Industries.SPACEPORT);
72// if (spaceport == null || !spaceport.isFunctional()) continue;
73
74 Vector2f loc = market.getLocationInHyperspace();
75 CustomStreamRevealer revealer = new CustomStreamRevealer(loc, range);
76 grid.addObject(revealer, loc, range * 2f, range * 2f);
77 }
78
79 if (extraPoint != null && extraRangeLY > 0) {
80 float range = extraRangeLY * Misc.getUnitsPerLightYear();
81 CustomStreamRevealer revealer = new CustomStreamRevealer(extraPoint, range);
82 grid.addObject(revealer, extraPoint, range * 2f, range * 2f);
83 }
84
85 //System.out.println("BEGIN");
86 float maxDist = 0f;
87 List<CampaignTerrainAPI> terrainList = Global.getSector().getHyperspace().getTerrainCopy();
88 for (CampaignTerrainAPI terrain : terrainList) {
89 if (terrain.getPlugin() instanceof SlipstreamTerrainPlugin2) {
90 //System.out.println("Processing: " + terrain.getId());
91 SlipstreamTerrainPlugin2 stream = (SlipstreamTerrainPlugin2) terrain.getPlugin();
92 if (stream.isDynamic()) continue;
93
94 for (SlipstreamSegment curr : stream.getSegments()) {
95 if (curr.discovered) continue;
96 Iterator<Object> iter = grid.getCheckIterator(curr.loc, curr.width / 2f, curr.width / 2f);
97 //Iterator<Object> iter = grid.getCheckIterator(curr.loc, 100f, 100f);
98 while (iter.hasNext()) {
99 Object obj = iter.next();
100 if (obj instanceof CustomStreamRevealer) {
101 CustomStreamRevealer rev = (CustomStreamRevealer) obj;
102 Vector2f loc = rev.loc;
103 float radius = rev.radius;
104
105 float dist = Misc.getDistance(loc, curr.loc);
106 if (dist > maxDist) {
107 maxDist = dist;
108// if (dist >= 32500) {
109// System.out.println("Rev loc: " + rev.loc);
110// //grid.getCheckIterator(curr.loc, 100f, 100f);
111// }
112 }
113 if (dist < radius) {
114 curr.discovered = true;
115 break;
116 }
117 }
118 }
119 }
120 //break;
121 }
122 }
123 }
124
125
126}
static SettingsAPI getSettings()
Definition Global.java:51
static SectorAPI getSector()
Definition Global.java:59
static void updateSlipstreamVisibility(Vector2f extraPoint, float extraRangeLY)