Starsector API
Loading...
Searching...
No Matches
SkillData.java
Go to the documentation of this file.
1package com.fs.starfarer.api.util;
2
3import java.util.ArrayList;
4import java.util.Collections;
5import java.util.Comparator;
6import java.util.HashMap;
7import java.util.List;
8import java.util.Map;
9
10import com.fs.starfarer.api.Global;
11import com.fs.starfarer.api.characters.SkillSpecAPI;
12import com.fs.starfarer.api.impl.campaign.ids.Skills;
13
14public class SkillData {
15
16 public static class SkillTier {
17 public List<SkillSpecAPI> skills = new ArrayList<SkillSpecAPI>();
18 }
19 public static class SkillsForAptitude {
20 public String aptitudeId;
23 public SkillsForAptitude(String aptitudeId) {
24 this.aptitudeId = aptitudeId;
25 }
26
27 }
28
30
31 public static SkillsForAptitude getSkills(String aptitudeId) {
32 SkillsForAptitude skills = SkillData.getAptitudes().get(aptitudeId);
33 if (skills == null) skills = new SkillsForAptitude(aptitudeId);
34 return skills;
35 }
36
38 compute();
39 return aptitudes;
40 }
41
42
43 protected static boolean computed = false;
44 protected static void compute() {
45 if (computed) return;
46 computed = true;
47
49
50 //List<String> aptitudeIds = new ArrayList<String>(Global.getSettings().getAptitudeIds());
52
53 for (String skillId : skillIds) {
54 SkillSpecAPI skill = Global.getSettings().getSkillSpec(skillId);
55 if (skill.isAptitudeEffect()) continue;
56 if (skill.hasTag(Skills.TAG_NPC_ONLY)) continue;
57 if (skill.hasTag(Skills.TAG_DEPRECATED)) continue;
58
59 String aptitudeId = skill.getGoverningAptitudeId();
60 if (aptitudeId == null || aptitudeId.isEmpty()) continue;
61
62 SkillsForAptitude skills = aptitudes.get(aptitudeId);
63 if (skills == null) {
64 skills = new SkillsForAptitude(aptitudeId);
65 aptitudes.put(aptitudeId, skills);
66 }
67
68 skills.all.add(skill);
69 }
70
71 for (String aptitudeId : aptitudes.keySet()) {
72 SkillsForAptitude skills = aptitudes.get(aptitudeId);
73
74 Collections.sort(skills.all, new Comparator<SkillSpecAPI>() {
75 public int compare(SkillSpecAPI o1, SkillSpecAPI o2) {
76 int result = o1.getTier() - o2.getTier();
77 if (result == 0) {
78 result = (int) Math.signum(o1.getOrder() - o2.getOrder());
79 }
80 return result;
81 }
82 });
83
84 boolean useTier = true;
85 for (SkillSpecAPI skill : skills.all) {
86 useTier &= skill.getReqPoints() == 0;
87 }
88
89 int currTier = -1;
90 int prevReq = -1;
92 for (SkillSpecAPI skill : skills.all) {
93 if (!useTier) {
94 if (skill.getReqPoints() != prevReq) {
95 if (!soFar.isEmpty()) {
96 skills.tiers.add(soFar);
97 }
99 prevReq = skill.getReqPoints();
100 }
101 } else {
102 if (skill.getTier() != currTier) {
103 if (!soFar.isEmpty()) {
104 skills.tiers.add(soFar);
105 }
107 currTier = skill.getTier();
108 }
109 }
110 soFar.add(skill);
111 }
112 if (!soFar.isEmpty()) {
113 skills.tiers.add(soFar);
114 }
115 }
116 }
117
118
119
120
121}
122
123
124
125
126
127
128
129
130
131
static SettingsAPI getSettings()
Definition Global.java:51
static SkillsForAptitude getSkills(String aptitudeId)
static Map< String, SkillsForAptitude > getAptitudes()
static Map< String, SkillsForAptitude > aptitudes
SkillSpecAPI getSkillSpec(String skillId)