001package com.fs.starfarer.api.impl.campaign.rulecmd.salvage; 002 003import java.util.List; 004import java.util.Map; 005import java.util.Random; 006 007import org.lwjgl.util.vector.Vector2f; 008 009import com.fs.starfarer.api.Global; 010import com.fs.starfarer.api.campaign.CampaignFleetAPI; 011import com.fs.starfarer.api.campaign.InteractionDialogAPI; 012import com.fs.starfarer.api.campaign.OptionPanelAPI; 013import com.fs.starfarer.api.campaign.SectorEntityToken; 014import com.fs.starfarer.api.campaign.StarSystemAPI; 015import com.fs.starfarer.api.campaign.TextPanelAPI; 016import com.fs.starfarer.api.campaign.rules.MemoryAPI; 017import com.fs.starfarer.api.impl.PlayerFleetPersonnelTracker; 018import com.fs.starfarer.api.impl.campaign.ids.FleetTypes; 019import com.fs.starfarer.api.impl.campaign.intel.misc.CryosleeperIntel; 020import com.fs.starfarer.api.impl.campaign.intel.misc.HypershuntIntel; 021import com.fs.starfarer.api.impl.campaign.intel.misc.WormholeIntel; 022import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin; 023import com.fs.starfarer.api.impl.campaign.world.NamelessRock; 024import com.fs.starfarer.api.impl.combat.threat.DisposableThreatFleetManager; 025import com.fs.starfarer.api.impl.combat.threat.DisposableThreatFleetManager.ThreatFleetCreationParams; 026import com.fs.starfarer.api.impl.combat.threat.ThreatFleetBehaviorScript; 027import com.fs.starfarer.api.util.Misc; 028import com.fs.starfarer.api.util.Misc.Token; 029 030/** 031 * 032 */ 033public class MiscCMD extends BaseCommandPlugin { 034 035 protected CampaignFleetAPI playerFleet; 036 protected SectorEntityToken entity; 037 protected TextPanelAPI text; 038 protected OptionPanelAPI options; 039 protected MemoryAPI memory; 040 protected InteractionDialogAPI dialog; 041 protected Map<String, MemoryAPI> memoryMap; 042 043 044 public MiscCMD() { 045 } 046 047 public MiscCMD(SectorEntityToken entity) { 048 init(entity); 049 } 050 051 protected void init(SectorEntityToken entity) { 052 memory = entity.getMemoryWithoutUpdate(); 053 this.entity = entity; 054 playerFleet = Global.getSector().getPlayerFleet(); 055 056 057 } 058 059 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) { 060 this.dialog = dialog; 061 this.memoryMap = memoryMap; 062 063 String command = params.get(0).getString(memoryMap); 064 if (command == null) return false; 065 066 entity = dialog.getInteractionTarget(); 067 init(entity); 068 069 memory = getEntityMemory(memoryMap); 070 071 text = dialog.getTextPanel(); 072 options = dialog.getOptionPanel(); 073 074 if (command.equals("addCryosleeperIntel")) { 075 if (CryosleeperIntel.getCryosleeperIntel(entity) == null) { 076 new CryosleeperIntel(entity, dialog.getTextPanel()); 077 } 078 } else if (command.equals("addHypershuntIntel")) { 079 if (HypershuntIntel.getHypershuntIntel(entity) == null) { 080 new HypershuntIntel(entity, dialog.getTextPanel()); 081 } 082 } else if (command.equals("addWormholeIntel")) { 083 addWormholeIntelIfNeeded(entity, dialog.getTextPanel(), true); 084 } else if (command.equals("addMarineXP")) { 085 float amount = params.get(1).getFloat(memoryMap); 086 PlayerFleetPersonnelTracker.getInstance().update(); 087 PlayerFleetPersonnelTracker.getInstance().getMarineData().addXP(amount); 088 } else if (command.equals("mk1_spawnThreatFleet")) { 089 StarSystemAPI system = Global.getSector().getStarSystem(NamelessRock.NAMELESS_ROCK_LOCATION_ID); 090 091 ThreatFleetCreationParams p = new ThreatFleetCreationParams(); 092 p.numHives = 1; 093 p.numOverseers = 1; 094 p.numDestroyers = 2; 095 p.numFrigates = 4; 096 p.fleetType = FleetTypes.PATROL_SMALL; 097 098 CampaignFleetAPI fleet = DisposableThreatFleetManager.createThreatFleet(p, new Random()); 099 ThreatFleetBehaviorScript behavior = new ThreatFleetBehaviorScript(fleet, system); 100 behavior.setSeenByPlayer(); 101 fleet.addScript(behavior); 102 103 system.addEntity(fleet); 104 float radius = 1000f + 500f * (float) Math.random(); 105 Vector2f loc = Misc.getPointAtRadius(playerFleet.getLocation(), radius); 106 fleet.setLocation(loc.x, loc.y); 107 } 108 109 return true; 110 } 111 112 public static void addWormholeIntelIfNeeded(SectorEntityToken entity, TextPanelAPI textPanel, boolean deployed) { 113 if (WormholeIntel.getWormholeIntel(entity) == null) { 114 new WormholeIntel(entity, textPanel, deployed); 115 } 116 } 117 118} 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138