001package com.fs.starfarer.api.impl.campaign.rulecmd.salvage; 002 003import java.util.List; 004import java.util.Map; 005 006import com.fs.starfarer.api.Global; 007import com.fs.starfarer.api.campaign.CampaignFleetAPI; 008import com.fs.starfarer.api.campaign.CargoAPI; 009import com.fs.starfarer.api.campaign.FactionAPI; 010import com.fs.starfarer.api.campaign.InteractionDialogAPI; 011import com.fs.starfarer.api.campaign.OptionPanelAPI; 012import com.fs.starfarer.api.campaign.SectorEntityToken; 013import com.fs.starfarer.api.campaign.TextPanelAPI; 014import com.fs.starfarer.api.campaign.rules.MemoryAPI; 015import com.fs.starfarer.api.combat.ShipHullSpecAPI; 016import com.fs.starfarer.api.combat.ShipVariantAPI; 017import com.fs.starfarer.api.impl.campaign.DerelictShipEntityPlugin; 018import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin; 019import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial; 020import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.PerShipData; 021import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.ShipCondition; 022import com.fs.starfarer.api.util.Misc; 023import com.fs.starfarer.api.util.Misc.Token; 024 025/** 026 * NotifyEvent $eventHandle <params> 027 * 028 */ 029public class PrintWreckDescription extends BaseCommandPlugin { 030 031 public static final String TRAPPED = "$trapped"; 032 public static final String LOCKED = "$locked"; 033 public static final String CAN_UNLOCK = "$canUnlock"; 034 035 036 public static final float BREAK_KEEP_FRACTION = 0.5f; 037 038 039 protected CampaignFleetAPI playerFleet; 040 protected SectorEntityToken entity; 041 protected FactionAPI playerFaction; 042 protected FactionAPI entityFaction; 043 protected TextPanelAPI text; 044 protected OptionPanelAPI options; 045 protected CargoAPI cargo; 046 protected MemoryAPI memory; 047 protected InteractionDialogAPI dialog; 048 private DerelictShipEntityPlugin plugin; 049 private Map<String, MemoryAPI> memoryMap; 050 051 052 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) { 053 054 this.dialog = dialog; 055 this.memoryMap = memoryMap; 056 057 memory = getEntityMemory(memoryMap); 058 entity = dialog.getInteractionTarget(); 059 text = dialog.getTextPanel(); 060 options = dialog.getOptionPanel(); 061 playerFleet = Global.getSector().getPlayerFleet(); 062 cargo = playerFleet.getCargo(); 063 playerFaction = Global.getSector().getPlayerFaction(); 064 entityFaction = entity.getFaction(); 065 plugin = (DerelictShipEntityPlugin) entity.getCustomPlugin(); 066 067 PerShipData shipData = plugin.getData().ship; 068 boolean nameKnown = ShipRecoverySpecial.isNameKnown(shipData.condition); 069 //String shipName = 070 //String shipVariant 071 //plugin.getData().ship. 072 073 ShipVariantAPI variant = shipData.variant; 074 if (variant == null && shipData.variantId != null) { 075 variant = Global.getSettings().getVariant(shipData.variantId); 076 } 077 078 ShipCondition condition = shipData.condition; 079 String conStr = ""; 080 switch (condition) { 081 case PRISTINE: 082 conStr = "nearly undamaged"; 083 break; 084 case GOOD: 085 conStr = "in good condition"; 086 break; 087 case AVERAGE: 088 conStr = "showing signs of damage"; 089 break; 090 case BATTERED: 091 conStr = "battered"; 092 break; 093 case WRECKED: 094 conStr = "heavily damaged"; 095 break; 096 } 097 098 if (variant == null) { 099 String str = "A derelict ship, drifting through space."; 100 text.addParagraph(str); 101 } else { 102 String hullType = ""; 103 ShipHullSpecAPI spec = variant.getHullSpec(); 104 if (spec.hasHullName()) hullType += spec.getHullNameWithDashClass(); 105 if (spec.hasDesignation()) { 106 if (!hullType.isEmpty()) hullType += " "; 107 hullType += spec.getDesignation().toLowerCase(); 108 } 109 110 String str = "A derelict " + hullType + ", drifting through space."; 111 112 text.addParagraph(str); 113 } 114 115 text.addParagraph("It is " + conStr + ", " + 116 "though determining whether it's recoverable or not will require closer examination."); 117 118 119// float daysLeft = plugin.getData().durationDays; 120// if (daysLeft >= 1000) { 121// text.addParagraph("The ship is in a stable orbit."); 122// } else { 123// String atLeastTime = Misc.getAtLeastStringForDays((int) daysLeft); 124// text.addParagraph("The ship is not in a stable orbit, but its location is predictable" + atLeastTime + "."); 125// //text.addParagraph("The ship is not inis unstable, but should not drift apart for " + atLeastTime + "."); 126// } 127 128 129 return true; 130 } 131 132 133 public String getString(String format) { 134 return Misc.getStringWithTokenReplacement(format, entity, memoryMap); 135 } 136 137 138} 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153