1package com.fs.starfarer.api.impl.campaign.terrain;
4import java.util.ArrayList;
5import java.util.EnumSet;
8import org.lwjgl.util.vector.Vector2f;
10import com.fs.starfarer.api.Global;
11import com.fs.starfarer.api.campaign.CampaignEngineLayers;
12import com.fs.starfarer.api.campaign.CampaignFleetAPI;
13import com.fs.starfarer.api.campaign.SectorEntityToken;
14import com.fs.starfarer.api.campaign.TerrainAIFlags;
15import com.fs.starfarer.api.combat.ViewportAPI;
16import com.fs.starfarer.api.graphics.SpriteAPI;
17import com.fs.starfarer.api.impl.campaign.ids.Stats;
18import com.fs.starfarer.api.impl.campaign.terrain.AuroraRenderer.AuroraRendererDelegate;
19import com.fs.starfarer.api.impl.campaign.terrain.FlareManager.Flare;
20import com.fs.starfarer.api.impl.campaign.terrain.FlareManager.FlareManagerDelegate;
21import com.fs.starfarer.api.loading.Description.Type;
22import com.fs.starfarer.api.ui.Alignment;
23import com.fs.starfarer.api.ui.TooltipMakerAPI;
24import com.fs.starfarer.api.util.Misc;
28 public static class MagneticFieldParams
extends RingParams {
29 public Color baseColor;
30 transient public List<Color> auroraColorRange =
new ArrayList<Color>();
31 public String c =
null;
33 public float auroraFrequency;
35 public float innerRadius;
36 public float outerRadius;
38 public MagneticFieldParams(
float bandWidthInEngine,
float middleRadius, SectorEntityToken relatedEntity,
42 float auroraFrequency) {
43 this(bandWidthInEngine, middleRadius, relatedEntity, innerRadius, outerRadius,
44 baseColor, auroraFrequency,
45 Color.red, Color.orange, Color.yellow, Color.green, Color.blue,
46 new Color(75, 0, 130),
new Color(127, 0, 255));
48 public MagneticFieldParams(
float bandWidthInEngine,
float middleRadius, SectorEntityToken relatedEntity,
52 float auroraFrequency,
53 Color ... auroraColors) {
54 super(bandWidthInEngine, middleRadius, relatedEntity);
55 this.auroraFrequency = auroraFrequency;
56 this.baseColor = baseColor;
57 this.innerRadius = innerRadius;
58 this.outerRadius = outerRadius;
59 if (auroraColors !=
null) {
60 for (Color curr : auroraColors) {
61 this.auroraColorRange.add(curr);
66 Object readResolve() {
68 auroraColorRange = Misc.colorsFromString(c);
70 auroraColorRange =
new ArrayList<Color>();
75 Object writeReplace() {
76 c = Misc.colorsToString(auroraColorRange);
92 transient protected SpriteAPI
texture =
null;
93 transient protected Color
color;
96 protected MagneticFieldParams
params;
105 this.params = (MagneticFieldParams) param;
108 name =
"Magnetic Field";
113 return "Magnetic Field";
120 layers = EnumSet.of(CampaignEngineLayers.TERRAIN_7);
130 Object writeReplace() {
134 transient private EnumSet<CampaignEngineLayers> layers = EnumSet.of(CampaignEngineLayers.TERRAIN_7);
141 super.advance(amount);
146 public void render(CampaignEngineLayers layer, ViewportAPI viewport) {
155 return outerRadiusWithFlare + 200f;
157 return super.getRenderRange();
173 if (
entity instanceof CampaignFleetAPI) {
174 CampaignFleetAPI fleet = (CampaignFleetAPI)
entity;
190 fleet.getStats().addTemporaryModMult(0.1f,
getModId() +
"_2",
192 fleet.getStats().getSensorRangeMod());
194 fleet.getStats().removeTemporaryMod(
getModId() +
"_6");
195 fleet.getStats().addTemporaryModMult(0.1f,
getModId() +
"_5",
197 fleet.getStats().getDetectedRangeMod());
207 fleet.getStats().removeTemporaryMod(
getModId() +
"_5");
208 fleet.getStats().addTemporaryModMult(0.1f,
getModId() +
"_6",
210 fleet.getStats().getDetectedRangeMod());
220 float skillMod = fleet.getCommanderStats().getDynamic().getValue(Stats.NAVIGATION_PENALTY_MULT);
221 float penalty = 1f - baseMult;
231 float dist = Misc.getDistance(this.
entity.getLocation(), point);
232 if (dist > outerRadiusWithFlare + radius)
return false;
233 if (dist + radius <
params.middleRadius -
params.bandWidthInEngine / 2f)
return false;
236 return super.containsPoint(point, radius);
239 private float computeRadiusWithFlare(Flare flare) {
243 float outer = params.middleRadius + params.bandWidthInEngine * 0.5f;
244 float thickness = outer - inner;
246 thickness *= flare.extraLengthMult;
247 thickness += flare.extraLengthFlat;
249 return inner + thickness;
254 Color bad = Misc.getNegativeHighlightColor();
255 Color base = super.getNameColor();
258 return super.getNameColor();
268 Color gray = Misc.getGrayColor();
269 Color highlight = Misc.getHighlightColor();
271 Color bad = Misc.getNegativeHighlightColor();
273 tooltip.addTitle(
"Magnetic Field");
290 tooltip.addSectionHeading(
"Travel", Alignment.MID, pad);
298 tooltip.addPara(
"Reduces the range at which fleets inside can be detected by %s.", nextPad,
300 "" + (
int) ((1f - detectedMult) * 100) +
"%"
304 tooltip.addPara(
"The magnetic storm also blinds the sensors of a fleet within," +
305 " reducing their range by %s.", pad,
326 tooltip.addSectionHeading(
"Combat", Alignment.MID, pad);
327 tooltip.addPara(
"No combat effects.", nextPad);
341 return "Magnetic Storm";
343 return super.getTerrainName();
347 return "magnetic_field-like";
360 return params.relatedEntity.getLocation();
371 return params.innerRadius;
375 return params.outerRadius;
419 return params.auroraColorRange;
463 return params.auroraFrequency;
539 return flag == TerrainAIFlags.REDUCES_DETECTABILITY || flag == TerrainAIFlags.REDUCES_SENSOR_RANGE;
static SettingsAPI getSettings()
static SectorAPI getSector()
void render(float alphaMult)
void advance(float amount)
float getExtraLengthFlat(float angle)
float getExtraLengthMult(float angle)
float getInnerOffsetMult(float angle)
void advance(float amount)
float getShortenMod(float angle)
Color getColorForAngle(Color baseColor, float angle)
boolean isInActiveFlareArc(Vector2f point)
float getFlareSmallFadeOutMin()
float getFlareSmallShortenFlatModMax()
List< Color > getFlareColorRange()
int getFlareMinSmallCount()
float getAuroraTexPerSegmentMult()
FlareManager getFlareManager()
float getFlareExtraLengthFlatMax()
float getFlareSkipLargeProbability()
String getEffectCategory()
void render(CampaignEngineLayers layer, ViewportAPI viewport)
float getFlareSmallExtraLengthFlatMax()
boolean containsPoint(Vector2f point, float radius)
float getFlareSmallExtraLengthMultMin()
float getFlareExtraLengthFlatMin()
Vector2f getAuroraCenterLoc()
static final float SENSOR_MULT_AURORA
AuroraRenderer getRenderer()
boolean shouldPlayLoopTwo()
float getFlareFadeOutMax()
float getFlareProbability()
float getFlareOccurrenceArc()
MagneticFieldParams params
transient SpriteAPI texture
float getAuroraShortenMult(float angle)
float getAuroraAlphaMultForAngle(float angle)
float getAuroraOuterRadius()
boolean shouldPlayLoopOne()
MagneticFieldParams getParams()
float getFlareSmallFadeInMax()
String getNameForTooltip()
FlareManager flareManager
boolean isTooltipExpandable()
float getFlareOccurrenceAngle()
float getFlareExtraLengthMultMin()
float getAuroraThicknessMult(float angle)
float getAuroraThicknessFlat(float angle)
float getFlareSmallFadeOutMax()
void createTooltip(TooltipMakerAPI tooltip, boolean expanded)
float getAuroraBandWidthInTexture()
static final float DETECTED_MULT
float getFlareFadeInMin()
SectorEntityToken getFlareCenterEntity()
float getAdjustedMult(CampaignFleetAPI fleet, float baseMult)
float getFlareShortenFlatModMax()
EnumSet< CampaignEngineLayers > getActiveLayers()
Color getAuroraColorForAngle(float angle)
void advance(float amount)
RangeBlockerUtil getAuroraBlocker()
float getFlareExtraLengthMultMax()
float getAuroraInnerRadius()
SpriteAPI getAuroraTexture()
boolean canPlayerHoldStationIn()
float getFlareFadeOutMin()
float getFlareSmallFadeInMin()
float getAuroraInnerOffsetMult(float angle)
float getFlareSmallExtraLengthMultMax()
float getFlareSmallArcMin()
float getFlareSmallArcMax()
float getFlareFadeInMax()
int getFlareMaxSmallCount()
void init(String terrainId, SectorEntityToken entity, Object param)
boolean hasAIFlag(Object flag)
float getFlareShortenFlatModMin()
static final float DETECTED_MULT_AURORA
float getFlareSmallShortenFlatModMin()
float getFlareSmallExtraLengthFlatMin()
void applyEffect(SectorEntityToken entity, float days)
Description getDescription(String id, Type type)
SpriteAPI getSprite(String filename)
Color getColor(String id)