Ejemplo n.º 1
0
        /// <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
        }
Ejemplo n.º 2
0
        /// <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;
                    }
                }
            }
        }
Ejemplo n.º 3
0
        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");
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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();
                    }
                }
            }
        }
Ejemplo n.º 6
0
        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();
        }
Ejemplo n.º 7
0
        /// <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));
        }
Ejemplo n.º 8
0
 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();
        }
Ejemplo n.º 10
0
            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;
            }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        /// <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);
        }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
0
        /// <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);
        }
Ejemplo n.º 15
0
        /// <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();
        }
Ejemplo n.º 16
0
        /// <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);
        }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        /// <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) { }
                    }
                }
            }
        }
Ejemplo n.º 19
0
 public LevelChangeEventArgs(NLevel newLevel)
 {
     this.NewLevel = newLevel;
 }