//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)); } } }
//物理反馈的数据不精确 待优化 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)); }
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)); } } }
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)); } } }
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)); } } }
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)); } } }
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)); } } }
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); }