1package com.fs.starfarer.api.impl.campaign.missions.cb;
4import java.util.ArrayList;
6import java.util.Random;
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.FactionAPI;
11import com.fs.starfarer.api.campaign.StarSystemAPI;
12import com.fs.starfarer.api.campaign.TextPanelAPI;
13import com.fs.starfarer.api.campaign.econ.MarketAPI;
14import com.fs.starfarer.api.characters.PersonAPI;
15import com.fs.starfarer.api.fleet.FleetMemberAPI;
16import com.fs.starfarer.api.fleet.FleetMemberType;
17import com.fs.starfarer.api.impl.campaign.DebugFlags;
18import com.fs.starfarer.api.impl.campaign.ids.Factions;
19import com.fs.starfarer.api.impl.campaign.ids.Tags;
20import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
21import com.fs.starfarer.api.ui.TooltipMakerAPI;
22import com.fs.starfarer.api.util.Misc;
23import com.fs.starfarer.api.util.WeightedRandomPicker;
33 public float getFrequency(HubMissionWithBarEvent mission,
int difficulty) {
34 String faction = mission.getPerson().getFaction().getId();
35 if (!Factions.HEGEMONY.equals(faction) &&
36 !Factions.LUDDIC_PATH.equals(faction) &&
37 !Factions.LUDDIC_CHURCH.equals(faction)) {
40 if (
getStations(mission, difficulty).isEmpty())
return 0f;
46 List<FleetMemberAPI> list =
new ArrayList<FleetMemberAPI>();
47 List<FleetMemberAPI> members = data.
fleet.getFleetData().getMembersListCopy();
50 float iconSize = 440 / cols;
51 Color h = Misc.getHighlightColor();
53 for (FleetMemberAPI member : members) {
54 if (list.size() >= max)
break;
56 if (member.isFighterWing())
continue;
59 if (member.isFlagship()) {
60 copy.setCaptain(data.
fleet.getCommander());
65 if (!list.isEmpty()) {
66 TooltipMakerAPI info = text.beginTooltip();
67 info.setParaSmallInsignia();
68 info.addPara(Misc.ucFirst(mission.getPerson().getHeOrShe()) +
" taps a data pad, and " +
69 "an intel assessment shows up on your tripad.", 0f);
70 info.addShipList(cols, 1, iconSize, data.
fleet.getFaction().getBaseUIColor(), list, opad);
73 info.addPara(
"The station is assessed to be fully functional and extremely dangerous.", opad);
75 info.addPara(
"The station is assessed to be damaged, but still highly dangerous.", opad);
84 PersonAPI person = data.
fleet.getCommander();
85 FactionAPI faction = person.getFaction();
87 float iconSize = width / cols;
89 Color h = Misc.getHighlightColor();
94 boolean deflate =
false;
95 if (!data.
fleet.isInflated()) {
96 data.
fleet.inflateIfNeeded();
100 List<FleetMemberAPI> list =
new ArrayList<FleetMemberAPI>();
101 Random random =
new Random(person.getNameString().hashCode() * 170000);
103 List<FleetMemberAPI> members = data.
fleet.getFleetData().getMembersListCopy();
105 for (FleetMemberAPI member : members) {
106 if (list.size() >= max)
break;
108 if (member.isFighterWing())
continue;
110 float prob = (float) member.getFleetPointCost() / 20f;
111 prob += (float) max / (
float) members.size();
112 if (member.isFlagship()) prob = 1f;
115 if (random.nextFloat() > prob)
continue;
118 if (member.isFlagship()) {
119 copy.setCaptain(person);
124 if (!list.isEmpty()) {
125 info.addPara(
"The bounty posting contains partial intel about the station.", opad);
126 info.addShipList(cols, 1, iconSize, faction.getBaseUIColor(), list, opad);
128 int num = members.size() - list.size();
131 if (num < 5) num = 0;
132 else if (num < 10) num = 5;
133 else if (num < 20) num = 10;
137 info.addPara(
"The station is assessed to be fully functional and extremely dangerous.", opad);
139 info.addPara(
"The station is assessed to be damaged, but still highly dangerous.", opad);
144 data.
fleet.deflate();
149 public List<CampaignFleetAPI>
getStations(HubMissionWithBarEvent mission,
int difficulty) {
150 List<CampaignFleetAPI> stations =
new ArrayList<CampaignFleetAPI>();
152 if (!system.hasTag(Tags.THEME_REMNANT_MAIN))
continue;
153 if (system.hasTag(Tags.THEME_REMNANT_DESTROYED))
continue;
155 for (CampaignFleetAPI fleet : system.getFleets()) {
156 if (!fleet.isStationMode())
continue;
157 if (!Factions.REMNANTS.equals(fleet.getFaction().getId()))
continue;
159 boolean damaged = fleet.getMemoryWithoutUpdate().getBoolean(
"$damagedStation");
160 if ((difficulty == 7 || difficulty == 8) && damaged) {
162 }
else if (!damaged && difficulty > 8) {
171 return " - Remnant Nexus";
182 data.difficulty = difficulty;
185 WeightedRandomPicker<CampaignFleetAPI> picker =
new WeightedRandomPicker<CampaignFleetAPI>(mission.getGenRandom());
188 data.fleet = picker.pick();
189 if (data.
fleet ==
null)
return null;
191 data.system = data.
fleet.getStarSystem();
192 if (data.
system ==
null)
return null;
203 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 addFleetDescription(TooltipMakerAPI info, float width, float height, HubMissionWithBarEvent mission, CustomBountyData data)
String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data)
List< CampaignFleetAPI > getStations(HubMissionWithBarEvent mission, int difficulty)
void addIntelAssessment(TextPanelAPI text, HubMissionWithBarEvent mission, CustomBountyData data)
CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage)
float getFrequency(HubMissionWithBarEvent mission, int difficulty)
static float REMNANT_STATION_DAYS
static int getBaseBounty(int difficulty, float mult, BaseHubMission mission)
static float REMNANT_STATION_FREQ
static float REMNANT_STATION_MULT
FleetMemberAPI createFleetMember(FleetMemberType type, String variantOrWingId)
String getSpriteName(String category, String id)