Starsector API
Loading...
Searching...
No Matches
Farming.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.econ.impl;
2
3import java.util.HashSet;
4import java.util.Set;
5
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.econ.MarketAPI;
8import com.fs.starfarer.api.campaign.econ.MarketConditionAPI;
9import com.fs.starfarer.api.campaign.econ.MarketImmigrationModifier;
10import com.fs.starfarer.api.impl.campaign.econ.ResourceDepositsCondition;
11import com.fs.starfarer.api.impl.campaign.ids.Commodities;
12import com.fs.starfarer.api.impl.campaign.ids.Factions;
13import com.fs.starfarer.api.impl.campaign.ids.Industries;
14import com.fs.starfarer.api.impl.campaign.ids.Planets;
15import com.fs.starfarer.api.impl.campaign.population.PopulationComposition;
16import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.RaidDangerLevel;
17import com.fs.starfarer.api.ui.TooltipMakerAPI;
18import com.fs.starfarer.api.util.Pair;
19
20
21public class Farming extends BaseIndustry implements MarketImmigrationModifier {
22
23 public static Set<String> AQUA_PLANETS = new HashSet<String>();
24
25 static {
26 AQUA_PLANETS.add(Planets.PLANET_WATER);
27 }
28
29 public void apply() {
30 super.apply(true);
31
32 int size = market.getSize();
33 boolean aquaculture = Industries.AQUACULTURE.equals(getId());
34
35 if (aquaculture) {
36 demand(0, Commodities.HEAVY_MACHINERY, size, BASE_VALUE_TEXT);
37 } else {
38 demand(0, Commodities.HEAVY_MACHINERY, size - 3, BASE_VALUE_TEXT);
39 }
40
41 //supply(3, Commodities.LOBSTER, 5, "Hack");
42
43 // ResourceDepositsCondition sets base value
44 // makes more sense for Mining where mining doesn't have to check for existence of resource conditions
45
46// int deficit = getMaxDeficit(Commodities.HEAVY_MACHINERY);
47// supply(1, Commodities.FOOD, -deficit, getDeficitText(Commodities.HEAVY_MACHINERY));
48// supply(1, Commodities.ORGANICS, -deficit, getDeficitText(Commodities.HEAVY_MACHINERY));
49
50 Pair<String, Integer> deficit = getMaxDeficit(Commodities.HEAVY_MACHINERY);
51 //applyDeficitToProduction(0, deficit, Commodities.FOOD, Commodities.ORGANICS);
52 applyDeficitToProduction(0, deficit, Commodities.FOOD);
53
54
55 if (!isFunctional()) {
56 supply.clear();
57 }
58 }
59
60
61 @Override
62 public void unapply() {
63 super.unapply();
64 }
65
66
67 @Override
68 public boolean isAvailableToBuild() {
69 if (!super.isAvailableToBuild()) return false;
70 boolean aquaculture = Industries.AQUACULTURE.equals(getId());
71 boolean canAquaculture = market.getPlanetEntity() != null &&
72 AQUA_PLANETS.contains(market.getPlanetEntity().getTypeId());
73 if (aquaculture != canAquaculture) 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 (Industries.FARMING.equals(industry)) return true;
80 }
81 }
82 return false;
83 }
84
85
86 @Override
87 public boolean showWhenUnavailable() {
88 boolean aquaculture = Industries.AQUACULTURE.equals(getId());
89 boolean canAquaculture = market.getPlanetEntity() != null &&
90 AQUA_PLANETS.contains(market.getPlanetEntity().getTypeId());
91 if (aquaculture != canAquaculture) return false;
92
93 return super.showWhenUnavailable();
94 }
95
96
97 @Override
98 public String getUnavailableReason() {
99 if (!super.isAvailableToBuild()) return super.getUnavailableReason();
100 return "Requires farmland";
101 }
102
103
104 @Override
105 public void createTooltip(IndustryTooltipMode mode, TooltipMakerAPI tooltip, boolean expanded) {
106 super.createTooltip(mode, tooltip, expanded);
107//
108// int size = market.getSize();
109// boolean aquaculture = Industries.AQUACULTURE.equals(getId());
110//
111// int machinery = size - 3;
112// if (aquaculture) {
113// machinery = size;
114// }
115// if (machinery < 0) machinery = 0;
116//
117// float pad = 3f;
118// float opad = 10f;
119//
120// FactionAPI faction = market.getFaction();
121// Color color = faction.getBaseUIColor();
122// Color dark = faction.getDarkUIColor();
123// Color grid = faction.getGridUIColor();
124// Color bright = faction.getBrightUIColor();
125//
126// tooltip.addSectionHeading("Produces", color, dark, Alignment.MID, opad);
127// tooltip.beginIconGroup();
128// tooltip.setIconSpacingMedium();
129// for (MutableCommodityQuantity curr : supply.values()) {
130// int qty = curr.getQuantity().getModifiedInt();
131// if (qty <= 0) continue;
132// tooltip.addIcons(market.getCommodityData(curr.getCommodityId()), qty, IconRenderMode.NORMAL);
133// }
134// tooltip.addIconGroup(opad);
135//
136// tooltip.addSectionHeading("Requires", color, dark, Alignment.MID, opad);
137// tooltip.beginIconGroup();
138// tooltip.setIconSpacingMedium();
139// for (MutableCommodityQuantity curr : demand.values()) {
140// int qty = curr.getQuantity().getModifiedInt();
141// if (qty <= 0) continue;
142// tooltip.addIcons(market.getCommodityData(curr.getCommodityId()), qty, IconRenderMode.NORMAL);
143// }
144// tooltip.addIconGroup(opad);
145
146 }
147
148
149 public void modifyIncoming(MarketAPI market, PopulationComposition incoming) {
150 incoming.add(Factions.LUDDIC_CHURCH, 10f);
151 }
152
153
154 @Override
155 public String getCurrentImage() {
156 boolean aquaculture = Industries.AQUACULTURE.equals(getId());
157 if (aquaculture) {
158 return super.getCurrentImage();
159 }
160 float size = market.getSize();
161 //PlanetAPI planet = market.getPlanetEntity();
162 if (size <= SIZE_FOR_SMALL_IMAGE) {
163 return Global.getSettings().getSpriteName("industry", "farming_low");
164 }
165 if (size >= SIZE_FOR_LARGE_IMAGE) {
166 return Global.getSettings().getSpriteName("industry", "farming_high");
167 }
168 return Global.getSettings().getSpriteName("industry", "farming_med");
169 //return super.getCurrentImage();
170 }
171
172 @Override
173 protected boolean canImproveToIncreaseProduction() {
174 return true;
175 }
176
177
178 @Override
179 public RaidDangerLevel adjustCommodityDangerLevel(String commodityId, RaidDangerLevel level) {
180 boolean aquaculture = Industries.AQUACULTURE.equals(getId());
181 if (aquaculture) return level;
182 return level.prev();
183 }
184
185 @Override
186 public RaidDangerLevel adjustItemDangerLevel(String itemId, String data, RaidDangerLevel level) {
187 boolean aquaculture = Industries.AQUACULTURE.equals(getId());
188 if (aquaculture) return level;
189 return level.prev();
190 }
191
192}
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)
RaidDangerLevel adjustItemDangerLevel(String itemId, String data, RaidDangerLevel level)
Definition Farming.java:186
RaidDangerLevel adjustCommodityDangerLevel(String commodityId, RaidDangerLevel level)
Definition Farming.java:179
void modifyIncoming(MarketAPI market, PopulationComposition incoming)
Definition Farming.java:149
void createTooltip(IndustryTooltipMode mode, TooltipMakerAPI tooltip, boolean expanded)
Definition Farming.java:105
String getSpriteName(String category, String id)