001package com.fs.starfarer.api.impl.campaign.intel.events;
002
003import com.fs.starfarer.api.Global;
004import com.fs.starfarer.api.campaign.comm.CommMessageAPI.MessageClickAction;
005import com.fs.starfarer.api.campaign.econ.EconomyAPI.EconomyUpdateListener;
006import com.fs.starfarer.api.campaign.econ.MarketAPI;
007import com.fs.starfarer.api.impl.campaign.econ.PiracyRespite;
008import com.fs.starfarer.api.impl.campaign.ids.Conditions;
009import com.fs.starfarer.api.impl.campaign.ids.Sounds;
010import com.fs.starfarer.api.impl.campaign.intel.BaseIntelPlugin;
011import com.fs.starfarer.api.impl.campaign.intel.MessageIntel;
012import com.fs.starfarer.api.impl.campaign.intel.PerseanLeagueMembership;
013import com.fs.starfarer.api.util.Misc;
014
015public class EstablishedPolityScript implements EconomyUpdateListener {
016
017        public static String KEY = "$eps_ref";
018        
019        public static EstablishedPolityScript get() {
020                return (EstablishedPolityScript) Global.getSector().getMemoryWithoutUpdate().get(KEY);
021        }
022        
023
024        protected long timestamp;
025        
026        public EstablishedPolityScript() {
027                
028                sendGainedMessage();
029                
030                // to avoid duplicates
031                EstablishedPolityScript existing = get();
032                if (existing != null) {
033                        return;
034                }
035                
036                Global.getSector().getEconomy().addUpdateListener(this);
037                Global.getSector().getMemoryWithoutUpdate().set(KEY, this);
038                
039                economyUpdated();
040        }
041        
042        public void sendGainedMessage() {
043                MessageIntel msg = new MessageIntel();
044                msg.addLine("Established Polity gained", Misc.getBasePlayerColor());
045                msg.addLine(BaseIntelPlugin.BULLET + "Colonies receive %s accessibility", Misc.getTextColor(),
046                                new String [] {"+" + (int)Math.round(PiracyRespite.ACCESSIBILITY_BONUS * 100f) + "%"},
047                                Misc.getHighlightColor());
048                msg.setIcon(Global.getSettings().getSpriteName("events", "established_polity"));
049                msg.setSound(Sounds.REP_GAIN);
050                Global.getSector().getCampaignUI().addMessage(msg, MessageClickAction.COLONY_INFO);
051        }
052        
053        public void commodityUpdated(String commodityId) {
054                
055        }
056
057        public void economyUpdated() {
058                //for (MarketAPI curr : Misc.getPlayerMarkets(false)) {
059                for (MarketAPI curr : Global.getSector().getEconomy().getMarketsCopy()) {
060                        if (curr.isPlayerOwned() && curr.getFaction() != null && curr.getFaction().isPlayerFaction()) {
061                                if (!curr.hasCondition(Conditions.ESTABLISHED_POLITY)) {
062                                        curr.addCondition(Conditions.ESTABLISHED_POLITY);
063                                }
064                        } else {
065                                if (curr.hasCondition(Conditions.ESTABLISHED_POLITY)) {
066                                        curr.removeCondition(Conditions.ESTABLISHED_POLITY);
067                                }
068                        }
069                }
070        }
071
072        public void cleanup() {
073                Global.getSector().getMemoryWithoutUpdate().unset(KEY);
074                //for (MarketAPI curr : Misc.getPlayerMarkets(false)) {
075                for (MarketAPI curr : Global.getSector().getEconomy().getMarketsCopy()) {
076                        if (curr.hasCondition(Conditions.ESTABLISHED_POLITY)) {
077                                curr.removeCondition(Conditions.ESTABLISHED_POLITY);
078                        }
079                }
080        }
081        
082        public boolean isEconomyListenerExpired() {
083                if (!PerseanLeagueMembership.isDefeatedBlockadeOrPunEx() && !PerseanLeagueMembership.isLeagueMember()) {
084                        cleanup();
085                        return true;
086                }
087                return false;
088        }
089
090}
091
092
093