001package com.fs.starfarer.api.impl.campaign.events;
002
003import java.awt.Color;
004import java.util.HashMap;
005import java.util.Map;
006
007import com.fs.starfarer.api.Global;
008import com.fs.starfarer.api.campaign.comm.MessagePriority;
009import com.fs.starfarer.api.campaign.events.CampaignEventTarget;
010import com.fs.starfarer.api.util.Misc;
011import com.fs.starfarer.api.util.WeightedRandomPicker;
012
013public class CivilDisorder extends BaseEventPlugin {
014
015        private float elapsedDays = 0f;
016        private CampaignEventTarget eventTarget;
017
018        private boolean started = false;
019        private int stage = 0;
020        private String type;
021
022        // called when there's the possibility of the event happening
023        // doesn't mean it'll actually happen, needs to pass the internal probability check first
024        public void init(String type, CampaignEventTarget eventTarget) {
025                this.type = type;
026                this.eventTarget = eventTarget;
027        }
028        
029        // event passed the probability check and is happening
030        public void startEvent() {
031                started = true;
032        }
033        
034        public void advance(float amount) {
035                if (Global.getSector().isPaused()) return;
036                if (!started) return;
037                
038                //System.out.println("Advance() in TestEvent called");
039                float days = Global.getSector().getClock().convertToDays(amount);
040                
041                elapsedDays += days;
042                
043                if (elapsedDays > 0 && stage == 0) {
044                        WeightedRandomPicker<String> picker = new WeightedRandomPicker<String>();
045                        picker.add("start1");
046                        picker.add("start2");
047                        picker.add("start3");
048                        Global.getSector().reportEventStage(this, picker.pick(), MessagePriority.SECTOR);
049                        stage++;
050                }
051                
052                if (elapsedDays > 1 && stage == 1) {
053                        WeightedRandomPicker<String> picker = new WeightedRandomPicker<String>();
054                        picker.add("ending1");
055                        picker.add("ending2");
056                        picker.add("ending3");
057                        picker.add("ending4");
058                        Global.getSector().reportEventStage(this, picker.pick(), MessagePriority.SECTOR);
059                        stage++;
060                }
061                
062                if (elapsedDays > 2 && stage == 2) {
063                        WeightedRandomPicker<String> picker = new WeightedRandomPicker<String>();
064                        picker.add("end1");
065                        picker.add("end2");
066                        Global.getSector().reportEventStage(this, picker.pick(), MessagePriority.SECTOR);
067                        stage++;
068                }
069        }
070
071        public boolean isDone() {
072                return elapsedDays > 5f || stage >= 3;
073        }
074
075        public CampaignEventTarget getEventTarget() {
076                return eventTarget;
077        }
078
079        public String getEventType() {
080                return type;
081        }
082
083        // tokens that are used in reports.csv for the stages of this event
084        public Map<String, String> getTokenReplacements() {
085                Map<String, String> map = new HashMap<String, String>();
086                
087                map.put("$market", eventTarget.getEntity().getName());
088                map.put("$rulingFaction", eventTarget.getEntity().getFaction().getDisplayName());
089                map.put("$rulingParty", eventTarget.getEntity().getFaction().getDisplayName());
090                
091                map.put("$theRulingFaction", eventTarget.getEntity().getFaction().getDisplayNameWithArticle());
092                map.put("$TheRulingFaction", Misc.ucFirst(eventTarget.getEntity().getFaction().getDisplayNameWithArticle()));
093                
094                return map;
095                
096        }
097        
098        // how far to send an "event is possible" type report
099        public MessagePriority getWarningWhenPossiblePriority() {
100                return MessagePriority.SECTOR;
101        }
102        
103        // how far to send an "event is likely" type report
104        public MessagePriority getWarningWhenLikelyPriority() {
105                return MessagePriority.SECTOR;
106        }
107
108        // pick an event_stage for an "event is likely" report.
109        // called every so often while an event is likely.
110        public String getStageIdForLikely() {
111                WeightedRandomPicker<String> picker = new WeightedRandomPicker<String>();
112                picker.add("possible1");
113                picker.add("possible2");
114                picker.add("possible3");
115                picker.add("possible4");
116                return picker.pick();
117                //return "likely";
118        }
119
120        // pick an event_stage for an "event is possible" report.
121        // called every so often while an event is possible.
122        public String getStageIdForPossible() {
123                WeightedRandomPicker<String> picker = new WeightedRandomPicker<String>();
124                picker.add("possible1");
125                picker.add("possible2");
126                picker.add("possible3");
127                picker.add("possible4");
128                return picker.pick();
129        }
130
131        public void cleanup() {
132                // TODO Auto-generated method stub
133                
134        }
135
136        public void setParam(Object param) {
137                
138        }
139
140        public boolean allowMultipleOngoingForSameTarget() {
141                // TODO Auto-generated method stub
142                return false;
143        }
144
145        public Color[] getHighlightColors(String stageId) {
146                // TODO Auto-generated method stub
147                return null;
148        }
149
150        public String[] getHighlights(String stageId) {
151                // TODO Auto-generated method stub
152                return null;
153        }
154
155}
156
157
158
159