001package com.fs.starfarer.api.impl.campaign;
002
003import com.fs.starfarer.api.campaign.CampaignFleetAPI;
004import com.fs.starfarer.api.campaign.SectorEntityToken;
005import com.fs.starfarer.api.campaign.TextPanelAPI;
006import com.fs.starfarer.api.combat.MutableStat.StatMod;
007import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
008import com.fs.starfarer.api.impl.campaign.ids.Tags;
009import com.fs.starfarer.api.impl.campaign.intel.BaseIntelPlugin;
010import com.fs.starfarer.api.ui.TooltipMakerAPI;
011import com.fs.starfarer.api.util.Misc;
012
013public class NavBuoyEntityPlugin extends BaseCampaignObjectivePlugin {
014
015        public static float NAV_BONUS = 3f;
016        public static float NAV_BONUS_MAKESHIFT = 2f;
017        
018        public void init(SectorEntityToken entity, Object pluginParams) {
019                super.init(entity, pluginParams);
020                readResolve();
021        }
022        
023        Object readResolve() {
024                return this;
025        }
026        
027        public void advance(float amount) {
028                if (entity.getContainingLocation() == null || entity.isInHyperspace()) return;
029                if (isReset()) return;
030                
031                String id = getModId();
032                for (CampaignFleetAPI fleet : entity.getContainingLocation().getFleets()) {
033                        if (fleet.isInHyperspaceTransition()) continue;
034                        
035                        if (fleet.getFaction() == entity.getFaction() || (isHacked() && fleet.getFaction().isPlayerFaction())) {
036                                
037                                String desc = "Nav buoy";
038                                float bonus = NAV_BONUS;
039                                if (isMakeshift()) {
040                                        desc = "Makeshift nav buoy";
041                                        bonus = NAV_BONUS_MAKESHIFT;
042                                }
043                                
044                                StatMod curr = fleet.getStats().getFleetwideMaxBurnMod().getFlatBonus(id);
045                                if (curr == null || curr.value <= bonus) {
046                                        fleet.getStats().addTemporaryModFlat(0.1f, id,
047                                                        desc, bonus, 
048                                                        fleet.getStats().getFleetwideMaxBurnMod());
049                                }
050                        }
051                }
052                
053        }
054        
055        protected boolean isMakeshift() {
056                return entity.hasTag(Tags.MAKESHIFT);
057        }
058        
059        public void printEffect(TooltipMakerAPI text, float pad) {
060                int bonus = (int) NAV_BONUS;
061                if (isMakeshift()) {
062                        bonus = (int) NAV_BONUS_MAKESHIFT;
063                }
064                text.addPara(BaseIntelPlugin.INDENT + "%s burn level for all same-faction fleets in system",
065                                pad, Misc.getHighlightColor(), "+" + bonus);
066                
067                if (isReset()) {
068                        text.addPara(BaseIntelPlugin.INDENT + "Auto-calibrating after factory reset; non-functional", 3f);
069                }
070        }
071        
072        public void printNonFunctionalAndHackDescription(TextPanelAPI text) {
073                if (entity.getMemoryWithoutUpdate().getBoolean(MemFlags.OBJECTIVE_NON_FUNCTIONAL)) {
074                        text.addPara("This one, however, does not appear to be transmitting a navigation telemetry broadcast. The cause of its lack of function is unknown.");
075                }
076                if (isHacked()) {
077                        text.addPara("You have a hack running on this nav buoy.");
078                }
079//              if (isReset()) {
080//                      text.addPara("This nav buoy is auto-calibrating after a factory reset and is effectively non-functional.");
081//              }
082        }
083        
084        
085
086        @Override
087        public void addHackStatusToTooltip(TooltipMakerAPI text, float pad) {
088                int bonus = (int) NAV_BONUS;
089                if (isMakeshift()) {
090                        bonus = (int) NAV_BONUS_MAKESHIFT;
091                }
092                text.addPara("%s burn level for in-system fleets",
093                                pad, Misc.getHighlightColor(), "+" + bonus);
094                
095                super.addHackStatusToTooltip(text, pad);
096        }
097
098        protected String getModId() {
099                return "nav_buoy";
100        }
101        
102        
103}
104
105
106