Starsector API
Loading...
Searching...
No Matches
PiracyRespiteScript.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.intel.events;
2
3import com.fs.starfarer.api.Global;
4import com.fs.starfarer.api.campaign.comm.CommMessageAPI.MessageClickAction;
5import com.fs.starfarer.api.campaign.econ.EconomyAPI.EconomyUpdateListener;
6import com.fs.starfarer.api.campaign.econ.MarketAPI;
7import com.fs.starfarer.api.impl.campaign.econ.PiracyRespite;
8import com.fs.starfarer.api.impl.campaign.ids.Conditions;
9import com.fs.starfarer.api.impl.campaign.ids.Sounds;
10import com.fs.starfarer.api.impl.campaign.intel.BaseIntelPlugin;
11import com.fs.starfarer.api.impl.campaign.intel.MessageIntel;
12import com.fs.starfarer.api.util.Misc;
13
14public class PiracyRespiteScript implements EconomyUpdateListener {
15
16 public static String KEY = "$prs_ref";
17
18 //public static float DURATION = 730;
19 public static float DURATION = -1f;
20
21 public static PiracyRespiteScript get() {
22 //if (true) return null;
23 return (PiracyRespiteScript) Global.getSector().getMemoryWithoutUpdate().get(KEY);
24 }
25
26
27 protected long timestamp;
28
30
32
33 // to avoid duplicates
34 PiracyRespiteScript existing = get();
35 if (existing != null) {
36 existing.resetTimestamp();
37 return;
38 }
39
41 Global.getSector().getEconomy().addUpdateListener(this);
42 Global.getSector().getMemoryWithoutUpdate().set(KEY, this);
43
45 }
46
47 public void sendGainedMessage() {
48 MessageIntel msg = new MessageIntel();
49 msg.addLine("Piracy Respite gained", Misc.getBasePlayerColor());
50 msg.addLine(BaseIntelPlugin.BULLET + "Colonies receive %s accessibility", Misc.getTextColor(),
51 new String [] {"+" + (int)Math.round(PiracyRespite.ACCESSIBILITY_BONUS * 100f) + "%"},
52 Misc.getHighlightColor());
53 if (DURATION > 0) {
54 msg.addLine(BaseIntelPlugin.BULLET + "Lasts for %s days", Misc.getTextColor(),
55 new String [] {"" + (int)PiracyRespiteScript.DURATION},
56 Misc.getHighlightColor());
57 }
58 msg.setIcon(Global.getSettings().getSpriteName("events", "piracy_respite"));
59 msg.setSound(Sounds.REP_GAIN);
60 Global.getSector().getCampaignUI().addMessage(msg, MessageClickAction.COLONY_INFO);
61 }
62
63 public void sendExpiredMessage() {
64 MessageIntel msg = new MessageIntel();
65 msg.addLine("Piracy Respite expired", Misc.getBasePlayerColor());
66 msg.setIcon(Global.getSettings().getSpriteName("events", "piracy_respite"));
67 msg.setSound(Sounds.REP_LOSS);
68 Global.getSector().getCampaignUI().addMessage(msg, MessageClickAction.COLONY_INFO);
69 }
70
71 public void resetTimestamp() {
72 timestamp = Global.getSector().getClock().getTimestamp();
73 }
74
75 public float getDaysRemaining() {
76 if (DURATION < 0) return DURATION;
77 float rem = DURATION - Global.getSector().getClock().getElapsedDaysSince(timestamp);
78 //rem = 1f - Global.getSector().getClock().getElapsedDaysSince(timestamp);
79 if (rem < 0) rem = 0;
80 return rem;
81 }
82
83 public void commodityUpdated(String commodityId) {
84
85 }
86
87 public void economyUpdated() {
88 for (MarketAPI curr : Misc.getPlayerMarkets(false)) {
89 if (!curr.hasCondition(Conditions.PIRACY_RESPITE)) {
90 curr.addCondition(Conditions.PIRACY_RESPITE);
91 }
92 }
93 }
94
95 public void cleanup() {
96 if (Global.getSector().getMemoryWithoutUpdate().contains(KEY)) {
98 }
99 Global.getSector().getMemoryWithoutUpdate().unset(KEY);
100 for (MarketAPI curr : Misc.getPlayerMarkets(false)) {
101 if (curr.hasCondition(Conditions.PIRACY_RESPITE)) {
102 curr.removeCondition(Conditions.PIRACY_RESPITE);
103 }
104 }
105 }
106
107 public boolean isEconomyListenerExpired() {
108 if (DURATION < 0) return false;
109
110 float days = getDaysRemaining();
111 if (days <= 0) {
112 cleanup();
113 return true;
114 }
115 return false;
116 }
117
118}
119
120
121
static SettingsAPI getSettings()
Definition Global.java:51
static SectorAPI getSector()
Definition Global.java:59
String getSpriteName(String category, String id)