1package com.fs.starfarer.api.campaign.impl.items;
4import java.util.ArrayList;
5import java.util.HashSet;
6import java.util.Iterator;
8import java.util.Random;
11import org.json.JSONArray;
12import org.json.JSONException;
13import org.json.JSONObject;
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.WeaponAPI.AIHints;
21import com.fs.starfarer.api.graphics.SpriteAPI;
22import com.fs.starfarer.api.loading.Description;
23import com.fs.starfarer.api.loading.Description.Type;
24import com.fs.starfarer.api.loading.WeaponSpecAPI;
25import com.fs.starfarer.api.ui.TooltipMakerAPI;
26import com.fs.starfarer.api.util.Misc;
27import com.fs.starfarer.api.util.WeightedRandomPicker;
49 List<String> result =
new ArrayList<String>();
50 result.add(
weapon.getWeaponId());
58 public void render(
float x,
float y,
float w,
float h,
float alphaMult,
73 boolean known =
Global.
getSector().getPlayerFaction().knowsWeapon(weaponId);
87 bgColor = Misc.setAlpha(bgColor, 255);
89 alphaMult * mult, glowMult * 0.5f * mult,
false);
94 alphaMult * mult, glowMult * 0.5f * mult, !known);
97 overlay.setColor(Color.green);
98 overlay.setColor(
Global.
getSector().getPlayerFaction().getBrightUIColor());
99 overlay.setAlphaMult(alphaMult);
100 overlay.setNormalBlend();
105 alphaMult * 0.5f, 0f,
false);
110 overlay.renderWithCorners(blX, blY, tlX, tlY, trX, trY, brX, brY);
114 public int getPrice(MarketAPI market, SubmarketAPI submarket) {
116 float base = super.getPrice(market, submarket);
119 return super.getPrice(market, submarket);
125 return weapon.getWeaponName() +
" Blueprint";
127 return super.getName();
133 return weapon.getManufacturer();
140 super.createTooltip(tooltip, expanded, transferHandler, stackSource);
145 Color h = Misc.getHighlightColor();
146 Color g = Misc.getGrayColor();
147 Color b = Misc.getButtonTextColor();
148 b = Misc.getPositiveHighlightColor();
151 boolean known =
Global.
getSector().getPlayerFaction().knowsWeapon(weaponId);
153 List<String> weapons =
new ArrayList<String>();
154 weapons.add(weaponId);
158 tooltip.addPara(desc.getText1FirstPara(), opad);
160 addCostLabel(tooltip, opad, transferHandler, stackSource);
163 tooltip.addPara(
"Already known", g, opad);
165 tooltip.addPara(
"Right-click to learn", b, opad);
186 "" +
weapon.getWeaponName() +
": blueprint already known");
191 "Acquired blueprint: " +
weapon.getWeaponName() +
"");
198 if (params ==
null || params.isEmpty())
return null;
200 if (!params.startsWith(
"{")) {
204 JSONObject json =
new JSONObject(params);
206 int tier = json.optInt(
"tier", -1);
207 Set<String> tags =
new HashSet<String>();
208 if (json.has(
"tags")) {
209 JSONArray tagsArray = json.getJSONArray(
"tags");
210 for (
int i = 0; i < tagsArray.length(); i++) {
211 tags.add(tagsArray.getString(i));
219 protected String
pickWeapon(
int tier, Set<String> tags, Random random) {
222 Iterator<WeaponSpecAPI> iter = specs.iterator();
223 while (iter.hasNext()) {
224 WeaponSpecAPI curr = iter.next();
225 if (curr.getAIHints().contains(AIHints.SYSTEM)) {
231 iter = specs.iterator();
232 while (iter.hasNext()) {
233 WeaponSpecAPI curr = iter.next();
234 if (curr.getTier() != tier) iter.remove();
238 if (!tags.isEmpty()) {
239 iter = specs.iterator();
240 while (iter.hasNext()) {
241 WeaponSpecAPI curr = iter.next();
242 for (String tag : tags) {
243 boolean not = tag.startsWith(
"!");
244 tag = not ? tag.substring(1) : tag;
245 boolean has = curr.hasTag(tag);
254 WeightedRandomPicker<WeaponSpecAPI> picker =
new WeightedRandomPicker<WeaponSpecAPI>(random);
255 for (WeaponSpecAPI
spec : specs) {
258 WeaponSpecAPI pick = picker.pick();
262 return pick.getWeaponId();
static SettingsAPI getSettings()
static SoundPlayerAPI getSoundPlayer()
static SectorAPI getSector()
void addCostLabel(TooltipMakerAPI tooltip, float pad, CargoTransferHandlerAPI transferHandler, Object stackSource)
void addWeaponList(TooltipMakerAPI tooltip, String title, List< String > weapons, int max, float opad)
List< String > getProvidedWeapons()
String pickWeapon(int tier, Set< String > tags, Random random)
int getPrice(MarketAPI market, SubmarketAPI submarket)
void init(CargoStackAPI stack)
void createTooltip(TooltipMakerAPI tooltip, boolean expanded, CargoTransferHandlerAPI transferHandler, Object stackSource)
void performRightClickAction()
List< String > getProvidedShips()
String resolveDropParamsToSpecificItemData(String params, Random random)
void render(float x, float y, float w, float h, float alphaMult, float glowMult, SpecialItemRendererAPI renderer)
boolean shouldRemoveOnRightClickAction()
boolean hasRightClickAction()
List< String > getProvidedFighters()
List< String > getProvidedIndustries()
Description getDescription(String id, Type type)
List< WeaponSpecAPI > getAllWeaponSpecs()
WeaponSpecAPI getWeaponSpec(String weaponId)
SpriteAPI getSprite(String filename)
SoundAPI playUISound(String id, float pitch, float volume)
SpecialItemData getSpecialDataIfSpecial()
void renderWeaponWithCorners(String weaponId, float blX, float blY, float tlX, float tlY, float trX, float trY, float brX, float brY, float alphaMult, float glowMult, boolean withSpotlight)
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)