001package com.fs.starfarer.api.impl.campaign.events;
002
003import com.fs.starfarer.api.Global;
004import com.fs.starfarer.api.campaign.events.CampaignEventTarget;
005import com.fs.starfarer.api.impl.campaign.ids.Conditions;
006
007public class RecentUnrestEvent extends BaseEventPlugin {
008
009        public static final float DAYS_PER_STAGE = 10f;
010        private float elapsedDays = 0f;
011        private int stabilityPenalty = 0;
012        private String conditionToken = null;
013        
014        public void init(String type, CampaignEventTarget eventTarget) {
015                super.init(type, eventTarget, false);
016        }
017        
018        public void startEvent() {
019                super.startEvent(true);
020                if (market == null) {
021                        endEvent();
022                        return;
023                }
024                
025                conditionToken = market.addCondition(Conditions.RECENT_UNREST, this);
026        }
027        
028        public void advance(float amount) {
029                if (!isEventStarted()) return;
030                if (isDone()) return;
031                
032                float days = Global.getSector().getClock().convertToDays(amount);
033                elapsedDays += days;
034                
035                if (elapsedDays >= DAYS_PER_STAGE) {
036                        elapsedDays -= DAYS_PER_STAGE;
037                        stabilityPenalty--;
038                        market.reapplyCondition(conditionToken);
039                }
040                
041                if (stabilityPenalty <= 0) {
042                        endEvent();
043                }
044        }
045        
046        private boolean ended = false;
047        private void endEvent() {
048                if (market != null && conditionToken != null) {
049                        market.removeSpecificCondition(conditionToken);
050                }
051                ended = true;
052        }
053
054        public boolean isDone() {
055                return ended;
056        }
057
058        public int getStabilityPenalty() {
059                return stabilityPenalty;
060        }
061
062        public void setStabilityPenalty(int stabilityPenalty) {
063                if (isDone()) return;
064                
065                this.stabilityPenalty = stabilityPenalty;
066                if (stabilityPenalty <= 0) {
067                        endEvent();
068                } else {
069                        market.reapplyCondition(conditionToken);
070                }
071        }
072        
073        public void increaseStabilityPenalty(int penalty) {
074                if (isDone()) return;
075                
076                this.stabilityPenalty += penalty;
077                if (stabilityPenalty <= 0) {
078                        endEvent();
079                } else {
080                        market.reapplyCondition(conditionToken);
081                }
082        }
083        
084        public void reduceStabilityPenalty(int penalty) {
085                if (isDone()) return;
086                
087                this.stabilityPenalty -= penalty;
088                if (stabilityPenalty <= 0) {
089                        endEvent();
090                } else {
091                        market.reapplyCondition(conditionToken);
092                }
093        }
094        
095        public String getEventName() {
096                if (isDone()) return "Recent unrest at null market";
097                return "Recent unrest at " + market.getName();
098        }
099}
100
101
102
103