/// <summary> /// 拖放结束事件, Resource Quick List中拖动一个Mesh资源文件,创建响应的Actor到Level中 /// </summary> void NEMainViewport_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(NexusEngine.NFileEntity))) { NFileEntity resFile = (NFileEntity)e.Data.GetData(typeof(NFileEntity)); NResourceLoc resLoc = new NResourceLoc(resFile.PackageName, resFile.FilePath); if (ResourceEditor.ResourceActorCreator.AcceptResoruceFile(resLoc)) { NLevel mainLv = NLevelEditorEngine.Instance.MainLevel; NActor newActor = ResourceEditor.ResourceActorCreator.CreateActor(resLoc); if (newActor == null) { MessageBox.Show("添加对象失败,可能的原因是读取对象数据失败,或者当前作业层被锁定,等等", "错误"); return; } Point scrPt = new Point(e.X, e.Y); Point clientPt = this.PointToClient(scrPt); Ray ray = m_view.Camera.GetMouseRay(clientPt.X, clientPt.Y); NCheckResult chk; if (RayCheck(out chk, ray, 512 * 1024, LineCheckType.Terrain)) { newActor.Location = chk.location; } else { Vector3 pt = ray.Position + ray.Direction * 500; newActor.Location = pt; } } } }
/// <summary> /// 响应Resource列表选中事件, 将选中的文件的缩略图显示到列表下方的PictureBox上 /// </summary> private void listViewResource_SelectedIndexChanged(object sender, EventArgs e) { ListView.SelectedListViewItemCollection selItems = this.listViewResource.SelectedItems; if (selItems.Count <= 0) { return; } ListViewItem sel = selItems[0]; NFileEntity nfile = (NFileEntity)sel.Tag; NResourceLoc resLoc = new NResourceLoc(nfile.PackageName, nfile.FilePath); //m_resPreview.ShowResource(resLoc); //m_resPreview.ZoomExtents(); int i = m_resBigImgList.Images.IndexOfKey(resLoc.ToString()); if (i == -1) { this.pictureBoxResource.Image = null; } else { this.pictureBoxResource.Image = m_resBigImgList.Images[i]; } }
private void ImportPSK() { try { int maxLOD = 0; if (SkeletalMeshPreview != null) { maxLOD = SkeletalMeshPreview.GetNumLOD(); } ImportLODDlg dlg = new ImportLODDlg(maxLOD); dlg.Text = "Import Skeletal Mesh LOD"; dlg.FileFilter = "ActorX Skeletal Mesh file(*.PSK)|*.PSK"; if (dlg.ShowDialog(this) == DialogResult.OK) { if (SkeletalMeshPreview == null) { // 产生一个不重复的名称 string resName = "NewSkeletalMesh"; resName += DateTime.Now.ToFileTime(); // 创建空白资源和内部数据 SkeletalMeshPreview = NResourceManager.Instance.NewSkeletalMesh(resName); } //-- 使得Resource的名称与LOD 0的文件名相同 if (skeletalMeshProperty != null && dlg.SelectedLOD == 0) { NFileEntity fileName = new NFileEntity(); fileName.path = dlg.SelectedFile; fileName.path = fileName.path.Replace('\\', '/'); skeletalMeshProperty.Name = fileName.FileNameNoExtension; } using (NexusEngineExtension.NWaitCursor wc = new NexusEngineExtension.NWaitCursor(this)) { try { SkeletalMeshPreview.ImportSkeletalMeshLOD(dlg.SelectedLOD, dlg.SelectedFile); SkeletalMeshPreview.PostEditChange(true); // 必须重置Preview previewControl.ResetSkeletalMeshResource(skeletalMeshPreview); } catch (System.Exception ex) { NexusEditor.Program.ShowException(ex, "Import Skeletal Mesh LOD FAILED!"); } // 更新界面 RefreshLOD(); } } } catch (System.Exception ex) { NexusEditor.Program.ShowException(ex, "Import Skeletal Mesh LOD FAILED!"); } }
private void listViewResource_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { if (e.IsSelected) { object itemTag = e.Item.Tag; NFileEntity file = (NFileEntity)itemTag; NLevelEditorEngine.Instance.CurrentResource = new NResourceLoc(file.PackageName, file.FilePath); } }
protected void NGUIRenderControl_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) { try { Point pt = this.PointToClient(new Point(e.X, e.Y)); Vector2 DropPosition = new Vector2(pt.X, pt.Y); GUISystem guiSystem = GUISystem.Instance; Vector2 screenPosition = guiSystem.ClientToScreen(new Vector2(pt.X, pt.Y)); if (e.Data.GetDataPresent(typeof(NFileEntity))) { NFileEntity entity = (NFileEntity)e.Data.GetData(typeof(NFileEntity)); m_owner.CreateStyleWindow(entity, screenPosition); } else { //获得进行"Drag"操作中拖动的字符串 string controlType = e.Data.GetData(typeof(string)) as string; // 在拖放的位置创建窗口 if (!WindowManager.Instance.IsTypeRegedited(controlType)) { return; } Window parentWnd = guiSystem.GetTargetWindow(screenPosition); if (parentWnd == null) { parentWnd = guiSystem.RootWindow; } Window wnd = WindowManager.Instance.CreateWindow(controlType, parentWnd); wnd.AbsolutePosition = screenPosition; if (wnd.AbsoluteSize.Length() == 0) { wnd.Width = new UIDim(0, 150); wnd.Height = new UIDim(0, 100); } parentWnd.AddChild(wnd); // 发送响应事件 if (WindowCreated != null) { UIECreateWindowEventArg createEvent = new UIECreateWindowEventArg(wnd); WindowCreated(this, createEvent); } } } catch (System.Exception ex) { NexusEditor.Program.ShowException(ex, "Drag drop failed!"); } }
/// <summary> /// 引擎Callback函数 /// </summary> /// <param name="file">文件对象描述</param> public override void OnFileEntity(ref NFileEntity file) { if (file.type != EFileEntityType.Regular) { return; } if (file.FileName.Substring(file.FileName.Length - 4).Equals(".nui")) { ListViewItem it = listView.Items.Add(file.FilePath); it.Tag = file; } }
public bool FileEnabled(NFileEntity file) { if (file.type != EFileEntityType.Regular) { return(false); } if (m_allPass) { return(true); } return(m_fileExtSet.Contains(file.FileExtension)); }
/// <summary> /// 引擎Callback函数 /// </summary> /// <param name="file">文件对象描述</param> public override void OnFileEntity(ref NFileEntity file) { if (file.type == EFileEntityType.Regular) { bool add = true; if (m_filter != null) { add = m_filter.FileEnabled(file); } if (add) { ListViewItem it = m_listCtrl.Items.Add(file.FileName); string thumbName = ThumbnailManager.Instance.LoadThumbnail(file.PackageName, file.FilePath, m_imgList, m_imgListSmall); uint fileSize = NEngine.Instance().FileSystem.GetFileSize(file.PackageName, file.FilePath); DateTime fileTime = NEngine.Instance().FileSystem.GetFileTime(file.PackageName, file.FilePath); it.ImageKey = thumbName; it.Tag = file; //-- sub item [file size] string strFileSize; if (fileSize > 1024) { strFileSize = string.Format("{0}KB", fileSize / 1024); } else { strFileSize = fileSize.ToString(); } it.SubItems.Add(strFileSize); //-- sub item [resource type] it.SubItems.Add(GetResourceTypeByFileExt(file.FileExtension)); //-- sub item [file time] string strFileTime = string.Format("{0} {1}", fileTime.ToShortDateString(), fileTime.ToShortTimeString()); it.SubItems.Add(strFileTime); } } }
private void toolStripButtonImport_Click(object sender, EventArgs e) { try { int maxLOD = 0; if (m_resAnimMesh != null) { maxLOD = m_resAnimMesh.GetNumLOD(); } ImportLODDlg dlg = new ImportLODDlg(maxLOD); dlg.Text = "Import Anim Mesh LOD"; dlg.FileFilter = "All Support Files(*.fak;*.md2)|*.fak;*.md2|F3D Anim Mesh file(*.fak)|*.fak|Quake2 Anim Mesh file(*.md2)|*.md2"; if (dlg.ShowDialog(this) == DialogResult.OK) { if (m_resAnimMesh == null) { CreateResource(); } //-- 使得Resource的名称与LOD 0的文件名相同 if (dlg.SelectedLOD == 0) { NFileEntity fileName = new NFileEntity(); fileName.path = dlg.SelectedFile; fileName.path = fileName.path.Replace('\\', '/'); m_prop.Name = fileName.FileNameNoExtension; } using (NexusEngineExtension.NWaitCursor wc = new NexusEngineExtension.NWaitCursor(this)) { m_resAnimMesh.ImportLOD(dlg.SelectedLOD, dlg.SelectedFile); m_resAnimMesh.PostEditChange(true); RefreshLOD(); } } } catch (System.Exception ex) { NexusEditor.Program.ShowException(ex, "Import Static Mesh LOD FAILED!"); } }
private void importToolStripMenuItem_Click(object sender, EventArgs e) { try { int maxLOD = 0; if (m_resStaticMesh != null) { maxLOD = m_resStaticMesh.GetNumLOD(); } ImportLODDlg dlg = new ImportLODDlg(maxLOD); dlg.Text = "Import Static Mesh LOD"; dlg.FileFilter = "All Support Files(*.obj;*.fsm;*.fscn)|*.obj;*.fsm;*.fscn|Wavefront OBJ file(*.obj)|*.obj|F3D Static mesh file(*.fsm)|*.fsm|F3D Scene mesh file(*.fscn)|*.fscn"; if (dlg.ShowDialog(this) == DialogResult.OK) { if (m_resStaticMesh == null) { CreateResource(); } //-- 使得Resource的名称与LOD 0的文件名相同 if (dlg.SelectedLOD == 0) { NFileEntity fileName = new NFileEntity(); fileName.path = dlg.SelectedFile; fileName.path = fileName.path.Replace('\\', '/'); m_prop.Name = fileName.FileNameNoExtension; } using (NexusEngineExtension.NWaitCursor wc = new NexusEngineExtension.NWaitCursor(this)) { m_resStaticMesh.ImportLOD(dlg.SelectedLOD, dlg.SelectedFile); m_resStaticMesh.PostEditChange(true); m_preview.ShowStaticMesh(m_resStaticMesh); RefreshLOD(); } } } catch (System.Exception ex) { NexusEditor.Program.ShowException(ex, "Import Static Mesh LOD FAILED!"); } }
public override void OnFileEntity(ref NFileEntity file) { if (file.type == EFileEntityType.Folder) { TreeNode folderNode = m_pkgNode.Nodes.Add(file.FileName); folderNode.SelectedImageIndex = 1; folderNode.ImageIndex = 0; //-- set tag NEFileTag tag; tag.pkgName = m_pkgName; tag.path = file.path; folderNode.Tag = tag; //-- query the folder NFileSystem fileSys = Program.engine.FileSystem; NEFolderTreeWalker fq = new NEFolderTreeWalker(folderNode, m_pkgName, file.path); fileSys.QueryPackage(m_pkgName, file.path, fq); } }
private void toolStripReplace_Click(object sender, EventArgs e) { //用资源列表中选定的对象替换当前level中选定的所有对象 if (listViewResource.SelectedItems.Count == 0) { toolStripStatusLableNote.Text = "资源列表中没有选中的对象"; return; } ListViewItem item = listViewResource.SelectedItems[0]; NFileEntity nfile = (NFileEntity)item.Tag; NResourceLoc resLoc = new NResourceLoc(nfile.PackageName, nfile.FilePath); if (ResourceEditor.ResourceActorCreator.AcceptResoruceFile(resLoc)) { List <NActor> actors = NLevelEditorEngine.Instance.ActorEd.GetSelectedActors(); List <NActor> newActors = new List <NActor>(); NActor activeActor = NLevelEditorEngine.Instance.ActorEd.GetActor(); for (int i = 0; i < actors.Count; ++i) { NActor act = actors[i]; if (act.Frozen) { continue; } NActor newActor = ResourceEditor.ResourceActorCreator.CreateActor(resLoc); if (newActor != null) { newActor.Layer = act.Layer; newActor.SpaceData = act.SpaceData; newActors.Add(newActor); } } NLevelEditorEngine.Instance.ActorEd.DeleteSelectedActors(); for (int i = 0; i < newActors.Count; ++i) { NLevelEditorEngine.Instance.ActorEd.AddSelectedActor(newActors[i]); } } }
internal void CreateStyleWindow(NFileEntity entity, Vector2 screenPosition) { ReloadResource(GUISystem.Instance.GetTargetWindow(screenPosition), entity.PackageName, entity.FilePath, true); }
private void listViewResource_MouseDoubleClick(object sender, MouseEventArgs e) { ListView.SelectedListViewItemCollection selItems = this.listViewResource.SelectedItems; if (selItems.Count <= 0) { return; } ListViewItem sel = selItems[0]; NFileEntity nfile = (NFileEntity)sel.Tag; using (NexusEngineExtension.NWaitCursor wc = new NexusEngineExtension.NWaitCursor(this)) { switch (nfile.FileExtension) { case "spt": m_sptViewer.ShowSpt(nfile.pkg, nfile.path); m_sptViewer.Show(this); break; case "nmdl": m_staticMeshEditor.LoadStaticMesh(nfile.PackageName, nfile.FilePath); m_staticMeshEditor.Show(); break; case "nam": m_animMeshEditor.LoadAnimMesh(nfile.PackageName, nfile.FilePath); m_animMeshEditor.Show(); break; case "skm": m_animSetEditor.LoadSkeletalMesh(nfile.PackageName, nfile.FilePath); m_animSetEditor.Show(); break; case "animset": m_animSetEditor.LoadAnimSet(nfile.PackageName, nfile.FilePath); m_animSetEditor.Show(); break; case "txa": m_texAtlasViewer.LoadTextureAtlas(nfile.pkg, nfile.path); m_texAtlasViewer.Show(this); break; case "nui": m_guiEditor.LoadUI(nfile.pkg, nfile.path); if (!m_guiEditor.Visible) { m_guiEditor.Show(); } break; case "mtl": m_MaterialEditor.LoadMaterial(nfile.PackageName, nfile.FilePath); m_MaterialEditor.Show(); break; case "att": ResAttributeInfoEditor infoEditor = new ResAttributeInfoEditor(); infoEditor.ResetAttributeInfo(nfile.PackageName, nfile.FilePath); infoEditor.Show(); break; } } }