001package com.fs.starfarer.api.impl.campaign;
002
003import com.fs.starfarer.api.Global;
004import com.fs.starfarer.api.campaign.econ.MarketAPI;
005import com.fs.starfarer.api.campaign.econ.MarketImmigrationModifier;
006import com.fs.starfarer.api.campaign.listeners.EconomyTickListener;
007import com.fs.starfarer.api.impl.campaign.population.PopulationComposition;
008import com.fs.starfarer.api.util.Misc;
009
010public class TempImmigrationModifier implements EconomyTickListener, MarketImmigrationModifier {
011
012        protected String id;
013        protected long startTime = 0;
014        
015        protected  MarketAPI market;
016        protected float pointsPerMonth;
017        protected float durDays;
018        protected String desc;
019        
020        public TempImmigrationModifier(MarketAPI market, float pointsPerMonth, float durDays, String desc) {
021                this.market = market;
022                this.pointsPerMonth = pointsPerMonth;
023                this.durDays = durDays;
024                this.desc = desc;
025                startTime = Global.getSector().getClock().getTimestamp();
026                Global.getSector().getListenerManager().addListener(this);
027                id = "temp_im_ " + Misc.genUID();
028                market.addImmigrationModifier(this);
029        }
030
031
032        public void reportEconomyTick(int iterIndex) {
033                float daysPassed = Global.getSector().getClock().getElapsedDaysSince(startTime);
034                if (daysPassed > durDays) {
035                        Global.getSector().getListenerManager().removeListener(this);
036                        market.removeImmigrationModifier(this);
037                        return;
038                }
039        }
040        
041        public void reportEconomyMonthEnd() {
042        }
043
044        public void modifyIncoming(MarketAPI market, PopulationComposition incoming) {
045                float daysPassed = Global.getSector().getClock().getElapsedDaysSince(startTime);
046                int daysLeft = (int) (durDays - daysPassed);
047                if (daysLeft <= 0) return;
048                
049                String days = "days";
050                if (daysLeft == 1) days = "day";
051                incoming.getWeight().modifyFlat(id, pointsPerMonth, desc + " (" + daysLeft + " " + days + " left)");            
052        }
053}
054
055
056