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