Starsector API
Loading...
Searching...
No Matches
SpatialAnomalyTerrainPlugin.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.terrain;
2
3import java.awt.Color;
4import java.util.EnumSet;
5
6import org.lwjgl.util.vector.Vector2f;
7
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.CampaignEngineLayers;
10import com.fs.starfarer.api.campaign.CampaignFleetAPI;
11import com.fs.starfarer.api.campaign.SectorEntityToken;
12import com.fs.starfarer.api.combat.ViewportAPI;
13import com.fs.starfarer.api.graphics.SpriteAPI;
14import com.fs.starfarer.api.impl.campaign.terrain.AuroraRenderer.AuroraRendererDelegate;
15
16public class SpatialAnomalyTerrainPlugin extends BaseRingTerrain implements AuroraRendererDelegate {
17
18 public static class SpatialAnomalyParams extends RingParams {
19 public float dur;
20 public CampaignFleetAPI source;
21 public SpatialAnomalyParams(CampaignFleetAPI source, float dur, float bandWidthInEngine, SectorEntityToken relatedEntity) {
22 super(bandWidthInEngine, bandWidthInEngine / 2f, relatedEntity);
23 this.source = source;
24 this.dur = dur;
25 }
26 }
27
28 transient protected SpriteAPI texture = null;
29 protected SpatialAnomalyParams params;
30
31 protected float elapsed;
33
34 public void init(String terrainId, SectorEntityToken entity, Object param) {
35 super.init(terrainId, entity, param);
36 this.params = (SpatialAnomalyParams) param;
37 name = "Spatial Anomaly";
38 }
39
40 @Override
41 protected Object readResolve() {
42 super.readResolve();
43 layers = EnumSet.of(CampaignEngineLayers.TERRAIN_7);
44 texture = Global.getSettings().getSprite("terrain", "aurora");
45 if (renderer == null) {
46 renderer = new AuroraRenderer(this);
47 }
48 return this;
49 }
50
51 Object writeReplace() {
52 return this;
53 }
54
55 transient private EnumSet<CampaignEngineLayers> layers = EnumSet.noneOf(CampaignEngineLayers.class);
56 public EnumSet<CampaignEngineLayers> getActiveLayers() {
57 return layers;
58 }
59
60 protected transient float phase = 0f;
61 public void advance(float amount) {
62 super.advance(amount);
63
64 float period = (float)Math.PI * 2f;
65 phase += period/10f * amount;
66
67 float days = Global.getSector().getClock().convertToDays(amount);
68 elapsed += days;
69 if (elapsed >= 0.3f) params.source = null;
70
71// elapsed = 0.5f;
72 if (elapsed >= params.dur) {
73 getEntity().setExpired(true);
74 }
75
76 renderer.advance(amount);
77 }
78
79 public void render(CampaignEngineLayers layer, ViewportAPI viewport) {
80 float alphaMult = viewport.getAlphaMult();
81 float left = params.dur - elapsed;
82 if (left < 0) left = 0;
83 if (left < 0.1f) {
84 alphaMult *= left / 0.1f;
85 }
86 if (elapsed < 0.1f) {
87 alphaMult *= elapsed / 0.1f;
88 }
89
90 renderer.render(alphaMult);
91
92// GL11.glTranslatef(entity.getLocation().x, entity.getLocation().y, 0);
93//
94//
95// float r = params.bandWidthInEngine;
96//
97// GL11.glDisable(GL11.GL_TEXTURE_2D);
98// GL11.glEnable(GL11.GL_BLEND);
99// GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
100// Misc.renderQuad(-r, -r, r * 2f, r * 2f, Color.gray, alphaMult);
101//
102// GL11.glPopMatrix();
103 }
104
105
106 @Override
107 public void applyEffect(SectorEntityToken entity, float days) {
108 if (entity == params.source) return;
109
110 if (entity instanceof CampaignFleetAPI) {
111 CampaignFleetAPI fleet = (CampaignFleetAPI) entity;
112
113 float penalty = 0.5f;
114 fleet.getStats().addTemporaryModMult(0.1f, getModId() + "_1",
115 "Inside " + getTerrainName().toLowerCase(), 1f - penalty,
116 fleet.getStats().getFleetwideMaxBurnMod());
117 }
118 }
119
120
121 @Override
122 public boolean containsPoint(Vector2f point, float radius) {
123 return super.containsPoint(point, radius);
124 }
125
126 public boolean hasTooltip() {
127 return false;
128 }
129
130 public String getTerrainName() {
131 return super.getTerrainName();
132 }
133
134 public String getNameForTooltip() {
135 return getTerrainName();
136 }
137
138 public String getEffectCategory() {
139 return "spatial_anomaly";
140 }
141
142 public boolean canPlayerHoldStationIn() {
143 return false;
144 }
145
146
147
148
149 public float getAuroraAlphaMultForAngle(float angle) {
150 return 1f;
151 }
152
154 return 256f;
155 }
156
158 return null;
159 }
160
161 public Vector2f getAuroraCenterLoc() {
162 return getEntity().getLocation();
163 }
164
165 public Color getAuroraColorForAngle(float angle) {
166 return new Color(255,165,100,255);
167 }
168
169 public float getAuroraInnerOffsetMult(float angle) {
170 return 1f;
171 }
172
173 public float getAuroraInnerRadius() {
174 //return params.bandWidthInEngine * 0.5f;
175 return 50f;
176 }
177
178 public float getAuroraOuterRadius() {
179 return params.bandWidthInEngine;
180 }
181
182 public float getAuroraShortenMult(float angle) {
183 return 0.5f;
184 }
185
187 return 1f;
188 }
189
190 public SpriteAPI getAuroraTexture() {
191 return texture;
192 }
193
194 public float getAuroraThicknessFlat(float angle) {
195 return 0;
196 }
197
198 public float getAuroraThicknessMult(float angle) {
199 return 1f;
200 }
201
202}
static SettingsAPI getSettings()
Definition Global.java:51
static SectorAPI getSector()
Definition Global.java:59
void init(String terrainId, SectorEntityToken entity, Object param)
SpriteAPI getSprite(String filename)