public void OnRequestExportCollision() { View.CollisionExportWindow window = new View.CollisionExportWindow(MainWorld.Map); window.FileSelector.IsFilePicker = true; window.FileSelector.IsFileSaver = true; window.FileSelector.FileExtension = "dae"; if (window.ShowDialog() == true) { if (window.FileName == "") { MessageBox.Show("No filename entered!", "Collision Export Error"); return; } if (window.SceneNumber == -1 || window.SceneNumber > MainWorld.Map.SceneList.Count - 1) { MessageBox.Show("Invalid room number entered!", "Collision Export Error"); return; } WRoom room = GetRoomFromDropdownIndex(window.SceneNumber); CategoryDOMNode colCategory = room.GetChildrenOfType <CategoryDOMNode>().Find(x => x.Name == "Collision"); WCollisionMesh mesh = colCategory.Children[0] as WCollisionMesh; mesh.ToDAEFile(window.FileName); MessageBox.Show("Successfully saved collision to file.", "Success"); } }
public void OnRequestImportCollision() { View.CollisionImportWindow window = new View.CollisionImportWindow(MainWorld.Map); window.FileSelector.IsFilePicker = true; if (window.ShowDialog() == true) { if (window.FileName == "" || !File.Exists(window.FileName)) { MessageBox.Show("Invalid filename entered!", "Collision Import Error"); return; } if (window.SceneNumber == -1 || window.SceneNumber > MainWorld.Map.SceneList.Count - 1) { MessageBox.Show("Invalid room number entered!", "Collision Import Error"); return; } string ext = Path.GetExtension(window.FileName); if (ext != ".dae" && ext != ".dzb") { MessageBox.Show($"Input file { window.FileName } was not a supported format.", "Collision Import Error"); return; } WRoom room = GetRoomFromDropdownIndex(window.SceneNumber); CategoryDOMNode colCategory = room.GetChildrenOfType <CategoryDOMNode>().Find(x => x.Name == "Collision"); List <WCollisionMesh> originalMeshList = room.GetChildrenOfType <WCollisionMesh>(); int origRootRoomTableIndex = 0; if (originalMeshList.Count > 0) { origRootRoomTableIndex = originalMeshList[0].RootNode.RoomTableIndex; } WCollisionMesh newMesh = new WCollisionMesh(MainWorld, window.FileName, room.RoomIndex, origRootRoomTableIndex); newMesh.Name = "room"; if (originalMeshList.Count > 0) { originalMeshList[0].ReleaseResources(); colCategory.Children.Remove(originalMeshList[0]); if (MainWorld.CollisionMode.ActiveCollisionMesh == originalMeshList[0]) { newMesh.IsRendered = true; MainWorld.CollisionMode.ClearSelection(); MainWorld.CollisionMode.ActiveCollisionMesh = newMesh; } } colCategory.Children.Add(newMesh); } }
protected virtual void LoadLevelCollisionFromFile(string filePath) { if (!File.Exists(filePath)) { return; } CategoryDOMNode col_category = new CategoryDOMNode("Collision", m_world); col_category.SetParent(this); WCollisionMesh collision = new WCollisionMesh(m_world, filePath); collision.SetParent(col_category); }
protected virtual void LoadLevelCollisionFromFile(string filePath) { if (!File.Exists(filePath)) { return; } var collision = new WCollisionMesh(m_world); using (EndianBinaryReader reader = new EndianBinaryReader(File.OpenRead(filePath), Endian.Big)) { collision.Load(reader); } collision.SetParent(this); }