Esempio n. 1
0
 //public bool Overlap(ref BoundingBox box, ref GamePlay.SceneGraph.VHitResult hitResult)
 //{
 //    unsafe
 //    {
 //        fixed (BoundingBox* pbox = &box)
 //        fixed (GamePlay.SceneGraph.VHitResult* phitResult = &hitResult)
 //        {
 //            return SDK_PhyScene_Overlap(CoreObject, pbox, phitResult);
 //        }
 //    }
 //}
 public bool Overlap(CPhyShape shape, Vector3 postion, Quaternion rotation, ref GamePlay.SceneGraph.VHitResult hitResult)
 {
     unsafe
     {
         fixed(GamePlay.SceneGraph.VHitResult *phitResult = &hitResult)
         {
             return(SDK_PhyScene_Overlap(CoreObject, shape.CoreObject, &postion, &rotation, phitResult));
         }
     }
 }
Esempio n. 2
0
        //物理反馈的数据不精确 待优化
        private bool CheckBoxInPhy(GamePlay.GWorld world, ref BoundingBox box, ref Vector3 pos, ref Quaternion rotation)//float dis, float offset
        {
            GamePlay.SceneGraph.GSceneGraph DefaultScene = world.DefaultScene;
            Bricks.PhysicsCore.CPhyScene    PhyScene     = DefaultScene.PhyScene;
            var shape = CEngine.Instance.PhyContext.CreateShapeBox(PhysicsCore.CPhyMaterial.DefaultPhyMaterial, box.GetSize().X, box.GetSize().Y, box.GetSize().Z);

            GamePlay.SceneGraph.VHitResult result = new GamePlay.SceneGraph.VHitResult();

            Matrix mat1 = Matrix.Transformation(Vector3.UnitXYZ, Quaternion.Identity, box.GetCenter());
            Matrix mat2 = Matrix.Transformation(Vector3.UnitXYZ, rotation, pos);
            Matrix mat3 = mat1 * mat2;

            Vector3    scale;
            Vector3    position;
            Quaternion rot;

            mat3.Decompose(out scale, out rot, out position);
            return(PhyScene.Overlap(shape, position, rot, ref result));
        }
Esempio n. 3
0
 public bool OverlapWithFilter(CPhyShape shape, Vector3 postion, Quaternion rotation, ref PhyQueryFilterData queryFilterData, ref GamePlay.SceneGraph.VHitResult hitResult)
 {
     unsafe
     {
         fixed(PhyQueryFilterData *pqueryFilterData = &queryFilterData)
         fixed(GamePlay.SceneGraph.VHitResult * phitResult = &hitResult)
         {
             return(SDK_PhyScene_OverlapWithFilter(CoreObject, shape.CoreObject, &postion, &rotation, pqueryFilterData, phitResult));
         }
     }
 }
Esempio n. 4
0
 public bool SweepWithFilter(CPhyShape shape, Vector3 position, Vector3 unitDir, float maxDistance, ref PhyQueryFilterData queryFilterData, ref GamePlay.SceneGraph.VHitResult hitResult)
 {
     unsafe
     {
         fixed(PhyQueryFilterData *pqueryFilterData = &queryFilterData)
         fixed(GamePlay.SceneGraph.VHitResult * phitResult = &hitResult)
         {
             return(SDK_PhyScene_SweepWithFilter(CoreObject, shape.CoreObject, &position, &unitDir, maxDistance, pqueryFilterData, phitResult));
         }
     }
 }
Esempio n. 5
0
 public bool Sweep(CPhyShape shape, Vector3 position, Vector3 unitDir, float maxDistance, ref GamePlay.SceneGraph.VHitResult hitResult)
 {
     unsafe
     {
         fixed(GamePlay.SceneGraph.VHitResult *phitResult = &hitResult)
         {
             return(SDK_PhyScene_Sweep(CoreObject, shape.CoreObject, &position, &unitDir, maxDistance, phitResult));
         }
     }
 }
Esempio n. 6
0
 public bool RaycastWithFilter(ref Vector3 origin, ref Vector3 unitDir, float maxDistance, ref PhyQueryFilterData queryFilterData, ref GamePlay.SceneGraph.VHitResult hitResult)
 {
     unsafe
     {
         fixed(Vector3 *porigin = &origin)
         fixed(Vector3 * punitDir = &unitDir)
         fixed(PhyQueryFilterData * pqueryFilterData       = &queryFilterData)
         fixed(GamePlay.SceneGraph.VHitResult * phitResult = &hitResult)
         {
             return(SDK_PhyScene_RaycastWithFilter(CoreObject, porigin, punitDir, maxDistance, pqueryFilterData, phitResult));
         }
     }
 }
Esempio n. 7
0
 public bool Raycast(ref Vector3 origin, ref Vector3 unitDir, float maxDistance, ref GamePlay.SceneGraph.VHitResult hitResult)
 {
     unsafe
     {
         fixed(Vector3 *porigin = &origin)
         fixed(Vector3 * punitDir = &unitDir)
         fixed(GamePlay.SceneGraph.VHitResult * phitResult = &hitResult)
         {
             return(SDK_PhyScene_Raycast(CoreObject, porigin, punitDir, maxDistance, phitResult));
         }
     }
 }
Esempio n. 8
0
            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);
            }