Starsector API
Loading...
Searching...
No Matches
GADepartments.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.missions.academy;
2
3import java.util.ArrayList;
4import java.util.Arrays;
5import java.util.Collection;
6import java.util.HashSet;
7import java.util.List;
8import java.util.Random;
9import java.util.Set;
10
11import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode;
12import com.fs.starfarer.api.util.WeightedRandomPicker;
13
14public class GADepartments {
15
16 public static String SOCIAL = "social";
17 public static String INDUSTRIAL = "industrial";
18 public static String MILITARY = "military";
19 public static String SCIENCE = "science";
20 public static String WEIRD = "weird";
21
22
23 public static class Department {
24 public String name;
25 public Set<String> tags = new HashSet<String>();
26
27 public Department(String name, String ... tags) {
28 this.name = name;
29 for (String tag : tags) {
30 this.tags.add(tag);
31 }
32 }
33 }
34
35 public static List<Department> departments = new ArrayList<Department>();
36 public static void add(String name, String ... tags) {
37 departments.add(new Department(name, tags));
38 }
39
40 static {
41 add("Ancient Earth Studies", SOCIAL);
42 add("Ancient Terran Philosophy", SOCIAL);
43 add("Applied Anorthic Geometry", SCIENCE, WEIRD);
44 add("Applied Holoarts", SOCIAL);
45 add("Astrochemistry", INDUSTRIAL, SCIENCE);
46 add("Astrometrics", SCIENCE);
47 add("AI Defense Studies", SCIENCE, WEIRD, MILITARY);
48 add("Classical Terran Studies", SOCIAL);
49 add("Cybermedical Engineering", INDUSTRIAL, SOCIAL);
50 add("Cybernetic Physiology", SCIENCE, SOCIAL);
51 add("Demographic Calculus", SOCIAL);
52 add("Domain Sociology", SOCIAL);
53 add("Domain History", SOCIAL);
54 add("Environmental Engineering", INDUSTRIAL);
55 add("Exotic Manifold Engineering", INDUSTRIAL, WEIRD);
56 add("Gravity Control", INDUSTRIAL, SCIENCE, MILITARY);
57 add("Gravity Dynamics", SCIENCE);
58 add("Holoart Studies", SOCIAL);
59 add("Hyperspace Physics", SCIENCE);
60 add("LAMBDA-F", SCIENCE, WEIRD);
61 add("Nanotech Engineering", INDUSTRIAL);
62 add("Nanorobotics", INDUSTRIAL, SCIENCE, WEIRD);
63 add("Nonlinear Mathematics", SCIENCE, WEIRD);
64 add("Orbital Architecture", SOCIAL, INDUSTRIAL, MILITARY);
65 add("Post-Expansion Philosophy", SOCIAL);
66 add("Persean Sociology", SOCIAL);
67 add("Phase Physics", SCIENCE);
68 add("Quantum Chemistry", SCIENCE, WEIRD);
69 add("N-Space Resonance", SCIENCE, WEIRD);
70 add("Special Collections", SOCIAL, INDUSTRIAL, SCIENCE, WEIRD, MILITARY);
71 add("Tau Hyperphysics", SCIENCE, WEIRD);
72 add("Talos Containment", WEIRD);
73 add("Templeman Hyperwave Theory", WEIRD);
74 add("Terran Biology", SCIENCE);
75 add("Xenobiology", SCIENCE);
76 }
77
78
79 public static String pick(Random random, ReqMode mode, String ... tags) {
80 WeightedRandomPicker<Department> picker = new WeightedRandomPicker<Department>(random);
81
82 Set<String> tagSet = new HashSet<String>();
83 tagSet.addAll(Arrays.asList(tags));
84
85 for (Department d : departments) {
86 if (!matchesTags(mode, tagSet, d.tags)) {
87 continue;
88 }
89 picker.add(d);
90 break;
91 }
92
93 Department d = picker.pick();
94 if (d == null) d = departments.get(0);
95
96 return d.name;
97 }
98
99 protected static boolean matchesTags(ReqMode mode, Collection<String> tags, Collection<String> set) {
100 switch (mode) {
101 case ALL:
102 for (String tag : tags) if (!set.contains(tag)) return false;
103 return true;
104 case ANY:
105 for (String tag : tags) if (set.contains(tag)) return true;
106 return false;
107 case NOT_ALL:
108 for (String tag : tags) if (!set.contains(tag)) return true;
109 return false;
110 case NOT_ANY:
111 for (String tag : tags) if (set.contains(tag)) return false;
112 return true;
113 }
114 return false;
115 }
116
117 public static String pick(Random random, String ... tags) {
118 WeightedRandomPicker<Department> picker = new WeightedRandomPicker<Department>(random);
119
120 for (Department d : departments) {
121 for (String tag : tags) {
122 if (d.tags.contains(tag)) {
123 picker.add(d);
124 break;
125 }
126 }
127 }
128
129 Department d = picker.pick();
130 if (d == null) d = departments.get(0);
131
132 return d.name;
133 }
134
135 public static String pickWithAllTags(Random random, String ... tags) {
136 WeightedRandomPicker<Department> picker = new WeightedRandomPicker<Department>(random);
137
138 OUTER: for (Department d : departments) {
139 for (String tag : tags) {
140 if (!d.tags.contains(tag)) {
141 continue OUTER;
142 }
143 }
144 picker.add(d);
145 }
146
147 Department d = picker.pick();
148 if (d == null) d = departments.get(0);
149
150 return d.name;
151 }
152
153
154
155
156}
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
static boolean matchesTags(ReqMode mode, Collection< String > tags, Collection< String > set)
static String pick(Random random, ReqMode mode, String ... tags)
static String pickWithAllTags(Random random, String ... tags)