Starsector API
Loading...
Searching...
No Matches
Mining.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.econ.impl;
2
3import java.awt.Color;
4
5import com.fs.starfarer.api.Global;
6import com.fs.starfarer.api.campaign.PlanetAPI;
7import com.fs.starfarer.api.campaign.SpecialItemData;
8import com.fs.starfarer.api.campaign.econ.MarketAPI;
9import com.fs.starfarer.api.campaign.econ.MarketConditionAPI;
10import com.fs.starfarer.api.campaign.econ.MarketImmigrationModifier;
11import com.fs.starfarer.api.impl.campaign.econ.ResourceDepositsCondition;
12import com.fs.starfarer.api.impl.campaign.ids.Commodities;
13import com.fs.starfarer.api.impl.campaign.ids.Items;
14import com.fs.starfarer.api.impl.campaign.population.PopulationComposition;
15import com.fs.starfarer.api.ui.TooltipMakerAPI;
16import com.fs.starfarer.api.util.Misc;
17import com.fs.starfarer.api.util.Pair;
18
19
20public class Mining extends BaseIndustry implements MarketImmigrationModifier{
21
22 public void apply() {
23 super.apply(true);
24
25 int size = market.getSize();
26
27 demand(Commodities.HEAVY_MACHINERY, size - 3);
28 demand(Commodities.DRUGS, size);
29
30 Pair<String, Integer> deficit = getMaxDeficit(Commodities.HEAVY_MACHINERY);
31 applyDeficitToProduction(0, deficit,
32 Commodities.ORE,
33 Commodities.RARE_ORE,
34 Commodities.ORGANICS,
35 Commodities.VOLATILES);
36
37 if (!isFunctional()) {
38 supply.clear();
39 }
40 }
41
42
43 @Override
44 public void unapply() {
45 super.unapply();
46 }
47
48 protected boolean hasPostDemandSection(boolean hasDemand, IndustryTooltipMode mode) {
49 Pair<String, Integer> deficit = getMaxDeficit(Commodities.DRUGS);
50 if (deficit.two <= 0) return false;
51 //return mode == IndustryTooltipMode.NORMAL && isFunctional();
52 return mode != IndustryTooltipMode.NORMAL || isFunctional();
53 }
54
55 @Override
56 protected void addPostDemandSection(TooltipMakerAPI tooltip, boolean hasDemand, IndustryTooltipMode mode) {
57 //if (mode == IndustryTooltipMode.NORMAL && isFunctional()) {
58 if (mode != IndustryTooltipMode.NORMAL || isFunctional()) {
59 Color h = Misc.getHighlightColor();
60 float opad = 10f;
61 float pad = 3f;
62
63 Pair<String, Integer> deficit = getMaxDeficit(Commodities.DRUGS);
64 if (deficit.two > 0) {
65 tooltip.addPara(getDeficitText(Commodities.DRUGS) + ": %s units. Reduced colony growth.", pad, h, "" + deficit.two);
66 }
67 }
68 }
69
70
71 @Override
72 public boolean isAvailableToBuild() {
73 if (!super.isAvailableToBuild()) return false;
74
75 for (MarketConditionAPI mc : market.getConditions()) {
76 String commodity = ResourceDepositsCondition.COMMODITY.get(mc.getId());
77 if (commodity != null) {
78 String industry = ResourceDepositsCondition.INDUSTRY.get(commodity);
79 if (getId().equals(industry)) return true;
80 }
81 }
82 return false;
83 }
84
85 @Override
86 public String getUnavailableReason() {
87 if (!super.isAvailableToBuild()) return super.getUnavailableReason();
88
89 return "Requires resource deposits";
90 }
91
92 public void modifyIncoming(MarketAPI market, PopulationComposition incoming) {
93 Pair<String, Integer> deficit = getMaxDeficit(Commodities.DRUGS);
94 if (deficit.two > 0) {
95 incoming.getWeight().modifyFlat(getModId(), -deficit.two, "Mining: drug shortage");
96 }
97 }
98
99 @Override
100 public String getCurrentImage() {
101 float size = market.getSize();
102 if (size <= SIZE_FOR_SMALL_IMAGE) {
103 return Global.getSettings().getSpriteName("industry", "mining_low");
104 }
105 return super.getCurrentImage();
106 }
107
108 public float getPatherInterest() {
109 return 1f + super.getPatherInterest();
110 }
111
112 @Override
113 protected boolean canImproveToIncreaseProduction() {
114 return true;
115 }
116
117
118
119 public void applyVisuals(PlanetAPI planet) {
120 if (planet == null) return;
121 planet.getSpec().setShieldTexture2(Global.getSettings().getSpriteName("industry", "plasma_net_texture"));
122 planet.getSpec().setShieldThickness2(0.15f);
123 //planet.getSpec().setShieldColor2(new Color(255,255,255,175));
124 planet.getSpec().setShieldColor2(new Color(255,255,255,255));
125 planet.applySpecChanges();
127 }
128
129 public void unapplyVisuals(PlanetAPI planet) {
130 if (planet == null) return;
131 planet.getSpec().setShieldTexture2(null);
132 planet.getSpec().setShieldThickness2(0f);
133 planet.getSpec().setShieldColor2(null);
134 planet.applySpecChanges();
135 shownPlasmaNetVisuals = false;
136 }
137
138 protected boolean shownPlasmaNetVisuals = false;
139
140 @Override
141 public void setSpecialItem(SpecialItemData special) {
142 super.setSpecialItem(special);
143
144 if (shownPlasmaNetVisuals && (special == null || !special.getId().equals(Items.PLASMA_DYNAMO))) {
145 unapplyVisuals(market.getPlanetEntity());
146 }
147
148 if (special != null && special.getId().equals(Items.PLASMA_DYNAMO)) {
149 applyVisuals(market.getPlanetEntity());
150 }
151 }
152
153
154
155}
156
157
158
159
160
static SettingsAPI getSettings()
Definition Global.java:51
Map< String, MutableCommodityQuantity > supply
Map< String, MutableCommodityQuantity > demand
Pair< String, Integer > getMaxDeficit(String ... commodityIds)
void applyDeficitToProduction(int index, Pair< String, Integer > deficit, String ... commodities)
boolean hasPostDemandSection(boolean hasDemand, IndustryTooltipMode mode)
Definition Mining.java:48
void modifyIncoming(MarketAPI market, PopulationComposition incoming)
Definition Mining.java:92
void addPostDemandSection(TooltipMakerAPI tooltip, boolean hasDemand, IndustryTooltipMode mode)
Definition Mining.java:56
void setSpecialItem(SpecialItemData special)
Definition Mining.java:141
String getSpriteName(String category, String id)