protected override void LoadScene() { if (model != null) { modelSceneNode = new ModelSceneNode(Scene, model); SetAvailableAnimations(modelSceneNode.GetSupportedAnimationNames()); Scene.Add(modelSceneNode, false); var meshGroups = modelSceneNode.GetMeshGroups(); if (meshGroups.Count() > 1) { meshGroupListBox = ViewerControl.AddMultiSelection("Mesh Group", selectedGroups => { modelSceneNode.SetActiveMeshGroups(selectedGroups); }); meshGroupListBox.Items.AddRange(modelSceneNode.GetMeshGroups().ToArray <object>()); foreach (var group in modelSceneNode.GetActiveMeshGroups()) { meshGroupListBox.SetItemChecked(meshGroupListBox.FindStringExact(group), true); } } } else { SetAvailableAnimations(Enumerable.Empty <string>()); } if (mesh != null) { meshSceneNode = new MeshSceneNode(Scene, mesh); Scene.Add(meshSceneNode, false); } }
protected override void LoadScene() { if (model != null) { modelSceneNode = new ModelSceneNode(Scene, model); SetAvailableAnimations(modelSceneNode.GetSupportedAnimationNames()); Scene.Add(modelSceneNode, false); var meshGroups = modelSceneNode.GetMeshGroups(); if (meshGroups.Count() > 1) { meshGroupListBox = ViewerControl.AddMultiSelection("Mesh Group", selectedGroups => { modelSceneNode.SetActiveMeshGroups(selectedGroups); }); meshGroupListBox.Items.AddRange(modelSceneNode.GetMeshGroups().ToArray <object>()); foreach (var group in modelSceneNode.GetActiveMeshGroups()) { meshGroupListBox.SetItemChecked(meshGroupListBox.FindStringExact(group), true); } } modelSceneNode.AnimationController.RegisterUpdateHandler((animation, frame) => { if (animationTrackBar.TrackBar.Value != frame) { animationTrackBar.UpdateValueSilently(frame); } var maximum = animation == null ? 1 : animation.FrameCount - 1; if (animationTrackBar.TrackBar.Maximum != maximum) { animationTrackBar.TrackBar.Maximum = maximum; } animationTrackBar.Enabled = animation != null; animationPlayPause.Enabled = animation != null; }); } else { SetAvailableAnimations(Enumerable.Empty <string>()); } if (mesh != null) { meshSceneNode = new MeshSceneNode(Scene, mesh); Scene.Add(meshSceneNode, false); } }
protected override void LoadScene() { if (model != null) { modelSceneNode = new ModelSceneNode(Scene, model); SetAvailableAnimations(modelSceneNode.GetSupportedAnimationNames()); Scene.Add(modelSceneNode, false); phys = model.GetEmbeddedPhys(); if (phys == null) { var refPhysicsPaths = model.GetReferencedPhysNames(); if (refPhysicsPaths.Any()) { //TODO are there any models with more than one vphys? if (refPhysicsPaths.Count() != 1) { Console.WriteLine($"Model has more than 1 vphys ({refPhysicsPaths.Count()})." + " Please report this on https://github.com/SteamDatabase/ValveResourceFormat and provide the file that caused this."); } var newResource = Scene.GuiContext.LoadFileByAnyMeansNecessary(refPhysicsPaths.First() + "_c"); if (newResource != null) { phys = (PhysAggregateData)newResource.DataBlock; } } } var meshGroups = modelSceneNode.GetMeshGroups(); if (meshGroups.Count() > 1) { meshGroupListBox = ViewerControl.AddMultiSelection("Mesh Group", selectedGroups => { modelSceneNode.SetActiveMeshGroups(selectedGroups); }); meshGroupListBox.Items.AddRange(modelSceneNode.GetMeshGroups().ToArray <object>()); foreach (var group in modelSceneNode.GetActiveMeshGroups()) { meshGroupListBox.SetItemChecked(meshGroupListBox.FindStringExact(group), true); } } var materialGroups = model.GetMaterialGroups(); if (materialGroups.Count() > 1) { materialGroupListBox = ViewerControl.AddSelection("Material Group", (selectedGroup, _) => { modelSceneNode?.SetSkin(selectedGroup); }); materialGroupListBox.Items.AddRange(materialGroups.ToArray <object>()); materialGroupListBox.SelectedIndex = 0; } modelSceneNode.AnimationController.RegisterUpdateHandler((animation, frame) => { if (animationTrackBar.TrackBar.Value != frame) { animationTrackBar.UpdateValueSilently(frame); } var maximum = animation == null ? 1 : animation.FrameCount - 1; if (animationTrackBar.TrackBar.Maximum != maximum) { animationTrackBar.TrackBar.Maximum = maximum; } animationTrackBar.Enabled = animation != null; animationPlayPause.Enabled = animation != null; }); } else { SetAvailableAnimations(Enumerable.Empty <string>()); } if (mesh != null) { meshSceneNode = new MeshSceneNode(Scene, mesh); Scene.Add(meshSceneNode, false); } if (phys != null) { physSceneNode = new PhysSceneNode(Scene, phys); Scene.Add(physSceneNode, false); //disabled by default. Enable if viewing only phys or model without meshes physSceneNode.Enabled = (modelSceneNode == null || !modelSceneNode.RenderableMeshes.Any()); ViewerControl.AddCheckBox("Show Physics", physSceneNode.Enabled, (v) => { physSceneNode.Enabled = v; }); } }