Starsector API
Loading...
Searching...
No Matches
RingSystemTerrainPlugin.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.terrain;
2
3import java.awt.Color;
4
5import com.fs.starfarer.api.Global;
6import com.fs.starfarer.api.campaign.CampaignEngineLayers;
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.PlanetAPI;
9import com.fs.starfarer.api.campaign.SectorEntityToken;
10import com.fs.starfarer.api.campaign.TerrainAIFlags;
11import com.fs.starfarer.api.combat.ViewportAPI;
12import com.fs.starfarer.api.loading.Description.Type;
13import com.fs.starfarer.api.ui.Alignment;
14import com.fs.starfarer.api.ui.TooltipMakerAPI;
15import com.fs.starfarer.api.util.Misc;
16
18 private static float VISIBLITY_MULT = 0.25f;
19 private static float VISIBLITY_MULT_NPC = 0.5f;
20
21 public static float getVisibilityMult(CampaignFleetAPI fleet) {
22 if (fleet != null && fleet.isPlayerFleet()) {
23 return VISIBLITY_MULT;
24 }
25 return VISIBLITY_MULT_NPC;
26 }
27
28 public void init(String terrainId, SectorEntityToken entity, Object param) {
29 super.init(terrainId, entity, param);
30 name = params.name;
31 if (name == null) {
32 name = "Ring System";
33 }
34 }
35
36 private transient RingRenderer rr;
37 public void renderOnMap(float factor, float alphaMult) {
38 if (params == null) return;
39 if (rr == null) {
40 rr = new RingRenderer("systemMap", "map_ring");
41 }
42 //Color color = new Color(175, 175, 105, 255);
43 Color color = Global.getSettings().getColor("ringSystemMapColor");
44 if (entity.getOrbitFocus() instanceof PlanetAPI) {
45 PlanetAPI planet = (PlanetAPI) entity.getOrbitFocus();
46 //color = Misc.interpolateColor(color, planet.getSpec().getIconColor(), 0.5f);
47 }
48 boolean spiral = params.bandWidthInEngine / 2f + 10f >= params.middleRadius;
49 rr.render(entity.getLocation(),
50 params.middleRadius - params.bandWidthInEngine * 0.5f,
51 params.middleRadius + params.bandWidthInEngine * 0.5f,
52 color,
53 spiral, factor, alphaMult);
54 }
55
56
57
58 public void advance(float amount) {
59 super.advance(amount);
60 }
61
62
63 public void render(CampaignEngineLayers layer, ViewportAPI viewport) {
64 super.render(layer, viewport);
65 }
66
67 @Override
68 public void applyEffect(SectorEntityToken entity, float days) {
69 if (entity instanceof CampaignFleetAPI) {
70 CampaignFleetAPI fleet = (CampaignFleetAPI) entity;
71 //if (fleet.getCurrBurnLevel() <= MAX_SNEAK_BURN_LEVEL) {
72 if (Misc.isSlowMoving(fleet)) {
73 fleet.getStats().addTemporaryModMult(0.1f, getModId() + "_1",
74 "Hiding inside ring system", getVisibilityMult(fleet),
75 fleet.getStats().getDetectedRangeMod());
76 }
77 }
78 }
79
80 public boolean hasTooltip() {
81 return true;
82 }
83
84 private String nameForTooltip = null;
85 public String getNameForTooltip() {
86 if (nameForTooltip == null) return "Ring System";
87 return nameForTooltip;
88 }
89
90 public void setNameForTooltip(String nameForTooltip) {
91 this.nameForTooltip = nameForTooltip;
92 }
93
94 public void createTooltip(TooltipMakerAPI tooltip, boolean expanded) {
95 float pad = 10f;
96 float small = 5f;
97 Color gray = Misc.getGrayColor();
98 Color highlight = Misc.getHighlightColor();
99 Color fuel = Global.getSettings().getColor("progressBarFuelColor");
100 Color bad = Misc.getNegativeHighlightColor();
101
102 tooltip.addTitle(getNameForTooltip());
103 tooltip.addPara(Global.getSettings().getDescription(getTerrainId(), Type.TERRAIN).getText1(), pad);
104 float nextPad = pad;
105 if (expanded) {
106 tooltip.addSectionHeading("Travel", Alignment.MID, pad);
107 nextPad = small;
108 }
109// tooltip.addPara("Reduces the range at which stationary fleets inside it can be detected by %s.", nextPad,
110// highlight,
111// "" + (int) ((1f - VISIBLITY_MULT) * 100) + "%"
112// );
113 String stop = Global.getSettings().getControlStringForEnumName("GO_SLOW");
114 tooltip.addPara("Reduces the range at which stationary or slow-moving* fleets inside it can be detected by %s.", nextPad,
115 highlight,
116 "" + (int) ((1f - VISIBLITY_MULT) * 100) + "%"
117 );
118 tooltip.addPara("*Press and hold %s to stop; combine with holding the left mouse button down to move slowly.", nextPad,
119 Misc.getGrayColor(), highlight,
120 stop
121 );
122
123 if (expanded) {
124 tooltip.addSectionHeading("Combat", Alignment.MID, pad);
125 tooltip.addPara("Numerous small bodies that make up the ring system present on the battlefield. Not large enough to be an in-combat navigational hazard.", small);
126 }
127 //tooltip.addPara("Does not stack with other similar terrain effects.", pad);
128 }
129
130 public boolean isTooltipExpandable() {
131 return true;
132 }
133
134 public float getTooltipWidth() {
135 return 350f;
136 }
137
138 public String getEffectCategory() {
139 return "ringsystem-like";
140 }
141
142 public boolean hasAIFlag(Object flag) {
143 return flag == TerrainAIFlags.HIDING_STATIONARY;
144 }
145}
static SettingsAPI getSettings()
Definition Global.java:51
void render(Vector2f loc, float minR, float maxR, Color color, boolean spiral, float factor, float alphaMult)
void render(CampaignEngineLayers layer, ViewportAPI viewport)
void init(String terrainId, SectorEntityToken entity, Object param)
Description getDescription(String id, Type type)
String getControlStringForEnumName(String name)