001package com.fs.starfarer.api.impl.campaign.abilities; 002 003import java.awt.Color; 004 005import com.fs.starfarer.api.Global; 006import com.fs.starfarer.api.campaign.CampaignFleetAPI; 007import com.fs.starfarer.api.fleet.FleetMemberViewAPI; 008import com.fs.starfarer.api.impl.campaign.ids.Stats; 009import com.fs.starfarer.api.ui.LabelAPI; 010import com.fs.starfarer.api.ui.TooltipMakerAPI; 011import com.fs.starfarer.api.util.Misc; 012 013public class GoDarkAbility extends BaseToggleAbility { 014 015 //public static final float MAX_BURN_MULT = 0.5f; 016 public static final float DETECTABILITY_MULT = 0.5f; 017 018// public String getSpriteName() { 019// return Global.getSettings().getSpriteName("abilities", Abilities.GO_DARK); 020// } 021 022 023 024 @Override 025 protected String getActivationText() { 026 return "Going dark"; 027 } 028 029 @Override 030 protected String getDeactivationText() { 031 //return "Restoring power"; 032 return null; 033 } 034 035 036 @Override 037 protected void activateImpl() { 038// if (entity.isInCurrentLocation()) { 039// entity.addFloatingText("Going dark", entity.getFaction().getBaseUIColor(), 0.5f); 040// } 041 042// AbilityPlugin transponder = entity.getAbility(Abilities.TRANSPONDER); 043// if (transponder != null && transponder.isActive()) { 044// transponder.deactivate(); 045// } 046// AbilityPlugin sb = entity.getAbility(Abilities.SUSTAINED_BURN); 047// if (sb != null && sb.isActive()) { 048// sb.deactivate(); 049// } 050 } 051 052 @Override 053 protected void applyEffect(float amount, float level) { 054 CampaignFleetAPI fleet = getFleet(); 055 if (fleet == null) return; 056 057 if (level < 1) level = 0; 058 059 float d = fleet.getStats().getDynamic().getValue(Stats.GO_DARK_DETECTED_AT_MULT); 060 //float b = fleet.getStats().getDynamic().getValue(Stats.GO_DARK_BURN_PENALTY_MULT); 061 062 fleet.getStats().getDetectedRangeMod().modifyMult(getModId(), 1f + (DETECTABILITY_MULT * d - 1f) * level, "Going dark"); 063// float MAX_BURN_MULT = 0.5f; 064// float b = 1f; 065// fleet.getStats().getFleetwideMaxBurnMod().modifyMult(getModId(), 1f + (MAX_BURN_MULT - 1f) * level * b, "Going dark"); 066 067 fleet.goSlowOneFrame(); 068 069 for (FleetMemberViewAPI view : fleet.getViews()) { 070 view.getContrailColor().shift(getModId(), new Color(0,0,0,0), 1f, 1f, 1f); 071 view.getContrailDurMult().shift(getModId(), 0f, 1f, 1f, 1f); 072 //view.getContrailWidthMult().shift(getModId(), 0.25f, 1f, 1f, 1f); 073 view.getEngineGlowSizeMult().shift(getModId(), 0.5f, 1f, 1f, 1f); 074 view.getEngineHeightMult().shift(getModId(), 0.5f, 1f, 1f, 1f); 075 //view.getEngineWidthMult().shift(getModId(), 3f, 1f, 1f, 1f); 076 } 077 078 079// if (level > 0) { 080// SlipstreamTerrainPlugin slipstream = SlipstreamTerrainPlugin.getSlipstreamPlugin(fleet.getContainingLocation()); 081// if (slipstream != null) { 082// slipstream.disrupt(fleet, 0.1f); 083// } 084// } 085 } 086 087 @Override 088 protected void deactivateImpl() { 089 cleanupImpl(); 090 } 091 092 @Override 093 protected void cleanupImpl() { 094 CampaignFleetAPI fleet = getFleet(); 095 if (fleet == null) return; 096 097 fleet.getStats().getDetectedRangeMod().unmodify(getModId()); 098 //fleet.getStats().getFleetwideMaxBurnMod().unmodifyMult(getModId()); 099 } 100 101// @Override 102// public float getActivationDays() { 103// return 0.1f; 104// } 105// 106// @Override 107// public float getDeactivationDays() { 108// return 0f; 109// } 110 111 @Override 112 public boolean showProgressIndicator() { 113 return false; 114 } 115 116 @Override 117 public boolean showActiveIndicator() { 118 return isActive(); 119 } 120 121 122 @Override 123 public void createTooltip(TooltipMakerAPI tooltip, boolean expanded) { 124 Color gray = Misc.getGrayColor(); 125 Color highlight = Misc.getHighlightColor(); 126 127 String status = " (off)"; 128 if (turnedOn) { 129 status = " (on)"; 130 } 131 132 if (!Global.CODEX_TOOLTIP_MODE) { 133 LabelAPI title = tooltip.addTitle(spec.getName() + status); 134 title.highlightLast(status); 135 title.setHighlightColor(gray); 136 } else { 137 tooltip.addSpacer(-10f); 138 } 139 140 float pad = 10f; 141 142 143// tooltip.addPara("Turns off all non-essential systems, reducing the range" + 144// " at which the fleet can be detected by %s and reducing the maximum burn" + 145// " level by %s.", pad, 146// highlight, 147// "" + (int)((1f - DETECTABILITY_MULT) * 100f) + "%", 148// "" + (int)((1f - MAX_BURN_MULT) * 100f) + "%" 149// ); 150 tooltip.addPara("Turns off all non-essential systems, reducing the range" + 151 " at which the fleet can be detected by %s and forcing the fleet to %s*." + 152 "", pad, 153 highlight, 154 "" + (int)((1f - DETECTABILITY_MULT) * 100f) + "%", 155 "move slowly" 156 ); 157 //tooltip.addPara("Disables the transponder when activated.", pad); 158 159 tooltip.addPara("*A fleet is considered slow-moving at a burn level of half that of its slowest ship.", gray, pad); 160// tooltip.addPara("*Maximum burn level of %s", pad, gray, 161// Misc.getDarkHighlightColor(), 162// "" + Misc.getGoSlowBurnLevel(getFleet())); 163 addIncompatibleToTooltip(tooltip, expanded); 164 } 165 166 public boolean hasTooltip() { 167 return true; 168 } 169 170 171} 172 173 174 175 176