1package com.fs.starfarer.api.impl.campaign.events;
3import java.util.ArrayList;
7import org.apache.log4j.Logger;
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.campaign.FactionAPI;
11import com.fs.starfarer.api.campaign.OnMessageDeliveryScript;
12import com.fs.starfarer.api.campaign.RepLevel;
13import com.fs.starfarer.api.campaign.comm.MessagePriority;
14import com.fs.starfarer.api.campaign.events.CampaignEventTarget;
15import com.fs.starfarer.api.impl.campaign.ids.Conditions;
16import com.fs.starfarer.api.impl.campaign.ids.Factions;
17import com.fs.starfarer.api.util.WeightedRandomPicker;
40 public static class InvestigationResult {
41 public String stageName;
42 public float weight = 0;
43 public MessagePriority priority = MessagePriority.SECTOR;
44 public OnMessageDeliveryScript onDelivery =
null;
45 public InvestigationResult(String stage, MessagePriority priority) {
46 this.stageName = stage;
47 this.priority = priority;
51 public static class InvestigationEventParams {
53 public String startStage;
54 public String warningSender =
null;
55 public MessagePriority warningPriority = MessagePriority.SECTOR;
56 public List<InvestigationResult> results =
new ArrayList<InvestigationResult>();
57 public float minInitialDelay = 1f;
58 public float maxInitialDelay = 6f;
59 public float minDuration = 10f;
60 public float maxDuration = 15f;
61 public InvestigationEventParams(String name, String startStage) {
63 this.startStage = startStage;
68 private float elapsedDays = 0f;
69 private float initialDelay = 0f;
70 private float duration = 0f;
72 private InvestigationEventParams params;
80 params = (InvestigationEventParams) param;
86 if (
market !=
null &&
market.hasCondition(Conditions.DECIVILIZED)) {
91 initialDelay = params.minInitialDelay + (params.maxInitialDelay - params.minInitialDelay) * (
float) Math.random();
92 duration = params.minDuration + (params.maxDuration - params.minDuration) * (
float) Math.random();
94 log.info(String.format(
"Starting investigation with suffix \"%s\" at %s. Delay: %f, dur: %f",
98 private int stage = 0;
106 if (elapsedDays >= initialDelay && stage == 0) {
108 log.info(
"Reporting investigation stage " + params.startStage +
" at priority " + params.warningPriority.name());
109 Global.
getSector().reportEventStage(
this, params.startStage, params.warningPriority);
112 if (elapsedDays >= initialDelay + duration && stage == 1) {
113 WeightedRandomPicker<InvestigationResult> picker =
new WeightedRandomPicker<InvestigationResult>();
115 for (InvestigationResult result : params.results) {
116 picker.add(result, result.weight);
118 InvestigationResult result = picker.pick();
119 if (result.stageName !=
null) {
120 Global.
getSector().reportEventStage(
this, result.stageName,
null, result.priority, result.onDelivery);
121 log.info(
"Investigation outcome: " + result.stageName +
" at priority " + result.priority);
138 Map<String, String> map = super.getTokenReplacements();
139 if (params.warningSender !=
null) {
140 map.put(
"$sender", params.warningSender);
145 private boolean ended =
false;
157 RepLevel level =
faction.getRelationshipLevel(player);
static Logger getLogger(Class c)
static SectorAPI getSector()
CampaignEventTarget eventTarget
static float getPlayerRepGuiltMult(FactionAPI faction)
void init(String type, CampaignEventTarget eventTarget)
Map< String, String > getTokenReplacements()
void setParam(Object param)
void advance(float amount)