Starsector API
Loading...
Searching...
No Matches
BaseRingTerrain.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.terrain;
2
3import java.util.EnumSet;
4
5import org.lwjgl.util.vector.Vector2f;
6
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignEngineLayers;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.SectorEntityToken;
11import com.fs.starfarer.api.combat.ViewportAPI;
12import com.fs.starfarer.api.util.Misc;
13
21public abstract class BaseRingTerrain extends BaseTerrain {
22
23 public static class RingParams {
24 public float bandWidthInEngine;
25 public float middleRadius;
26 public SectorEntityToken relatedEntity;
27 public String name;
28 public RingParams(float bandWidthInEngine, float middleRadius,
29 SectorEntityToken relatedEntity, String name) {
30 this.bandWidthInEngine = bandWidthInEngine;
31 this.middleRadius = middleRadius;
32 this.relatedEntity = relatedEntity;
33 this.name = name;
34 }
35 public RingParams(float bandWidthInEngine, float middleRadius,
36 SectorEntityToken relatedEntity) {
37 this(bandWidthInEngine, middleRadius, relatedEntity, null);
38 }
39
40 }
41
42 public RingParams params;
43 public void init(String terrainId, SectorEntityToken entity, Object param) {
44 super.init(terrainId, entity, param);
45 params = (RingParams) param;
47 }
48
49
50 @Override
51 public SectorEntityToken getRelatedEntity() {
52 return params.relatedEntity;
53 }
54
55 protected Object readResolve() {
56 layers = EnumSet.of(CampaignEngineLayers.TERRAIN_2);
57 return this;
58 }
59
60 Object writeReplace() {
61 return this;
62 }
63
64 transient protected EnumSet<CampaignEngineLayers> layers = EnumSet.of(CampaignEngineLayers.TERRAIN_2);
65 public EnumSet<CampaignEngineLayers> getActiveLayers() {
66 return layers;
67 }
68
69 @Override
70 public boolean containsEntity(SectorEntityToken other) {
71 if (other.getContainingLocation() != this.entity.getContainingLocation()) return false;
72 return containsPoint(other.getLocation(), other.getRadius()) && !isPreventedFromAffecting(other);
73 }
74
75 @Override
76 public boolean containsPoint(Vector2f point, float radius) {
77 float dist = Misc.getDistance(this.entity.getLocation(), point);
78 if (dist > getMaxRadiusForContains() + radius) return false;
79 if (dist < getMinRadiusForContains() - radius) return false;
80 return true;
81 }
82
83 protected float getMinRadiusForContains() {
84 return params.middleRadius - params.bandWidthInEngine / 2f;
85 }
86
87 protected float getMaxRadiusForContains() {
88 return params.middleRadius + params.bandWidthInEngine / 2f;
89 }
90
91 public float getRenderRange() {
92 return params.middleRadius + params.bandWidthInEngine / 2f + 50f;
93 }
94
95 public RingParams getRingParams() {
96 return params;
97 }
98
99 public float getProximitySoundFactor() {
100 float width = params.bandWidthInEngine / 2f + getExtraSoundRadius() + Global.getSector().getPlayerFleet().getRadius();
101 if (width <= 1f) return 1f;
102
103 CampaignFleetAPI player = Global.getSector().getPlayerFleet();
104 float dist = Misc.getDistance(this.entity.getLocation(), player.getLocation());
105 float mid = params.middleRadius;
106
107 float distFromMid = Math.abs(dist - mid);
108 if (dist < mid && params.middleRadius - params.bandWidthInEngine / 2f < getExtraSoundRadius()) {
109 distFromMid = 0f;
110 }
111 if (distFromMid < width * 0.5f) return 1f;
112 return (width - distFromMid) / (width * 0.5f);
113 }
114
115 public void render(CampaignEngineLayers layer, ViewportAPI v) {
116 }
117
118 public void renderOnMap(float factor, float alphaMult) {
119 }
120
121 public void renderOnMapAbove(float factor, float alphaMult) {
122 }
123
124 public float getMaxEffectRadius(Vector2f locFrom) {
125 return params.middleRadius + params.bandWidthInEngine / 2f;
126 }
127 public float getMinEffectRadius(Vector2f locFrom) {
128 return params.middleRadius - params.bandWidthInEngine / 2f;
129 }
130
131 public float getOptimalEffectRadius(Vector2f locFrom) {
132 return params.middleRadius;
133 }
134
135 public String getNameAOrAn() {
136 if (getTerrainName() != null) {
137 return Misc.getAOrAnFor(getTerrainName());
138 }
139 return "a";
140 }
141}
142
143
144
145
146
147
148
static SectorAPI getSector()
Definition Global.java:59
transient EnumSet< CampaignEngineLayers > layers
void render(CampaignEngineLayers layer, ViewportAPI v)
void init(String terrainId, SectorEntityToken entity, Object param)
boolean isPreventedFromAffecting(SectorEntityToken other)