1package com.fs.starfarer.api.impl.campaign.intel.bar.events.historian;
3import java.util.ArrayList;
4import java.util.Collections;
5import java.util.Comparator;
6import java.util.LinkedHashSet;
8import java.util.Random;
11import com.fs.starfarer.api.Global;
12import com.fs.starfarer.api.campaign.InteractionDialogAPI;
13import com.fs.starfarer.api.characters.FullName.Gender;
14import com.fs.starfarer.api.characters.PersonAPI;
15import com.fs.starfarer.api.impl.campaign.ids.Factions;
16import com.fs.starfarer.api.impl.campaign.intel.bar.events.historian.HistorianBackstory.HistorianBackstoryInfo;
17import com.fs.starfarer.api.util.Misc;
18import com.fs.starfarer.api.util.WeightedRandomPicker;
22 public static interface HistorianOffer {
25 void optionSelected(String optionText, Object optionData);
26 boolean shouldRemoveOffer();
27 boolean isInteractionFinished();
28 boolean shouldEndConversationOnReturning();
29 void notifyAccepted();
32 HistorianOfferCreator getCreator();
33 void setCreator(HistorianOfferCreator creator);
36 public static interface HistorianOfferCreator {
37 HistorianOffer createOffer(Random random, List<HistorianOffer> soFar);
38 boolean ignoresLimit();
41 void notifyAccepted(HistorianOffer offer);
45 public static final String
KEY =
"$core_historianData";
47 public static String
TIER1 =
"hist1t";
48 public static String
TIER2 =
"hist2t";
49 public static String
TIER3 =
"hist3t";
66 protected transient List<HistorianOfferCreator>
creators;
67 protected transient List<HistorianBackstoryInfo>
backstory;
69 protected Set<String>
givenOffers =
new LinkedHashSet<String>();
94 creators =
new ArrayList<HistorianOfferCreator>();
102 backstory =
new ArrayList<HistorianBackstoryInfo>();
116 for (HistorianBackstoryInfo info :
backstory) {
118 picker.
add(info, info.getWeight());
122 for (HistorianBackstoryInfo info :
backstory) {
123 picker.
add(info, info.getWeight());
126 return picker.
pick();
143 if (tags.contains(
TIER1)) {
171 float dur = 60f + (float) Math.random() * 60f;
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());
238 String manOrWoman =
"man";
244 String heOrShe =
"he";
251 String heOrShe =
"he";
259 String himOrHer =
"him";
267 String himOrHer =
"himself";
269 himOrHer =
"herself";
275 String hisOrHer =
"his";
static SettingsAPI getSettings()
static SectorAPI getSector()
static final String INDEPENDENT
List< HistorianBackstoryInfo > getBackstory()
Set< String > givenOffers
List< HistorianOffer > getOffers(Random random, InteractionDialogAPI dialog)
List< HistorianOfferCreator > getCreators()
transient List< HistorianOfferCreator > creators
Set< String > shownBackstory
transient List< HistorianBackstoryInfo > backstory
HistorianBackstoryInfo pickBackstoryBit(Random random)
void setRecentlyDonated()
static HistorianData getInstance()
Set< String > getShownBackstory()
boolean isRecentlyDonated()
Set< String > getGivenOffers()
void setCreators(List< HistorianOfferCreator > creators)
float getWeightForTags(Set< String > tags)
void setIntroduced(boolean introduced)
static String ucFirst(String str)
String getSpriteName(String category, String id)
PersonAPI createRandomPerson()
FactionAPI getFaction(String factionId)
MemoryAPI getMemoryWithoutUpdate()
void set(String key, Object value)
boolean getBoolean(String key)
void setPortraitSprite(String portraitSprite)