Starsector API
Loading...
Searching...
No Matches
HT_CMD.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd;
2
3import java.util.List;
4import java.util.Map;
5
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.CargoAPI;
9import com.fs.starfarer.api.campaign.InteractionDialogAPI;
10import com.fs.starfarer.api.campaign.OptionPanelAPI;
11import com.fs.starfarer.api.campaign.SectorEntityToken;
12import com.fs.starfarer.api.campaign.StarSystemAPI;
13import com.fs.starfarer.api.campaign.TextPanelAPI;
14import com.fs.starfarer.api.campaign.rules.MemKeys;
15import com.fs.starfarer.api.campaign.rules.MemoryAPI;
16import com.fs.starfarer.api.impl.campaign.intel.events.ht.HTPoints;
17import com.fs.starfarer.api.impl.campaign.intel.events.ht.HTScavengerDataFactor;
18import com.fs.starfarer.api.impl.campaign.intel.events.ht.HyperspaceTopographyEventIntel;
19import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.Objectives;
20import com.fs.starfarer.api.impl.campaign.velfield.SlipstreamVisibilityManager;
21import com.fs.starfarer.api.util.Misc;
22import com.fs.starfarer.api.util.Misc.Token;
23
29public class HT_CMD extends BaseCommandPlugin {
30
31 public static int CREDITS_PER_TD_POINT = 200;
32
33 public static float MIN_SCAVENGER_FP = 50;
34 public static float MAX_SCAVENGER_FP = 150;
35
36
37 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
38 if (dialog == null) return false;
39
40 OptionPanelAPI options = dialog.getOptionPanel();
41 TextPanelAPI text = dialog.getTextPanel();
42 CampaignFleetAPI pf = Global.getSector().getPlayerFleet();
43 CargoAPI cargo = pf.getCargo();
44
45 SectorEntityToken entity = dialog.getInteractionTarget();
46 if (entity == null) return false;
47
48 String action = params.get(0).getString(memoryMap);
49
50 MemoryAPI memory = memoryMap.get(MemKeys.LOCAL);
51 if (memory == null) return false; // should not be possible unless there are other big problems already
52
53
54 //MarketAPI market = dialog.getInteractionTarget().getMarket();
55 StarSystemAPI system = null;
56 if (dialog.getInteractionTarget().getContainingLocation() instanceof StarSystemAPI) {
57 system = (StarSystemAPI) dialog.getInteractionTarget().getContainingLocation();
58 }
59
60 //HyperspaceTopographyEventIntel intel = HyperspaceTopographyEventIntel.get();
61 //if (intel == null) return false;
62
63 if ("hasRecentReadingsNearby".equals(action)) {
64 return HyperspaceTopographyEventIntel.hasRecentReadingsNearPlayer();
65 } else if ("computeDataStats".equals(action)) {
66 if (entity instanceof CampaignFleetAPI) {
67 CampaignFleetAPI fleet = (CampaignFleetAPI) entity;
68 float fp = fleet.getFleetPoints();
69 int cost = getDataCost(fp);
70 float range = getRevealRange(fp);
71 memory.set("$ht_dataCost", Misc.getWithDGS(cost));
72 memory.set("$ht_dataRange", "" + (int) range);
73 return true;
74 }
75 return false;
76 } else if ("getScavengerData".equals(action)) {
77 if (entity instanceof CampaignFleetAPI) {
78 CampaignFleetAPI fleet = (CampaignFleetAPI) entity;
79 float fp = fleet.getFleetPoints();
80 float range = getRevealRange(fp);
81
82 SlipstreamVisibilityManager.updateSlipstreamVisibility(entity.getLocationInHyperspace(), range);
83
84 int points = getDataPoints(fp);
85 boolean hasRecent = HyperspaceTopographyEventIntel.hasRecentReadingsNearPlayer();
86 if (!hasRecent && points > 0) {
87 HyperspaceTopographyEventIntel.addFactorCreateIfNecessary(new HTScavengerDataFactor(points), dialog);
88 if (HyperspaceTopographyEventIntel.get() != null) {
89 HyperspaceTopographyEventIntel.get().addRecentReadings(entity.getLocationInHyperspace());
90 }
91 }
92 return true;
93 }
94 return false;
95 }
96
97 return false;
98 }
99
100
101
102 public static int getDataCost(float fp) {
104 }
105
106 public static int getRevealRange(float fp) {
107 float min = Objectives.BURST_RANGE_SCAVENGER_MIN;
108 float max = Objectives.BURST_RANGE_SCAVENGER_MAX;
109
110 float f = Math.max(fp - MIN_SCAVENGER_FP, 0) / (MAX_SCAVENGER_FP - MIN_SCAVENGER_FP);
111 if (f > 1f) f = 1f;
112 if (f < 0f) f = 0f;
113
114 int result = Math.round(min + (max - min) * f);
115 return result;
116 }
117 public static int getDataPoints(float fp) {
118 float min = HTPoints.SCAVENGER_MIN;
119 float max = HTPoints.SCAVENGER_MAX;
120
121 float f = Math.max(fp - MIN_SCAVENGER_FP, 0) / (MAX_SCAVENGER_FP - MIN_SCAVENGER_FP);
122 if (f > 1f) f = 1f;
123 if (f < 0f) f = 0f;
124
125 int result = Math.round(min + (max - min) * f);
126 return result;
127 }
128
129
130
131}
static SectorAPI getSector()
Definition Global.java:59
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
Definition HT_CMD.java:37