1package com.fs.starfarer.api.impl.campaign.missions.cb;
4import java.util.ArrayList;
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.FactionAPI;
10import com.fs.starfarer.api.campaign.TextPanelAPI;
11import com.fs.starfarer.api.campaign.econ.Industry;
12import com.fs.starfarer.api.campaign.econ.MarketAPI;
13import com.fs.starfarer.api.characters.PersonAPI;
14import com.fs.starfarer.api.fleet.FleetMemberAPI;
15import com.fs.starfarer.api.fleet.FleetMemberType;
16import com.fs.starfarer.api.impl.campaign.DebugFlags;
17import com.fs.starfarer.api.impl.campaign.econ.impl.OrbitalStation;
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.missions.cb.BaseCustomBounty.Stage;
21import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
22import com.fs.starfarer.api.ui.TooltipMakerAPI;
23import com.fs.starfarer.api.util.Misc;
24import com.fs.starfarer.api.util.WeightedRandomPicker;
34 public float getFrequency(HubMissionWithBarEvent mission,
int difficulty) {
35 if (
getStations(mission, difficulty).isEmpty())
return 0f;
41 List<FleetMemberAPI> list =
new ArrayList<FleetMemberAPI>();
42 List<FleetMemberAPI> members = data.
fleet.getFleetData().getMembersListCopy();
45 float iconSize = 440 / cols;
46 Color h = Misc.getHighlightColor();
48 for (FleetMemberAPI member : members) {
49 if (list.size() >= max)
break;
51 if (member.isFighterWing())
continue;
54 if (member.isFlagship()) {
55 copy.setCaptain(data.
fleet.getCommander());
60 if (!list.isEmpty()) {
61 TooltipMakerAPI info = text.beginTooltip();
62 info.setParaSmallInsignia();
63 info.addPara(Misc.ucFirst(mission.getPerson().getHeOrShe()) +
" taps a data pad, and " +
64 "an intel assessment shows up on your tripad.", 0f);
65 info.addShipList(cols, 1, iconSize, data.
fleet.getFaction().getBaseUIColor(), list, opad);
67 FactionAPI f = data.
fleet.getFaction();
68 info.addPara(
"The station is controlled by " + f.getDisplayNameWithArticle() +
" and is likely to " +
69 "be supported by a number of patrols.",
70 opad, f.getBaseUIColor(),
71 f.getDisplayNameWithArticleWithoutArticle());
79 PersonAPI person = data.
fleet.getCommander();
80 FactionAPI faction = person.getFaction();
82 float iconSize = width / cols;
84 Color h = Misc.getHighlightColor();
89 boolean deflate =
false;
90 if (!data.
fleet.isInflated()) {
91 data.
fleet.inflateIfNeeded();
95 List<FleetMemberAPI> list =
new ArrayList<FleetMemberAPI>();
97 List<FleetMemberAPI> members = data.
fleet.getFleetData().getMembersListCopy();
99 for (FleetMemberAPI member : members) {
100 if (list.size() >= max)
break;
102 if (member.isFighterWing())
continue;
105 if (member.isFlagship()) {
106 copy.setCaptain(person);
111 if (!list.isEmpty()) {
112 info.addPara(
"The bounty posting contains partial intel about the station.", opad);
113 info.addShipList(cols, 1, iconSize, faction.getBaseUIColor(), list, opad);
115 int num = members.size() - list.size();
118 if (num < 5) num = 0;
119 else if (num < 10) num = 5;
120 else if (num < 20) num = 10;
123 FactionAPI f = data.
fleet.getFaction();
124 info.addPara(
"The station is controlled by " + f.getDisplayNameWithArticle() +
" and is likely to " +
125 "be supported by a number of patrols.",
126 opad, f.getBaseUIColor(),
127 f.getDisplayNameWithArticleWithoutArticle());
131 data.
fleet.deflate();
136 public List<CampaignFleetAPI>
getStations(HubMissionWithBarEvent mission,
int difficulty) {
137 List<CampaignFleetAPI> stations =
new ArrayList<CampaignFleetAPI>();
138 String faction = mission.getPerson().getFaction().getId();
139 for (MarketAPI market :
Global.
getSector().getEconomy().getMarketsCopy()) {
140 if (market.isHidden())
continue;
141 if (market.isPlayerOwned())
continue;
142 if (market.hasCondition(Conditions.DECIVILIZED))
continue;
143 if (!market.getFaction().isHostileTo(faction))
continue;
145 Industry ind = Misc.getStationIndustry(market);
147 if (!(ind instanceof OrbitalStation))
continue;
148 OrbitalStation os = (OrbitalStation) ind;
149 if (os.getDisruptedDays() > 0)
continue;
151 boolean battlestation = os.getSpec().hasTag(Industries.TAG_BATTLESTATION);
152 boolean starfortress = os.getSpec().hasTag(Industries.TAG_STARFORTRESS);
154 if (difficulty == 10 && !starfortress)
continue;
155 if ((difficulty == 8 || difficulty == 9) && !battlestation)
continue;
156 if (!battlestation && !starfortress && difficulty >= 8)
continue;
158 CampaignFleetAPI fleet = Misc.getStationFleet(market);
167 return " - " + data.
fleet.getName();
174 data.difficulty = difficulty;
177 WeightedRandomPicker<CampaignFleetAPI> picker =
new WeightedRandomPicker<CampaignFleetAPI>(mission.getGenRandom());
181 data.fleet = picker.pick();
182 if (data.
fleet ==
null)
return null;
184 MarketAPI market = Misc.getStationMarket(data.
fleet);
185 if (market ==
null)
return null;
187 data.market = market;
188 data.custom2 = bountyStage;
190 data.system = data.
fleet.getStarSystem();
191 if (data.
system ==
null)
return null;
201 MarketAPI market = data.
market;
205 mission.triggerCreateLargePatrolAroundMarket(market, stage, 0f);
206 mission.triggerCreateSmallPatrolAroundMarket(market, stage, 0f);
208 mission.triggerCreateLargePatrolAroundMarket(market, stage, 0f);
209 mission.triggerCreateMediumPatrolAroundMarket(market, stage, 0f);
210 mission.triggerCreateSmallPatrolAroundMarket(market, stage, 0f);
212 mission.triggerCreateLargePatrolAroundMarket(market, stage, 0f);
213 mission.triggerCreateLargePatrolAroundMarket(market, stage, 0f);
214 mission.triggerCreateMediumPatrolAroundMarket(market, stage, 0f);
215 mission.triggerCreateSmallPatrolAroundMarket(market, stage, 0f);
218 mission.connectWithHostilitiesEnded(Stage.BOUNTY, Stage.FAILED_NO_PENALTY, mission.getPerson(), market);
219 mission.setStageOnHostilitiesEnded(Stage.FAILED_NO_PENALTY, mission.getPerson(), market);
230 return super.getMaxDifficulty();
static SettingsAPI getSettings()
static FactoryAPI getFactory()
static SectorAPI getSector()
static boolean PERSON_BOUNTY_DEBUG_INFO
void setRepChangesBasedOnDifficulty(CustomBountyData data, int difficulty)
void addIntelAssessment(TextPanelAPI text, HubMissionWithBarEvent mission, CustomBountyData data)
float getFrequency(HubMissionWithBarEvent mission, int difficulty)
void addFleetDescription(TooltipMakerAPI info, float width, float height, HubMissionWithBarEvent mission, CustomBountyData data)
String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data)
void notifyAccepted(MarketAPI createdAt, HubMissionWithBarEvent mission, CustomBountyData data)
List< CampaignFleetAPI > getStations(HubMissionWithBarEvent mission, int difficulty)
CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage)
static int getBaseBounty(int difficulty, float mult, BaseHubMission mission)
static float ENEMY_STATION_FREQ
static float ENEMY_STATION_MULT
static float ENEMY_STATION_DAYS
FleetMemberAPI createFleetMember(FleetMemberType type, String variantOrWingId)
String getSpriteName(String category, String id)