001package com.fs.starfarer.api.impl.campaign.graid;
002
003import java.awt.Color;
004import java.util.Random;
005
006import com.fs.starfarer.api.Global;
007import com.fs.starfarer.api.campaign.CargoAPI;
008import com.fs.starfarer.api.campaign.CargoStackAPI;
009import com.fs.starfarer.api.campaign.TextPanelAPI;
010import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType;
011import com.fs.starfarer.api.campaign.econ.CommoditySpecAPI;
012import com.fs.starfarer.api.campaign.econ.Industry;
013import com.fs.starfarer.api.campaign.econ.MarketAPI;
014import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.RaidDangerLevel;
015import com.fs.starfarer.api.loading.Description;
016import com.fs.starfarer.api.loading.Description.Type;
017import com.fs.starfarer.api.ui.TooltipMakerAPI;
018import com.fs.starfarer.api.util.Misc;
019
020public class AICoreGroundRaidObjectivePluginImpl extends BaseGroundRaidObjectivePluginImpl {
021
022        public AICoreGroundRaidObjectivePluginImpl(MarketAPI market, String id, Industry source) {
023                super(market, id);
024                setSource(source);
025        }
026        
027        @Override
028        public void setSource(Industry source) {
029                super.setSource(source);
030                RaidDangerLevel level = getDangerLevel();
031                int marines = level.marineTokens;
032                if (source != null) {
033                        marines = source.adjustMarineTokensToRaidItem(id, null, marines); 
034                }
035                setMarinesRequired(marines);
036        }
037
038        public float getQuantity(int marines) {
039                return 1;
040        }
041        
042        public int getValue(int marines) {
043                return (int) (getQuantity(marines) * getCommoditySpec().getBasePrice());
044        }
045        
046        public int getCargoSpaceNeeded() {
047                return (int) getCommoditySpec().getCargoSpace();
048        }
049        
050        public int getFuelSpaceNeeded() {
051                return 0;
052        }
053        
054        public int getProjectedCreditsValue() {
055                return (int) getCommoditySpec().getBasePrice();
056        }
057        
058        public CommoditySpecAPI getCommoditySpec() {
059                return Global.getSettings().getCommoditySpec(id);
060        }
061        
062        public RaidDangerLevel getDangerLevel() {
063                RaidDangerLevel level = getCommoditySpec().getBaseDanger();
064                if (source != null) {
065                        level = source.adjustItemDangerLevel(id, null, level);
066                }
067                return level;
068        }
069
070        public float getQuantitySortValue() {
071                CommoditySpecAPI spec = getCommoditySpec();
072                float add = 0;
073                if (spec != null) {
074                        add = spec.getOrder();
075                }
076                return QUANTITY_SORT_TIER_2 + add; 
077        }
078        
079        public String getName() {
080                return getCommoditySpec().getName();
081        }
082
083        public CargoStackAPI getStackForIcon() {
084                CargoStackAPI stack = Global.getFactory().createCargoStack(CargoItemType.RESOURCES, getId(), null);
085                return stack;
086        }
087        
088        public int performRaid(CargoAPI loot, Random random, float lootMult, TextPanelAPI text) {
089                if (marinesAssigned <= 0) return 0;
090                
091                if (source != null) {
092                        if (getId() == null || getId().equals(source.getAICoreId())) {
093                                source.setAICoreId(null);
094                        }
095                }
096                loot.addCommodity(getId(), 1f);
097                
098                int xpGained = (int) (1 * getCommoditySpec().getBasePrice() * XP_GAIN_VALUE_MULT);
099                return xpGained;
100        }
101        
102        @Override
103        public boolean hasTooltip() {
104                return true;
105        }
106
107        @Override
108        public void createTooltip(TooltipMakerAPI t, boolean expanded) {
109                float opad = 10f;
110                float pad = 3f;
111                Color h = Misc.getHighlightColor();
112                Color bad = Misc.getNegativeHighlightColor();
113                Color good = Misc.getPositiveHighlightColor();
114
115                Description desc = Global.getSettings().getDescription(id, Type.RESOURCE);
116                
117                t.addPara(desc.getText1FirstPara(), 0f);
118                
119                t.addPara("Base value: %s per unit", opad, h, Misc.getDGSCredits(getCommoditySpec().getBasePrice()));
120        }
121
122}
123
124