/// <summary> /// new terrain菜单响应 /// </summary> /// <remarks> /// 向Level中创建一个新的Terrrain,并自动打开Terrain编辑模式 /// </remarks> private void newTerrainToolStripMenuItem_Click(object sender, EventArgs e) { NewTerrainDlg dlg = new NewTerrainDlg(); if (dlg.ShowDialog() == DialogResult.OK) { NETerrainProp trnProp = dlg.TerrainProperty; NLevel mainLv = NLevelEditorEngine.Instance.MainLevel; NActor newActor = mainLv.CreateActor(trnProp.Name, "nterrain_actor"); NTerrainActor newTrn = newActor as NTerrainActor; newTrn.Create(trnProp.Width, trnProp.Height, trnProp.Init, trnProp.ChunkSize); newTrn.Move(trnProp.Position, trnProp.Scale); //-- 创建材质 NewTerrainMaterial mtlDlg = new NewTerrainMaterial(newTrn); mtlDlg.Show(this); //-- 自动选中地形对象 NLevelEditorEngine.Instance.ActorEd.SelectedActor = newTrn; this.RefreshViewports(); }// end of if }
/// <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; } } } }
public void LoadMainLevel(NResourceLoc loc) { try { //-- 必须先销毁当前的, 因为加载进来的关卡可能和他同名 DestroyLevel(m_mainLevel); m_mainLevel.Dispose(); //-- load NLevel lv = LoadLevel(loc); //-- m_mainLevel = lv; m_levelLoc = loc; ResetSubEditors(); if (LevelChanged != null) { LevelChanged(this, null); } } catch (System.Exception e) { NexusEditor.Program.ShowException(e, "Level Load FAILED!"); // 保持一个空关卡 CreateMainLevel("defaultLevel"); } }
public ResourcePreview(string levelName) { NEditorEngine eng = NexusEditor.Program.engine; m_level = eng.CreateLevel(levelName, "nlevel"); m_level.Init(); RenderSetting rs = m_level.GetRenderSetting(); rs.SkyLightHightColor = new Color4f(0.4f, 0.4f, 0.4f); rs.SkyLightLowColor = new Color4f(0.3f, 0.3f, 0.3f); float f = 200; m_actorBox = new BoundingBox( new Vector3(-f, -f, -f), new Vector3(f, f, f) ); m_lgtTimer = new NGameTimer(); m_lgtTimer.Reset(); m_focusLevel = levelName; m_draging = false; this.MouseDown += new MouseEventHandler(ResourcePreview_MouseDown); this.MouseUp += new MouseEventHandler(ResourcePreview_MouseUp); this.MouseMove += new MouseEventHandler(ResourcePreview_MouseMove); }
private void AdapterTerrain_Click(object sender, EventArgs e) { NLevel host = NLevelEditorEngine.Instance.MainLevel; if (host != null) { // 找到地形的大小和位置 using (NexusEngineExtension.NWaitCursor waitCursor = new NexusEngineExtension.NWaitCursor(this)) { NActor actor = host.FirstActor(); while (actor != null) { NTerrainActor terrain = actor as NTerrainActor; if (terrain != null) { levelDesc.Location = terrain.Location; levelDesc.Scale = terrain.Scale; levelDesc.Width = Math.Max(levelDesc.Width, terrain.HeightMapWidth); levelDesc.Height = Math.Max(levelDesc.Height, terrain.HeightMapHeight); this.propertyGridNavMapDesc.SelectedObject = levelDesc; break; } actor = host.NextActor(); } } } }
private void UpdateActorList(string layerName) { NLevel lv = NLevelEditorEngine.Instance.MainLevel; NActor edAct = NLevelEditorEngine.Instance.ActorEd.SelectedActor; this.m_ActorList.BeginUpdate(); this.m_ActorList.Items.Clear(); int i = 0; NActor act = lv.FirstActor(); while (act != null) { if (act.Layer != layerName) { act = lv.NextActor(); continue; } ListViewItem listItem = new ListViewItem(act.Name); listItem.Tag = act; this.m_ActorList.Items.Add(listItem); if (edAct == act) { this.m_ActorList.SelectedIndices.Add(i); } act = lv.NextActor(); ++i; } this.m_ActorList.EndUpdate(); }
/// <summary> /// 射线检测 /// </summary> /// <param name="hit">检测的结果</param> /// <param name="ray">射线</param> /// <param name="dist">距离</param> /// <param name="checkType">类型</param> /// <returns>是否发生碰撞</returns> public bool RayCheck(out NCheckResult hit, Ray ray, float dist, LineCheckType checkType) { NLevel mainLv = NLevelEditorEngine.Instance.MainLevel; Vector3 lineEnd = ray.Position + ray.Direction * dist; return(mainLv.LineCheck(out hit, ray.Position, lineEnd, checkType)); }
public override void DestroyLevel(NLevel level) { if (CurrentLevel == level) { CurrentLevel = null; } base.DestroyLevel(level); }
public override void Destory() { NLevel level = GameEngine.EngineInstance.CurrentLevel; if (level != null) { level.DestroyActor(TargetActor.Name); } base.Destory(); }
public NavigationMapDescription(NLevel hostLevel) { Location = hostLevel.NavigationMapLocation; Scale = hostLevel.NavigationMapScale; Width = hostLevel.NavigationMapWidth; Height = hostLevel.NavigationMapHeight; HeightMapColor = NLevelEditorEngine.Instance.NavigateMapEd.NavigationHeightMapColor.ToColor(); CullDistance = NLevelEditorEngine.Instance.NavigateMapEd.CullDistance; MaxWalkableHeight = float.MaxValue; MaxWalkableStep = float.MaxValue; }
static public NActor CreateActor(List <NResourceLoc> resList) { string actorName = "ResourceActor_"; actorName += DateTime.Now.ToFileTime(); NLevel mainLv = NLevelEditorEngine.Instance.MainLevel; NActor newActor = mainLv.CreateActor(actorName, "nactor"); foreach (NResourceLoc res in resList) { CreateActorComponent(newActor, res); } return(newActor); }
/// <summary> /// 更新分层列表 /// </summary> /// <param name="lv">需要显示的Level</param> public void ShowLevel(NLevel lv) { m_Level = lv; m_VisibleLayerList.Clear(); layerFitter.BeginUpdate(); layerFitter.Items.Clear(); for (int i = 0; i < lv.GetLayerCount(); ++i) { string text = lv.GetLayerName(i); int item = layerFitter.Items.Add(text); bool vis = lv.IsLayerVisible(text); layerFitter.SetItemChecked(item, vis); } layerFitter.EndUpdate(); UpdateActorList(lv); }
static public NActor CreateActor(NResourceLoc resLoc) { string actorName = resLoc.FileExtension.ToUpper() + "_ResActor[" + resLoc.FileName + "]"; actorName += DateTime.Now.Ticks.ToString(); NLevel mainLv = NLevelEditorEngine.Instance.MainLevel; NActor newActor = mainLv.CreateActor(actorName, "nactor"); if (newActor == null) { return(null); } CreateActorComponent(newActor, resLoc); return(newActor); }
/// <summary> /// 创建Actor对象 /// </summary> public NActor CreateActor(NLevel level, Vector3 location, Vector3 rotation) { if (string.IsNullOrEmpty(nativeActorClassName)) { return(null); } string actorName = this.GetType().Name + "_" + DateTime.Now.ToFileTime(); NActor newActor = level.CreateActor(actorName, nativeActorClassName); if (newActor != null) { PostCreateActor(newActor); newActor.Location = location; newActor.Rotation = rotation; } return(newActor); }
/// <summary> /// 更新Actor列表 /// </summary> /// <param name="lv">需要显示的Level</param> void UpdateActorList(NLevel lv) { NActor edAct = NLevelEditorEngine.Instance.ActorEd.SelectedActor; this.listViewActors.BeginUpdate(); this.listViewActors.Items.Clear(); int i = 0; string filterSearch = this.textBoxSearch.Text.Trim(); bool needFilter = !string.IsNullOrEmpty(filterSearch); StringComparison comparison = this.checkBoxCase.Checked ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase; NActor act = lv.FirstActor(); while (act != null) { if (!IsLayerVisible(act.Layer)) { act = lv.NextActor(); continue; } if (needFilter && act.Name.IndexOf(filterSearch, comparison) == -1) { act = lv.NextActor(); continue; } ListViewItem listItem = new ListViewItem(act.Name); listItem.Tag = act; this.listViewActors.Items.Add(listItem); if (edAct == act) { this.listViewActors.SelectedIndices.Add(i); } act = lv.NextActor(); i++; } this.listViewActors.EndUpdate(); }
/// <summary> /// 创建一个缺省的关卡 /// </summary> public NLevel CreateDefaultLevel(string levelName) { // 先删除之前的关卡 if (currentLevel != null) { DestroyLevel(currentLevel); } //-- create new NLevel newLevel = CreateLevel(levelName, "nlevel"); newLevel.Init(); currentLevel = newLevel; // 创建缺省的本地玩家 CreateLocalPlayerController(); return(newLevel); }
public NGUIRenderControl(UIEditor owner) : base() { InitializeComponent(); NEditorEngine eng = NexusEditor.Program.engine; string levelName = "UIPreviewLevel"; levelPreview = eng.CreateLevel(levelName, "nlevel"); levelPreview.Init(); m_focusLevel = levelName; SetCameraMode(EditorCameraMode.Top); m_owner = owner; this.AllowDrop = true; // 关联event handle this.DragDrop += new DragEventHandler(NGUIRenderControl_DragDrop); this.DragEnter += new DragEventHandler(NGUIRenderControl_DragEnter); this.DragOver += new DragEventHandler(NGUIRenderControl_DragOver); }
/// <summary> /// 保存位图到文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SaveBitmap_Click(object sender, EventArgs e) { NLevel level = NLevelEditorEngine.Instance.MainLevel; if (level == null || level.NavigationMapWidth <= 0 || level.NavigationMapHeight <= 0 ) { Program.ShowError("Invalid level param!"); return; } int map_w = (int)level.NavigationMapWidth; int map_h = (int)level.NavigationMapHeight; using (SaveFileDialog dlg = new SaveFileDialog()) { dlg.Title = "Bitmap Image: Image Name, File Format, and Destination"; dlg.FileName = "bitmap"; dlg.DefaultExt = "jpg"; dlg.AddExtension = true; dlg.Filter = @"Jpeg Image(JPG)|*.jpg|PNG Image|*.png|GIF Image (GIF)|*.gif|Bitmap (BMP)|*.bmp"; dlg.FilterIndex = 1; if (dlg.ShowDialog(this) == DialogResult.OK) { ImageFormat fmtStyle; switch (dlg.FilterIndex) { case 2: fmtStyle = ImageFormat.Png; break; case 3: fmtStyle = ImageFormat.Gif; break; case 4: fmtStyle = ImageFormat.Bmp; break; default: fmtStyle = ImageFormat.Jpeg; break; } try { Bitmap bitmap = new Bitmap(map_w, map_h); // Loop through the images pixels to reset color. for (int x = 0; x < map_w; x++) { for (int y = 0; y < map_h; y++) { if (level.GetTileWalkable(x, y)) { // 可行走的区域使用高度图颜色 bitmap.SetPixel(x, y, levelDesc.HeightMapColor); } else { // 不可行走区域 bitmap.SetPixel(x, y, levelDesc.WalkableColor); } } } bitmap.Save(dlg.FileName, fmtStyle); Process.Start(dlg.FileName); } catch (Exception) { try { // try IE Process.Start("iexplore.exe", dlg.FileName); } catch (Exception) { } } } } }
public LevelChangeEventArgs(NLevel newLevel) { this.NewLevel = newLevel; }