コード例 #1
0
        public static async System.Threading.Tasks.Task <GamePlay.Actor.GActor> CreateParticleActor2(
            [Editor.Editor_RNameType(Editor.Editor_RNameTypeAttribute.Mesh)] RName gmsName,
            [Editor.Editor_RNameMacrossType(typeof(EngineNS.Bricks.Particle.McParticleEffector))] RName macross,
            bool IdentityDrawTransform)
        {
            var rc = CEngine.Instance.RenderContext;
            // ParticleActor
            var actor = new GamePlay.Actor.GActor();

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

            actor.Placement = placement;

            var particleComp = new Bricks.Particle.GParticleComponent();
            var particleInit = new Bricks.Particle.GParticleComponent.GParticleComponentInitializer();

            particleInit.MeshName    = gmsName;
            particleInit.MacrossName = macross;
            await particleComp.SetInitializer(rc, actor, actor, particleInit);

            particleComp.IsIdentityDrawTransform = true;

            actor.AddComponent(particleComp);

            return(actor);
        }
コード例 #2
0
ファイル: GraphLines.cs プロジェクト: huangdonghai/titan3d
        public async System.Threading.Tasks.Task <bool> Init(Graphics.CGfxMaterialInstance material, float halfWidth = 0.1F)
        {
            var rc = CEngine.Instance.RenderContext;

            Material = material;
            GeomMesh = new Graphics.Mesh.CGfxMeshPrimitives();
            GeomMesh.Init(rc, null, 1);
            CDrawPrimitiveDesc dpDesc = new CDrawPrimitiveDesc();

            dpDesc.SetDefault();
            dpDesc.StartIndex = 0xFFFFFFFF;
            GeomMesh.PushAtomLOD(0, ref dpDesc);

            var Mesh = new Graphics.Mesh.CGfxMesh();

            Mesh.Init(rc, null, GeomMesh);
            var img = new Graphics.Mesh.CGfxImage2D();

            Mesh.Tag = img;

            UpdateGeomMesh(rc, halfWidth);

            GraphActor = GamePlay.Actor.GActor.NewMeshActorDirect(Mesh);
            var meshComp = GraphActor.GetComponent <GamePlay.Component.GMeshComponent>();
            await meshComp.SetMaterialInstanceAsync(rc, 0, material, null);

            //await meshComp.SetMaterial(rc, 0, material, CEngine.Instance.PrebuildPassData.Image2DShadingEnvs, false, true);
            return(true);
        }
コード例 #3
0
        public void AddMeshInstance(GamePlay.Actor.GActor actor,
                                    [Editor.Editor_RNameType(Editor.Editor_RNameTypeAttribute.MeshCluster)]
                                    RName clusterName)
        {
            var mesh = actor.GetComponentMesh();

            if (mesh != null)
            {
                AddMeshInstance(CEngine.Instance.RenderContext, mesh, clusterName, actor.Placement);
            }
        }
コード例 #4
0
        public static bool AddActor2Scene(GamePlay.GGameInstance game, GamePlay.Actor.GActor actor, Guid sceneId)
        {
            GamePlay.SceneGraph.GSceneGraph scene = null;
            if (sceneId == Guid.Empty)
            {
                sceneId = game.World.DefaultScene.SceneId;
            }

            scene = game.World.GetScene(sceneId);
            if (scene == null)
            {
                return(false);
            }
            game.World.AddActor(actor);
            scene.AddActor(actor);
            return(true);
        }
コード例 #5
0
        public void UpdateActor(GamePlay.Actor.GActor actor)
        {
            var pointComp = actor.GetComponent <PointActorComponent>();

            if (pointComp != null)
            {
                UpdatePointComponent(pointComp);
            }
            else
            {
                var boxComp = actor.GetComponent <BoxActorComponent>();
                if (boxComp != null)
                {
                    UpdateBoxComponent(boxComp);
                }
            }
        }
コード例 #6
0
ファイル: CNavMesh.cs プロジェクト: huangdonghai/titan3d
        public static async System.Threading.Tasks.Task <GActor> NewNavMeshActorAsync(Bricks.RecastRuntime.CNavMesh navMesh)
        {
            var rc    = CEngine.Instance.RenderContext;
            var actor = new GamePlay.Actor.GActor();

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

            actor.Placement = placement;
            var navComp = new Bricks.RecastRuntime.CNavMeshComponent();
            var init    = new Bricks.RecastRuntime.CNavMeshComponent.CNavMeshComponentInitializer();

            navComp.NavMesh = navMesh;
            await navComp.SetInitializer(rc, actor, actor, init);

            actor.AddComponent(navComp);

            return(actor);
        }
コード例 #7
0
ファイル: GGameInstance.cs プロジェクト: huangdonghai/titan3d
        public bool AddActorBySceneName(GamePlay.Actor.GActor actor,
                                        [Editor.Editor_RNameType(Editor.Editor_RNameTypeAttribute.Scene)]
                                        RName sceneName = null)
        {
            var scene = mWorld.DefaultScene;

            if (sceneName != null && sceneName.Name != "")
            {
                scene = mWorld.GetScene(sceneName);
            }

            if (scene == null)
            {
                return(false);
            }
            scene.AddActor(actor);
            mWorld.AddActor(actor);
            return(true);
        }
コード例 #8
0
        public async System.Threading.Tasks.Task CreateRenderInfos(GamePlay.GWorld world)
        {
            //EngineNS.Bricks.GraphDrawer.GraphLines
            AgentBoxs ab = AgentDatas[0];

            Agent.GeoBox[]        ap    = ab.AgentData.ToArray();
            GamePlay.Actor.GActor actor = new GamePlay.Actor.GActor();
            //创建包围盒的每个点
            for (int i = 0; i < ap.Length; i++)
            {
                EngineNS.Bricks.GraphDrawer.GraphLines graph = new EngineNS.Bricks.GraphDrawer.GraphLines();
                var  boxgen  = new EngineNS.Bricks.GraphDrawer.McBoxGen();
                bool allface = ap[i].FaceType == face;
                boxgen.Interval = allface ? 0.05f : 0.1f;
                boxgen.Segement = allface ? 1.0f : 0.2f;

                Vector4 outv4;
                Vector3.Transform(ref ap[i].Box.Maximum, ref ab.Mat, out outv4);
                ap[i].Box.Maximum = new Vector3(outv4.X, outv4.Y, outv4.Z);
                Vector3.Transform(ref ap[i].Box.Minimum, ref ab.Mat, out outv4);
                ap[i].Box.Minimum = new Vector3(outv4.X, outv4.Y, outv4.Z);
                boxgen.SetBoundBox(ap[i].Box);

                graph.LinesGen = boxgen;
                var mtl = await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(
                    CEngine.Instance.RenderContext,
                    //蓝线就是六个面都通了
                    RName.GetRName(allface ? "editor/icon/icon_3D/material/physical_model.instmtl" : "editor/volume/mi_volume_octree.instmtl"));//rotator

                var init = await graph.Init(mtl, 0.0f);

                graph.GraphActor.Placement.Location = Vector3.Zero;
                graph.GraphActor.SpecialName        = ActorName;
                //world.AddActor(graph.GraphActor);
                //world.DefaultScene.AddActor(graph.GraphActor);
                actor.Children.Add(graph.GraphActor);
            }

            actor.SpecialName = "NavLineDebuger";
            world.AddActor(actor);
            world.DefaultScene.AddActor(actor);
        }
コード例 #9
0
ファイル: CPhyShape.cs プロジェクト: huangdonghai/titan3d
        public async System.Threading.Tasks.Task CreateDefaultSphere()
        {
            mDebugActor = await EngineNS.GamePlay.Actor.GActor.NewMeshActorAsync(RName.GetRName("editor/basemesh/sphere.gms"));

            EngineNS.Thread.Async.TaskLoader.Release(ref WaitContext, null);
        }
コード例 #10
0
ファイル: CPhyShape.cs プロジェクト: huangdonghai/titan3d
        public void OnEditorCommitVisual(CCommandList cmd, Graphics.CGfxCamera camera, GamePlay.Actor.GActor hostactor, GamePlay.SceneGraph.CheckVisibleParam param)
        {
            if (hostactor == null || !hostactor.Visible)
            {
                return;
            }

            var rc = CEngine.Instance.RenderContext;

            switch (ShapeType)
            {
            case EPhysShapeType.PST_Convex:
            {
                if (mDebugActor == null)
                {
                    Graphics.Mesh.CGfxMeshPrimitives mp = IfGetConvexMesh(rc);
                    mDebugActor = EngineNS.GamePlay.Actor.GActor.NewMeshActorDirect(CEngine.Instance.MeshManager.CreateMesh(rc, mp));
                    EngineNS.Thread.Async.TaskLoader.Release(ref WaitContext, null);
                    var test = SetMaterial();
                }
                mDebugActor.Placement.SetMatrix(ref hostactor.Placement.mDrawTransform);
            }
            break;

            case EPhysShapeType.PST_TriangleMesh:
            {
                if (mDebugActor == null)
                {
                    Graphics.Mesh.CGfxMeshPrimitives mp = IfGetTriMesh(rc);
                    CEngine.Instance.MeshManager.CreateMesh(rc, mp);
                    EngineNS.Thread.Async.TaskLoader.Release(ref WaitContext, null);
                    mDebugActor = EngineNS.GamePlay.Actor.GActor.NewMeshActorDirect(CEngine.Instance.MeshManager.CreateMesh(rc, mp));

                    var test = SetMaterial();
                }
                mDebugActor.Placement.SetMatrix(ref hostactor.Placement.mDrawTransform);
            }
            break;

            case EPhysShapeType.PST_Box:
            {
                if (mDebugActor == null && mReady == false)
                {
                    mReady = true;
                    var test = CreateDefaultBox();

                    test = SetMaterial();
                }

                if (mDebugActor != null)
                {
                    float w = 1.0f;
                    float h = 1.0f;
                    float l = 1.0f;
                    SDK_PhyShape_IfGetBox(ref w, ref h, ref l);
                    mDebugActor.Placement.SetMatrix(ref hostactor.Placement.mDrawTransform);
                    Vector3 scale = Vector3.UnitXYZ;        //mDebugActor.Placement.Scale;
                    scale.SetValue(scale.X * w, scale.Y * h, scale.Z * l);
                    mDebugActor.Placement.Scale = scale;
                }
            }
            break;

            case EPhysShapeType.PST_Sphere:
            {
                if (mDebugActor == null && mReady == false)
                {
                    mReady = true;
                    var test = CreateDefaultSphere();
                    test = SetMaterial();
                }

                if (mDebugActor != null)
                {
                    float r = 1.0f;
                    IfGetSphere(ref r);
                    mDebugActor.Placement.SetMatrix(ref hostactor.Placement.mDrawTransform);
                    Vector3 scale = Vector3.UnitXYZ;        //mDebugActor.Placement.Scale;
                    scale.SetValue(scale.X * r, scale.Y * r, scale.Z * r);
                    mDebugActor.Placement.Scale = scale;
                }
            }
            break;

            default:
                break;
            }

            if (mDebugActor != null)
            {
                foreach (var comp in mDebugActor.Components)
                {
                    var meshComp = comp as EngineNS.GamePlay.Component.GVisualComponent;
                    if (meshComp != null)
                    {
                        meshComp.CommitVisual(cmd, camera, param);
                    }
                }
            }
        }
コード例 #11
0
 public virtual void OnTriggerOut(GComponent overlapedComponent, GamePlay.Actor.GActor otherActor, GComponent otherComponent)
 {
 }
コード例 #12
0
ファイル: TouchDevice.cs プロジェクト: huangdonghai/titan3d
            public static TouchInputEventArgs CreateTouchInputEventArgsFromeScreenXY(
                GamePlay.Actor.GActor showActor,
                float showWidth,
                float showHeight,
                float hitLength,
                enTouchState State,
                int x,
                int y,
                int FingerIdx,
                float DeltaX,
                float DeltaY)
            {
                if (showActor.Scene == null)
                {
                    return(null);
                }
                if (CEngine.Instance.GameInstance == null)
                {
                    return(null);
                }
                var hitResult = new GamePlay.SceneGraph.VHitResult(Bricks.PhysicsCore.PhyHitFlag.eDEFAULT);

                if (showActor.Scene.PickActor(out hitResult, CEngine.Instance.GameInstance.GameCamera, x, y, hitLength) != showActor)
                {
                    return(null);
                }
                var triMeshComp = showActor.GetComponent <Bricks.PhysicsCore.CollisionComponent.GPhysicsMeshCollision>();

                if (triMeshComp == null)
                {
                    return(null);
                }
                var triMesh = triMeshComp.HostShape.TriGeom;

                if (triMesh == null)
                {
                    return(null);
                }
                if (hitResult.FaceId == -1)
                {
                    return(null);
                }

                if (triMeshComp.HostShape == null)
                {
                    return(null);
                }

                int faceid = triMeshComp.HostShape.GetTrianglesRemap(hitResult.FaceId);

                if (faceid == -1)
                {
                    return(null);
                }

                triMesh.GetUV(faceid, hitResult.U, hitResult.V, out ResultUV);
                var pos = triMesh.GetPos(faceid, hitResult.U, hitResult.V);

                pos = Vector3.TransformCoordinate(pos, showActor.Placement.DrawTransform);
                //以后要改成pool模式
                var result = new TouchInputEventArgs();

                result.TouchEvent.State     = State;
                result.TouchEvent.PosX      = ResultUV.X * showWidth;
                result.TouchEvent.PosY      = ResultUV.Y * showHeight;
                result.TouchEvent.FingerIdx = FingerIdx;
                result.TouchEvent.DeltaX    = DeltaX;
                result.TouchEvent.DeltaY    = DeltaY;
                return(result);
            }