protected override void VesselSelected(string filePath, CraftBrowserDialog.LoadType loadType) { if (filePath == _selectedCraftFilePath) { return; } // Clear out previously selected vessel _cachedCostData = null; _cachedResources = null; _window.ShipSelected(null); _selectedCraftFilePath = filePath; _craftConfigNode = ConfigNode.Load(filePath); if (_craftConfigNode == null || _craftConfigNode.CountNodes < 1) { _window.ShowAlert(_invalidVesselErrorText); return; } var error = string.Empty; if (!ShipConstruction.AllPartsFound(_craftConfigNode, ref error)) { Debug.LogError($"[KONSTRUCTION] Failed to load vessel at {_selectedCraftFilePath}"); Debug.LogError($"[KONSTRUCTION] {error}"); _window.ShowAlert(_unavailablePartsErrorText); return; } var protoVessel = CreateProtoVessel(); if (protoVessel == null) { _window.ShowAlert(_invalidVesselErrorText); return; } else if (_hasLaunchClamp) { _window.ShowAlert(_launchClampErrorText); return; } _cachedProtoVessel = protoVessel; var partResources = GetResourceCosts(); var konstructorMetadata = new KonstructorMetadata(partResources); var shipName = Localizer.Format(_craftConfigNode.GetValue("ship")); var shipMetadata = new ShipMetadata( shipName, $"{_dryMassText}: {_cachedDryMass:N1} t", $"{_dryCostText}: {_cachedFundsCost:N0}", konstructorMetadata, _cachedThumbnail); _window.ShipSelected(shipMetadata); }