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); } }
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(); }
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); }
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); } }
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); } }
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); }
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!"); } }
/// <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(); }
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); }
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); }
/// <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); }
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); }
/// <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> /// 重置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()); } }
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!"); } }
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!"); } }
/// <summary> /// 创建对象成功后调用 /// </summary> /// <param name="actor">新创建的对象,可能为null</param> virtual public void PostCreateActor(NActor actor) { }
public ActorSelectedArgs(NActor selectedActor) { m_selected = selectedActor; }
public ActorChangeEventArgs(NActor newActor) { this.NewLevel = newActor; }