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.SpecialItemData;
010import com.fs.starfarer.api.campaign.SpecialItemSpecAPI;
011import com.fs.starfarer.api.campaign.TextPanelAPI;
012import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType;
013import com.fs.starfarer.api.campaign.econ.Industry;
014import com.fs.starfarer.api.campaign.econ.MarketAPI;
015import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.RaidDangerLevel;
016import com.fs.starfarer.api.ui.TooltipMakerAPI;
017import com.fs.starfarer.api.util.Misc;
018
019public class SpecialItemRaidObjectivePluginImpl extends BaseGroundRaidObjectivePluginImpl {
020
021        protected String data;
022        
023        public SpecialItemRaidObjectivePluginImpl(MarketAPI market, String id, String data, Industry source) {
024                super(market, id);
025                this.data = data;
026                setSource(source);
027        }
028        
029        @Override
030        public void setSource(Industry source) {
031                super.setSource(source);
032                RaidDangerLevel level = getDangerLevel();
033                int marines = level.marineTokens;
034                if (source != null) {
035                        marines = source.adjustMarineTokensToRaidItem(id, data, marines); 
036                }
037                setMarinesRequired(marines);
038        }
039
040        public String getData() {
041                return data;
042        }
043
044        public void setData(String data) {
045                this.data = data;
046        }
047
048        public float getQuantity(int marines) {
049                return 1;
050        }
051        
052        public int getValue(int marines) {
053                return (int) (getQuantity(marines) * getItemSpec().getBasePrice());
054        }
055        
056        public int getCargoSpaceNeeded() {
057                return (int) getItemSpec().getCargoSpace();
058        }
059        
060        public int getFuelSpaceNeeded() {
061                return 0;
062        }
063        
064        public int getProjectedCreditsValue() {
065                return (int) getItemSpec().getBasePrice();
066        }
067        
068        public int getDeficitCaused() {
069                return 0;
070        }
071        
072        public SpecialItemSpecAPI getItemSpec() {
073                return Global.getSettings().getSpecialItemSpec(id);
074        }
075        
076        public RaidDangerLevel getDangerLevel() {
077                RaidDangerLevel level = getItemSpec().getBaseDanger();
078                if (source != null) {
079                        level = source.adjustItemDangerLevel(id, null, level);
080                }
081                return level;
082        }
083
084        public float getQuantitySortValue() {
085                SpecialItemSpecAPI spec = getItemSpec();
086                float add = 0;
087                if (spec != null) {
088                        add = spec.getOrder();
089                }
090                return QUANTITY_SORT_TIER_2 + add + 1000;
091        }
092        
093        public String getName() {
094                return getItemSpec().getName();
095        }
096
097        public CargoStackAPI getStackForIcon() {
098                CargoStackAPI stack = Global.getFactory().createCargoStack(CargoItemType.SPECIAL,
099                                                                                new SpecialItemData(getId(), getData()), null);
100                return stack;
101        }
102        
103        public int performRaid(CargoAPI loot, Random random, float lootMult, TextPanelAPI text) {
104                if (marinesAssigned <= 0) return 0;
105                
106                if (source != null) {
107                        SpecialItemData sid = source.getSpecialItem();
108                        if ((getId() == null || getId().equals(sid.getId())) &&
109                                        (getData() == null || getData().equals(sid.getData()))) {
110                                source.setSpecialItem(null);
111                        }
112                }
113                loot.addSpecial(new SpecialItemData(getId(), getData()), 1);
114                
115                int xpGained = (int) (1 * getItemSpec().getBasePrice() * XP_GAIN_VALUE_MULT);
116                return xpGained;
117        }
118        
119        @Override
120        public boolean hasTooltip() {
121                return true;
122        }
123
124        @Override
125        public void createTooltip(TooltipMakerAPI t, boolean expanded) {
126                float opad = 10f;
127                float pad = 3f;
128                Color h = Misc.getHighlightColor();
129                Color bad = Misc.getNegativeHighlightColor();
130                Color good = Misc.getPositiveHighlightColor();
131
132                //Description desc = Global.getSettings().getDescription(id, Type.RESOURCE);
133                
134                t.addPara(getItemSpec().getDescFirstPara(), 0f);
135                
136                t.addPara("Base value: %s per unit", opad, h, Misc.getDGSCredits(getItemSpec().getBasePrice()));
137        }
138}
139
140
141
142