1package com.fs.starfarer.api.impl.campaign.terrain;
4import java.util.EnumSet;
7import org.lwjgl.util.vector.Vector2f;
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.campaign.CampaignEngineLayers;
11import com.fs.starfarer.api.campaign.CampaignFleetAPI;
12import com.fs.starfarer.api.campaign.CampaignTerrainPlugin;
13import com.fs.starfarer.api.campaign.SectorEntityToken;
14import com.fs.starfarer.api.campaign.rules.MemoryAPI;
15import com.fs.starfarer.api.combat.ViewportAPI;
16import com.fs.starfarer.api.loading.TerrainSpecAPI;
17import com.fs.starfarer.api.ui.Alignment;
18import com.fs.starfarer.api.ui.TooltipMakerAPI;
19import com.fs.starfarer.api.util.Misc;
27 protected String
name =
"Unknown";
58 List<CampaignFleetAPI> fleets =
entity.getContainingLocation().getFleets();
70 for (CampaignFleetAPI fleet : fleets) {
71 if (fleet.isStationMode())
74 float dist = Misc.getDistance(fleet.getLocation(),
entity.getLocation());
75 if (dist > renderRange)
79 String key =
"$terrain_" + cat;
81 MemoryAPI mem = fleet.getMemoryWithoutUpdate();
89 mem.set(key,
true, 0);
96 if (fleet !=
null &&
entity.isInCurrentLocation()) {
100 float volumeMult = prox;
101 float suppressionMult = prox;
104 if (volumeMult > 0) {
106 String soundId =
getSpec().getLoopOne();
107 if (soundId !=
null) {
109 .suppressMusic(spec.getMusicSuppression() * suppressionMult);
115 String soundId =
getSpec().getLoopTwo();
116 if (soundId !=
null) {
118 .suppressMusic(spec.getMusicSuppression() * suppressionMult);
124 String soundId =
getSpec().getLoopThree();
125 if (soundId !=
null) {
127 .suppressMusic(spec.getMusicSuppression() * suppressionMult);
133 String soundId =
getSpec().getLoopFour();
134 if (soundId !=
null) {
136 .suppressMusic(spec.getMusicSuppression() * suppressionMult);
151 throw new RuntimeException(
"Override BaseTerrain.getEffectCategory()");
179 throw new RuntimeException(
180 "Override BaseTerrain.getActiveLayers() to return the CampaignEngineLayers the terrain should render in.");
184 throw new RuntimeException(
185 "Override BaseTerrain.getRenderRange() to return the maximum distance to render this terrain at (should exceed visible radius).");
188 public void render(CampaignEngineLayers layer, ViewportAPI viewport) {
217 return getSpec().getLoopOne() !=
null;
221 return getSpec().getLoopTwo() !=
null;
225 return getSpec().getLoopThree() !=
null;
229 return getSpec().getLoopFour() !=
null;
272 tooltip.addSectionHeading(
"Travel", Alignment.MID, pad);
279 tooltip.addSectionHeading(
"Combat", Alignment.MID, pad);
312 public boolean hasAIFlag(Object flag, CampaignFleetAPI fleet) {
332 private transient TerrainSpecAPI spec =
null;
345 public void renderOnRadar(Vector2f radarCenter,
float factor,
float alphaMult) {
363 if (other.getMemoryWithoutUpdate() ==
null)
return false;
364 String
id =
entity.getId();
366 String lockId = other.getMemoryWithoutUpdate().getString(key);
367 return lockId !=
null && !lockId.equals(
id);
373 String
id =
entity.getId();
static SettingsAPI getSettings()
static SoundPlayerAPI getSoundPlayer()
static SectorAPI getSector()
String getNameForTooltip()
float getProximitySoundFactor()
boolean containsPoint(Vector2f point, float radius)
static final float EXTRA_SOUND_RADIUS
float getLoopFourVolume()
boolean isTooltipExpandable()
void applyEffect(SectorEntityToken entity, float days)
void createTravelSection(TooltipMakerAPI tooltip, boolean expanded, float firstPad)
boolean hasAIFlag(Object flag, CampaignFleetAPI fleet)
float getExtraSoundRadius()
float getMaxEffectRadius(Vector2f locFrom)
void preventOtherTerrainFromAffecting(SectorEntityToken other)
boolean containsEntity(SectorEntityToken other)
EnumSet< CampaignEngineLayers > getActiveLayers()
void createCombatSection(TooltipMakerAPI tooltip, boolean expanded)
void renderOnMap(float factor, float alphaMult)
void preventOtherTerrainFromAffecting(SectorEntityToken other, float dur)
boolean hasAIFlag(Object flag)
static String TERRAIN_LOCK_KEY
String getEffectCategory()
boolean canPlayerHoldStationIn()
void advance(float amount)
void createTooltip(TooltipMakerAPI tooltip, boolean expanded)
void setTerrainName(String name)
float getLoopThreePitch()
String getIconSpriteName()
float getMinEffectRadius(Vector2f locFrom)
SectorEntityToken getRelatedEntity()
float getOptimalEffectRadius(Vector2f locFrom)
boolean shouldPlayLoopFour()
boolean shouldCheckFleetsToApplyEffect()
boolean shouldPlayLoopThree()
boolean shouldPlayLoopOne()
void init(String terrainId, SectorEntityToken entity, Object param)
boolean isPreventedFromAffecting(SectorEntityToken other)
void renderOnRadar(Vector2f radarCenter, float factor, float alphaMult)
void renderOnMapAbove(float factor, float alphaMult)
void render(CampaignEngineLayers layer, ViewportAPI viewport)
boolean shouldPlayLoopTwo()
SectorEntityToken getEntity()
float getLoopThreeVolume()
void createFirstSection(TooltipMakerAPI tooltip, boolean expanded)
TerrainSpecAPI getTerrainSpec(String terrainId)
Color getColor(String id)
void playLoop(String id, Object playingEntity, float pitch, float volume, Vector2f loc, Vector2f vel)