Starsector API
Loading...
Searching...
No Matches
CommRelayCondition.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.econ;
2
3import java.util.Iterator;
4import java.util.LinkedHashSet;
5
6import com.fs.starfarer.api.campaign.SectorEntityToken;
7import com.fs.starfarer.api.campaign.econ.MarketAPI;
8import com.fs.starfarer.api.campaign.econ.MarketConditionAPI;
9import com.fs.starfarer.api.impl.campaign.ids.Conditions;
10import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
11import com.fs.starfarer.api.impl.campaign.ids.Tags;
12
13
14
16
17 public static String COMM_RELAY_MOD_ID = "core_comm_relay";
18
19 public static float NO_RELAY_PENALTY = -1f;
20 public static float COMM_RELAY_BONUS = 2f;
21 public static float MAKESHIFT_COMM_RELAY_BONUS = 1f;
22
23 public static CommRelayCondition get(MarketAPI market) {
24 MarketConditionAPI mc = market.getCondition(Conditions.COMM_RELAY);
25 if (mc != null && mc.getPlugin() instanceof CommRelayCondition) {
26 return (CommRelayCondition) mc.getPlugin();
27 }
28 return null;
29 }
30
31
32
33 protected LinkedHashSet<SectorEntityToken> relays = new LinkedHashSet<SectorEntityToken>();
34
35 public LinkedHashSet<SectorEntityToken> getRelays() {
36 return relays;
37 }
38
39 @Override
40 public void advance(float amount) {
41 Iterator<SectorEntityToken> iter = relays.iterator();
42 while (iter.hasNext()) {
43 SectorEntityToken relay = iter.next();
44 if (!relay.isAlive() || relay.getContainingLocation() != market.getContainingLocation()) {
45 iter.remove();
46 }
47 }
48 if (relays.isEmpty()) {
49 market.removeSpecificCondition(condition.getIdForPluginModifications());
50 }
51 }
52
53 protected boolean isMakeshift(SectorEntityToken relay) {
54 return relay.hasTag(Tags.MAKESHIFT);
55 }
56
57 protected SectorEntityToken getBestRelay() {
58 if (market.getContainingLocation() == null) return null;
59
60 SectorEntityToken best = null;
61 for (SectorEntityToken relay : relays) {
62 if (relay.getMemoryWithoutUpdate().getBoolean(MemFlags.OBJECTIVE_NON_FUNCTIONAL)) {
63 continue;
64 }
65 if (relay.getFaction() == market.getFaction()) {
66 if (best == null || (isMakeshift(best) && !isMakeshift(relay))) {
67 best = relay;
68 }
69 }
70 }
71 return best;
72 }
73
74
75 public void apply(String id) {
76 SectorEntityToken relay = getBestRelay();
77 if (relay == null) {
78 unapply(id);
79 return;
80 }
81
82 if (isMakeshift(relay)) {
83 market.getStability().modifyFlat(COMM_RELAY_MOD_ID, MAKESHIFT_COMM_RELAY_BONUS, "Makeshift comm relay");
84 } else {
85 market.getStability().modifyFlat(COMM_RELAY_MOD_ID, COMM_RELAY_BONUS, "Comm relay");
86 }
87
88 }
89
90 public void unapply(String id) {
91 market.getStability().unmodifyFlat(COMM_RELAY_MOD_ID);
92 }
93
94 @Override
95 public boolean showIcon() {
96 return false;
97 }
98}
99
100
101
102
103