33 protected Map<EveryFrameScript, GenericMissionCreator>
missionCreators =
new LinkedHashMap<EveryFrameScript, GenericMissionCreator>();
87 List<EveryFrameScript> orphaned =
new ArrayList<EveryFrameScript>(
missionCreators.keySet());
88 CountingMap<GenericMissionCreator> current =
new CountingMap<GenericMissionCreator>();
103 float totalWeight = 0f;
104 for (GenericMissionCreator c :
creators) {
105 totalWeight += c.getMissionFrequencyWeight();
108 WeightedRandomPicker<GenericMissionCreator> picker =
new WeightedRandomPicker<GenericMissionCreator>();
109 for (GenericMissionCreator c :
creators) {
110 if (
failed.contains(c))
continue;
112 float currNum = current.getCount(c);
113 if (currNum < 1) currNum = 1;
115 float desiredNum =
getCurrMax() * c.getMissionFrequencyWeight() / totalWeight;
116 if (desiredNum < 0.1f) desiredNum = 0.1f;
118 float deviation = desiredNum * 0.25f;
119 float exponent = (desiredNum - currNum) / deviation;
120 if (exponent > 4) exponent = 4;
122 float probMult = (float) Math.pow(10f, exponent);
123 picker.add(c, c.getMissionFrequencyWeight() * probMult);
126 GenericMissionCreator creator = picker.pick();
127 if (creator ==
null) {