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}