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