public NShapeComponent ShowSphereShapeComponent(float radius, int numRings, int numSections)
        {
            try
            {
                m_level.DestroyAllActors();

                //-- create a actor for mesh
                NActor          meshActor = m_level.CreateActor("StaticMeshActor", "nactor");
                NActorComponent comp      = meshActor.CreateComponent("MeshComp", "nshape_component");
                NShapeComponent meshComp  = comp as NShapeComponent;
                meshComp.CreateSphere(radius, numRings, numSections);
                m_actorBox = meshComp.GetBoundingBox();

                //-- add default light
                AddDefaultLight();

                m_resActorComp = comp;

                return(meshComp);
            }
            catch (System.Exception e)
            {
                NexusEditor.Program.ShowException(e, "Static Mesh Preview Open FAILED!");
                return(null);
            }
        }
Example #2
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();
                    }
                }
            }
        }
        /// <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
        }
        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();
        }
Example #5
0
 static public NActor ReplaceActor(NActor actor, NResourceLoc resLoc)
 {
     actor.RemoveAllComponents();
     CreateActorComponent(actor, resLoc);
     actor.UpdateComponentsTransform();
     return(actor);
 }
        /// <summary>
        /// 重置Avatar资源
        /// </summary>
        public void ResetAvatarResource(NActor ownerActor)
        {
            targetActorRef = new WeakReference(ownerActor);

            NSkeletalMeshComponent skeletalMeshMeshCmp = (NSkeletalMeshComponent)ownerActor.CreateComponent("LPC_Skeletal_Mesh", "nskeletal_mesh_component");

            skeletalMeshComponentRef = new WeakReference(skeletalMeshMeshCmp);

            try
            {
                // 初始化资源
                skeletalMeshMeshCmp.ResetResource(new NResourceLoc("content", @"/characters/XiaShi/body.skm"), true);

                // 初始化动画
                AnimPlayer = skeletalMeshMeshCmp.ResetSkeletalAnimPlayer();
                AnimPlayer.Init(NResourceManager.Instance.LoadSkeletalAnimSet(
                                    new NResourceLoc("content", @"/characters/XiaShi/base_act.animset"),
                                    EResourceIOMode.Auto,
                                    EResourceIOPriority.Normal
                                    ), true);
            }
            catch (System.Exception e)
            {
                NLogger.Instance.WriteString(LogType.Exception, "Load  Skeletal Mesh faild!" + e.ToString());
                Program.ShowException(e, "Load  Skeletal Mesh faild!");
            }
        }
        /// <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;
                    }
                }
            }
        }
        private void m_ActorList_DoubleClick(object sender, EventArgs e)
        {
            //选中关联的actor
            ListViewItem selItem = this.m_ActorList.SelectedItems[0];
            NActor       ac      = selItem.Tag as NActor;

            NLevelEditorEngine.Instance.ActorEd.BindActor(ac);
        }
Example #9
0
 private void SelectedActor()
 {
     if (1 == this.listViewActors.SelectedItems.Count)
     {
         ListViewItem selItem = this.listViewActors.SelectedItems[0];
         NActor       ac      = selItem.Tag as NActor;
         NLevelEditorEngine.Instance.ActorEd.BindActor(ac);
     }
 }
Example #10
0
        public override void BindActor(NActor ac)
        {
            base.BindActor(ac);
            if (ActorSelected != null)
            {
                ActorSelected(this, new ActorSelectedArgs(ac));
            }

            if (ac is NTerrainActor)
            {
                NLevelEditorEngine.Instance.TerrainEd.BindTerrain(ac as NTerrainActor);
            }
        }
Example #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);
        }
Example #12
0
        private void PIE_Click(object sender, EventArgs e)
        {
            Vector3 startPosition = Vector3.Zero;
            NActor  actor         = NLevelEditorEngine.Instance.MainLevel.FirstActor();

            while (actor != null)
            {
                NStartPointActor startPointActor = actor as NStartPointActor;
                if (startPointActor != null)
                {
                    startPosition = startPointActor.Location;
                    break;
                }
                actor = NLevelEditorEngine.Instance.MainLevel.NextActor();
            }
            PlayInEditor(startPosition);
        }
        internal virtual void AddDefaultLight()
        {
            try
            {
                NActor                     lgtActor = m_level.CreateActor("DefaultDirLgt", "nactor");
                NActorComponent            comp     = lgtActor.CreateComponent("DirLgtComp", "ndirectional_light_component");
                NDirectionalLightComponent lgtComp  = comp as NDirectionalLightComponent;
                lgtComp.bProjectShadow = true;
                lgtActor.Rotation      = new Vector3(45, 45, 0);

                m_lgtActor = lgtActor;
            }
            catch (System.Exception ex)
            {
                NexusEditor.Program.ShowException(ex, "Create Directional Light FAILED!");
            }
        }
Example #14
0
        /// <summary>
        /// 响应引擎的"选中Actor"事件, 更新Actor的树控件和属性控件
        /// </summary>
        private void ActorSelectedHandler(object sender, EventArgs e)
        {
            ActorSelectedArgs ae       = e as ActorSelectedArgs;
            NActor            selActor = ae.SelectedActor;

            this.treeViewActor.BeginUpdate();

            //-- clear old
            this.treeViewActor.Nodes.Clear();
            this.propertyGridActor.SelectedObject = null;

            if (selActor == null)
            {
                TreeNode actorNode = new TreeNode("None");
                this.treeViewActor.Nodes.Add(actorNode);
                this.treeViewActor.SelectedNode = actorNode;
            }
            else
            {
                TreeNode actorNode = new TreeNode(selActor.Name);
                actorNode.Tag = selActor;
                this.treeViewActor.Nodes.Add(actorNode);

                for (int i = 0; i < selActor.NumComponents; i++)
                {
                    NActorComponent comp = selActor.GetComponent(i);

                    if (comp.Editable)
                    {
                        TreeNode compNode = new TreeNode(comp.Name);
                        compNode.Tag = comp;
                        actorNode.Nodes.Add(compNode);
                    }
                }

                this.treeViewActor.SelectedNode = actorNode;
                this.treeViewActor.ExpandAll();

                //--
                this.propertyGridActor.SelectedObject = selActor;
            }


            //--
            this.treeViewActor.EndUpdate();
        }
Example #15
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);
        }
Example #16
0
        internal void ReCreateAnimSetPreview()
        {
            try
            {
                m_level.DestroyAllActors();

                //-- create a actor for mesh
                NActor meshActor = m_level.CreateActor("SkeletalMeshActorPreview", "nactor");
                m_resActorComp = meshActor.CreateComponent("SkeletalMeshComponent", "nskeletal_mesh_component");

                //-- add default light
                AddDefaultLight();
            }
            catch (System.Exception ex)
            {
                NexusEditor.Program.ShowException(ex, "Skeletal Mesh Preview Actor Create FAILED!");
            }
        }
        private void CreateAnimMeshPreview()
        {
            try
            {
                m_level.DestroyAllActors();

                //-- create a actor for mesh
                NActor meshActor = m_level.CreateActor("AnimMeshPreviewActor", "nactor");
                m_resActorComp = meshActor.CreateComponent("AnimMeshComp", "nanim_mesh_component");

                //-- add default light
                AddDefaultLight();
            }
            catch (System.Exception ex)
            {
                NexusEditor.Program.ShowException(ex, "Anim Mesh Preview Actor Create FAILED!");
            }
        }
        protected override void Dispose(bool disposing)
        {
            NEditorEngine eng = NexusEditor.Program.engine;

            if (m_lgtActor != null)
            {
                m_lgtActor.Dispose();
                m_lgtActor = null;
            }
            if (m_resActorComp != null)
            {
                m_resActorComp.Dispose();
                m_resActorComp = null;
            }
            eng.DestroyLevel(m_level);
            m_level.Dispose();
            base.Dispose(disposing);
        }
Example #19
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);
        }
Example #20
0
        public bool BindSelectedActorToTerrainEd()
        {
            NActor ac = this.ActorEd.SelectedActor;

            if (ac == null)
            {
                return(false);
            }

            NTerrainActor trn = ac as NTerrainActor;

            if (trn == null)
            {
                return(false);
            }
            this.TerrainEd.BindTerrain(trn);

            return(true);
        }
Example #21
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();
        }
Example #22
0
        /// <summary>
        /// 重置Avatar资源
        /// </summary>
        public void ResetAvatarResource(NActor ownerActor)
        {
            targetActorRef = new WeakReference(ownerActor);

            NAnimMeshComponent animMesh = (NAnimMeshComponent)ownerActor.CreateComponent("LPC_Anim_Mesh", "nanim_mesh_component");

            animMeshComponentRef = new WeakReference(animMesh);

            try
            {
                // 初始化资源
                //animMesh.ResetResource(new NResourceLoc("content", @"/NPC/NPC_bandit_001/NPC_bandit_001.nam"));
                animMesh.ResetResource(new NResourceLoc("content", @"/NPC/NPC_grpmon_002/atck.nam"));
            }
            catch (System.Exception)
            {
                //Logger.Instance.LogEvent("Load anim mesh faild!" + e.ToString());
            }
        }
Example #23
0
        static private void CreateActorComponent(NActor newActor, NResourceLoc res)
        {
            try
            {
                switch (res.FileExtension)
                {
                case "nmdl":
                {
                    NActorComponent comp = newActor.CreateComponent(
                        MakeComponentName("StaticMesh_", res),
                        "nstatic_mesh_component");
                    NStaticMeshComponent meshComp = comp as NStaticMeshComponent;
                    meshComp.ResetResource(res);
                }
                break;

                case "spt":
                {
                    NActorComponent comp = newActor.CreateComponent(
                        MakeComponentName("SPTComp_", res),
                        "nspeed_tree_component");
                    NSpeedTreeComponent sptComp = comp as NSpeedTreeComponent;
                    sptComp.Create(res);
                }
                break;

                case "nam":
                {
                    NActorComponent comp = newActor.CreateComponent(
                        MakeComponentName("AnimMeshComp_", res),
                        "nanim_mesh_component");
                    NAnimMeshComponent meshComp = comp as NAnimMeshComponent;
                    meshComp.ResetResource(res);
                }
                break;
                }// end of switch
            }
            catch (System.Exception e)
            {
                NexusEditor.Program.ShowException(e, "Create Resource Actor Component FAILED!");
            }
        }
        public void ShowSpecialEffect(NResourceSpecialEffect sfx)
        {
            try
            {
                m_level.DestroyAllActors();

                //-- create a actor for SFX
                NActor                 sfxActor = m_level.CreateActor("SFXActor", "nactor");
                NActorComponent        comp     = sfxActor.CreateComponent("SFXComp", "nspecial_effect_instance");
                NSpecialEffectInstance sfxComp  = comp as NSpecialEffectInstance;
                sfxComp.ResetResource(sfx);
                sfxComp.Play();

                m_resActorComp = sfxComp;
            }
            catch (System.Exception e)
            {
                NexusEditor.Program.ShowException(e, "SFX Preview Open FAILED!");
            }
        }
        public void ShowStaticMesh(NResourceStaticMesh mesh)
        {
            try
            {
                m_level.DestroyAllActors();

                //-- create a actor for mesh
                NActor               meshActor = m_level.CreateActor("StaticMeshActor", "nactor");
                NActorComponent      comp      = meshActor.CreateComponent("MeshComp", "nstatic_mesh_component");
                NStaticMeshComponent meshComp  = comp as NStaticMeshComponent;
                meshComp.ResetResource(mesh);
                m_actorBox = meshComp.GetBoundingBox();

                //-- add default light
                AddDefaultLight();
            }
            catch (System.Exception e)
            {
                NexusEditor.Program.ShowException(e, "Static Mesh Preview Open FAILED!");
            }
        }
Example #26
0
        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]);
                }
            }
        }
        public void LoadSpeedTree(NResourceLoc loc)
        {
            m_level.DestroyAllActors();

            //--
            try
            {
                NActor sptActor             = m_level.CreateActor("SptPreviewActor", "nactor");
                NSpeedTreeComponent sptComp = sptActor.CreateComponent("SPTComp", "nspeed_tree_component") as NSpeedTreeComponent;
                sptComp.Create(loc);

                sptActor.Scale = new Vector3(50, 50, 50);
                m_actorBox     = sptComp.GetBoundingBox();

                //-- add default light
                AddDefaultLight();

                m_resActorComp = sptComp;
            }
            catch (System.Exception e)
            {
                NexusEditor.Program.ShowException(e, "Speed Tree Load FAILED!");
            }
        }
Example #28
0
 /// <summary>
 /// 创建对象成功后调用
 /// </summary>
 /// <param name="actor">新创建的对象,可能为null</param>
 virtual public void PostCreateActor(NActor actor)
 {
 }
Example #29
0
 public ActorSelectedArgs(NActor selectedActor)
 {
     m_selected = selectedActor;
 }
Example #30
0
 public ActorChangeEventArgs(NActor newActor)
 {
     this.NewLevel = newActor;
 }