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