115 WeightedRandomPicker<HistorianBackstoryInfo> picker =
new WeightedRandomPicker<HistorianBackstoryInfo>(random);
116 for (HistorianBackstoryInfo info :
backstory) {
118 picker.add(info, info.getWeight());
120 if (picker.isEmpty()) {
122 for (HistorianBackstoryInfo info :
backstory) {
123 picker.add(info, info.getWeight());
126 return picker.pick();
187 public List<HistorianOffer>
getOffers(Random random, InteractionDialogAPI dialog) {
190 WeightedRandomPicker<HistorianOfferCreator> limited =
new WeightedRandomPicker<HistorianOfferCreator>(random);
191 List<HistorianOffer> always =
new ArrayList<HistorianOffer>();
193 for (HistorianOfferCreator c :
creators) {
194 if (c.ignoresLimit()) {
195 HistorianOffer offer = c.createOffer(random, always);
201 limited.add(c, c.getFrequency());
205 List<HistorianOffer> result =
new ArrayList<HistorianOffer>(always);
207 int num = 1 + random.nextInt(2 +
getTier()) + always.size();
209 int attempts = num + 5;
210 for (
int i = 0; i < attempts && result.size() < num; i++) {
211 HistorianOfferCreator c = limited.pick();
212 if (c ==
null)
continue;
213 HistorianOffer offer = c.createOffer(random, result);
223 Collections.sort(result,
new Comparator<HistorianOffer>() {
224 public int compare(HistorianOffer o1, HistorianOffer o2) {
225 return (
int) Math.signum(o1.getSortOrder() - o2.getSortOrder());