001package com.fs.starfarer.api.impl.campaign; 002 003import java.util.Map; 004 005import com.fs.starfarer.api.Global; 006import com.fs.starfarer.api.campaign.CampaignFleetAPI; 007import com.fs.starfarer.api.campaign.InteractionDialogAPI; 008import com.fs.starfarer.api.campaign.InteractionDialogPlugin; 009import com.fs.starfarer.api.campaign.OptionPanelAPI; 010import com.fs.starfarer.api.campaign.TextPanelAPI; 011import com.fs.starfarer.api.campaign.VisualPanelAPI; 012import com.fs.starfarer.api.campaign.rules.MemoryAPI; 013import com.fs.starfarer.api.characters.OfficerDataAPI; 014import com.fs.starfarer.api.combat.EngagementResultAPI; 015import com.fs.starfarer.api.fleet.FleetMemberAPI; 016import com.fs.starfarer.api.impl.campaign.fleets.FleetFactoryV3; 017import com.fs.starfarer.api.impl.campaign.ids.Abilities; 018import com.fs.starfarer.api.impl.campaign.ids.Factions; 019import com.fs.starfarer.api.impl.campaign.ids.MemFlags; 020import com.fs.starfarer.api.impl.campaign.shared.PersonBountyEventData; 021import com.fs.starfarer.api.impl.campaign.shared.SharedData; 022import com.fs.starfarer.api.util.Misc; 023 024public class StandardRespawnDialogPluginImpl implements InteractionDialogPlugin { 025 026 public static enum OptionId { 027 INIT, 028 RESPAWN, 029 ; 030 } 031 032 protected InteractionDialogAPI dialog; 033 protected TextPanelAPI textPanel; 034 protected OptionPanelAPI options; 035 protected VisualPanelAPI visual; 036 037 protected CampaignFleetAPI playerFleet; 038 039 public void init(InteractionDialogAPI dialog) { 040 this.dialog = dialog; 041 textPanel = dialog.getTextPanel(); 042 options = dialog.getOptionPanel(); 043 visual = dialog.getVisualPanel(); 044 045 playerFleet = Global.getSector().getPlayerFleet(); 046 047 visual.showImagePortion("illustrations", "space_wreckage", 640, 400, 0, 0, 480, 300); 048 049 optionSelected(null, OptionId.INIT); 050 } 051 052 public Map<String, MemoryAPI> getMemoryMap() { 053 return null; 054 } 055 056 public void backFromEngagement(EngagementResultAPI result) { 057 // no combat here, so this won't get called 058 } 059 060 public void optionSelected(String text, Object optionData) { 061 if (optionData == null) return; 062 063 OptionId option = (OptionId) optionData; 064 065 if (text != null) { 066 //textPanel.addParagraph(text, Global.getSettings().getColor("buttonText")); 067 dialog.addOptionSelectedText(option); 068 } 069 070 switch (option) { 071 case INIT: 072 textPanel.addParagraph("Your fleet has been defeated!"); 073 074 textPanel.addParagraph("Normally, if this happens you and your remaining crew will " + 075 "spend some time \"behind the scenes\" assembling a smaller fleet of recovered " + 076 "ships."); 077 078 textPanel.addParagraph("During the course of this tutorial, the only available option is to reload the last save."); 079 080 options.clearOptions(); 081 options.addOption("Continue", OptionId.RESPAWN, null); 082 break; 083 case RESPAWN: 084 085 createPlayerFleet(); 086 087 dialog.dismiss(); 088 Global.getSector().getCampaignUI().quickLoad(); 089 break; 090 } 091 } 092 093 094 protected void createPlayerFleet() { 095 096 float fp = 10; 097 float crew = 50; 098 099 float daysSince = Global.getSector().getClock().getElapsedDaysSince(SharedData.getData().getPlayerLosingBattleTimestamp()); 100 if (daysSince < 2) { 101 fp = SharedData.getData().getPlayerPreLosingBattleFP(); 102 crew = SharedData.getData().getPlayerPreLosingBattleCrew(); 103 } 104 105 CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet(); 106 107 108 109 for (CampaignFleetAPI other : Global.getSector().getCurrentLocation().getFleets()) { 110 MemoryAPI mem = other.getMemoryWithoutUpdate(); 111 if (mem.getBoolean(MemFlags.MEMORY_KEY_MAKE_HOSTILE_WHILE_TOFF)) { 112 mem.removeAllRequired(MemFlags.MEMORY_KEY_MAKE_HOSTILE_WHILE_TOFF); 113 //System.out.println("Hostile: " + mem.getBoolean(MemFlags.MEMORY_KEY_MAKE_HOSTILE_WHILE_TOFF)); 114 } 115 mem.unset(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_OFF); 116 117 if (!Misc.isPermaKnowsWhoPlayerIs(other)) { 118 mem.unset(MemFlags.MEMORY_KEY_SAW_PLAYER_WITH_TRANSPONDER_ON); 119 } 120 } 121 122 CampaignFleetAPI fleet = FleetFactoryV3.createEmptyFleet(Factions.PLAYER, null, null); 123 fleet.setName("Fleet"); 124 125 Global.getSector().setCurrentLocation(Global.getSector().getHyperspace()); 126 fleet.setLocation(1000000000f, 1000000000f); 127 128 for (OfficerDataAPI officer : playerFleet.getFleetData().getOfficersCopy()) { 129 fleet.getFleetData().addOfficer(officer); 130 } 131 132 Global.getSector().setPlayerFleet(fleet); 133 Global.getSector().setLastPlayerBattleTimestamp(Long.MIN_VALUE); 134 Global.getSector().setLastPlayerBattleWon(false); 135 136 137 fleet.getFleetData().setSyncNeeded(); 138 fleet.getFleetData().syncIfNeeded(); 139 140 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) { 141 float max = member.getRepairTracker().getMaxCR(); 142 member.getRepairTracker().setCR(max); 143 } 144 145 146 for (String id : Global.getSector().getCharacterData().getAbilities()) { 147 fleet.addAbility(id); 148 } 149 150 if (fleet.getAbility(Abilities.TRANSPONDER) != null) { 151 fleet.getAbility(Abilities.TRANSPONDER).activate(); 152 } 153 154 Global.getSector().setPaused(true); 155 156// float minCredits = 2000; 157// float newCredits = Math.max(credits * 0.8f, minCredits); 158// float change = credits - newCredits; 159// 160// fleet.getCargo().getCredits().add(newCredits); 161// if (change > 0) { 162// addMessage("Lost " + (int)(change) + " credits"); 163// } else if (change < 0) { 164// addMessage("Gained " + (int)(-change) + " credits"); 165// } 166 167 Global.getSector().getCampaignUI().resetViewOffset(); 168 169 Misc.clearAreaAroundPlayer(2000f); 170 171 PersonBountyEventData data = SharedData.getData().getPersonBountyEventData(); 172 data.setLevel(Math.max(0, data.getLevel() - 1)); 173 data.setSuccessesThisLevel(0); 174 } 175 176 177 178 179 180 public void optionMousedOver(String optionText, Object optionData) { 181 182 } 183 184 public void advance(float amount) { 185 186 } 187 188 public Object getContext() { 189 return null; 190 } 191} 192 193 194