Esempio n. 1
0
        private async System.Threading.Tasks.Task BuildNavMesh(bool force = false)
        {
            if (force == false)
            {
                if (VP1.IsMouseDown)
                {
                    return;
                }
            }

            if (RCTileMeshBuilder.InputGeom == null)
            {
                return;
            }
            EngineNS.CEngine.Instance.EventPoster.RunOn(async() =>
            {
                //处理offmeshlink
                if (VP1.World.DefaultScene.NavAreaActor != null)
                {
                    foreach (var actor in VP1.World.DefaultScene.NavAreaActor.GetChildrenUnsafe())
                    {
                        EngineNS.Bricks.RecastRuntime.NavLinkProxyComponent NavLinkProxyComponent = actor.GetComponent <EngineNS.Bricks.RecastRuntime.NavLinkProxyComponent>();
                        if (NavLinkProxyComponent != null)
                        {
                            RCTileMeshBuilder.InputGeom.AddOffMeshConnections(NavLinkProxyComponent.StartPos, NavLinkProxyComponent.EndPos, NavLinkProxyComponent.Radius, NavLinkProxyComponent.Direction);
                        }
                    }
                }

                VP1.World.DefaultScene.NavMesh = RCTileMeshBuilder.BuildNavi();

                EngineNS.Graphics.Mesh.CGfxMeshPrimitives pri = VP1.World.DefaultScene.NavMesh.CreateRenderMeshPrimitives(EngineNS.CEngine.Instance.RenderContext);
                if (pri == null)
                {
                    return(false);
                }
                EngineNS.GamePlay.Actor.GActor debugactor = await VP1.World.DefaultScene.NavMesh.CreateRenderActor(EngineNS.CEngine.Instance.RenderContext, pri);
                if (VP1.World.NavMeshActorID != null)
                {
                    VP1.World.RemoveEditorActor(VP1.World.NavMeshActorID);
                }
                debugactor.Visible = EngineNS.CEngine.IsRenderNavMesh;
                VP1.World.AddEditorActor(debugactor);
                //if (VP1.World.DefaultScene.NavAreaActor == null)
                //{
                //    VP1.World.DefaultScene.CreateNavActor();
                //}
                //VP1.World.DefaultScene.NavAreaActor.Children.Add(debugactor);
                //VP1.DRefreshActors();
                VP1.World.NavMeshActorID = debugactor.ActorId;
                return(true);
            }, EngineNS.Thread.Async.EAsyncTarget.AsyncEditor);
        }
Esempio n. 2
0
        private async Task CreateNavRenderMesh()
        {
            if (VP1.World.DefaultScene.NavMesh != null)
            {
                EngineNS.Graphics.Mesh.CGfxMeshPrimitives pri = VP1.World.DefaultScene.NavMesh.CreateRenderMeshPrimitives(EngineNS.CEngine.Instance.RenderContext);
                if (pri == null)
                {
                    return;
                }
                EngineNS.GamePlay.Actor.GActor debugactor = await VP1.World.DefaultScene.NavMesh.CreateRenderActor(EngineNS.CEngine.Instance.RenderContext, pri);

                if (VP1.World.NavMeshActorID != null)
                {
                    VP1.World.RemoveEditorActor(VP1.World.NavMeshActorID);
                }

                debugactor.Visible = EngineNS.CEngine.IsRenderNavMesh;
                VP1.World.AddEditorActor(debugactor);

                VP1.World.NavMeshActorID = debugactor.ActorId;
            }
        }