Starsector API
Loading...
Searching...
No Matches
FighterBlueprintItemPlugin.java
Go to the documentation of this file.
1package com.fs.starfarer.api.campaign.impl.items;
2
3import java.awt.Color;
4import java.util.ArrayList;
5import java.util.HashSet;
6import java.util.Iterator;
7import java.util.List;
8import java.util.Random;
9import java.util.Set;
10
11import org.json.JSONArray;
12import org.json.JSONException;
13import org.json.JSONObject;
14
15import com.fs.starfarer.api.Global;
16import com.fs.starfarer.api.campaign.CargoStackAPI;
17import com.fs.starfarer.api.campaign.CargoTransferHandlerAPI;
18import com.fs.starfarer.api.campaign.econ.MarketAPI;
19import com.fs.starfarer.api.campaign.econ.SubmarketAPI;
20import com.fs.starfarer.api.combat.ShipVariantAPI;
21import com.fs.starfarer.api.graphics.SpriteAPI;
22import com.fs.starfarer.api.impl.campaign.ids.Tags;
23import com.fs.starfarer.api.loading.Description;
24import com.fs.starfarer.api.loading.Description.Type;
25import com.fs.starfarer.api.loading.FighterWingSpecAPI;
26import com.fs.starfarer.api.ui.TooltipMakerAPI;
27import com.fs.starfarer.api.util.Misc;
28import com.fs.starfarer.api.util.WeightedRandomPicker;
29
31
32 protected FighterWingSpecAPI wing;
33 protected ShipVariantAPI fighter;
34
35 @Override
36 public void init(CargoStackAPI stack) {
37 super.init(stack);
39 fighter = wing.getVariant();
40 }
41
42
43 public List<String> getProvidedFighters() {
44 List<String> result = new ArrayList<String>();
45 result.add(wing.getId());
46 return result;
47 }
48
49 public List<String> getProvidedShips() {
50 return null;
51 }
52
53 public List<String> getProvidedWeapons() {
54 return null;
55 }
56 public List<String> getProvidedIndustries() {
57 return null;
58 }
59
60 @Override
61 public String getDesignType() {
62 if (fighter != null) {
63 return fighter.getHullSpec().getManufacturer();
64 }
65 return null;
66 }
67
68 @Override
69 public void render(float x, float y, float w, float h, float alphaMult,
70 float glowMult, SpecialItemRendererAPI renderer) {
71 float cx = x + w/2f;
72 float cy = y + h/2f;
73
74 w = 40;
75 h = 40;
76
77 float blX = cx - 24f;
78 float blY = cy - 17f;
79 float tlX = cx - 14f;
80 float tlY = cy + 26f;
81 float trX = cx + 28f;
82 float trY = cy + 25f;
83 float brX = cx + 20f;
84 float brY = cy - 18f;
85
86 String wingId = stack.getSpecialDataIfSpecial().getData();
87 boolean known = Global.getSector().getPlayerFaction().knowsFighter(wingId);
88
89 float mult = 1f;
90
91 Color bgColor = Global.getSector().getPlayerFaction().getDarkUIColor();
92 bgColor = Misc.setAlpha(bgColor, 255);
93 renderer.renderBGWithCorners(bgColor, blX, blY, tlX, tlY, trX, trY, brX, brY,
94 alphaMult * mult, glowMult * 0.5f * mult, false);
95 renderer.renderShipWithCorners(wingId, null, blX, blY, tlX, tlY, trX, trY, brX, brY,
96 alphaMult * mult, glowMult * 0.5f * mult, !known);
97
98 SpriteAPI overlay = Global.getSettings().getSprite("ui", "bpOverlayFighter");
99 overlay.setColor(Color.green);
100 overlay.setColor(Global.getSector().getPlayerFaction().getBrightUIColor());
101 overlay.setAlphaMult(alphaMult);
102 overlay.setNormalBlend();
103 renderer.renderScanlinesWithCorners(blX, blY, tlX, tlY, trX, trY, brX, brY, alphaMult, false);
104
105 if (known) {
106 renderer.renderBGWithCorners(Color.black, blX, blY, tlX, tlY, trX, trY, brX, brY,
107 alphaMult * 0.5f, 0f, false);
108 }
109
110 //renderer.renderScanlinesWithCorners(blX, blY, tlX, tlY, trX, trY, brX, brY, alphaMult, false);
111
112 overlay.renderWithCorners(blX, blY, tlX, tlY, trX, trY, brX, brY);
113 }
114
115 @Override
116 public int getPrice(MarketAPI market, SubmarketAPI submarket) {
117 if (wing != null) {
118 float base = super.getPrice(market, submarket);
119 return (int)(base + wing.getBaseValue() * getItemPriceMult());
120 }
121 return super.getPrice(market, submarket);
122 }
123
124 @Override
125 public String getName() {
126 if (wing != null) {
127 return wing.getWingName() + " Blueprint";
128 }
129 return super.getName();
130 }
131
132 @Override
133 public void createTooltip(TooltipMakerAPI tooltip, boolean expanded, CargoTransferHandlerAPI transferHandler, Object stackSource) {
134 super.createTooltip(tooltip, expanded, transferHandler, stackSource);
135
136 float pad = 3f;
137 float opad = 10f;
138 float small = 5f;
139 Color h = Misc.getHighlightColor();
140 Color g = Misc.getGrayColor();
141 Color b = Misc.getButtonTextColor();
142 b = Misc.getPositiveHighlightColor();
143
144 String wingId = stack.getSpecialDataIfSpecial().getData();
145 boolean known = Global.getSector().getPlayerFaction().knowsFighter(wingId);
146
147 List<String> wings = new ArrayList<String>();
148 wings.add(wingId);
149 addFighterList(tooltip, "Fighters:", wings, 1, opad);
150
151 Description desc = Global.getSettings().getDescription(fighter.getHullSpec().getDescriptionId(), Type.SHIP);
152 tooltip.addPara(desc.getText1FirstPara(), opad);
153
154 addCostLabel(tooltip, opad, transferHandler, stackSource);
155
156 if (known) {
157 tooltip.addPara("Already known", g, opad);
158 } else {
159 tooltip.addPara("Right-click to learn", b, opad);
160 }
161 }
162
163 @Override
164 public boolean hasRightClickAction() {
165 return true;
166 }
167
168 @Override
170 String wingId = stack.getSpecialDataIfSpecial().getData();
171 return !Global.getSector().getPlayerFaction().knowsFighter(wingId);
172 }
173
174 @Override
176 String wingId = stack.getSpecialDataIfSpecial().getData();
177
178 if (Global.getSector().getPlayerFaction().knowsFighter(wingId)) {
179 Global.getSector().getCampaignUI().getMessageDisplay().addMessage(
180 "" + wing.getWingName() + ": blueprint already known");//,
181 } else {
182 Global.getSoundPlayer().playUISound("ui_acquired_blueprint", 1, 1);
183 Global.getSector().getPlayerFaction().addKnownFighter(wingId, true);
184 Global.getSector().getCampaignUI().getMessageDisplay().addMessage(
185 "Acquired blueprint: " + wing.getWingName() + "");//,
186
187 }
188 }
189
190 @Override
191 public String resolveDropParamsToSpecificItemData(String params, Random random) throws JSONException {
192 if (params == null || params.isEmpty()) return null;
193
194 if (!params.startsWith("{")) {
195 return params;
196 }
197 JSONObject json = new JSONObject(params);
198
199 int tier = json.optInt("tier", -1);
200 Set<String> tags = new HashSet<String>();
201 if (json.has("tags")) {
202 JSONArray tagsArray = json.getJSONArray("tags");
203 for (int i = 0; i < tagsArray.length(); i++) {
204 tags.add(tagsArray.getString(i));
205 }
206 }
207
208 return pickFighterWing(tier, tags, random);
209 }
210
211
212 protected String pickFighterWing(int tier, Set<String> tags, Random random) {
213 List<FighterWingSpecAPI> specs = Global.getSettings().getAllFighterWingSpecs();
214
215 Iterator<FighterWingSpecAPI> iter = specs.iterator();
216 while (iter.hasNext()) {
217 FighterWingSpecAPI curr = iter.next();
218 if (curr.hasTag(Tags.WING_NO_DROP)) {
219 iter.remove();
220 }
221 }
222
223 if (tier >= 0) {
224 iter = specs.iterator();
225 while (iter.hasNext()) {
226 FighterWingSpecAPI curr = iter.next();
227 if (curr.getTier() != tier) iter.remove();
228 }
229 }
230
231 if (!tags.isEmpty()) {
232 iter = specs.iterator();
233 while (iter.hasNext()) {
234 FighterWingSpecAPI curr = iter.next();
235 for (String tag : tags) {
236 boolean not = tag.startsWith("!");
237 tag = not ? tag.substring(1) : tag;
238 boolean has = curr.hasTag(tag);
239 if (not == has) {
240 iter.remove();
241 break;
242 }
243 }
244 }
245 }
246
247 WeightedRandomPicker<FighterWingSpecAPI> picker = new WeightedRandomPicker<FighterWingSpecAPI>(random);
248 for (FighterWingSpecAPI spec : specs) {
249 picker.add(spec, 1f * spec.getRarity());
250 }
251 FighterWingSpecAPI pick = picker.pick();
252 if (pick == null) {
253 return null;
254 } else {
255 return pick.getId();
256 }
257 }
258
259}
260
261
262
263
264
static SettingsAPI getSettings()
Definition Global.java:51
static SoundPlayerAPI getSoundPlayer()
Definition Global.java:43
static SectorAPI getSector()
Definition Global.java:59
void addCostLabel(TooltipMakerAPI tooltip, float pad, CargoTransferHandlerAPI transferHandler, Object stackSource)
void addFighterList(TooltipMakerAPI tooltip, String title, List< String > wings, int max, float opad)
void render(float x, float y, float w, float h, float alphaMult, float glowMult, SpecialItemRendererAPI renderer)
void createTooltip(TooltipMakerAPI tooltip, boolean expanded, CargoTransferHandlerAPI transferHandler, Object stackSource)
Description getDescription(String id, Type type)
FighterWingSpecAPI getFighterWingSpec(String wingId)
SpriteAPI getSprite(String filename)
List< FighterWingSpecAPI > getAllFighterWingSpecs()
SoundAPI playUISound(String id, float pitch, float volume)
void renderScanlinesWithCorners(float blX, float blY, float tlX, float tlY, float trX, float trY, float brX, float brY, float alphaMult, boolean additive)
void renderBGWithCorners(Color bgColor, float blX, float blY, float tlX, float tlY, float trX, float trY, float brX, float brY, float alphaMult, float glowMult, boolean additive)
void renderShipWithCorners(String hullOrWingId, Color bgColor, float blX, float blY, float tlX, float tlY, float trX, float trY, float brX, float brY, float alphaMult, float glowMult, boolean withSpotlight)