001package com.fs.starfarer.api.impl.combat.dweller;
002
003import com.fs.starfarer.api.campaign.CampaignFleetAPI;
004import com.fs.starfarer.api.campaign.CargoAPI;
005import com.fs.starfarer.api.campaign.InteractionDialogAPI;
006import com.fs.starfarer.api.combat.BattleCreationContext;
007import com.fs.starfarer.api.impl.campaign.FleetEncounterContext;
008import com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl.BaseFIDDelegate;
009import com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl.FIDConfig;
010import com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl.FIDConfigGen;
011
012/**
013 * Not actually used - see DwellerCMD; that's used instead.
014 * 
015 * @author Alex
016 *
017 */
018public class DwellerFIDConfig implements FIDConfigGen {
019        public FIDConfig createConfig() {
020                FIDConfig config = new FIDConfig();
021                
022                config.alwaysAttackVsAttack = true;
023                //config.alwaysPursue = true;
024                config.alwaysHarry = true;
025                config.showTransponderStatus = false;
026                //config.showEngageText = false;
027                config.lootCredits = false;
028                
029                
030                config.delegate = new BaseFIDDelegate() {
031                        public void postPlayerSalvageGeneration(InteractionDialogAPI dialog, FleetEncounterContext context, CargoAPI salvage) {
032                                if (!(dialog.getInteractionTarget() instanceof CampaignFleetAPI)) return;
033
034//                              float mult = context.computePlayerContribFraction();
035//                              float p = Global.getSettings().getFloat("salvageHullmodProb");
036//                              float pItem = Global.getSettings().getFloat("salvageHullmodRequiredItemProb");
037//                              
038//                              CampaignFleetAPI fleet = (CampaignFleetAPI) dialog.getInteractionTarget();
039//
040//                              DataForEncounterSide data = context.getDataFor(fleet);
041//                              List<FleetMemberAPI> losses = new ArrayList<FleetMemberAPI>();
042//                              for (FleetMemberData fmd : data.getOwnCasualties()) {
043//                                      losses.add(fmd.getMember());
044//                              }
045//
046//                              Random random = Misc.getRandom(Misc.getSalvageSeed(fleet), 7);
047//                              //random = new Random();
048//                              
049//                              for (FleetMemberAPI member : losses) {
050//                                      if (member.getHullSpec().hasTag(Tags.THREAT_FABRICATOR)) {
051//                                              int rolls = 0;
052//                                              switch (member.getHullSpec().getHullSize()) {
053//                                              case CAPITAL_SHIP: rolls = 30; break;
054//                                              case CRUISER: rolls = 18; break;
055//                                              case DESTROYER: rolls = 12; break;
056//                                              case FRIGATE: rolls = 6; break;
057//                                              }
058//                                              
059//                                              WeightedRandomPicker<SwarmConstructableVariant> picker = new WeightedRandomPicker<>(random);
060//                                              for (SwarmConstructableVariant curr : ConstructionSwarmSystemScript.CONSTRUCTABLE) {
061//                                                      picker.add(curr, curr.dp);
062//                                              }
063//                                              
064//                                              for (int i = 0; i < rolls; i++) {
065//                                                      SwarmConstructableVariant pick = picker.pick();
066//                                                      ShipVariantAPI variant = Global.getSettings().getVariant(pick.variantId);
067//                                                      
068//                                                      for (String id : variant.getHullMods()) {
069//                                                              if (!variant.getHullSpec().isBuiltInMod(id)) {
070//                                                                      if (random.nextFloat() < pItem && random.nextFloat() < mult) {
071//                                                                              HullModSpecAPI spec = Global.getSettings().getHullModSpec(id);
072//                                                                              CargoStackAPI item = spec.getEffect().getRequiredItem();
073//                                                                              if (item != null) {
074//                                                                                      boolean addToLoot = true;
075//                                                                                      if (item.getSpecialItemSpecIfSpecial() != null && item.getSpecialItemSpecIfSpecial().hasTag(Tags.NO_DROP)) {
076//                                                                                              addToLoot = false;
077//                                                                                      } else if (item.getResourceIfResource() != null && item.getResourceIfResource().hasTag(Tags.NO_DROP)) {
078//                                                                                              addToLoot = false;
079//                                                                                      } else if (item.getFighterWingSpecIfWing() != null && item.getFighterWingSpecIfWing().hasTag(Tags.NO_DROP)) {
080//                                                                                              addToLoot = false;
081//                                                                                      } else if (item.getWeaponSpecIfWeapon() != null && item.getWeaponSpecIfWeapon().hasTag(Tags.NO_DROP)) {
082//                                                                                              addToLoot = false;
083//                                                                                      }
084//                                                                                      if (addToLoot) {
085//                                                                                              salvage.addItems(item.getType(), item.getData(), 1);
086//                                                                                      }
087//                                                                              }
088//                                                                      }
089//                                                              }
090//                                                              
091//                                                              //if (random.nextFloat() > mult) continue;
092//                                                              if (random.nextFloat() < p && random.nextFloat() < mult) {
093//                                                                      HullModSpecAPI spec = Global.getSettings().getHullModSpec(id);
094//                                                                      boolean known = Global.getSector().getPlayerFaction().knowsHullMod(id);
095//                                                                      if (DebugFlags.ALLOW_KNOWN_HULLMOD_DROPS) known = false;
096//                                                                      if (known || spec.isHidden() || spec.isHiddenEverywhere()) continue;
097//                                                                      //if (spec.isAlwaysUnlocked()) continue;
098//                                                                      if (spec.hasTag(Tags.HULLMOD_NO_DROP)) continue;
099//                                                                      
100//                                                                      salvage.addHullmods(id, 1);
101//                                                              }
102//                                                      }
103//                                              }
104//                                      }
105//                              }
106                        }
107                        
108                        public void battleContextCreated(InteractionDialogAPI dialog, BattleCreationContext bcc) {
109                                bcc.aiRetreatAllowed = false;
110                                bcc.fightToTheLast = true;
111                                bcc.objectivesAllowed = false;
112                                bcc.enemyDeployAll = true;
113                        }
114                };
115                return config;
116        }
117}
118
119
120
121
122