Starsector API
Loading...
Searching...
No Matches
MapParams.java
Go to the documentation of this file.
1package com.fs.starfarer.api.ui;
2
3import java.awt.Color;
4import java.util.ArrayList;
5import java.util.HashSet;
6import java.util.List;
7import java.util.Set;
8
9import org.lwjgl.util.vector.Vector2f;
10
11import com.fs.starfarer.api.Global;
12import com.fs.starfarer.api.campaign.CampaignFleetAPI;
13import com.fs.starfarer.api.campaign.LocationAPI;
14import com.fs.starfarer.api.campaign.SectorEntityToken;
15import com.fs.starfarer.api.campaign.StarSystemAPI;
16import com.fs.starfarer.api.campaign.comm.IntelInfoPlugin;
17import com.fs.starfarer.api.campaign.comm.IntelInfoPlugin.ArrowData;
18import com.fs.starfarer.api.campaign.econ.MarketAPI;
19import com.fs.starfarer.api.impl.campaign.procgen.Constellation;
20import com.fs.starfarer.api.util.Misc;
21
22public class MapParams {
23 public static final float GRID_SIZE_MAP_UNITS = 2000;
24 public static final float GRID_SIZE_PIXELS = 75f;
25
26
27 public SectorEntityToken entityToShow;
28
30
31 public boolean smallConstellations = false;
32 public List<ArrowData> arrows = new ArrayList<IntelInfoPlugin.ArrowData>();
33
34 public boolean showFilter = true;
35 public boolean smallFilter = false;
36 public boolean showTabs = true;
37
38 public float starSelectionRadiusMult = 1f;
39 public float starAlphaMult = 1f;
40 public boolean useFullAlphaForShownSystems = false;
41
42 public Color borderColor = null;
43 public boolean renderTopBorder = true;
44
45 public float maxZoomMapSizePadding = 4000f;
46 public float zoomLevel = 0f;
47 public LocationAPI location = null;
48 public Set<StarSystemAPI> showSystems = null;
49 public Set<Constellation> showConsellations = null;
50 public Vector2f centerOn = null;
51
52 public List<MarkerData> markers = null;
53 public boolean withLayInCourse = false;
54 public boolean skipCurrLocMarkerRendering = false;
55
56
57 public MapParams() {
58 filterData = new MapFilterData(false);
59 showFilter = false;
60 smallFilter = true;
61 showTabs = false;
62 filterData.starscape = true;
63 filterData.names = true;
64
65 //showSystems = new HashSet<StarSystemAPI>();
66
68 starAlphaMult = 0.5f;
69
70 borderColor = Misc.getDarkPlayerColor();
71 renderTopBorder = true;
72
73 location = Global.getSector().getHyperspace();
74 //skipCurrLocMarkerRendering = true;
75
76 //markers = new ArrayList<MarkerData>();
77// CampaignFleetAPI player = Global.getSector().getPlayerFleet();
78// markers.add(new MarkerData(player.getLocationInHyperspace(), null, null));
79
80 zoomLevel = 1f;
81
82 Vector2f loc = Global.getSector().getPlayerFleet().getLocationInHyperspace();
83 centerOn = new Vector2f(loc);
84 }
85
86 public void positionToShowAllMarkersAndSystems(boolean showPlayerFleet, float heightOnScreen) {
87 Vector2f center = new Vector2f();
88 float total = 0f;
89 CampaignFleetAPI player = Global.getSector().getPlayerFleet();
90 MarkerData playerMarker = null;
91 if (showPlayerFleet) {
93 if (markers == null) {
94 markers = new ArrayList<MarkerData>();
95 }
96 playerMarker = new MarkerData(player.getLocationInHyperspace(), null, null);
97 markers.add(playerMarker);
98// Vector2f.add(center, player.getLocationInHyperspace(), center);
99// total++;
100 }
101
102 Vector2f min = new Vector2f();
103 Vector2f max = new Vector2f();
104 if (showSystems != null) {
105 for (StarSystemAPI curr : showSystems) {
106 Vector2f p = curr.getLocation();
107 min.x = Math.min(min.x, p.x);
108 min.y = Math.min(min.y, p.y);
109 max.x = Math.max(max.x, p.x);
110 max.y = Math.max(max.y, p.y);
111
112 Vector2f.add(center, p, center);
113 total++;
114 }
115 }
116
117 if (markers != null) {
118 for (MarkerData curr : markers) {
119 if (curr == playerMarker) continue;
120 Vector2f p = curr.coordinates;
121 min.x = Math.min(min.x, p.x);
122 min.y = Math.min(min.y, p.y);
123 max.x = Math.max(max.x, p.x);
124 max.y = Math.max(max.y, p.y);
125
126 Vector2f.add(center, p, center);
127 total++;
128 }
129 }
130
131 if (total > 0) {
132 center.scale(1f / total);
133 }
134
135 float factor = GRID_SIZE_PIXELS / GRID_SIZE_MAP_UNITS;
136 float distance = Misc.getDistance(player.getLocationInHyperspace(), center);
137 Vector2f diff = Vector2f.sub(max, min, new Vector2f());
138 distance += diff.length() * 0.5f;
139
140 distance *= 1.2f;
141 distance *= factor;
142
143 float maxShown = heightOnScreen;
144
145 float zoom = (float) (Math.ceil(distance / maxShown)) + 1;
146 if (zoom < 3) zoom = 3;
147
148 zoomLevel = zoom;
149
150 Vector2f loc = Misc.interpolateVector(Global.getSector().getPlayerFleet().getLocationInHyperspace(),
151 center, 0.5f);
152
153 centerOn = loc;
154
155// zoomLevel = 100;
156// centerOn = new Vector2f();
157 }
158
159 public void showSystem(StarSystemAPI system) {
160 if (showSystems == null) {
161 showSystems = new HashSet<StarSystemAPI>();
162 }
163 showSystems.add(system);
164 }
165
166 public void showMarket(MarketAPI market) {
167 float scale = 1f;
168 if (market != null && !market.isPlanetConditionMarketOnly()) {
169 scale = MarkerData.getScaleForMarket(market);
170 }
171 showMarket(market, scale);
172 }
173 public void showMarket(MarketAPI market, float scale) {
174 if (markers == null) {
175 markers = new ArrayList<MarkerData>();
176 }
177
178 markers.add(new MarkerData(
179 market.getLocationInHyperspace(),
180 null,
181 market.getFaction().getBaseUIColor(),
182 scale));
183 }
184}
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
static SectorAPI getSector()
Definition Global.java:59
void showSystem(StarSystemAPI system)
static final float GRID_SIZE_PIXELS
static final float GRID_SIZE_MAP_UNITS
void positionToShowAllMarkersAndSystems(boolean showPlayerFleet, float heightOnScreen)
Set< StarSystemAPI > showSystems
void showMarket(MarketAPI market)
Set< Constellation > showConsellations
void showMarket(MarketAPI market, float scale)
static float getScaleForMarket(MarketAPI market)