001package com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special;
002
003import java.util.ArrayList;
004import java.util.List;
005import java.util.Random;
006
007import com.fs.starfarer.api.campaign.CargoAPI;
008import com.fs.starfarer.api.campaign.CargoStackAPI;
009import com.fs.starfarer.api.campaign.InteractionDialogAPI;
010import com.fs.starfarer.api.impl.campaign.procgen.SalvageEntityGenDataSpec.DropData;
011import com.fs.starfarer.api.impl.campaign.rulecmd.AddRemoveCommodity;
012import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.SalvageEntity;
013import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.SalvageSpecialInteraction.SalvageSpecialData;
014import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.SalvageSpecialInteraction.SalvageSpecialPlugin;
015
016public class BlueprintSpecial extends BaseSalvageSpecial {
017
018        public static float MAX_RANGE = 16000f;
019        
020        public static enum SurveyDataSpecialType {
021                SCRAMBLED, // used when the planet is already surveyed or doesn't exist anymore or nothing is found etc
022                PLANET_INTERESTING_PROPERTY,
023                PLANET_SURVEY_DATA,
024                SYSTEM_PRELIMINARY_SURVEY,
025                AUTO_PICK, // generate one of the above automatically, for a nearby planet or system
026                AUTO_PICK_NOT_SYSTEM, // pick either property or data, but not full system
027        }
028        
029        
030        public static class BlueprintSpecialData implements SalvageSpecialData {
031                public BlueprintSpecialData() {
032                }
033                
034                public SalvageSpecialPlugin createSpecialPlugin() {
035                        return new BlueprintSpecial();
036                }
037        }
038        
039        protected BlueprintSpecialData data;
040        
041        public BlueprintSpecial() {
042        }
043
044        @Override
045        public void init(InteractionDialogAPI dialog, Object specialData) {
046                super.init(dialog, specialData);
047                
048                data = (BlueprintSpecialData) specialData;
049                
050                //random = new Random();
051                
052                CargoAPI bp = generateBP(random);
053                bp.sort();
054                
055                if (bp.getStacksCopy().size() <= 0) {
056                        initNothing();
057                } else {
058                        initBP(bp.getStacksCopy().get(0));
059                }
060
061        }
062
063        public void initNothing() {
064                addText("Your salvage crews find a likely-looking safe, but it's unfortunately empty.");
065                setDone(true);
066        }
067        
068        
069        protected void initBP(CargoStackAPI stack) {
070                if (!stack.isSpecialStack()) {
071                        initNothing();
072                        return;
073                }
074                
075                addText("Your salvage crews find a well-hidden safe. After an EMP pulse and some delicate work " +
076                                "with a plasma cutter, the safe yields its contents.");
077                
078                playerFleet.getCargo().addFromStack(stack);
079                AddRemoveCommodity.addStackGainText(stack, text, false);
080                
081                setDone(true);
082        }
083        
084
085        @Override
086        public void optionSelected(String optionText, Object optionData) {
087                super.optionSelected(optionText, optionData);
088        }
089
090        
091        public CargoAPI generateBP(Random random) {
092                
093                List<DropData> dropRandom = new ArrayList<DropData>();
094                
095                DropData d = new DropData();
096                d.chances = 1;
097                d.group = "blueprints_guaranteed";
098                dropRandom.add(d);
099                
100                CargoAPI result = SalvageEntity.generateSalvage(random, 1f, 1f, 1f, 1f, null, dropRandom);
101                
102                return result;
103        }
104        
105}