Starsector API
Loading...
Searching...
No Matches
OmegaOfficerGeneratorPlugin.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.procgen.themes;
2
3import java.util.ArrayList;
4import java.util.Collections;
5import java.util.List;
6import java.util.Random;
7
8import com.fs.starfarer.api.campaign.AICoreOfficerPlugin;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.FactionAPI;
11import com.fs.starfarer.api.campaign.FactionDoctrineAPI;
12import com.fs.starfarer.api.campaign.GenericPluginManagerAPI;
13import com.fs.starfarer.api.characters.MutableCharacterStatsAPI;
14import com.fs.starfarer.api.characters.PersonAPI;
15import com.fs.starfarer.api.fleet.FleetMemberAPI;
16import com.fs.starfarer.api.impl.campaign.fleets.BaseGenerateFleetOfficersPlugin;
17import com.fs.starfarer.api.impl.campaign.fleets.FleetParamsV3;
18import com.fs.starfarer.api.impl.campaign.ids.Commodities;
19import com.fs.starfarer.api.impl.campaign.ids.Factions;
20import com.fs.starfarer.api.impl.campaign.ids.Ranks;
21import com.fs.starfarer.api.util.Misc;
22import com.fs.starfarer.api.util.WeightedRandomPicker;
23
24public class OmegaOfficerGeneratorPlugin extends BaseGenerateFleetOfficersPlugin {
25
28
29 @Override
30 public int getHandlingPriority(Object params) {
31 if (!(params instanceof GenerateFleetOfficersPickData)) return -1;
32
33 GenerateFleetOfficersPickData data = (GenerateFleetOfficersPickData) params;
34 if (data.params != null && !data.params.withOfficers) return -1;
35 if (data.fleet == null || !data.fleet.getFaction().getId().equals(Factions.OMEGA)) return -1;
36 return GenericPluginManagerAPI.CORE_SUBSET;
37 }
38
39
40 @Override
41 public void addCommanderAndOfficers(CampaignFleetAPI fleet, FleetParamsV3 params, Random random) {
42 if (random == null) random = Misc.random;
43 FactionAPI faction = fleet.getFaction();
44
45 List<FleetMemberAPI> members = fleet.getFleetData().getMembersListCopy();
46 if (members.isEmpty()) return;
47
48 WeightedRandomPicker<FleetMemberAPI> withOfficers = new WeightedRandomPicker<FleetMemberAPI>(random);
49 AICoreOfficerPlugin plugin = Misc.getAICoreOfficerPlugin(Commodities.OMEGA_CORE);
50 for (FleetMemberAPI member : members) {
51 if (member.isFighterWing()) continue;
52
53 PersonAPI person = plugin.createPerson(Commodities.OMEGA_CORE, faction.getId(), random);
54 member.setCaptain(person);
55 withOfficers.add(member, (float) Math.pow(member.getFleetPointCost(), 5f));
56 // they're all assumed integrated and have the extra skill baked in
57 //integrateAndAdaptCoreForAIFleet(member);
58 }
59
60 FleetMemberAPI flagship = withOfficers.pick();
61 if (flagship != null) {
62 PersonAPI commander = flagship.getCaptain();
63 commander.setRankId(Ranks.SPACE_COMMANDER);
64 commander.setPostId(Ranks.POST_FLEET_COMMANDER);
65 fleet.setCommander(commander);
66 fleet.getFleetData().setFlagship(flagship);
67 addCommanderSkills(commander, fleet, params, 2, random);
68 }
69 }
70
71
72 public static void addCommanderSkills(PersonAPI commander, CampaignFleetAPI fleet, FleetParamsV3 params, int numSkills, Random random) {
73 if (random == null) random = new Random();
74 if (numSkills <= 0) return;
75
76 MutableCharacterStatsAPI stats = commander.getStats();
77
78 FactionDoctrineAPI doctrine = fleet.getFaction().getDoctrine();
79 if (params != null && params.doctrineOverride != null) {
80 doctrine = params.doctrineOverride;
81 }
82
83 List<String> skills = new ArrayList<String>(doctrine.getCommanderSkills());
84 if (skills.isEmpty()) return;
85
86 if (random.nextFloat() < doctrine.getCommanderSkillsShuffleProbability()) {
87 Collections.shuffle(skills, random);
88 }
89
90 stats.setSkipRefresh(true);
91
92 boolean debug = true;
93 debug = false;
94 if (debug) System.out.println("Generating commander skills, person level " + stats.getLevel() + ", skills: " + numSkills);
95 int picks = 0;
96 for (String skillId : skills) {
97 if (debug) System.out.println("Selected skill: [" + skillId + "]");
98 stats.setSkillLevel(skillId, 1);
99 picks++;
100 if (picks >= numSkills) {
101 break;
102 }
103 }
104 if (debug) System.out.println("Done generating commander skills\n");
105
106 stats.setSkipRefresh(false);
107 stats.refreshCharacterStatsEffects();
108 }
109
110
111
112}
113
114
115
116
117
118
119
120
121
122
123
124
static void addCommanderSkills(PersonAPI commander, CampaignFleetAPI fleet, FleetParamsV3 params, int numSkills, Random random)
void addCommanderAndOfficers(CampaignFleetAPI fleet, FleetParamsV3 params, Random random)