001package com.fs.starfarer.api.impl.campaign.graid;
002
003import java.awt.Color;
004import java.util.Random;
005
006import com.fs.starfarer.api.campaign.CargoAPI;
007import com.fs.starfarer.api.campaign.TextPanelAPI;
008import com.fs.starfarer.api.campaign.econ.Industry;
009import com.fs.starfarer.api.campaign.econ.Industry.IndustryTooltipMode;
010import com.fs.starfarer.api.campaign.econ.MarketAPI;
011import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator;
012import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.RaidDangerLevel;
013import com.fs.starfarer.api.loading.IndustrySpecAPI;
014import com.fs.starfarer.api.ui.TooltipMakerAPI;
015import com.fs.starfarer.api.util.Misc;
016
017public class DisruptIndustryRaidObjectivePluginImpl extends BaseGroundRaidObjectivePluginImpl {
018
019        public static float DISRUPTION_DAYS_XP_MULT = 300;
020        
021        public DisruptIndustryRaidObjectivePluginImpl(MarketAPI market, Industry target) {
022                super(market, target.getId());
023                setSource(target);
024        }
025        
026        @Override
027        public void setSource(Industry source) {
028                super.setSource(source);
029//              RaidDangerLevel level = getDangerLevel();
030//              int marines = level.marineTokens;
031//              if (source != null) {
032//                      marines = source.adjustMarineTokensToRaidItem(id, data, marines); 
033//              }
034//              setMarinesRequired(marines);
035        }
036        
037        @Override
038        public String getQuantityString(int marines) {
039                float days = source.getDisruptedDays();
040                if (days > 0 && days < 1) days = 1;
041                days = Math.round(days);
042                if (days > 0) {
043                        return "" + (int) days;
044                }
045                return "";
046        }
047        
048        @Override
049        public Color getQuantityColor(int marines) {
050                //if (getQuantityString(marines).isEmpty()) return Misc.getGrayColor();
051                return Misc.getHighlightColor();
052        }
053
054        public int getDisruptionDaysSort(int marines) {
055                marines = Math.max(1, marines);
056                return (int) getBaseDisruptDuration(marines);
057        }
058        
059        public String getDisruptionDaysString(int marines) {
060                marines = Math.max(1, marines);
061                return "" + (int) getBaseDisruptDuration(marines);
062        }
063
064        public float getQuantity(int marines) {
065                return 0;
066        }
067        
068        public int getValue(int marines) {
069                return 0;
070        }
071        
072        public int getProjectedCreditsValue() {
073                return 0;
074        }
075        
076        public IndustrySpecAPI getSpec() {
077                return getSource().getSpec();
078        }
079        
080        public RaidDangerLevel getDangerLevel() {
081                RaidDangerLevel level = getSpec().getDisruptDanger();
082                return level;
083        }
084
085        public float getQuantitySortValue() {
086                IndustrySpecAPI spec = getSpec();
087                float add = spec.getOrder();
088                return QUANTITY_SORT_TIER_4 + add + 1000;
089        }
090        
091        public String getName() {
092                return getSource().getCurrentName();
093        }
094
095        @Override
096        public String getIconName() {
097                return getSource().getCurrentImage();
098        }
099        
100        protected float addedDisruptionDays = 0f;
101        public float getAddedDisruptionDays() {
102                return addedDisruptionDays;
103        }
104
105        public void setAddedDisruptionDays(float addedDisruptionDays) {
106                this.addedDisruptionDays = addedDisruptionDays;
107        }
108
109        public int performRaid(CargoAPI loot, Random random, float lootMult, TextPanelAPI text) {
110                if (marinesAssigned <= 0) return 0;
111                
112                float dur = getBaseDisruptDuration(marinesAssigned);
113                dur *= lootMult;
114                dur *= StarSystemGenerator.getNormalRandom(random, 1f, 1.1f);
115                if (dur < 2) dur = 2;
116                float already = source.getDisruptedDays();
117                source.setDisrupted(already + dur);
118                addedDisruptionDays = dur;
119                
120                //text.addPara("The raid was successful in disrupting " + source.getNameForModifier() + " operations." +
121                text.addPara("The raid was successful in disrupting " + source.getCurrentName() + " operations." +
122                                " It will take at least %s days for normal operations to resume.",
123                                Misc.getHighlightColor(), "" + (int) Math.round(source.getDisruptedDays()));
124                
125                int xpGained = (int) (dur * DISRUPTION_DAYS_XP_MULT);
126                return xpGained;
127        }
128        
129        public float getBaseDisruptDuration(int marines) {
130                if (marines <= 0) return 0f;
131                float already = source.getDisruptedDays();
132                //float dur = marines * Global.getSettings().getFloat("raidDisruptDurationPerMarineToken");
133                float dur = marines * source.getSpec().getDisruptDanger().disruptionDays;
134                dur *= dur / (dur + already); 
135                return dur;
136        }
137        
138        @Override
139        public boolean hasTooltip() {
140                return true;
141        }
142        
143        @Override
144        public float getTooltipWidth() {
145                return getSource().getTooltipWidth();
146        }
147
148        @Override
149        public void createTooltip(TooltipMakerAPI t, boolean expanded) {
150                getSource().createTooltip(IndustryTooltipMode.NORMAL, t, expanded);
151//              float opad = 10f;
152//              float pad = 3f;
153//              Color h = Misc.getHighlightColor();
154//              Color bad = Misc.getNegativeHighlightColor();
155//              Color good = Misc.getPositiveHighlightColor();
156//
157//              //Description desc = Global.getSettings().getDescription(id, Type.RESOURCE);
158//              
159//              t.addPara(getItemSpec().getDescFirstPara(), 0f);
160//              
161//              t.addPara("Base value: %s per unit", opad, h, Misc.getDGSCredits(getItemSpec().getBasePrice()));
162        }
163}
164
165
166
167