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;
46 this.stageName = stage;
47 this.priority = priority;
51 public static class InvestigationEventParams {
53 public String startStage;
54 public String warningSender =
null;
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;
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());
112 if (elapsedDays >= initialDelay + duration && stage == 1) {
115 for (InvestigationResult result : params.results) {
116 picker.
add(result, result.weight);
118 InvestigationResult result = picker.
pick();
119 if (result.stageName !=
null) {
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;
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)
static final String DECIVILIZED
static final String PLAYER
float convertToDays(float realSeconds)
RepLevel getRelationshipLevel(FactionAPI faction)
CampaignClockAPI getClock()
void reportEventStage(CampaignEventPlugin event, String stage, MessagePriority priority)
FactionAPI getFaction(String factionId)
boolean hasCondition(String id)