Starsector API
Loading...
Searching...
No Matches
CreditsGroundRaidObjectivePluginImpl.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.graid;
2
3import java.awt.Color;
4import java.util.Random;
5
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.CargoAPI;
8import com.fs.starfarer.api.campaign.CargoStackAPI;
9import com.fs.starfarer.api.campaign.TextPanelAPI;
10import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType;
11import com.fs.starfarer.api.campaign.econ.CommoditySpecAPI;
12import com.fs.starfarer.api.campaign.econ.MarketAPI;
13import com.fs.starfarer.api.impl.campaign.ids.Commodities;
14import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.RaidDangerLevel;
15import com.fs.starfarer.api.ui.IconGroupAPI;
16import com.fs.starfarer.api.ui.IconRenderMode;
17import com.fs.starfarer.api.ui.TooltipMakerAPI;
18import com.fs.starfarer.api.util.Misc;
19
21
22 public static float CREDITS_PER_MARKET_SIZE = 2500;
23
25 super(market, Commodities.CREDITS);
26 setSource(null);
27 }
28
29 public void addIcons(IconGroupAPI iconGroup) {
30 CommoditySpecAPI spec = getCommoditySpec();
31 if (spec == null) return;
32
33 int base = (int) Math.round(getBaseSizeValue());
34 int minus = getNumMinusTokens();
35 int plus = getNumPlusTokens();
36
37 if (base > 0) {
38 iconGroup.addIconGroup(id, IconRenderMode.NORMAL, base, null);
39 }
40 if (minus > 0) {
41 iconGroup.addIconGroup(id, IconRenderMode.RED, minus, null);
42 }
43 if (plus > 0) {
44 iconGroup.addIconGroup(id, IconRenderMode.GREEN, plus, null);
45 }
46 }
47
48 @Override
49 public String getSourceString() {
50 return null;
51 //return "Colony";
52 }
53
55 return (int) getQuantity(getMarinesAssigned());
56 }
57
58
59 public CommoditySpecAPI getCommoditySpec() {
61 }
62
63 public RaidDangerLevel getDangerLevel() {
64 RaidDangerLevel danger = getCommoditySpec().getBaseDanger();
65
66 float mult = getCreditsLootedMult();
67 if (mult <= 0.75f) {
68 danger = danger.next();
69 } else if (mult >= 1.25f) {
70 danger = danger.prev();
71 }
72 return danger;
73 }
74
75 public float getQuantitySortValue() {
76 return QUANTITY_SORT_TIER_0 + 100000f;
77 }
78
79 @Override
80 public String getQuantityString(int marines) {
81 //return Misc.getWithDGS(getQuantity(Math.max(1, marines)));
82 //return Misc.getDGSCredits(getQuantity(Math.max(1, marines)));
83 return "";
84 }
85
86 public int getValue(int marines) {
87 return (int) (getQuantity(marines) * getCommoditySpec().getBasePrice());
88 }
89
90 public float getQuantity(int marines) {
91 //marines = Math.max(1, marines);
92 float base = getBaseRaidQuantity();
93 return base * marines;
94 }
95
96 public static float MAX_TOKENS = 5;
97 public int getNumPlusTokens() {
98 float incomeMult = market.getIncomeMult().getModifiedValue();
99 int num = 0;
100 if (incomeMult > 1f) num++;
101 if (incomeMult > 1.25f) num++;
102//
103// float stability = market.getStabilityValue();
104// if (stability >= 8) num++;
105// if (stability >= 10) num++;
106
107 float a = market.getAccessibilityMod().computeEffective(0f);
108 num += Math.round((a - 1f) / 0.2f);
109 num = Math.max(num, 0);
110 num = (int) Math.min(num, MAX_TOKENS);
111 return num;
112
113 }
114
115 public int getNumMinusTokens() {
116 if (getNumPlusTokens() > 0) return 0;
117
118 float incomeMult = market.getIncomeMult().getModifiedValue();
119 int num = 0;
120 if (incomeMult < 1f) num++;
121 if (incomeMult < 0.75f) num++;
122
123 float a = market.getAccessibilityMod().computeEffective(0f);
124 num += Math.round((1f - a) / 0.1f);
125 num = Math.max(num, 0);
126 num = (int) Math.min(num, MAX_TOKENS);
127 return num;
128 }
129
130
131 public float getCreditsLootedMult() {
132 //float mult = market.getIncomeMult().getModifiedValue();
133 //float base = getBaseSizeValue();
134 float mult = 1f + (getNumPlusTokens() - getNumMinusTokens()) / (MAX_TOKENS + 1f);
135 mult = Math.round(mult * 100f) / 100f;
136 return mult;
137 }
138
139 public float getBaseSizeValue() {
140 return Math.max(1, market.getSize() - 3);
141 }
142
143 public float getBaseRaidQuantity() {
144 float result = getBaseSizeValue() * CREDITS_PER_MARKET_SIZE;
145 result *= getCreditsLootedMult();
146 return result;
147 }
148
149 public String getName() {
150 return getCommoditySpec().getName();
151 }
152
153 public CargoStackAPI getStackForIcon() {
154 CargoStackAPI stack = Global.getFactory().createCargoStack(CargoItemType.RESOURCES, getId(), null);
155 return stack;
156 }
157
158
159 public int performRaid(CargoAPI loot, Random random, float lootMult, TextPanelAPI text) {
160 if (marinesAssigned <= 0) return 0;
161
162 float base = getQuantity(marinesAssigned);
163 base *= lootMult;
164
165 float mult = 0.9f + random.nextFloat() * 0.2f;
166 base *= mult;
167
168 quantityLooted = (int) base;
169 if (quantityLooted < 1) quantityLooted = 1;
170
171 loot.getCredits().add(quantityLooted);
172
173 xpGained = (int) (quantityLooted * getCommoditySpec().getBasePrice() * XP_GAIN_VALUE_MULT * 0.01f);
174 return xpGained;
175 }
176
177 @Override
178 public boolean hasTooltip() {
179 return true;
180 }
181
182 @Override
183 public void createTooltip(TooltipMakerAPI t, boolean expanded) {
184 float opad = 10f;
185 float pad = 3f;
186 Color h = Misc.getHighlightColor();
187 Color bad = Misc.getNegativeHighlightColor();
188 Color good = Misc.getPositiveHighlightColor();
189 }
190}
191
192
193
194
195
196
197
198
static SettingsAPI getSettings()
Definition Global.java:51
static FactoryAPI getFactory()
Definition Global.java:35
int performRaid(CargoAPI loot, Random random, float lootMult, TextPanelAPI text)
CargoStackAPI createCargoStack(CargoItemType type, Object data, CargoAPI cargo)
CommoditySpecAPI getCommoditySpec(String commodityId)