Starsector API
Loading...
Searching...
No Matches
CodexUnlocker.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.codex;
2
3import java.util.LinkedHashSet;
4import java.util.List;
5
6import com.fs.starfarer.api.GameState;
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.BattleAPI;
9import com.fs.starfarer.api.campaign.CampaignEventListener.FleetDespawnReason;
10import com.fs.starfarer.api.campaign.CampaignFleetAPI;
11import com.fs.starfarer.api.campaign.CargoAPI;
12import com.fs.starfarer.api.campaign.CargoStackAPI;
13import com.fs.starfarer.api.campaign.InteractionDialogAPI;
14import com.fs.starfarer.api.campaign.PlayerMarketTransaction;
15import com.fs.starfarer.api.campaign.SectorEntityToken;
16import com.fs.starfarer.api.campaign.SpecialItemSpecAPI;
17import com.fs.starfarer.api.campaign.econ.CommoditySpecAPI;
18import com.fs.starfarer.api.campaign.econ.Industry;
19import com.fs.starfarer.api.campaign.econ.MarketAPI;
20import com.fs.starfarer.api.campaign.econ.MarketConditionAPI;
21import com.fs.starfarer.api.campaign.econ.SubmarketAPI;
22import com.fs.starfarer.api.campaign.listeners.CargoScreenListener;
23import com.fs.starfarer.api.campaign.listeners.CodexEventListener;
24import com.fs.starfarer.api.campaign.listeners.FleetEventListener;
25import com.fs.starfarer.api.characters.AbilityPlugin;
26import com.fs.starfarer.api.characters.MutableCharacterStatsAPI;
27import com.fs.starfarer.api.characters.MutableCharacterStatsAPI.SkillLevelAPI;
28import com.fs.starfarer.api.fleet.FleetMemberAPI;
29import com.fs.starfarer.api.impl.SharedUnlockData;
30import com.fs.starfarer.api.impl.campaign.ids.Tags;
31import com.fs.starfarer.api.loading.FighterWingSpecAPI;
32import com.fs.starfarer.api.loading.HullModSpecAPI;
33import com.fs.starfarer.api.loading.WeaponSpecAPI;
34import com.fs.starfarer.api.util.Misc;
35
43
44 @Override
45 public void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param) {
46 }
47
48 @Override
49 public void reportBattleOccurred(CampaignFleetAPI nullHere, CampaignFleetAPI primaryWinner, BattleAPI battle) {
50 if (battle == null || !battle.isPlayerInvolved()) return;
51
52 LinkedHashSet<String> hulls = new LinkedHashSet<String>();
53
54 for (CampaignFleetAPI fleet : battle.getNonPlayerSideSnapshot()) {
55 List<FleetMemberAPI> members = Misc.getSnapshotMembersLost(fleet);
56 // unlock everything, not just the destroyed ships
57 //if (primaryWinner != null && primaryWinner.isPlayerFleet()) {
58 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
59 if (!members.contains(member)) {
60 members.add(member);
61 }
62 }
63 //}
64 for (FleetMemberAPI member : members) {
65 if (member.getHullSpec().hasTag(Tags.CODEX_UNLOCKABLE)) {
66 String hullId = CodexDataV2.getFleetMemberBaseHullId(member);
67 if (SharedUnlockData.get().isPlayerAwareOfShip(hullId)) continue;
68 hulls.add(hullId);
69 }
70 }
71 }
72
73 if (!hulls.isEmpty()) {
74 for (String hullId : hulls) {
76 }
78 }
79 }
80
81 @Override
84 }
85
86 @Override
87 public void reportAboutToOpenCodex() {
89 }
90
91 public void unlockStuff() {
93
95 if (fleet == null || fleet.getFleetData() == null) return;
96 CargoAPI cargo = fleet.getCargo();
97 if (cargo == null) return;
98
99 boolean save = false;
100 for (CargoStackAPI stack : cargo.getStacksCopy()) {
101 FighterWingSpecAPI wing = stack.getFighterWingSpecIfWing();
102 if (wing != null && wing.hasTag(Tags.CODEX_UNLOCKABLE)) {
103 save |= SharedUnlockData.get().reportPlayerAwareOfFighter(wing.getId(), false);
104 }
105
106 WeaponSpecAPI weapon = stack.getWeaponSpecIfWeapon();
107 if (weapon != null && weapon.hasTag(Tags.CODEX_UNLOCKABLE)) {
109 }
110
111 HullModSpecAPI hullmod = stack.getHullModSpecIfHullMod();
112 if (hullmod != null && hullmod.hasTag(Tags.CODEX_UNLOCKABLE)) {
113 save |= SharedUnlockData.get().reportPlayerAwareOfHullmod(hullmod.getId(), false);
114 }
115
116 SpecialItemSpecAPI item = stack.getSpecialItemSpecIfSpecial();
117 if (item != null && item.hasTag(Tags.CODEX_UNLOCKABLE)) {
119 }
120
121 CommoditySpecAPI commodity = stack.getResourceIfResource();
122 if (commodity != null && commodity.hasTag(Tags.CODEX_UNLOCKABLE)) {
123 save |= SharedUnlockData.get().reportPlayerAwareOfCommodity(commodity.getId(), false);
124 }
125 }
126
127
128 for (MarketAPI market : Misc.getPlayerMarkets(true)) {
129 for (Industry ind : market.getIndustries()) {
130 if (ind.getSpec().hasTag(Tags.CODEX_UNLOCKABLE)) {
131 save |= SharedUnlockData.get().reportPlayerAwareOfIndustry(ind.getSpec().getId(), false);
132 }
133 }
134 }
135
137 if (stats != null) {
138 for (SkillLevelAPI sl : stats.getSkillsCopy()) {
139 if (sl.getLevel() > 0 && sl.getSkill().hasTag(Tags.CODEX_UNLOCKABLE)) {
140 save |= SharedUnlockData.get().reportPlayerAwareOfSkill(sl.getSkill().getId(), false);
141 }
142 }
143 }
144
145 for (AbilityPlugin ability : fleet.getAbilities().values()) {
146 if (ability.getSpec().hasTag(Tags.CODEX_UNLOCKABLE)) {
147 save |= SharedUnlockData.get().reportPlayerAwareOfAbility(ability.getSpec().getId(), false);
148 }
149 }
150
151 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
152 if (member.getHullSpec().hasTag(Tags.CODEX_UNLOCKABLE)) {
153 String hullId = CodexDataV2.getFleetMemberBaseHullId(member);
154 save |= SharedUnlockData.get().reportPlayerAwareOfShip(hullId, true);
155 }
156 }
157
158 if (save) SharedUnlockData.get().saveIfNeeded();
159 }
160
161
162
163 @Override
164 public void reportClosedCodex() {
165
166 }
167
168
169 public static void makeAwareOfConditionsOn(MarketAPI market) {
170 if (market == null) return;
171
172 boolean save = false;
173 for (MarketConditionAPI mc : market.getConditions()) {
174 if (mc.getSpec().hasTag(Tags.CODEX_UNLOCKABLE)) {
175 save |= SharedUnlockData.get().reportPlayerAwareOfCondition(mc.getSpec().getId(), false);
176 }
177 }
178 if (save) SharedUnlockData.get().saveIfNeeded();
179 }
180
181
182 @Override
184 @Override
186 @Override
187 public void reportSubmarketOpened(SubmarketAPI submarket) {}
188
189
190
191
192
193}
static GameState getCurrentState()
Definition Global.java:27
static SectorAPI getSector()
Definition Global.java:65
boolean reportPlayerAwareOfCondition(String conditionId, boolean withSave)
boolean reportPlayerAwareOfShip(String hullId, boolean withSave)
boolean reportPlayerAwareOfHullmod(String hullmodId, boolean withSave)
boolean reportPlayerAwareOfWeapon(String weaponId, boolean withSave)
boolean reportPlayerAwareOfSpecialItem(String itemId, boolean withSave)
boolean reportPlayerAwareOfFighter(String fighterId, boolean withSave)
boolean reportPlayerAwareOfIndustry(String industryId, boolean withSave)
boolean reportPlayerAwareOfSkill(String skillId, boolean withSave)
boolean reportPlayerAwareOfAbility(String abilityId, boolean withSave)
boolean reportPlayerAwareOfCommodity(String commodityId, boolean withSave)
static String getFleetMemberBaseHullId(FleetMemberAPI member)
void reportPlayerNonMarketTransaction(PlayerMarketTransaction transaction, InteractionDialogAPI dialog)
void reportPlayerLeftCargoPods(SectorEntityToken entity)
void reportSubmarketOpened(SubmarketAPI submarket)
void reportFleetDespawnedToListener(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param)
static void makeAwareOfConditionsOn(MarketAPI market)
void reportBattleOccurred(CampaignFleetAPI nullHere, CampaignFleetAPI primaryWinner, BattleAPI battle)
static List< FleetMemberAPI > getSnapshotMembersLost(CampaignFleetAPI fleet)
Definition Misc.java:748
static List< MarketAPI > getPlayerMarkets(boolean includeNonPlayerFaction)
Definition Misc.java:980
List< CampaignFleetAPI > getNonPlayerSideSnapshot()
List< CargoStackAPI > getStacksCopy()
List< FleetMemberAPI > getMembersListCopy()
MutableCharacterStatsAPI getPlayerStats()
Map< String, AbilityPlugin > getAbilities()
List< MarketConditionAPI > getConditions()