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