1package com.fs.starfarer.api.campaign.econ;
3import java.util.ArrayList;
4import java.util.Arrays;
5import java.util.LinkedHashMap;
6import java.util.LinkedList;
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.campaign.CargoAPI;
11import com.fs.starfarer.api.campaign.SectorEntityToken;
12import com.fs.starfarer.api.impl.campaign.MonthlyReportNodeTooltipCreator;
13import com.fs.starfarer.api.impl.campaign.ids.Factions;
14import com.fs.starfarer.api.ui.TooltipMakerAPI.TooltipCreator;
18 public static String
CREW =
"node_id_crew";
19 public static String
MARINES =
"node_id_marines";
20 public static String
FLEET =
"node_id_fleet";
21 public static String
OUTPOSTS =
"node_id_outposts";
25 public static String
OVERHEAD =
"node_id_overhead";
31 public static String
EXPORTS =
"node_id_exports";
32 public static String
STORAGE =
"node_id_storage";
33 public static String
ADMIN =
"node_id_admin";
40 public static String
OFFICERS =
"node_id_officers";
49 public static class FDNode {
50 protected LinkedHashMap<String, FDNode> children;
58 public float totalIncome;
59 public float totalUpkeep;
62 public Object custom2;
65 public TooltipCreator tooltipCreator =
null;
66 public Object tooltipParam;
68 public LinkedHashMap<String, FDNode> getChildren() {
69 if (children ==
null)
return new LinkedHashMap<String, FDNode>();
73 public int getDepth() {
76 while (curr.parent !=
null) {
84 private FDNode root =
new FDNode();
85 private long timestamp;
87 private int previousDebt = 0;
89 private MonthlyReportNodeTooltipCreator monthlyReportTooltip;
91 if (monthlyReportTooltip ==
null) {
92 monthlyReportTooltip =
new MonthlyReportNodeTooltipCreator();
94 return monthlyReportTooltip;
106 this.timestamp = timestamp;
114 this.previousDebt = previousDebt;
130 curr.totalIncome = curr.income;
131 curr.totalUpkeep = curr.upkeep;
133 for (FDNode child : curr.getChildren().values()) {
137 if (curr.parent !=
null) {
138 curr.parent.totalIncome += curr.totalIncome;
139 curr.parent.totalUpkeep += curr.totalUpkeep;
144 List<FDNode> all =
new ArrayList<FDNode>();
152 for (FDNode child : curr.getChildren().values()) {
158 return getNode(root,
new LinkedList<String>(Arrays.asList(path)));
161 public FDNode
getNode(FDNode from, String ... path) {
162 return getNode(from,
new LinkedList<String>(Arrays.asList(path)));
164 public FDNode
getNode(FDNode from, List<String> path) {
165 if (path.isEmpty())
return from;
167 String nextId = path.remove(0);
168 FDNode next = from.children ==
null ? null : from.children.get(nextId);
170 if (from.children ==
null) {
171 from.children =
new LinkedHashMap<String, FDNode>();
175 from.children.put(nextId, next);
183 if (marketsNode.name ==
null) {
184 marketsNode.name =
"Colonies";
195 if (mNode.name ==
null) {
197 mNode.custom = market;
206 if (sNode.name ==
null) {
207 sNode.name =
"Stockpiles used to counter shortages";
210 ((
CargoAPI)sNode.custom2).initMothballedShips(Factions.PLAYER);
222 if (sNode.name ==
null) {
223 sNode.name =
"Stockpiles drawn by your fleet";
226 ((
CargoAPI)sNode.custom2).initMothballedShips(Factions.PLAYER);
234 if (debtNode.name ==
null) {
235 debtNode.name =
"Last month's debt";
243 public static void main(String[] args) {
246 data.
getNode(
"test",
"test1",
"test2").income = 10;
248 System.out.println(data);
static SettingsAPI getSettings()
static FactoryAPI getFactory()
static String STOCKPILING
FDNode getNode(FDNode from, String ... path)
void getAllNodes(FDNode curr, List< FDNode > nodes)
FDNode getCounterShortageNode(MarketAPI market)
FDNode getMarketNode(MarketAPI market)
void setPreviousDebt(int previousDebt)
static String STORAGE_SHIPS
void setTimestamp(long timestamp)
static String LAST_MONTH_DEBT
FDNode getNode(FDNode from, List< String > path)
static String STORAGE_CARGO
FDNode getNode(String ... path)
void computeTotals(FDNode curr)
static void main(String[] args)
FDNode getRestockingNode(MarketAPI market)
static String PRODUCTION_WEAPONS
MonthlyReportNodeTooltipCreator getMonthlyReportTooltip()
List< FDNode > getAllNodes()
CargoAPI createCargo(boolean unlimitedStacks)
String getSpriteName(String category, String id)