private bool LoadInternalNew(AccessLevel al) { if (al == AccessLevel.AccessFull || al == AccessLevel.AccessGPUOptimizedOnly) { Bounds = new BoundingBox(); var submeshes = new List <CollisionSubmesh>(); bool first = true; if (Hkx2.m_namedVariants.Count == 0) { // Yes this happens for some cols wtf From??? return(false); } var physicsscene = (hknpPhysicsSceneData)Hkx2.m_namedVariants[0].m_variant; foreach (var bodyInfo in physicsscene.m_systemDatas[0].m_bodyCinfos) { var ncol = (HKX2.fsnpCustomParamCompressedMeshShape)bodyInfo.m_shape; try { var mesh = new CollisionSubmesh(); ProcessMesh(ncol, bodyInfo, mesh); if (first) { Bounds = mesh.Bounds; first = false; } else { Bounds = BoundingBox.Combine(Bounds, mesh.Bounds); } submeshes.Add(mesh); } catch (Exception e) { // Debug failing cases later } } GPUMeshes = submeshes.ToArray(); } if (al == AccessLevel.AccessGPUOptimizedOnly) { Hkx = null; } return(true); }
private bool LoadInternalDeS(AccessLevel al, GameType type) { if (al == AccessLevel.AccessFull || al == AccessLevel.AccessGPUOptimizedOnly) { GPUMeshes = new FlverSubmesh[FlverDeS.Meshes.Count()]; GPUMaterials = new FlverMaterial[FlverDeS.Materials.Count()]; Bounds = new BoundingBox(); Bones = FlverDeS.Bones; for (int i = 0; i < FlverDeS.Materials.Count(); i++) { GPUMaterials[i] = new FlverMaterial(); ProcessMaterial(FlverDeS.Materials[i], GPUMaterials[i], type); } for (int i = 0; i < FlverDeS.Meshes.Count(); i++) { GPUMeshes[i] = new FlverSubmesh(); ProcessMesh(FlverDeS.Meshes[i], GPUMeshes[i]); if (i == 0) { Bounds = GPUMeshes[i].Bounds; } else { Bounds = BoundingBox.Combine(Bounds, GPUMeshes[i].Bounds); } } } if (al == AccessLevel.AccessGPUOptimizedOnly) { Flver = null; } //return false; return(true); }
private bool LoadInternal(AccessLevel al) { if (al == AccessLevel.AccessFull || al == AccessLevel.AccessGPUOptimizedOnly) { Bounds = new BoundingBox(); var submeshes = new List <CollisionSubmesh>(); bool first = true; foreach (var obj in Hkx.DataSection.Objects) { if (obj is HKX.HKPStorageExtendedMeshShapeMeshSubpartStorage col) { var mesh = new CollisionSubmesh(); ProcessMesh(col, mesh); if (first) { Bounds = mesh.Bounds; first = false; } else { Bounds = BoundingBox.Combine(Bounds, mesh.Bounds); } submeshes.Add(mesh); } if (obj is HKX.FSNPCustomParamCompressedMeshShape ncol) { // Find a body data for this HKX.HKNPBodyCInfo bodyInfo = null; foreach (var scene in Hkx.DataSection.Objects) { if (scene is HKX.HKNPPhysicsSystemData) { var sys = (HKX.HKNPPhysicsSystemData)scene; foreach (HKX.HKNPBodyCInfo info in sys.Bodies.GetArrayData().Elements) { if (info.ShapeReference.DestObject == ncol) { bodyInfo = info; break; } } break; } try { var mesh = new CollisionSubmesh(); ProcessMesh(ncol, bodyInfo, mesh); if (first) { Bounds = mesh.Bounds; first = false; } else { Bounds = BoundingBox.Combine(Bounds, mesh.Bounds); } submeshes.Add(mesh); } catch (Exception e) { // Debug failing cases later } } } //Bounds = BoundingBox.CreateMerged(Bounds, GPUMeshes[i].Bounds); } GPUMeshes = submeshes.ToArray(); } if (al == AccessLevel.AccessGPUOptimizedOnly) { Hkx = null; } return(true); }
public void OnGUI(string[] initcmd) { // Docking setup //var vp = ImGui.GetMainViewport(); var wins = ImGui.GetWindowSize(); var winp = ImGui.GetWindowPos(); winp.Y += 20.0f; wins.Y -= 20.0f; ImGui.SetNextWindowPos(winp); ImGui.SetNextWindowSize(wins); ImGui.PushStyleVar(ImGuiStyleVar.WindowRounding, 0.0f); ImGui.PushStyleVar(ImGuiStyleVar.WindowBorderSize, 0.0f); ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, new Vector2(0.0f, 0.0f)); ImGui.PushStyleVar(ImGuiStyleVar.ChildBorderSize, 0.0f); ImGuiWindowFlags flags = ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoMove; flags |= ImGuiWindowFlags.MenuBar | ImGuiWindowFlags.NoDocking; flags |= ImGuiWindowFlags.NoBringToFrontOnFocus | ImGuiWindowFlags.NoNavFocus; flags |= ImGuiWindowFlags.NoBackground; //ImGui.Begin("DockSpace_MapEdit", flags); ImGui.PopStyleVar(4); var dsid = ImGui.GetID("DockSpace_MapEdit"); ImGui.DockSpace(dsid, new Vector2(0, 0)); // Keyboard shortcuts if (EditorActionManager.CanUndo() && InputTracker.GetControlShortcut(Key.Z)) { EditorActionManager.UndoAction(); } if (EditorActionManager.CanRedo() && InputTracker.GetControlShortcut(Key.Y)) { EditorActionManager.RedoAction(); } if (!ViewportUsingKeyboard && !ImGui.GetIO().WantCaptureKeyboard) { if (InputTracker.GetControlShortcut(Key.D) && _selection.IsSelection()) { var action = new CloneMapObjectsAction(Universe, RenderScene, _selection.GetFilteredSelection <MapEntity>().ToList(), true); EditorActionManager.ExecuteAction(action); } if (InputTracker.GetKeyDown(Key.Delete) && _selection.IsSelection()) { var action = new DeleteMapObjectsAction(Universe, RenderScene, _selection.GetFilteredSelection <MapEntity>().ToList(), true); EditorActionManager.ExecuteAction(action); } if (InputTracker.GetKeyDown(Key.W)) { Gizmos.Mode = Gizmos.GizmosMode.Translate; } if (InputTracker.GetKeyDown(Key.E)) { Gizmos.Mode = Gizmos.GizmosMode.Rotate; } // Use home key to cycle between gizmos origin modes if (InputTracker.GetKeyDown(Key.Home)) { if (Gizmos.Origin == Gizmos.GizmosOrigin.World) { Gizmos.Origin = Gizmos.GizmosOrigin.BoundingBox; } else if (Gizmos.Origin == Gizmos.GizmosOrigin.BoundingBox) { Gizmos.Origin = Gizmos.GizmosOrigin.World; } } // F key frames the selection if (InputTracker.GetKeyDown(Key.F)) { var selected = _selection.GetFilteredSelection <Entity>(); bool first = false; BoundingBox box = new BoundingBox(); foreach (var s in selected) { if (s.RenderSceneMesh != null) { if (!first) { box = s.RenderSceneMesh.GetBounds(); first = true; } else { box = BoundingBox.Combine(box, s.RenderSceneMesh.GetBounds()); } } } if (first) { Viewport.FrameBox(box); } } // Render settings if (InputTracker.GetControlShortcut(Key.Number1)) { RenderScene.DrawFilter = Scene.RenderFilter.MapPiece | Scene.RenderFilter.Object | Scene.RenderFilter.Character | Scene.RenderFilter.Region; } else if (InputTracker.GetControlShortcut(Key.Number2)) { RenderScene.DrawFilter = Scene.RenderFilter.Collision | Scene.RenderFilter.Object | Scene.RenderFilter.Character | Scene.RenderFilter.Region; } else if (InputTracker.GetControlShortcut(Key.Number3)) { RenderScene.DrawFilter = Scene.RenderFilter.Collision | Scene.RenderFilter.Navmesh | Scene.RenderFilter.Object | Scene.RenderFilter.Character | Scene.RenderFilter.Region; } CFG.Current.LastSceneFilter = RenderScene.DrawFilter; } // Parse select commands string propSearchKey = null; if (initcmd != null && initcmd[0] == "propsearch") { if (initcmd.Length > 1) { propSearchKey = initcmd[1]; } } ImGui.SetNextWindowSize(new Vector2(300, 500), ImGuiCond.FirstUseEver); ImGui.SetNextWindowPos(new Vector2(20, 20), ImGuiCond.FirstUseEver); System.Numerics.Vector3 clear_color = new System.Numerics.Vector3(114f / 255f, 144f / 255f, 154f / 255f); //ImGui.Text($@"Viewport size: {Viewport.Width}x{Viewport.Height}"); //ImGui.Text(string.Format("Application average {0:F3} ms/frame ({1:F1} FPS)", 1000f / ImGui.GetIO().Framerate, ImGui.GetIO().Framerate)); Viewport.OnGui(); SceneTree.OnGui(); if (MapStudioNew.FirstFrame) { ImGui.SetNextWindowFocus(); } PropEditor.OnGui(_selection.GetSingleFilteredSelection <Entity>(), "mapeditprop", Viewport.Width, Viewport.Height); DispGroupEditor.OnGui(AssetLocator.Type); PropSearch.OnGui(propSearchKey); // Not usable yet //NavMeshEditor.OnGui(AssetLocator.Type); ResourceManager.OnGuiDrawTasks(Viewport.Width, Viewport.Height); ResourceManager.OnGuiDrawResourceList(); if (_activeModal != null) { if (_activeModal.IsClosed) { _activeModal.OpenModal(); } _activeModal.OnGui(); if (_activeModal.IsClosed) { _activeModal = null; } } }
public void OnGUI() { // Docking setup //var vp = ImGui.GetMainViewport(); var wins = ImGui.GetWindowSize(); var winp = ImGui.GetWindowPos(); winp.Y += 20.0f; wins.Y -= 20.0f; ImGui.SetNextWindowPos(winp); ImGui.SetNextWindowSize(wins); var dsid = ImGui.GetID("DockSpace_ModelEdit"); ImGui.DockSpace(dsid, new Vector2(0, 0)); // Keyboard shortcuts if (EditorActionManager.CanUndo() && InputTracker.GetControlShortcut(Key.Z)) { EditorActionManager.UndoAction(); } if (EditorActionManager.CanRedo() && InputTracker.GetControlShortcut(Key.Y)) { EditorActionManager.RedoAction(); } if (!ViewportUsingKeyboard && !ImGui.GetIO().WantCaptureKeyboard) { if (InputTracker.GetKeyDown(Key.W)) { Gizmos.Mode = Gizmos.GizmosMode.Translate; } if (InputTracker.GetKeyDown(Key.E)) { Gizmos.Mode = Gizmos.GizmosMode.Rotate; } // Use home key to cycle between gizmos origin modes if (InputTracker.GetKeyDown(Key.Home)) { if (Gizmos.Origin == Gizmos.GizmosOrigin.World) { Gizmos.Origin = Gizmos.GizmosOrigin.BoundingBox; } else if (Gizmos.Origin == Gizmos.GizmosOrigin.BoundingBox) { Gizmos.Origin = Gizmos.GizmosOrigin.World; } } // F key frames the selection if (InputTracker.GetKeyDown(Key.F)) { var selected = _selection.GetFilteredSelection <Entity>(); bool first = false; BoundingBox box = new BoundingBox(); foreach (var s in selected) { if (s.RenderSceneMesh != null) { if (!first) { box = s.RenderSceneMesh.GetBounds(); first = true; } else { box = BoundingBox.Combine(box, s.RenderSceneMesh.GetBounds()); } } } if (first) { Viewport.FrameBox(box); } } // Render settings if (InputTracker.GetControlShortcut(Key.Number1)) { RenderScene.DrawFilter = Scene.RenderFilter.MapPiece | Scene.RenderFilter.Object | Scene.RenderFilter.Character | Scene.RenderFilter.Region; } else if (InputTracker.GetControlShortcut(Key.Number2)) { RenderScene.DrawFilter = Scene.RenderFilter.Collision | Scene.RenderFilter.Object | Scene.RenderFilter.Character | Scene.RenderFilter.Region; } else if (InputTracker.GetControlShortcut(Key.Number3)) { RenderScene.DrawFilter = Scene.RenderFilter.Collision | Scene.RenderFilter.Navmesh | Scene.RenderFilter.Object | Scene.RenderFilter.Character | Scene.RenderFilter.Region; } } ImGui.SetNextWindowSize(new Vector2(300, 500), ImGuiCond.FirstUseEver); ImGui.SetNextWindowPos(new Vector2(20, 20), ImGuiCond.FirstUseEver); System.Numerics.Vector3 clear_color = new System.Numerics.Vector3(114f / 255f, 144f / 255f, 154f / 255f); //ImGui.Text($@"Viewport size: {Viewport.Width}x{Viewport.Height}"); //ImGui.Text(string.Format("Application average {0:F3} ms/frame ({1:F1} FPS)", 1000f / ImGui.GetIO().Framerate, ImGui.GetIO().Framerate)); Viewport.OnGui(); _assetBrowser.OnGui(); _sceneTree.OnGui(); _propEditor.OnGui(_selection.GetSingleFilteredSelection <Entity>(), "modeleditprop", Viewport.Width, Viewport.Height); ResourceManager.OnGuiDrawTasks(Viewport.Width, Viewport.Height); }