Starsector API
Loading...
Searching...
No Matches
StandardGroundRaidObjectivesCreator.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.graid;
2
3import java.util.ArrayList;
4import java.util.HashMap;
5import java.util.List;
6import java.util.Map;
7
8import com.fs.starfarer.api.campaign.InteractionDialogAPI;
9import com.fs.starfarer.api.campaign.SectorEntityToken;
10import com.fs.starfarer.api.campaign.SpecialItemData;
11import com.fs.starfarer.api.campaign.econ.CommodityOnMarketAPI;
12import com.fs.starfarer.api.campaign.econ.Industry;
13import com.fs.starfarer.api.campaign.econ.MarketAPI;
14import com.fs.starfarer.api.campaign.listeners.GroundRaidObjectivesListener;
15import com.fs.starfarer.api.campaign.rules.MemoryAPI;
16import com.fs.starfarer.api.impl.campaign.econ.impl.BaseIndustry;
17import com.fs.starfarer.api.impl.campaign.ids.Commodities;
18import com.fs.starfarer.api.impl.campaign.ids.Conditions;
19import com.fs.starfarer.api.impl.campaign.ids.Industries;
20import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.RaidType;
21
22public class StandardGroundRaidObjectivesCreator implements GroundRaidObjectivesListener {
23
24 public void modifyRaidObjectives(MarketAPI market, SectorEntityToken entity, List<GroundRaidObjectivePlugin> objectives, RaidType type, int marineTokens, int priority) {
25 if (priority != 0) return;
26 if (market == null) return;
27
28 if (type == RaidType.VALUABLE) {
29 Map<CommodityOnMarketAPI, Float> raidValuables = computeRaidValuables(market);
30 List<CommodityOnMarketAPI> commodities = new ArrayList<CommodityOnMarketAPI>(raidValuables.keySet());
31 for (CommodityOnMarketAPI com : commodities) {
33 if (curr.getQuantity(1) <= 0) continue;
34 objectives.add(curr);
35 }
36
37 for (Industry ind : market.getIndustries()) {
38 String coreId = ind.getAICoreId();
39 if (coreId != null) {
41 objectives.add(core);
42 }
43 SpecialItemData sid = ind.getSpecialItem();
44 if (sid != null) {
46 sid.getId(), null, ind);
47 objectives.add(special);
48
49 }
50 }
51
52 // a bit confusing, and also hard to balance - either the best option or the worst, not much in-between
53// CreditsGroundRaidObjectivePluginImpl credits = new CreditsGroundRaidObjectivePluginImpl(market);
54// if (credits.getQuantity(1) > 0) {
55// objectives.add(credits);
56// }
57
59 if (weapons.getQuantity(1) > 0) {
60 objectives.add(weapons);
61 }
62
64 if (blueprints.getQuantity(1) > 0) {
65 objectives.add(blueprints);
66 }
67
68 if (market.hasCondition(Conditions.SOLAR_ARRAY)) {
69 objectives.add(new SolarArrayGroundRaidObjectivePluginImpl(market));
70 }
71
72 } else if (type == RaidType.DISRUPT) {
73 for (Industry ind : market.getIndustries()) {
74 if (ind.getSpec().hasTag(Industries.TAG_UNRAIDABLE)) continue;
75
77 if (curr.getBaseDisruptDuration(marineTokens) <= 0) continue;
78 objectives.add(curr);
79 }
80 }
81 }
82
83 protected Map<CommodityOnMarketAPI, Float> computeRaidValuables(MarketAPI market) {
84 Map<CommodityOnMarketAPI, Float> result = new HashMap<CommodityOnMarketAPI, Float>();
85 for (CommodityOnMarketAPI com : market.getAllCommodities()) {
86 if (com.isPersonnel()) continue;
87 if (com.getCommodity().hasTag(Commodities.TAG_META)) continue;
88 if (com.getCommodity().hasTag(Commodities.TAG_NON_ECONOMIC)) continue;
89
90 int a = com.getAvailable();
91 if (a > 0) {
92 float num = BaseIndustry.getSizeMult(a) * com.getCommodity().getEconUnit() * 0.5f;
93 result.put(com, num);
94 }
95 }
96 return result;
97 }
98
99
100 public void reportRaidObjectivesAchieved(RaidResultData data, InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap) {
101
102 }
103
104}
void modifyRaidObjectives(MarketAPI market, SectorEntityToken entity, List< GroundRaidObjectivePlugin > objectives, RaidType type, int marineTokens, int priority)
void reportRaidObjectivesAchieved(RaidResultData data, InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)