private void DeleteActorEvent(EngineNS.GamePlay.Actor.GActor actor)
        {
            RefreshActorControlInfo();

            if (RCTileMeshBuilder.InputGeom == null)
            {
                return;
            }

            var component = actor.GetComponent <EngineNS.Bricks.RecastRuntime.NavMeshBoundVolumeComponent>();

            if (component != null)
            {
                RCTileMeshBuilder.InputGeom.DeleteConvexVolumesByArea(component.RCAreaType);
                if (component.RCAreaType == EngineNS.Bricks.RecastRuntime.NavMeshBoundVolumeComponent.AreaType.NoWalk)
                {
                    actor.PlacementChange -= RefreshNavModifierVolumes;
                    RefreshNavModifierVolumes();
                }
                else if (component.RCAreaType == EngineNS.Bricks.RecastRuntime.NavMeshBoundVolumeComponent.AreaType.Walk)
                {
                    actor.PlacementChange -= RefreshNavMeshBoundVolumes;
                    RefreshNavMeshBoundVolumes();
                }
            }
        }
        public async Task AddComponent(EngineNS.GamePlay.Actor.GActor actor, EngineNS.GamePlay.Component.GComponent component)
        {
            if (actor != null)
            {
                Type type = component.GetType();
                var  atts = type.GetCustomAttributes(typeof(EngineNS.GamePlay.Component.CustomConstructionParamsAttribute), false);
                EngineNS.GamePlay.Component.GComponent.GComponentInitializer initializer = null;
                if (atts.Length > 0)
                {
                    for (int i = 0; i < atts.Length; i++)
                    {
                        var ccAtt = atts[i] as EngineNS.GamePlay.Component.CustomConstructionParamsAttribute;
                        if (ccAtt != null)
                        {
                            initializer = Activator.CreateInstance(ccAtt.ConstructionParamsType) as EngineNS.GamePlay.Component.GComponent.GComponentInitializer;
                            break;
                        }
                    }
                }
                if (initializer != null)
                {
                    await component.SetInitializer(EngineNS.CEngine.Instance.RenderContext, actor, actor, initializer);
                }

                actor.AddComponent(component);
            }
        }
        private void AddActorEvent(EngineNS.GamePlay.Actor.GActor actor)
        {
            // return;
            var component = actor.GetComponent <EngineNS.Bricks.RecastRuntime.NavMeshBoundVolumeComponent>();

            if (component != null)
            {
                //if (RCTileMeshBuilder.InputGeom == null)
                //{
                //    var result = BuildNavtion();
                //}

                AddActorToNavModifierVolume(actor);
                //var test = BuildNavMesh();

                if (component.RCAreaType == EngineNS.Bricks.RecastRuntime.NavMeshBoundVolumeComponent.AreaType.NoWalk)
                {
                    actor.PlacementChange -= RefreshNavModifierVolumes;
                    actor.PlacementChange += RefreshNavModifierVolumes;

                    NavModifierVolumes.Add(new WeakReference <EngineNS.GamePlay.Actor.GActor>(actor));
                }
                else if (component.RCAreaType == EngineNS.Bricks.RecastRuntime.NavMeshBoundVolumeComponent.AreaType.Walk)
                {
                    actor.PlacementChange -= RefreshNavMeshBoundVolumes;
                    actor.PlacementChange += RefreshNavMeshBoundVolumes;

                    NavMeshBoundVolumes.Add(new WeakReference <EngineNS.GamePlay.Actor.GActor>(actor));
                }
            }

            RefreshActorControlInfo();
        }
Exemple #4
0
        public async System.Threading.Tasks.Task ResetDebugBox(CRenderContext rc, EngineNS.GamePlay.Actor.GActor actor, EngineNS.Bricks.Particle.CGfxParticleSystem sys)
        {
            BoundingBox.Merge(ref Host.LocalBoundingBox, ref sys.AABB.Box, out Host.LocalBoundingBox);
            OnUpdateDrawMatrix(ref Host.Placement.mDrawTransform);

            await CreateBoundBox(rc, Host, sys);
        }
        private void CreateLegAndFootIK(EngineNS.GamePlay.Actor.GActor actor)
        {
            var meshComp      = actor.GetComponent <EngineNS.GamePlay.Component.GMeshComponent>();
            var animationCom  = actor.GetComponent <EngineNS.GamePlay.Component.GAnimationInstance>();
            var skinModifier  = meshComp.SceneMesh.MdfQueue.FindModifier <EngineNS.Graphics.Mesh.CGfxSkinModifier>();
            var FinalPose     = skinModifier.AnimationPose;
            var rightLegCcdIk = new EngineNS.Graphics.Mesh.SkeletonControl.CGfxCCDIK();

            rightLegCcdIk.AnimationPose  = FinalPose;
            rightLegCcdIk.Alpha          = 1.0f;
            rightLegCcdIk.TargetBoneName = EngineNS.Support.LanguageManager.JP932_GB2312("右足IK");
            //rightLegCcdIk.TargetPosition = targetp;
            rightLegCcdIk.EndEffecterBoneName = EngineNS.Support.LanguageManager.JP932_GB2312("右足首");
            rightLegCcdIk.LimitAngle          = 114.5916f;
            rightLegCcdIk.Iteration           = 15;
            rightLegCcdIk.Depth = 3;

            var leftLegCcdIk = new EngineNS.Graphics.Mesh.SkeletonControl.CGfxCCDIK();

            leftLegCcdIk.AnimationPose  = rightLegCcdIk.AnimationPose;
            leftLegCcdIk.Alpha          = 1.0f;
            leftLegCcdIk.TargetBoneName = EngineNS.Support.LanguageManager.JP932_GB2312("左足IK");
            //leftLegCcdIk.TargetPosition = targetp;
            leftLegCcdIk.EndEffecterBoneName = EngineNS.Support.LanguageManager.JP932_GB2312("左足首");
            leftLegCcdIk.LimitAngle          = 114.5916f;
            leftLegCcdIk.Iteration           = 15;
            leftLegCcdIk.Depth = 3;

            var rightFootCcdIk = new EngineNS.Graphics.Mesh.SkeletonControl.CGfxCCDIK();

            rightFootCcdIk.AnimationPose = leftLegCcdIk.AnimationPose;
            //rightFootCcdIk.AnimationPose = FinalPose;
            rightFootCcdIk.Alpha          = 1.0f;
            rightFootCcdIk.TargetBoneName = EngineNS.Support.LanguageManager.JP932_GB2312("右つま先IK");
            //rightFootCcdIk.TargetPosition = targetp;
            rightFootCcdIk.EndEffecterBoneName = EngineNS.Support.LanguageManager.JP932_GB2312("右足首D");
            rightFootCcdIk.Iteration           = 15;
            rightFootCcdIk.Depth = 1;

            var leftFootCcdIk = new EngineNS.Graphics.Mesh.SkeletonControl.CGfxCCDIK();

            leftFootCcdIk.AnimationPose  = rightFootCcdIk.AnimationPose;
            leftFootCcdIk.Alpha          = 1.0f;
            leftFootCcdIk.TargetBoneName = EngineNS.Support.LanguageManager.JP932_GB2312("左つま先IK");
            //leftFootCcdIk.TargetPosition = targetp;
            leftFootCcdIk.EndEffecterBoneName = EngineNS.Support.LanguageManager.JP932_GB2312("左足首D");
            leftFootCcdIk.Iteration           = 15;
            leftFootCcdIk.Depth = 1;

            //animationCom.skeletonControls.Add(lookAt);

            animationCom.skeletonControls.Add(rightLegCcdIk);
            animationCom.skeletonControls.Add(leftLegCcdIk);
            //animationCom.skeletonControls.Add(rightFootCcdIk);
            //animationCom.skeletonControls.Add(leftFootCcdIk);
            CreateLookAt(actor, EngineNS.Support.LanguageManager.JP932_GB2312("左足首"), EngineNS.Support.LanguageManager.JP932_GB2312("左つま先IK"), Vector3.UnitZ);
            CreateLookAt(actor, EngineNS.Support.LanguageManager.JP932_GB2312("右足首"), EngineNS.Support.LanguageManager.JP932_GB2312("右つま先IK"), Vector3.UnitZ);
        }
Exemple #6
0
        public EngineNS.GamePlay.Actor.GActor CreateNavActor()
        {
            NavAreaActor         = new EngineNS.GamePlay.Actor.GActor();
            NavAreaActor.ActorId = Guid.NewGuid();
            EngineNS.GamePlay.Component.GPlacementComponent component = new EngineNS.GamePlay.Component.GPlacementComponent();
            var placement = new GamePlay.Component.GPlacementComponent();

            NavAreaActor.Placement = placement;
            return(NavAreaActor);
        }
Exemple #7
0
        public async System.Threading.Tasks.Task <EngineNS.GamePlay.Actor.GActor> CreateRenderActor(CRenderContext rc, Graphics.Mesh.CGfxMeshPrimitives pri)
        {
            EngineNS.GamePlay.Actor.GActor actor = EngineNS.GamePlay.Actor.GActor.NewMeshActorDirect(EngineNS.CEngine.Instance.MeshManager.CreateMesh(rc, pri));
            await actor.GetComponent <EngineNS.GamePlay.Component.GMeshComponent>().SetMaterialInstance(EngineNS.CEngine.Instance.RenderContext, 0, RName.GetRName("editor/icon/icon_3D/material/pathfinding.instmtl"), null);

            actor.Placement.Location = new EngineNS.Vector3(0.0f, 0.0f, 0.0f);
            actor.Placement.Rotation = EngineNS.Quaternion.RotationAxis(EngineNS.Vector3.UnitY, 0.0f);
            actor.Placement.Scale    = new EngineNS.Vector3(1.0f, 1.0f, 1.0f);
            actor.SpecialName        = "NavMeshDebugger";
            return(actor);
        }
        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);
        }
        //public override async Task<ImageSource> GetSnapshotImage(bool forceCreate)
        //{
        //    var snapShotFile = ResourceName.Address + EditorCommon.Program.SnapshotExt;
        //    var imgSource = await EditorCommon.ImageInit.GetImage(snapShotFile);
        //    if (imgSource != null)
        //        return imgSource;

        //    var rc = CEngine.Instance.RenderContext;
        //    var mCurMesh = await CEngine.Instance.MeshManager.CreateMeshAsync(rc, ResourceName/*, EditorCommon.SnapshotProcess.SnapshotCreator.GetShadingEnv()*/);
        //    if (mCurMesh == null)
        //        return null;

        //    var snapShorter = new EditorCommon.SnapshotProcess.SnapshotCreator();//EngineNS.Editor.SnapshotCreator();//
        //    await snapShorter.InitEnviroment();

        //    var actor = EngineNS.GamePlay.Actor.GActor.NewMeshActor(mCurMesh);

        //    mCurMesh.PreUse(true);//就这个地方用,别的地方别乱用,效率不好
        //    snapShorter.World.AddActor(actor);
        //    snapShorter.World.Scenes[RName.GetRName("SnapshorCreator")].AddActor(actor);

        //    actor.Placement.Location = new Vector3(0, 0, 0);

        //    var noused = snapShorter.SaveToFile(snapShotFile);

        //    return await EditorCommon.ImageInit.GetImage(snapShotFile);
        //}

        #region Viewport
        public void MapPrefabActor(EngineNS.GamePlay.Actor.GActor actor)
        {
            EngineNS.CEngine.Instance.HitProxyManager.MapActor(actor);
            List <EngineNS.GamePlay.Actor.GActor> Children = actor.GetChildrenUnsafe();

            if (Children.Count > 0)
            {
                foreach (var i in Children)
                {
                    MapPrefabActor(i);
                }
            }
        }
        private void ShowVPActors(ViewPort.ViewPortControl viewport)
        {
            if (viewport.World == null)
            {
                return;
            }

            foreach (var listactor in viewport.World.Actors)
            {
                EngineNS.GamePlay.Actor.GActor actor = listactor.Value as EngineNS.GamePlay.Actor.GActor;
                if (actor.Parent == null)
                {
                    AddActorToItem(TreeViewItemsNodes, actor);
                }
            }
        }
        public void RemoveActor(EngineNS.GamePlay.Actor.GActor actor)
        {
            //for (int i = 0; i < TreeViewItemsNodes.Count; i++)
            //{
            //    ActorData itemactor = TreeViewItemsNodes[i] as ActorData;
            //    if (itemactor.Actor == actor)
            //    {
            //        TreeViewItemsNodes.RemoveAt(i);
            //        break;
            //    }
            //}

            RefreshActors( );

            SelectActors.Clear();
        }
Exemple #12
0
        private async System.Threading.Tasks.Task AnalysisActor(EngineNS.GamePlay.Actor.GActor actor)
        {
            HashSet <object> visitedObjects = new HashSet <object>();

            await CollectRNameFromObject(actor, visitedObjects);

            foreach (var i in actor.Components)
            {
                await CollectRNameFromObject(i, visitedObjects);
            }
            var children = actor.GetChildrenUnsafe();

            foreach (var i in children)
            {
                await AnalysisActor(i);
            }
        }
        public void AddActor(EngineNS.GamePlay.Actor.GActor actor)
        {
            if (actor.Parent == null)
            {
                AddActorToItem(TreeViewItemsNodes, actor);
            }
            else
            {
                //TreeListView.ObservableCollectionAdv<TreeListView.ITreeModel> data;
                //if (ActorDatas.TryGetValue(actor.Parent.ActorId, out data))
                //{
                //    AddActorToItem(data, actor);
                //}
            }

            SelectActors.Clear();
        }
Exemple #14
0
        public async System.Threading.Tasks.Task CreateBoundBox(CRenderContext rc, EngineNS.GamePlay.Actor.GActor actor, EngineNS.Bricks.Particle.CGfxParticleSystem sys)
        {
            this.RemoveComponent("BoxVolumeData");
            if (sys.IsShowBox)
            {
                var boxcom = new LooseOctree.BoxComponent();
                boxcom.Size   = new Vector3(sys.AABB.L, sys.AABB.H, sys.AABB.W);
                boxcom.Center = sys.AABB.Center;
                var init = new LooseOctree.BoxComponent.BoxComponentInitializer();
                init.SpecialName = "BoxVolumeData";
                await boxcom.SetInitializer(rc, actor, actor, init);

                boxcom.LineMeshComponent.Host = actor;

                this.AddComponent(boxcom);
            }
        }
Exemple #15
0
        public async Task <Actor.GActor> CreateActor(Editor.PlantableItemCreateActorParam param)
        {
            await EngineNS.Thread.AsyncDummyClass.DummyFunc();

            var rc = EngineNS.CEngine.Instance.RenderContext;

            var actor = new EngineNS.GamePlay.Actor.GActor();

            actor.ActorId = Guid.NewGuid();
            var placement = new EngineNS.GamePlay.Component.GPlacementComponent();

            actor.Placement    = placement;
            placement.Location = param.Location;
            placement.Rotation = EngineNS.Quaternion.GetQuaternion(Vector3.UnitZ, -Vector3.UnitY);

            var meshComp     = new EngineNS.GamePlay.Component.GMeshComponent();
            var meshCompInit = new EngineNS.GamePlay.Component.GMeshComponent.GMeshComponentInitializer();

            meshCompInit.SpecialName = "EditorShow";
            meshCompInit.MeshName    = EngineNS.RName.GetRName("meshes/pointlight.gms", EngineNS.RName.enRNameType.Editor);
            await meshComp.SetInitializer(rc, actor, actor, meshCompInit);

            meshComp.HideInGame = true;
            actor.AddComponent(meshComp);

            meshComp                 = new EngineNS.GamePlay.Component.GMeshComponent();
            meshCompInit             = new EngineNS.GamePlay.Component.GMeshComponent.GMeshComponentInitializer();
            meshCompInit.SpecialName = "SphereVolumeShow";
            meshCompInit.MeshName    = EngineNS.RName.GetRName("meshes/sphere_wireframe.gms", EngineNS.RName.enRNameType.Editor);
            await meshComp.SetInitializer(rc, actor, actor, meshCompInit);

            meshComp.HideInGame = true;
            actor.AddComponent(meshComp);


            var initializer = new GPointLightComponentInitializer();

            initializer.SpecialName = "PointLightComponent";
            await SetInitializer(rc, actor, actor, initializer);

            actor.AddComponent(this);
            actor.AcceptLights = false;

            return(actor);
        }
        private void CreateLookAt(EngineNS.GamePlay.Actor.GActor actor, string modifyBone, string targetBone, Vector3 loolAtAxis)
        {
            var meshComp     = actor.GetComponent <EngineNS.GamePlay.Component.GMeshComponent>();
            var animationCom = actor.GetComponent <EngineNS.GamePlay.Component.GAnimationInstance>();
            var skinModifier = meshComp.SceneMesh.MdfQueue.FindModifier <EngineNS.Graphics.Mesh.CGfxSkinModifier>();
            var FinalPose    = skinModifier.AnimationPose;

            lookAt = new EngineNS.Graphics.Mesh.SkeletonControl.CGfxLookAt();
            lookAt.ModifyBoneName = modifyBone;
            if (targetBone != null)
            {
                lookAt.TargetBoneName = targetBone;
            }
            lookAt.LookAtAxis    = Vector3.UnitX;
            lookAt.AnimationPose = FinalPose;
            lookAt.Alpha         = 1;
            animationCom.skeletonControls.Add(lookAt);
        }
 private void Viewport_DAddActor(EngineNS.GamePlay.Actor.GActor actor)
 {
     foreach (var comp in actor.Components)
     {
         var sgComp = comp as EngineNS.GamePlay.Component.ISceneGraphComponent;
         if (sgComp != null)
         {
             var node = sgComp.GetSceneNode();
             SceneGraphNodeViewData parentData = null;
             if (node.Parent == null)
             {
                 throw new InvalidOperationException("node.Parent不能为空");
             }
             mViewDataDic.TryGetValue(node.Parent, out parentData);
             CreateNodeItem(parentData, node);
         }
     }
 }
        public void CreateAnimationInstanceMacross(EngineNS.GamePlay.Actor.GActor actor)
        {
            EngineNS.Macross.MacrossGetter <EngineNS.GamePlay.Component.GAnimationInstance> macrossGetter = new EngineNS.Macross.MacrossGetter <EngineNS.GamePlay.Component.GAnimationInstance>();
            macrossGetter.Name = RName.GetRName("Animation/amc_robot.macross");
            var animationCom = macrossGetter.Get();

            animationCom.Init();
            actor.AddComponent(animationCom);
            var meshComp = actor.GetComponent <EngineNS.GamePlay.Component.GMutiMeshComponent>();

            foreach (var subMesh in meshComp.Meshes)
            {
                var skinModifier = subMesh.Value.MdfQueue.FindModifier <EngineNS.Graphics.Mesh.CGfxSkinModifier>();
                if (animationCom.AnimationPose != null)
                {
                    skinModifier.AnimationPose = animationCom.AnimationPose;
                }
            }
        }
Exemple #19
0
        public static async System.Threading.Tasks.Task AnalysisActorRefResource(EngineNS.GamePlay.Actor.GActor actor, HashSet <RName> refObjectHashSet, HashSet <object> visitedObjects = null)
        {
            if (visitedObjects == null)
            {
                visitedObjects = new HashSet <object>();
            }
            await CollectRNameFromObject(actor, refObjectHashSet, visitedObjects);

            foreach (var i in actor.Components)
            {
                await CollectRNameFromObject(i, refObjectHashSet, visitedObjects);
            }
            var children = actor.GetChildrenUnsafe();

            foreach (var i in children)
            {
                await AnalysisActorRefResource(i, refObjectHashSet, visitedObjects);
            }
        }
Exemple #20
0
        public async System.Threading.Tasks.Task <GamePlay.Actor.GActor> CreateActor(Editor.PlantableItemCreateActorParam param)
        {
            var rc = EngineNS.CEngine.Instance.RenderContext;

            var actor = new EngineNS.GamePlay.Actor.GActor();

            actor.ActorId = Guid.NewGuid();
            var placement = new EngineNS.GamePlay.Component.GPlacementComponent();

            actor.Placement    = placement;
            placement.Location = param.Location;

            //var init = new OctreeVolumeComponentInitializer();
            //init.SpecialName = "VolumeData";
            //await SetInitializer(rc, actor, init);

            //mOctree = new Octree();
            //mOctree.LinkedActorId = actor.ActorId;
            if (mLineMeshComponent == null)
            {
                await InitGraphLines();
            }
            mLineMeshComponent.Host = actor;
            var mat = actor.Placement.WorldMatrix;

            mLineMeshComponent.OnUpdateDrawMatrix(ref mat);

            var init = new NavLinkProxyComponentInitializer();

            init.SpecialName = " NavLinkProxy";
            await SetInitializer(rc, actor, actor, init);

            //var aabb = new BoundingBox(-0.5f, -0.5f, -0.5f, 0.5f, 0.5f, 0.5f);
            //BoundingBox.Merge(ref actor.LocalBoundingBox, ref aabb, out actor.LocalBoundingBox);

            actor.AddComponent(this);

            actor.IsNavgation = true;
            return(actor);
        }
 private void Viewport_DRemoveActor(EngineNS.GamePlay.Actor.GActor actor)
 {
     foreach (var comp in actor.Components)
     {
         var sgComp = comp as EngineNS.GamePlay.Component.ISceneGraphComponent;
         if (sgComp != null)
         {
             var node = sgComp.GetSceneNode();
             if (node != null)
             {
                 SceneGraphNodeViewData nodeData = null;
                 mViewDataDic.TryGetValue(node, out nodeData);
                 if (nodeData != null)
                 {
                     var parentData = nodeData.Parent as SceneGraphNodeViewData;
                     parentData.Children.Remove(nodeData);
                     RemoveNodeFromDic(node);
                 }
             }
         }
     }
 }
 public async Task<EngineNS.GamePlay.Component.GComponent> CreateComponent(EngineNS.GamePlay.Component.IComponentContainer componentContainer)
 {
     EngineNS.GamePlay.Actor.GActor hostActor = null;
     EngineNS.GamePlay.Component.IComponentContainer hostContainer = null;
     if (componentContainer is EngineNS.GamePlay.Actor.GActor)
     {
         hostActor = componentContainer as EngineNS.GamePlay.Actor.GActor;
         hostContainer = componentContainer;
     }
     else if (componentContainer is EngineNS.GamePlay.Component.GComponent)
     {
         hostActor = (componentContainer as EngineNS.GamePlay.Component.GComponent).Host;
         hostContainer = componentContainer;
     }
     var rc = CEngine.Instance.RenderContext;
     var comp = new EngineNS.GamePlay.Component.StateMachine.GStateMachineComponent();
     var init = new EngineNS.GamePlay.Component.StateMachine.GStateMachineComponentInitializer();
     await comp.SetInitializer(rc, hostActor, hostContainer, init);
     comp.SpecialName = ResourceName.PureName();
     comp.ComponentMacross = ResourceName;
     return comp;
 }
        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;
            }
        }
Exemple #24
0
        public static void GetBuildActors(EngineNS.GamePlay.SceneGraph.GSceneGraph sc,
                                          List <EngineNS.GamePlay.Actor.GActor> allActors,
                                          List <EngineNS.GamePlay.Actor.GActor> pvsActors,
                                          List <EngineNS.GamePlay.Actor.GActor> unPVSActors,
                                          List <EngineNS.GamePlay.Component.ISceneGraphComponent> buildItems)
        {
            using (var i = sc.Actors.GetEnumerator())
            {
                while (i.MoveNext())
                {
                    EngineNS.GamePlay.Actor.GActor actor = i.Current.Value;
                    // 不包含平行光
                    if (actor.GetComponent(typeof(EngineNS.GamePlay.Component.GDirLightComponent)) != null)
                    {
                        continue;
                    }
                    // 不包含带有SceneGraphComponent的Actor
                    var comp = actor.GetComponent(typeof(EngineNS.GamePlay.Component.ISceneGraphComponent)) as EngineNS.GamePlay.Component.ISceneGraphComponent;
                    if (comp != null)
                    {
                        buildItems.Add(comp);
                        continue;
                    }

                    allActors.Add(actor);

                    if (actor.Initializer.InPVS)
                    {
                        pvsActors.Add(actor);
                    }
                    else
                    {
                        unPVSActors.Add(actor);
                    }
                    sc.DefaultSceneNode.RemoveActor(actor);
                }
            }
        }
Exemple #25
0
        public async System.Threading.Tasks.Task CreateActor()
        {
            if (HostActor != null)
            {
                return;
            }

            EngineNS.GamePlay.Component.GPlacementComponent placement = new EngineNS.GamePlay.Component.GPlacementComponent();

            var rc = EngineNS.CEngine.Instance.RenderContext;

            EngineNS.GamePlay.Actor.GActor actor = new EngineNS.GamePlay.Actor.GActor();
            actor.ActorId = new Guid();
            await placement.SetInitializer(rc, actor, actor, placement.mPlacementData);

            placement.SpecialName = "Placement";

            placement.Location = new EngineNS.Vector3(0, 0, 0);
            actor.AddComponent(placement);

            actor.LocalBoundingBox.Minimum = new EngineNS.Vector3(-1, -1, -1);
            actor.LocalBoundingBox.Maximum = new EngineNS.Vector3(1, 1, 1);
            //actor.AddComponent(this);

            //EngineNS.GamePlay.Component.GMeshComponent.GMeshComponentInitializer initializer = new EngineNS.GamePlay.Component.GMeshComponent.GMeshComponentInitializer();
            //EngineNS.GamePlay.Component.GMeshComponent meshcomponent = new EngineNS.GamePlay.Component.GMeshComponent();
            //initializer.MeshName = EngineNS.RName.GetRName("ParticleResource/models/sphere.gms");
            //await meshcomponent.SetInitializer(rc, actor, actor, initializer);
            //meshcomponent.SpecialName = "mesh";
            //actor.AddComponent(meshcomponent);
            HostActor = actor;

            HostActor.PlacementChange     -= PlacementChange;
            HostActor.PlacementChange     += PlacementChange;
            HostActor.NeedRefreshNavgation = true;
        }
        public bool CheckFilter(EngineNS.GamePlay.Actor.GActor actor)
        {
            if (actor.SpecialName != null && actor.SpecialName.ToLower().IndexOf(mLowerFilterString) > -1)
            {
                return(true);
            }

            List <EngineNS.GamePlay.Actor.GActor> actors = actor.GetChildrenUnsafe();

            if (actors.Count == 0)
            {
                return(false);
            }

            for (int i = 0; i < actors.Count; i++)
            {
                if (CheckFilter(actors[i]))
                {
                    return(true);
                }
            }

            return(false);
        }
        //[Editor.MacrossPanelPathAttribute("粒子系统/粒子效应器(McParticleEffector)/InitSystem")]
        //[Editor.MacrossMemberAttribute(Editor.MacrossMemberAttribute.enMacrossType.Callable | Editor.MacrossMemberAttribute.enMacrossType.Overrideable)]
        public virtual async System.Threading.Tasks.Task <bool> InitSystem(CGfxParticleSystem sys, EngineNS.GamePlay.Actor.GActor actor, GParticleComponent compoent, GParticleComponent.GParticleComponentInitializer initializer)
        {
            DoInitSystem(sys, compoent);
            //await sys.SetHostActorMesh(compoent, initializer, UseMeshRName);
            //sys.SetHostActorMaterial(compoent, initializer, UseMaterialRName);
            await sys.InitSubSystem(actor, compoent);

            sys.HostActorMesh = compoent;
            return(true);
        }
        private void AddActorToItem(TreeListView.ObservableCollectionAdv <TreeListView.ITreeModel> listads, EngineNS.GamePlay.Actor.GActor actor)
        {
            //过滤掉辅助的actor(物理碰撞盒子)
            if (actor.SpecialName != null && actor.SpecialName.Equals(EngineNS.Bricks.HollowMaker.GeomScene.ActorName))
            {
                return;
            }

            bool filter = true;

            if (!string.IsNullOrEmpty(mFilterString))
            {
                filter = CheckFilter(actor);
            }

            if (filter == false)
            {
                return;
            }

            String typeall = actor.GetType().ToString();

            String[] type      = typeall.Split('.');
            var      actorData = new ActorData()
            {
                Actor = actor
            };

            BindingOperations.SetBinding(actorData, ActorData.NameProperty, new Binding("SpecialName")
            {
                Source = actor
            });
            BindingOperations.SetBinding(actorData, ActorData.HighLightStringProperty, new Binding("FilterString")
            {
                Source = this
            });
            BindingOperations.SetBinding(actorData, ActorData.VisibleProperty, new Binding("Visible")
            {
                Source = actor
            });
            listads.Add(actorData);//actor.SpecialName

            if (actor.GetChildrenUnsafe().Count > 0)
            {
                addActorsToItems(actorData.Children, actor.GetChildrenUnsafe());
            }
        }
 private void selectPrefabActor(EngineNS.GamePlay.Actor.GActor actor)
 {
 }
        public void BuildGeoScene(EngineNS.GamePlay.SceneGraph.GSceneGraph scene)
        {
            if (scene.SceneFilename == null)
            {
                return;
            }

            EngineNS.Bricks.HollowMaker.GeomScene geomscene = new EngineNS.Bricks.HollowMaker.GeomScene();
            HollowMakerAgent.AgentComponenetBox = new List <EngineNS.BoundingBox>();
            float osize = HollowMakerAgent.AgentGridSize;

            //先处理一遍摆放好的AgentGeomBoxComponent..
            foreach (var value in scene.Actors)
            {
                EngineNS.GamePlay.Actor.GActor actor = value.Value;
                if (actor != null)
                {
                    EngineNS.Bricks.HollowMaker.AgentGeomBoxComponent acom = actor.GetComponent <EngineNS.Bricks.HollowMaker.AgentGeomBoxComponent>();

                    if (acom != null)
                    {
                        HollowMakerAgent.AgentGridSize = acom.AgentGridSize;
                        EngineNS.Vector3    scale;
                        EngineNS.Quaternion rotation;
                        EngineNS.Vector3    translation;
                        if (actor.Placement != null && actor.Placement.WorldMatrix.Decompose(out scale, out rotation, out translation))
                        {
                            geomscene.AgentData = new List <EngineNS.Bricks.HollowMaker.Agent.GeoBox>();
                            BuildWalkables(acom.StartPos, translation, scale, rotation);
                            HollowMakerAgent.BuildGeomScene(geomscene);
                            //TODO..
                            HollowMakerAgent.AgentComponenetBox.Add(acom.Box);

                            EngineNS.Bricks.HollowMaker.GeomScene.AgentBoxs AgentBoxs = new EngineNS.Bricks.HollowMaker.GeomScene.AgentBoxs();
                            AgentBoxs.AgentData = geomscene.AgentData;
                            AgentBoxs.Mat       = EngineNS.Matrix.Transformation(EngineNS.Vector3.UnitXYZ, rotation, translation);
                            AgentBoxs.BVSize    = scale;
                            geomscene.AgentDatas.Add(AgentBoxs);
                        }
                    }
                }
            }

            //HollowMakerAgent.AgentGridSize = osize;
            //foreach (var value in scene.Actors)
            //{
            //    EngineNS.GamePlay.Actor.GActor actor;
            //    var compment = value.Value.TryGetTarget(out actor);
            //    if (actor != null)
            //    {
            //        EngineNS.LooseOctree.OctreeVolumeComponent com = actor.GetComponent<EngineNS.LooseOctree.OctreeVolumeComponent>();
            //        if (com != null)
            //        {
            //            EngineNS.BoundingBox box = new EngineNS.BoundingBox();
            //            actor.GetAABB(ref box);
            //            BuildWalkables(box);
            //            HollowMakerAgent.BuildGeomScene(geomscene);
            //        }
            //    }
            //}

            // var test = geomscene.CreateRenderInfos(VP1.World);

            geomscene.SaveXND(scene.SceneFilename.Address + "/geoscene.dat");
            //EngineNS.Bricks.HollowMaker.GeomScene temp = await EngineNS.Bricks.HollowMaker.GeomScene.CreateGeomScene(scene.SceneFilename.Address + "/geoscene.dat");
            //int xx = 0;
        }