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