Starsector API
Loading...
Searching...
No Matches
AbyssalLightBonus.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign;
2
3import org.lwjgl.util.vector.Vector2f;
4
5import com.fs.starfarer.api.EveryFrameScript;
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.comm.CommMessageAPI.MessageClickAction;
9import com.fs.starfarer.api.impl.campaign.ids.Sounds;
10import com.fs.starfarer.api.impl.campaign.intel.MessageIntel;
11import com.fs.starfarer.api.impl.campaign.intel.events.ht.HTAbyssalLightFactor;
12import com.fs.starfarer.api.impl.campaign.intel.events.ht.HyperspaceTopographyEventIntel;
13import com.fs.starfarer.api.impl.campaign.terrain.HyperspaceTerrainPlugin;
14import com.fs.starfarer.api.util.Misc;
15
16public class AbyssalLightBonus implements EveryFrameScript {
17
18 public static float BURN_BONUS_MULT = 1f;
19 public static float BURN_BONUS_FLAT = 5f;
20 public static float LIGHT_YEARS_PER_UNIT_OF_BURN_BONUS = 3f;
21
22 public static float SENSOR_BONUS_FLAT = 1000f;
23 public static float LIGHT_YEARS_PER_UNIT_OF_SENSOR_BONUS = 3f;
24
25
26 public static AbyssalLightBonus get(CampaignFleetAPI fleet) {
27 for (EveryFrameScript s : fleet.getScripts()) {
28 if (s instanceof AbyssalLightBonus) {
29 return (AbyssalLightBonus) s;
30 }
31 }
33 fleet.addScript(script);
34 return script;
35 }
36
37 protected CampaignFleetAPI fleet;
38 protected float burnBonus = 0f;
39 protected float sensorBonus = 0f;
40
41 protected int framesSpentPending = 0;
42 protected float pendingBurnBonus = 0;
43 protected float pendingSensorBonus = 0;
44 protected int pendingTopographyPoints = 0;
45 protected int pendingLightsCount = 0;
46 protected Vector2f prevLoc = null;
47
48 public AbyssalLightBonus(CampaignFleetAPI fleet) {
49 this.fleet = fleet;
50 prevLoc = new Vector2f(fleet.getLocation());
51 }
52
53 public void advance(float amount) {
54 if (fleet.isPlayerFleet()) {
56 }
57
58 float depth = Misc.getAbyssalDepth(fleet);
59 if (depth < 1f) {
60 burnBonus = 0f;
61 sensorBonus = 0f;
62 return;
63 }
64
65 Vector2f loc = fleet.getLocation();
66 float distLY = Misc.getDistanceLY(loc, prevLoc);
67 prevLoc.set(fleet.getLocation());
68
71
72 if (burnBonus < 0) burnBonus = 0;
73 if (sensorBonus < 0) sensorBonus = 0;
74
75 if (burnBonus > 0) {
76 if (BURN_BONUS_MULT != 1f) {
77 float burnMult = BURN_BONUS_MULT;
78 if (burnBonus < 1f) {
79 burnMult = 1f + (burnMult - 1f) * burnBonus;
80 if (burnMult < 1.1f) burnMult = 1.1f;
81 }
82 String ly = Misc.getRoundedValueOneAfterDecimalIfNotWhole(getBurnBonusLYRemaining(burnBonus));
83 fleet.getStats().addTemporaryModMult(0.1f, "abyssalLight_1",
84 "Abyssal light (for " + ly + " more light-years)", burnMult,
85 fleet.getStats().getFleetwideMaxBurnMod());
86 }
87 if (BURN_BONUS_FLAT > 0) {
88 float burnFlat = BURN_BONUS_FLAT / HyperspaceTerrainPlugin.ABYSS_BURN_MULT;
91 }
92 burnFlat = Math.round(burnFlat);
93 if (burnFlat < 1f) burnFlat = 1f;
94
95 String ly = Misc.getRoundedValueOneAfterDecimalIfNotWhole(getBurnBonusLYRemaining(burnBonus));
96 fleet.getStats().addTemporaryModFlat(0.1f, "abyssalLight_2",
97 "Abyssal light (for " + ly + " more light-years)", burnFlat,
98 fleet.getStats().getFleetwideMaxBurnMod());
99 }
100 }
101
102 if (sensorBonus > 0) {
103 if (SENSOR_BONUS_FLAT > 0) {
104 float sensorFlat = SENSOR_BONUS_FLAT / HyperspaceTerrainPlugin.ABYSS_SENSOR_RANGE_MULT;
107 }
108 sensorFlat = Math.round(sensorFlat);
109 if (sensorFlat < 1f) sensorFlat = 1f;
110
111 String ly = Misc.getRoundedValueOneAfterDecimalIfNotWhole(getSensorBonusLYRemaining(sensorBonus));
112 fleet.getStats().addTemporaryModFlat(0.1f, "abyssalLight_3",
113 "Abyssal light (for " + ly + " more light-years)", sensorFlat,
114 fleet.getStats().getSensorRangeMod());
115 }
116 }
117 }
118
119 public float getBurnBonusLYRemaining(float bonus) {
121 }
122
123 public float getSensorBonusLYRemaining(float bonus) {
125 }
126
127 public void addBurnBonus(float bonus) {
128 if (fleet.isPlayerFleet()) {
129 pendingBurnBonus += bonus;
131 } else {
132 burnBonus += bonus;
133 }
134 }
135
136 public void addSensorBonus(float bonus) {
137 if (fleet.isPlayerFleet()) {
138 pendingSensorBonus += bonus;
140 } else {
141 sensorBonus += bonus;
142 }
143 }
144
145 public void addTopographyPoints(int points) {
146 pendingTopographyPoints += points;
149 }
150
151
154 if (framesSpentPending > 1) {
156
157 if (pendingTopographyPoints > 0) {
158 HyperspaceTopographyEventIntel.addFactorCreateIfNecessary(
159 new HTAbyssalLightFactor(pendingTopographyPoints, pendingLightsCount > 1), null);
162 }
163 if (pendingBurnBonus > 0) {
164 MessageIntel msg = new MessageIntel();
165 String ly = Misc.getRoundedValueOneAfterDecimalIfNotWhole(getSensorBonusLYRemaining(pendingBurnBonus));
166 msg.addLine("Increased burn level for %s light-years", Misc.getTextColor(),
167 new String[] {"+" + ly}, Misc.getHighlightColor());
168 msg.setSound(Sounds.NONE);
169 Global.getSector().getCampaignUI().addMessage(msg, MessageClickAction.NOTHING);
172 }
173
174 if (pendingSensorBonus > 0) {
175 MessageIntel msg = new MessageIntel();
176 String ly = Misc.getRoundedValueOneAfterDecimalIfNotWhole(getSensorBonusLYRemaining(pendingSensorBonus));
177 msg.addLine("Increased sensor range for %s light-years", Misc.getTextColor(),
178 new String[] {"+" + ly}, Misc.getHighlightColor());
179 msg.setSound(Sounds.NONE);
180 Global.getSector().getCampaignUI().addMessage(msg, MessageClickAction.NOTHING);
183 }
184
185 }
186 }
187
188
189 public float getBurnBonus() {
190 return burnBonus;
191 }
192
193 public void setBurnBonus(float burnBonus) {
194 this.burnBonus = burnBonus;
195 }
196
197 public float getSensorBonus() {
198 return sensorBonus;
199 }
200
201 public void setSensorBonus(float sensorBonus) {
202 this.sensorBonus = sensorBonus;
203 }
204
205 public boolean isDone() {
206 return burnBonus <= 0 && sensorBonus <= 0 &&
208 }
209
210 public boolean runWhilePaused() {
211 return false;
212 }
213
214}
static SectorAPI getSector()
Definition Global.java:59