Ejemplo n.º 1
0
        public override async Task <bool> SetInitializer(CRenderContext rc, GamePlay.IEntity host, IComponentContainer hostContainer, GComponentInitializer v)
        {
            var init = v as GParticleComponentInitializer;

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

            mParticleModifier = new Particle.CGfxParticleModifier();
            var sys = mParticleModifier.ParticleSys;

            sys.Effector = CEngine.Instance.MacrossDataManager.NewObjectGetter <McParticleEffector>(init.MacrossName);

            if (sys.Effector != null)
            {
                await sys.Effector.Get(false).InitSystem(sys, host as GamePlay.Actor.GActor, this, init);
            }

            //default..
            if (init.MeshName == null)
            {
                init.MeshName = RName.GetRName("ParticleResource/models/sphere.gms");
            }

            if (false == await base.SetInitializer(rc, host, hostContainer, v))
            {
                return(false);
            }

            sys.HostActor = Host;

            if (sys.UseMaterialRName != null)
            {
                await SetMaterialInstance(rc, 0, sys.UseMaterialRName, null);
            }

            if (this.SceneMesh != null && this.SceneMesh.MdfQueue != null)
            {
                this.SceneMesh.MdfQueue.AddModifier(mParticleModifier);
            }

            //Box
            {
                BoundingBox.Merge(ref Host.LocalBoundingBox, ref sys.AABB.Box, out Host.LocalBoundingBox);
                OnUpdateDrawMatrix(ref Host.Placement.mDrawTransform);
            }
            return(true);
        }
Ejemplo n.º 2
0
        public override async Task <bool> SetInitializer(CRenderContext rc, IEntity host, IComponentContainer hostContainer, GComponentInitializer v)
        {
            var result = await base.SetInitializer(rc, host, hostContainer, v);

            if (result == false)
            {
                return(false);
            }

            if (CCInitializer != null)
            {
                Location  = CCInitializer.Location;
                Rotation  = CCInitializer.Rotation;
                Direction = CCInitializer.Direction;
            }
            return(true);
        }
Ejemplo n.º 3
0
        public override async Task <bool> SetInitializer(CRenderContext rc, GamePlay.IEntity host, GamePlay.Component.IComponentContainer hostContainer, GComponentInitializer v)
        {
            if (!await base.SetInitializer(rc, host, hostContainer, v))
            {
                return(false);
            }

            Host.IsNavgation = true;

            return(true);
        }
Ejemplo n.º 4
0
        public override async System.Threading.Tasks.Task <bool> SetInitializer(CRenderContext rc, IEntity host, IComponentContainer hostContainer, GComponentInitializer v)
        {
            await base.SetInitializer(rc, host, hostContainer, v);

            mPlacementData = v as GPlacementComponentInitializer;
            var iPlacement = mHostContainer as IPlaceable;

            if (iPlacement != null)
            {
                mPlaceableHost       = iPlacement;
                iPlacement.Placement = this;
            }
            mOrientation      = Rotation * -Vector3.UnitZ;
            mWorldOrientation = WorldRotation * -Vector3.UnitZ;
            UpdateData();
            return(true);
        }
Ejemplo n.º 5
0
        public override async System.Threading.Tasks.Task <bool> SetInitializer(CRenderContext rc, IEntity host, IComponentContainer hostContainer, GComponentInitializer v)
        {
            await base.SetInitializer(rc, host, hostContainer, v);

            DirLightInitializer = v as GDirLightComponentInitializer;
            return(true);
        }
Ejemplo n.º 6
0
        //private NavLinkProxyComponentInitializer Initializer;
        public override async System.Threading.Tasks.Task <bool> SetInitializer(CRenderContext rc, GamePlay.IEntity host, GamePlay.Component.IComponentContainer hostContainer, GComponentInitializer v)
        {
            if (!await base.SetInitializer(rc, host, hostContainer, v))
            {
                return(false);
            }

            if (mLineMeshComponent == null)
            {
                await InitGraphLines();
            }

            if (mLineMeshComponent != null)
            {
                mLineMeshComponent.Entity = host;

                Host.PlacementChange -= PlacementChange;
                Host.PlacementChange += PlacementChange;
                var mat = this.Host.Placement.WorldMatrix;
                mLineMeshComponent.OnUpdateDrawMatrix(ref mat);
            }

            var initializer = v as NavLinkProxyComponentInitializer;

            Radius    = initializer.Radius;
            Direction = initializer.Direction;

            Initializer = initializer;

            return(true);
        }
Ejemplo n.º 7
0
        public override async Task <bool> SetInitializer(CRenderContext rc, GamePlay.IEntity host, IComponentContainer hostContainer, GComponentInitializer v)
        {
            await base.SetInitializer(rc, host, hostContainer, v);

            var nvInit = v as CNavMeshComponentInitializer;

            if (nvInit.NavName != null)
            {
                await CEngine.Instance.EventPoster.Post(() =>
                {
                    using (var xnd = IO.XndHolder.SyncLoadXND(nvInit.NavName.Address))
                    {
                        NavMesh = new CNavMesh();
                        NavMesh.LoadXnd(xnd.Node);
                    }
                    return(true);
                }, Thread.Async.EAsyncTarget.AsyncIO);
            }

            if (NavMesh != null)
            {
                var meshComp = Host.FindComponentBySpecialName("NavMeshDebugger") as GamePlay.Component.GMeshComponent;
                if (meshComp == null)
                {
                    //meshComp = new GamePlay.Component.GMeshComponent();
                    //var renderMesh = CEngine.Instance.MeshManager.CreateMesh(rc, NavMesh.CreateRenderMesh(rc));
                    //var mtl = await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(rc, RName.GetRName("Material/RecastDebugger.instmtl"));
                    //await renderMesh.SetMaterial(rc, 0, mtl, null);
                    //meshComp.SetSceneMesh(rc, renderMesh);

                    //host.AddComponent(meshComp);
                    //meshComp.SpecialName = "NavMeshDebugger";
                }
            }

            return(true);
        }
Ejemplo n.º 8
0
        public override async Task <bool> SetInitializer(CRenderContext rc, GamePlay.IEntity host, GamePlay.Component.IComponentContainer hostContainer, GComponentInitializer v)
        {
            if (!await base.SetInitializer(rc, host, hostContainer, v))
            {
                return(false);
            }

            if (mLineMeshComponent == null)
            {
                await base.InitDrawMesh();

                mLineMeshComponent.Entity = host;

                var mat = Host.Placement.WorldMatrix;
                mLineMeshComponent.OnUpdateDrawMatrix(ref mat);
            }

            return(true);
        }
Ejemplo n.º 9
0
        public override async Task <bool> SetInitializer(CRenderContext rc, GActor host, GComponentInitializer v)
        {
            if (!await base.SetInitializer(rc, host, v))
            {
                return(false);
            }

            host.IsNavgation = true;

            return(true);
        }
Ejemplo n.º 10
0
        public override async System.Threading.Tasks.Task <bool> SetInitializer(CRenderContext rc, IEntity host, IComponentContainer hostContainer, GComponentInitializer v)
        {
            await base.SetInitializer(rc, host, hostContainer, v);

            PointLightInitializer.Host   = this;
            PointLightInitializer.Radius = PointLightInitializer.Radius;
            if (PointLightInitializer.PlacementComponentInitializer != null)
            {
                await Placement.SetInitializer(rc, host, null, PointLightInitializer.PlacementComponentInitializer);

                Placement.PlaceableHost = this;
            }
            PointLightInitializer.Position = Placement.WorldLocation;
            return(true);
        }
        public override async Task <bool> SetInitializer(CRenderContext rc, IEntity host, IComponentContainer hostContainer, GComponentInitializer v)
        {
            var mesh = host.GetComponent <GMeshComponent>();

            if (mesh == null)
            {
                mesh = hostContainer as GMeshComponent;
            }
            if (mesh != null)
            {
                var skinModifier = mesh.SceneMesh.MdfQueue.FindModifier <EngineNS.Graphics.Mesh.CGfxSkinModifier>();
                Pose = skinModifier.AnimationPose;
            }
            else
            {
                return(false);
            }
            return(await base.SetInitializer(rc, host, hostContainer, v));
        }
Ejemplo n.º 12
0
 public override async Task<bool> SetInitializer(CRenderContext rc, IEntity host, IComponentContainer hostContainer, GComponentInitializer v)
 {
     var result = await base.SetInitializer(rc, host, hostContainer, v);
     await Placement.SetInitializer(rc, host, null, CameraComponentInitializer.PlacementInitializer);
     Placement.PlaceableHost = this;
     ChangingControlStartety();
     if (result == false)
         return false;
     return true;
 }
Ejemplo n.º 13
0
        public override async System.Threading.Tasks.Task <bool> SetInitializer(CRenderContext rc, EngineNS.GamePlay.Actor.GActor host, GComponentInitializer v)
        {
            if (!await base.SetInitializer(rc, host, v))
            {
                return(false);
            }

            if (mLineMeshComponent == null)
            {
                await InitGraphLines();
            }

            if (mLineMeshComponent != null)
            {
                mLineMeshComponent.Host = host;

                Host.PlacementChange -= PlacementChange;
                Host.PlacementChange += PlacementChange;
                var mat = host.Placement.WorldMatrix;
                mLineMeshComponent.OnUpdateDrawMatrix(ref mat);
            }

            Initializer = v as NavLinkProxyComponentInitializer;

            Radius    = Initializer.Radius;
            Direction = Initializer.Direction;

            return(true);
        }
Ejemplo n.º 14
0
        public override async Task <bool> SetInitializer(CRenderContext rc, IEntity host, IComponentContainer hostContainer, GComponentInitializer v)
        {
            var result = await base.SetInitializer(rc, host, hostContainer, v);

            if (result == false)
            {
                return(false);
            }

            if (FCCInitializer != null)
            {
                UpLimitAngleInRad   = FCCInitializer.UpLimitAngleInRad;
                DownLimitAngleInRad = FCCInitializer.DownLimitAngleInRad;
            }
            return(true);
        }
        public override async Task <bool> SetInitializer(CRenderContext rc, GamePlay.IEntity host, IComponentContainer hostContainer, GComponentInitializer v)
        {
            await base.SetInitializer(rc, host, hostContainer, v);

            var actor = CreateCPhyActor(Host, hostContainer, v);
            var init  = v as GPhysicsCapsuleCollisionInitializer;

            mRadius     = init.Radius;
            mHalfHeight = init.HalfHeight;

            RefreshShape();
            return(true);
        }
Ejemplo n.º 16
0
        public override async Task <bool> SetInitializer(CRenderContext rc, GActor host, GComponentInitializer v)
        {
            if (await base.SetInitializer(rc, host, v) == false)
            {
                return(false);
            }

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

            meshCompInit.SpecialName = "VisualMesh";
            meshCompInit.MeshName    = RName.GetRName("editor/icon/icon_3D/mesh/play_start.gms", RName.enRNameType.Game);
            await mMeshComponent.SetInitializer(rc, Host, meshCompInit);

            //var mat = host.Placement.WorldMatrix;
            //mMeshComponent.OnUpdateDrawMatrix(ref mat);

            Initializer = v as AgentGeomBoxComponentInitializer;
            if (Initializer != null)
            {
                AgentGridSize = Initializer.AgentGridSize;
                StartPos      = Initializer.StartPos;
            }
            else
            {
                Initializer = new AgentGeomBoxComponentInitializer();
            }

            return(true);
        }
Ejemplo n.º 17
0
        public override async Task <bool> SetInitializer(CRenderContext rc, GamePlay.IEntity host, GamePlay.Component.IComponentContainer hostContainer, GComponentInitializer v)
        {
            if (await base.SetInitializer(rc, host, hostContainer, v) == false)
            {
                return(false);
            }

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

            meshCompInit.SpecialName = "VisualMesh";
            meshCompInit.MeshName    = CEngineDesc.PlayerStartMesh;
            await mMeshComponent.SetInitializer(rc, Host, Host, meshCompInit);

            //var mat = host.Placement.WorldMatrix;
            //mMeshComponent.OnUpdateDrawMatrix(ref mat);

            AgentGeomBoxInitializer = v as AgentGeomBoxComponentInitializer;
            if (AgentGeomBoxInitializer != null)
            {
                AgentGridSize = AgentGeomBoxInitializer.AgentGridSize;
                StartPos      = AgentGeomBoxInitializer.StartPos;
            }
            else
            {
                AgentGeomBoxInitializer = new AgentGeomBoxComponentInitializer();
            }

            return(true);
        }
Ejemplo n.º 18
0
        public override async Task <bool> SetInitializer(CRenderContext rc, GamePlay.IEntity host, IComponentContainer hostContainer, GComponentInitializer v)
        {
            await base.SetInitializer(rc, host, hostContainer, v);

            return(true);
        }
Ejemplo n.º 19
0
 public override async Task <bool> SetInitializer(CRenderContext rc, IEntity host, IComponentContainer hostContainer, GComponentInitializer v)
 {
     if (await base.SetInitializer(rc, host, hostContainer, v) == false)
     {
         return(false);
     }
     return(true);
 }
Ejemplo n.º 20
0
        public override async System.Threading.Tasks.Task <bool> SetInitializer(CRenderContext rc, IEntity host, IComponentContainer hostContainer, GComponentInitializer v)
        {
            if (rc == null)
            {
                rc = CEngine.Instance.RenderContext;
            }
            await base.SetInitializer(rc, host, hostContainer, v);

            var init = v as GSubSkinComponentInitializer;

            if (init == null)
            {
                return(false);
            }
            Visible           = init.Visible;
            init.HostMeshComp = this;
            EngineNS.Graphics.Mesh.CGfxMesh mesh;
            if (init.MeshName != null)
            {
                if (init.MeshName.Name.Equals("@createplane"))
                {
                    var meshpri = CEngine.Instance.MeshPrimitivesManager.CreateMeshPrimitives(rc, 1);
                    Graphics.Mesh.CGfxMeshCooker.MakeRect3D(rc, meshpri);
                    mesh = CEngine.Instance.MeshManager.CreateMesh(rc, meshpri);
                }
                else
                {
                    mesh = await CEngine.Instance.MeshManager.CreateMeshAsync(rc, init.MeshName);
                }

                await init.UpdateMtlInst();
            }
            else
            {
                var meshpri = CEngine.Instance.MeshPrimitivesManager.NewMeshPrimitives(rc, EngineNS.Graphics.Mesh.CGfxMeshCooker.CookBoxName, 1);
                Graphics.Mesh.CGfxMeshCooker.MakeBox(rc, meshpri, -0.5f, -0.5f, -0.5f, 1, 1, 1);
                mesh = CEngine.Instance.MeshManager.CreateMesh(rc, meshpri);
            }

            if (mesh != null)
            {
                SetSceneMesh(rc, mesh);

                if (init.MtlList != null)
                {
                    for (int i = 0; i < init.MtlList.Count; i++)
                    {
                        var mtl = init.MtlList[i];
                        if (mtl == null)
                        {
                            continue;
                        }
                        mtl.MeshComp = this;
                        if (mtl.Name == null)
                        {
                            continue;
                        }
                        var mtlInst = await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(rc, mtl.Name);

                        if (mtlInst == null)
                        {
                            continue;
                        }

                        //await this.SetMaterial(rc, (UInt32)i, mtlInst, null);
                        this.SetMaterialInstance(rc, (UInt32)i, mtlInst, null);
                    }
                }
            }
            else
            {
                Profiler.Log.WriteLine(Profiler.ELogTag.Warning, "IO", $"MeshComponent Init failed: {init.MeshName}");
            }
            if (init.SocketName != null)
            {
                SocketName = init.SocketName;
            }
            if (init.PlacementComponentInitializer != null)
            {
                await Placement.SetInitializer(rc, host, this, init.PlacementComponentInitializer);
            }
            return(true);
        }
Ejemplo n.º 21
0
 public override Task <bool> SetInitializer(CRenderContext rc, IEntity host, IComponentContainer hostContainer, GComponentInitializer v)
 {
     return(base.SetInitializer(rc, host, hostContainer, v));
 }
Ejemplo n.º 22
0
        //public override void Tick(GPlacementComponent placement)
        //{
        //    base.Tick(placement);
        //}

        public override async Task <bool> SetInitializer(CRenderContext rc, GamePlay.IEntity host, IComponentContainer hostContainer, GComponentInitializer v)
        {
            var init = v as GMeshComponentInitializer;

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

            if (ParticleModifier != null)
            {
                if (ParticleModifier.ParticleSys.IsBillBoard && ParticleModifier.ParticleSys.BillBoardType != CGfxParticleSystem.BILLBOARDTYPE.BILLBOARD_DISABLE)
                {
                    init.MeshName = RName.GetRName("@createplane");
                }
                else
                {
                    init.MeshName = ParticleModifier.ParticleSys.UseMeshRName;
                }
            }


            //设置默认值
            if (init.MeshName == null)
            {
                init.MeshName = RName.GetRName("ParticleResource/models/sphere.gms");
            }

            if (false == await base.SetInitializer(rc, host, hostContainer, v))
            {
                return(false);
            }

            Host = host as GActor;
            if (ParticleModifier != null && ParticleModifier.ParticleSys.UseMaterialRName != null)
            {
                if (mSceneMesh != null && mSceneMesh.MtlMeshArray != null)
                {
                    //await SetMaterialInstance(rc, 0, ParticleModifier.ParticleSys.UseMaterialRName, null);
                    var mtl = await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(rc, ParticleModifier.ParticleSys.UseMaterialRName);

                    base.SetMaterialInstance(rc, 0, mtl, null);
                }
            }

            if (ParticleModifier != null && this.SceneMesh != null)
            {
                this.SceneMesh.MdfQueue.AddModifier(ParticleModifier);
                this.AddDefaultColorBuff(rc, this.SceneMesh.MeshPrimitives);
            }
            return(true);
        }