/// <inheritdoc /> public CollisionDataWindow(Editor editor, AssetItem item) : base(editor, item) { // Toolstrip _toolstrip.AddSeparator(); _toolstrip.AddButton(editor.Icons.Docs32, () => Platform.StartProcess(Utilities.Constants.DocsUrl + "manual/physics/colliders/collision-data.html")).LinkTooltip("See documentation to learn more"); // Split Panel _split = new SplitPanel(Orientation.Horizontal, ScrollBars.None, ScrollBars.Vertical) { DockStyle = DockStyle.Fill, SplitterValue = 0.7f, Parent = this }; // Model preview _preview = new ModelPreview(true) { ViewportCamera = new FPSCamera(), Parent = _split.Panel1 }; // Asset properties _propertiesPresenter = new CustomEditorPresenter(null); _propertiesPresenter.Panel.Parent = _split.Panel2; _properties = new PropertiesProxy(); _propertiesPresenter.Select(_properties); }
public void LoadStaticMesh(int index) { try { stm = ObjectBinary.From <StaticMesh>(Pcc.GetUExport(index)); //var mesh = ObjectBinary.From <StaticMesh>(Pcc.getUExport(index)); // Load meshes for the LODs preview?.Dispose(); preview = new ModelPreview(view.Context.Device, stm, 0, view.Context.TextureCache); RefreshChosenMaterialsList(); CenterView(); // Update treeview treeView1.BeginUpdate(); treeView1.Nodes.Clear(); //treeView1.Nodes.Add(stm.ToTree()); //treeView1.Nodes[0].Expand(); treeView1.EndUpdate(); MaterialBox.Visible = false; MaterialApplyButton.Visible = false; MaterialIndexBox.Visible = false; MaterialIndexApplyButton.Visible = false; } catch (Exception e) { MessageBox.Show(ExceptionHandlerDialogWPF.FlattenException(e)); } }
/// <inheritdoc /> public override void OnThumbnailDrawPrepare(ThumbnailRequest request) { if (_preview == null) { _preview = new ModelPreview(false); InitAssetPreview(_preview); } // TODO: disable streaming for asset during thumbnail rendering (and restore it after) }
/// <inheritdoc /> public override void Dispose() { if (_preview != null) { _preview.Dispose(); _preview = null; } base.Dispose(); }
/// <inheritdoc /> public override void OnThumbnailDrawPrepare(ThumbnailRequest request) { if (_preview == null) { _preview = new ModelPreview(false); _preview.RenderOnlyWithWindow = false; _preview.Task.Enabled = false; _preview.Size = new Vector2(PreviewsCache.AssetIconSize, PreviewsCache.AssetIconSize); _preview.SyncBackbufferSize(); } // TODO: disable streaming for asset during thumbnail rendering (and restore it after) }
/// <inheritdoc /> public override void OnThumbnailDrawPrepare(ThumbnailRequest request) { if (_preview == null) { _preview = new ModelPreview(false); _preview.RenderOnlyWithWindow = false; _preview.Task.Enabled = false; _preview.PostFxVolume.Settings.Eye_Technique = EyeAdaptationTechnique.None; _preview.PostFxVolume.Settings.Eye_Exposure = 0.1f; _preview.PostFxVolume.Settings.data.Flags4 |= 0b1001; _preview.Size = new Vector2(PreviewsCache.AssetIconSize, PreviewsCache.AssetIconSize); _preview.SyncBackbufferSize(); } // TODO: disable streaming for asset during thumbnail rendering (and restore it after) }
private void toolStripButton1_Click(object sender, EventArgs e) { int n = MaterialBox.SelectedIndex; TreeNode t = treeView1.SelectedNode; if (n == -1 || Pcc == null || t == null || t.Parent == null) { return; } if (stm != null && t.Parent.Text == "Sections") { //DISABLED TEMP //stm.SetSectionMaterial(CurrentLOD, t.Index, Materials[n] + 1); //SerializingCont // MemoryStream ms = new MemoryStream(); // Pcc.Exports[stm.index].Data = stm.SerializeToBuffer(); //DISABLED TEMP //stm.Export.Data = stm.SerializeToBuffer(); //hope this works // Update treeview // Update preview preview.Dispose(); preview = new ModelPreview(view.Context.Device, stm, 0, view.Context.TextureCache); } else if (skm != null && t.Parent.Text == "Materials") { skm.Materials[t.Index] = Materials[n] + 1; SerializingContainer con = new SerializingContainer(); con.Memory = new MemoryStream(); con.isLoading = false; skm.Serialize(con); skm.Export.setBinaryData(con.Memory.ToArray()); //Old binary setting code //int end = skm.GetPropertyEnd(); //MemoryStream mem = new MemoryStream(); //mem.Write(Pcc.Exports[skm.MyIndex].Data, 0, end); //mem.Write(con.Memory.ToArray(), 0, (int)con.Memory.Length); //Pcc.Exports[skm.MyIndex].Data = mem.ToArray(); } }
public void LoadSkeletalMesh(int uindex) { DisableLODs(); UnCheckLODs(); try { skm = new SkeletalMesh(Pcc.GetUExport(uindex)); // Load preview model preview?.Dispose(); preview = new ModelPreview(view.Context.Device, skm, view.Context.TextureCache); RefreshChosenMaterialsList(); CenterView(); // Update treeview treeView1.BeginUpdate(); treeView1.Nodes.Clear(); treeView1.Nodes.Add(skm.ToTree()); treeView1.Nodes[0].Expand(); treeView1.EndUpdate(); lODToolStripMenuItem.Visible = true; lOD0ToolStripMenuItem.Enabled = true; lOD0ToolStripMenuItem.Checked = true; if (skm.LODModels.Count > 1) { lOD1ToolStripMenuItem.Enabled = true; } if (skm.LODModels.Count > 2) { lOD2ToolStripMenuItem.Enabled = true; } if (skm.LODModels.Count > 3) { lOD3ToolStripMenuItem.Enabled = true; } MaterialBox.Visible = false; MaterialApplyButton.Visible = false; MaterialIndexBox.Visible = false; MaterialIndexApplyButton.Visible = false; } catch (Exception e) { MessageBox.Show(ExceptionHandlerDialogWPF.FlattenException(e)); } }
/// <inheritdoc /> public override void OnThumbnailDrawPrepare(ThumbnailRequest request) { if (_preview == null) { _preview = new ModelPreview(false); _preview.RenderOnlyWithWindow = false; _preview.Task.Enabled = false; var eyeAdaptation = _preview.PostFxVolume.EyeAdaptation; eyeAdaptation.Mode = EyeAdaptationMode.None; eyeAdaptation.OverrideFlags |= EyeAdaptationSettings.Override.Mode; _preview.PostFxVolume.EyeAdaptation = eyeAdaptation; _preview.Size = new Vector2(PreviewsCache.AssetIconSize, PreviewsCache.AssetIconSize); _preview.SyncBackbufferSize(); } // TODO: disable streaming for asset during thumbnail rendering (and restore it after) }
/// <inheritdoc /> public override void OnThumbnailDrawPrepare(ThumbnailRequest request) { if (_preview == null) { _preview = new ModelPreview(false) { RenderOnlyWithWindow = false, AnchorPreset = AnchorPresets.StretchAll, Offsets = Margin.Zero, }; _preview.Task.Enabled = false; var eyeAdaptation = _preview.PostFxVolume.EyeAdaptation; eyeAdaptation.Mode = EyeAdaptationMode.None; eyeAdaptation.OverrideFlags |= EyeAdaptationSettingsOverride.Mode; _preview.PostFxVolume.EyeAdaptation = eyeAdaptation; } // TODO: disable streaming for asset during thumbnail rendering (and restore it after) }
public void LoadStaticMesh(int index) { stm = new StaticMesh(Pcc, index); // Load meshes for the LODs preview?.Dispose(); preview = new ModelPreview(view.Device, stm, view.TextureCache); RefreshChosenMaterialsList(); CenterView(); // Update treeview treeView1.BeginUpdate(); treeView1.Nodes.Clear(); treeView1.Nodes.Add(stm.ToTree()); treeView1.Nodes[0].Expand(); treeView1.EndUpdate(); MaterialBox.Visible = false; MaterialApplyButton.Visible = false; MaterialIndexBox.Visible = false; MaterialIndexApplyButton.Visible = false; }
public void LoadSkeletalMesh(int index) { DisableLODs(); UnCheckLODs(); skm = new SkeletalMesh(pcc, index); skmold = new SkeletalMeshOld(pcc, index); // Load preview model preview?.Dispose(); preview = new ModelPreview(view.Device, skm, view.TextureCache); RefreshChosenMaterialsList(); CenterView(); // Update treeview treeView1.BeginUpdate(); treeView1.Nodes.Clear(); treeView1.Nodes.Add(skm.ToTree()); treeView1.Nodes[0].Expand(); treeView1.EndUpdate(); lODToolStripMenuItem.Visible = true; lOD0ToolStripMenuItem.Enabled = true; lOD0ToolStripMenuItem.Checked = true; if (skm.LODModels.Count > 1) { lOD1ToolStripMenuItem.Enabled = true; } if (skm.LODModels.Count > 2) { lOD2ToolStripMenuItem.Enabled = true; } if (skm.LODModels.Count > 3) { lOD3ToolStripMenuItem.Enabled = true; } MaterialBox.Visible = false; MaterialApplyButton.Visible = false; MaterialIndexBox.Visible = false; MaterialIndexApplyButton.Visible = false; }
/// <inheritdoc /> public CollisionDataWindow(Editor editor, AssetItem item) : base(editor, item) { // Split Panel var splitPanel = new SplitPanel(Orientation.Horizontal, ScrollBars.None, ScrollBars.Vertical) { DockStyle = DockStyle.Fill, SplitterValue = 0.7f, Parent = this }; // Model preview _preview = new ModelPreview(true) { Parent = splitPanel.Panel1 }; // Asset properties _propertiesPresenter = new CustomEditorPresenter(null); _propertiesPresenter.Panel.Parent = splitPanel.Panel2; _properties = new PropertiesProxy(); _propertiesPresenter.Select(_properties); }
public static void SetupAssets(KCModHelper _helper) { _helper.Log("-----------HOOKING UP ASSETS------------"); // Setup District UI GameObject District_UI_GameObject = GameObject.Instantiate(AssetsLoader.GetAsset("District") as GameObject); Transform Worker_UI = GameState.inst.playingMode.GameUIParent.transform.Find("WorkerUICanvas").Find("WorkerUI"); District_UI_GameObject.transform.SetParent(Worker_UI, false); // Collect Specific Children In District UI List <String> filter = new List <String>(new String[] { "District(Clone)", "Expand", "CreateSwatch", "ToggleSwatchPicker", "Dropdown", "Options", "Option", "ContentBar", "Picker", "Fill", "InputField", "BoxSlider", "Hue", "Background", "ModelPreview", "ToggleDeleteMode" }); District_UI_Children = Utilities.CollectChildren(District_UI_GameObject.transform, null, filter); GameObject Option_Prefab = District_UI_Children.Find(i => i.name == "Option").gameObject; AssetInfo option_Info = new AssetInfo("Option.Prefab", Option_Prefab.GetType(), Option_Prefab); AssetsLoader.assets.Add(option_Info); _helper.Log(option_Info.ToString()); // Mod Components District district_Component = District_UI_GameObject.AddComponent <District>(); Expand expand_Component = District_UI_Children.Find(i => i.name == "Expand").gameObject.AddComponent <Expand>(); CreateSwatch createSwatch_Component = District_UI_Children.Find(i => i.name == "CreateSwatch").gameObject.AddComponent <CreateSwatch>(); ModelPreview modelPreview_Component = District_UI_Children.Find(i => i.name == "ModelPreview").gameObject.AddComponent <ModelPreview>(); ToggleSwatchPicker toggleSwatchPicker_Component = District_UI_Children.Find(i => i.name == "ToggleSwatchPicker").gameObject.AddComponent <ToggleSwatchPicker>(); ToggleDeleteMode toggleDeleteMode_Componenet = District_UI_Children.Find(i => i.name == "ToggleDeleteMode").gameObject.AddComponent <ToggleDeleteMode>(); district_Component.AddSwatch(Color.white, District.SwatchType.Default); district_Component.AddSwatch(Color.blue, District.SwatchType.Default); district_Component.AddSwatch(Color.cyan, District.SwatchType.Default); district_Component.AddSwatch(Color.gray, District.SwatchType.Default); district_Component.AddSwatch(Color.green, District.SwatchType.Default); district_Component.AddSwatch(Color.magenta, District.SwatchType.Default); district_Component.AddSwatch(Color.red, District.SwatchType.Default); district_Component.AddSwatch(Color.yellow, District.SwatchType.Default); // Color Picker ColorPicker colorPicker_Component = District_UI_Children.Find(i => i.name == "Picker").gameObject.AddComponent <ColorPicker>(); ColorImage colorImage_Component = District_UI_Children.Find(i => i.name == "Fill").gameObject.AddComponent <ColorImage>(); colorImage_Component.picker = colorPicker_Component; HexColorField hexColorField_Component = District_UI_Children.Find(i => i.name == "InputField").gameObject.AddComponent <HexColorField>(); hexColorField_Component.hsvpicker = colorPicker_Component; BoxSlider boxSlider_Component = District_UI_Children.Find(i => i.name == "BoxSlider").gameObject.AddComponent <BoxSlider>(); boxSlider_Component.handleRect = boxSlider_Component.transform.Find("Handle Slide Area").Find("Handle").GetComponent <RectTransform>(); SVBoxSlider sVBoxSlider = boxSlider_Component.gameObject.AddComponent <SVBoxSlider>(); sVBoxSlider.picker = colorPicker_Component; ColorSlider colorSlider_Component = District_UI_Children.Find(i => i.name == "Hue").gameObject.AddComponent <ColorSlider>(); colorSlider_Component.hsvpicker = colorPicker_Component; colorSlider_Component.type = ColorValues.Hue; ColorSliderImage colorSliderImage_Component = colorSlider_Component.transform.Find("Background").gameObject.AddComponent <ColorSliderImage>(); colorSliderImage_Component.picker = colorPicker_Component; colorSliderImage_Component.type = ColorValues.Hue; colorSliderImage_Component.direction = Slider.Direction.BottomToTop; _helper.Log("-----------ASSETS HOOKED UP------------"); }
public override void AttachPreview(IAssetPreview preview) { modelPreview = (ModelPreview)preview; }
private void ReadMaterial(ExportEntry export, PackageCache assetCache = null) { if (export.ClassName == "Material") { var parsedMaterial = ObjectBinary.From <Material>(export); StaticParameterSet = (StaticParameterSet)parsedMaterial.SM3MaterialResource.ID; foreach (var v in parsedMaterial.SM3MaterialResource.UniformExpressionTextures) { IEntry tex = export.FileRef.GetEntry(v.value); if (tex != null) { Textures.Add(tex); } } } else if (export.ClassName == "RvrEffectsMaterialUser") { var props = export.GetProperties(); if (export.GetProperty <ObjectProperty>("m_pBaseMaterial") is ObjectProperty baseProp) { // This is an instance... maybe? if (baseProp.Value > 0) { // Local export ReadMaterial(export.FileRef.GetUExport(baseProp.Value)); } else { ImportEntry ie = export.FileRef.GetImport(baseProp.Value); var externalEntry = EntryImporter.ResolveImport(ie, null, assetCache); if (externalEntry != null) { ReadMaterial(externalEntry); } } } } else if (export.ClassName == "MaterialInstanceConstant") { if (ObjectBinary.From(export) is MaterialInstance matInstBin) { StaticParameterSet = matInstBin.SM3StaticParameterSet; } //Read Local if (export.GetProperty <ArrayProperty <StructProperty> >("TextureParameterValues") is ArrayProperty <StructProperty> textureparams) { foreach (var param in textureparams) { var paramValue = param.GetProp <ObjectProperty>("ParameterValue"); var texntry = export.FileRef.GetEntry(paramValue.Value); if (texntry?.ClassName == "Texture2D" && !Textures.Contains(texntry)) { Textures.Add(texntry); } } } if (export.GetProperty <ArrayProperty <ObjectProperty> >("ReferencedTextures") is ArrayProperty <ObjectProperty> textures) { foreach (var obj in textures) { var texntry = export.FileRef.GetEntry(obj.Value); if (texntry.ClassName == "Texture2D" && !Textures.Contains(texntry)) { Textures.Add(texntry); } } } //Read parent if (export.GetProperty <ObjectProperty>("Parent") is ObjectProperty parentObjProp) { // This is an instance... maybe? if (parentObjProp.Value > 0) { // Local export ReadMaterial(export.FileRef.GetUExport(parentObjProp.Value)); } else { ImportEntry ie = export.FileRef.GetImport(parentObjProp.Value); var externalEntry = ModelPreview.FindExternalAsset(ie, null, null); if (externalEntry != null) { ReadMaterial(externalEntry); } } } } }
public override void PrepareRenderables() { var voxel = GetVoxel(); var palette = GetPalette(); var playerPalette = GetPlayerPalette(); var normalsPalette = GetNormalsPalette(); var shadowPalette = GetShadowPalette(); var scale = GetScale(); var rotation = GetRotation(); var lightAmbientColor = GetLightAmbientColor(); var lightDiffuseColor = GetLightDiffuseColor(); var lightPitch = GetLightPitch(); var lightYaw = GetLightYaw(); var cameraAngle = GetCameraAngle(); if (voxel == null || palette == null) { return; } if (voxel != cachedVoxel) { cachedVoxel = voxel; } if (palette != cachedPalette) { if (string.IsNullOrEmpty(palette) && string.IsNullOrEmpty(playerPalette)) { return; } var paletteName = string.IsNullOrEmpty(palette) ? playerPalette : palette; paletteReference = WorldRenderer.Palette(paletteName); cachedPalette = paletteName; } if (playerPalette != cachedPlayerPalette) { paletteReferencePlayer = WorldRenderer.Palette(playerPalette); cachedPlayerPalette = playerPalette; } if (normalsPalette != cachedNormalsPalette) { paletteReferenceNormals = WorldRenderer.Palette(normalsPalette); cachedNormalsPalette = normalsPalette; } if (shadowPalette != cachedShadowPalette) { paletteReferenceShadow = WorldRenderer.Palette(shadowPalette); cachedShadowPalette = shadowPalette; } if (scale != cachedScale) { cachedScale = scale; } if (rotation != cachedRotation) { cachedRotation = rotation; } if (lightPitch != cachedLightPitch) { cachedLightPitch = lightPitch; } if (lightYaw != cachedLightYaw) { cachedLightYaw = lightYaw; } if (cachedLightAmbientColor[0] != lightAmbientColor[0] || cachedLightAmbientColor[1] != lightAmbientColor[1] || cachedLightAmbientColor[2] != lightAmbientColor[2]) { cachedLightAmbientColor = lightAmbientColor; } if (cachedLightDiffuseColor[0] != lightDiffuseColor[0] || cachedLightDiffuseColor[1] != lightDiffuseColor[1] || cachedLightDiffuseColor[2] != lightDiffuseColor[2]) { cachedLightDiffuseColor = lightDiffuseColor; } if (cameraAngle != cachedCameraAngle) { cachedCameraAngle = cameraAngle; } if (cachedVoxel == null) { return; } var animation = new ModelAnimation( cachedVoxel, () => WVec.Zero, () => cachedRotation, () => false, () => 0, true); var animations = new ModelAnimation[] { animation }; ModelPreview preview = new ModelPreview( new ModelAnimation[] { animation }, WVec.Zero, 0, cachedScale, new WAngle(cachedLightPitch), new WAngle(cachedLightYaw), cachedLightAmbientColor, cachedLightDiffuseColor, cachedCameraAngle, paletteReference, paletteReferenceNormals, paletteReferenceShadow); var screenBounds = animation.ScreenBounds(WPos.Zero, WorldRenderer, scale); IdealPreviewSize = new int2(screenBounds.Width, screenBounds.Height); var origin = RenderOrigin + new int2(RenderBounds.Size.Width / 2, RenderBounds.Size.Height / 2); var camera = new WRot(WAngle.Zero, cachedCameraAngle - new WAngle(256), new WAngle(256)); var modelRenderable = new UIModelRenderable( animations, WPos.Zero, origin, 0, camera, scale, WRot.None, cachedLightAmbientColor, cachedLightDiffuseColor, paletteReferencePlayer, paletteReferenceNormals, paletteReferenceShadow); renderable = modelRenderable.PrepareRender(WorldRenderer); }
public override void PrepareRenderables() { var voxel = GetVoxel(); var palette = GetPalette(); var playerPalette = GetPlayerPalette(); var normalsPalette = GetNormalsPalette(); var shadowPalette = GetShadowPalette(); var scale = GetScale(); var lightAmbientColor = GetLightAmbientColor(); var lightDiffuseColor = GetLightDiffuseColor(); var lightPitch = GetLightPitch(); var lightYaw = GetLightYaw(); if (voxel == null || palette == null) { return; } if (voxel != cachedVoxel) { offset = 0.5f * (new float2(RenderBounds.Size) - new float2(voxel.Size[0], voxel.Size[1])); cachedVoxel = voxel; } if (palette != cachedPalette) { if (string.IsNullOrEmpty(palette) && string.IsNullOrEmpty(playerPalette)) { return; } string paletteName = string.IsNullOrEmpty(palette) ? playerPalette : palette; pr = WorldRenderer.Palette(paletteName); cachedPalette = paletteName; } if (playerPalette != cachedPlayerPalette) { prPlayer = WorldRenderer.Palette(playerPalette); cachedPlayerPalette = playerPalette; } if (normalsPalette != cachedNormalsPalette) { prNormals = WorldRenderer.Palette(normalsPalette); cachedNormalsPalette = normalsPalette; } if (shadowPalette != cachedShadowPalette) { prShadow = WorldRenderer.Palette(shadowPalette); cachedShadowPalette = shadowPalette; } if (scale != cachedScale) { //offset *= scale; cachedScale = scale; } if (lightPitch != cachedLightPitch) { cachedLightPitch = lightPitch; } if (lightYaw != cachedLightYaw) { cachedLightYaw = lightYaw; } if (cachedLightAmbientColor[0] != lightAmbientColor[0] || cachedLightAmbientColor[1] != lightAmbientColor[1] || cachedLightAmbientColor[2] != lightAmbientColor[2]) { cachedLightAmbientColor = lightAmbientColor; } if (cachedLightDiffuseColor[0] != lightDiffuseColor[0] || cachedLightDiffuseColor[1] != lightDiffuseColor[1] || cachedLightDiffuseColor[2] != lightDiffuseColor[2]) { cachedLightDiffuseColor = lightDiffuseColor; } if (cachedVoxel == null) { return; } var size = new float2(cachedVoxel.Size[0] * cachedScale, cachedVoxel.Size[1] * cachedScale); ModelAnimation animation = new ModelAnimation( cachedVoxel, () => WVec.Zero, () => new List <WRot>() { new WRot( new WAngle(-45), new WAngle(-30), new WAngle(360) ) }, () => false, () => 0, true); ModelPreview preview = new ModelPreview( new ModelAnimation[] { animation }, WVec.Zero, 0, cachedScale, new WAngle(cachedLightPitch), new WAngle(cachedLightYaw), cachedLightAmbientColor, cachedLightDiffuseColor, new WAngle(), pr, prNormals, prShadow); List <ModelPreview> previews = new List <ModelPreview>() { preview }; // Calculate the preview bounds PreviewOffset = int2.Zero; IdealPreviewSize = int2.Zero; var rs = previews.SelectMany(p => ((IActorPreview)p).ScreenBounds(WorldRenderer, WPos.Zero)); if (rs.Any()) { var b = rs.First(); foreach (var rr in rs.Skip(1)) { b = OpenRA.Primitives.Rectangle.Union(b, rr); } IdealPreviewSize = new int2(b.Width, b.Height); PreviewOffset = -new int2(b.Left, b.Top) - IdealPreviewSize / 2; } renderables = previews .SelectMany(p => ((IActorPreview)p).Render(WorldRenderer, WPos.Zero)) .OrderBy(WorldRenderer.RenderableScreenZPositionComparisonKey) .Select(r => r.PrepareRender(WorldRenderer)) .ToArray(); }
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { TreeNode t = treeView1.SelectedNode; if (DisplayStyle == 0) { if (t.Parent == null || t.Name == "") { return; } preview?.Dispose(); preview = null; try { if (int.TryParse(t.Name, out int i)) { EntryStruct en = Entries[i]; if (!en.isDLC) { using (ME3Package pcc = MEPackageHandler.OpenME3Package(ME3Directory.cookedPath + en.Filename)) { if (en.isSkeletal) { SkeletalMesh skmesh = new SkeletalMesh(pcc, en.Index); // TODO: pass device preview = new ModelPreview(view.Device, skmesh, view.TextureCache); CenterView(); treeView2.Nodes.Clear(); if (previewWithTreeToolStripMenuItem.Checked) { treeView2.Visible = false; Application.DoEvents(); treeView2.Nodes.Add(skmesh.ToTree()); treeView2.Visible = true; } } else { } } } else { string loc = Path.GetDirectoryName(Application.ExecutablePath) + "\\exec\\"; string dirDLC = ME3Directory.DLCPath; dirDLC += en.DLCName; dirDLC += "\\CookedPCConsole\\Default.sfar"; DLCUnpack dlc = new DLCUnpack(dirDLC); foreach (DLCUnpack.DLCEntry file in dlc.filesList) { try { string filename = Path.GetFileName(file.filenamePath); if (Path.GetExtension(filename).ToLower().EndsWith(".pcc") && filename == en.Filename) { using (Stream input = File.OpenRead(dirDLC), output = File.Create(loc + filename)) { dlc.ExtractEntry(file, input, output); } if (File.Exists(loc + filename)) { try { if (en.isSkeletal) { using (ME3Package pcc = MEPackageHandler.OpenME3Package(loc + filename)) { SkeletalMesh skmesh = new SkeletalMesh(pcc, en.Index); CenterView(); treeView2.Nodes.Clear(); if (previewWithTreeToolStripMenuItem.Checked) { treeView2.Visible = false; Application.DoEvents(); treeView2.Nodes.Add(skmesh.ToTree()); treeView2.Visible = true; } } } } catch (Exception) { } File.Delete(loc + filename); } } } catch (Exception) { } } } } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } }