bool SphereToSphereCollision(Entity firstEntity, ComponentColliderSphere firstCollider, Entity secondEntity, ComponentColliderSphere secondCollider) { if ((secondEntity.Transform.Position - firstEntity.Transform.Position).Length <= firstCollider.Size + secondCollider.Size) { return(true); } return(false); }
bool SphereToCubeCollision(Entity sphereEntity, ComponentColliderSphere sphereCollider, Entity cubeEntity, ComponentColliderCube cubeCollider) { var closestPointToCube = sphereEntity.Transform.Position + (sphereEntity.Transform.Position - cubeEntity.Transform.Position).Normalized() * sphereCollider.Size; var OldClosestPointToCube = sphereEntity.Transform.OldPosition + (sphereEntity.Transform.OldPosition - cubeEntity.Transform.Position).Normalized() * sphereCollider.Size; var normalMov = closestPointToCube - OldClosestPointToCube; normalMov.Normalize(); var movementNormal = Vector3.Cross(normalMov, new Vector3(0, 1, 0)); var rightSide = cubeEntity.Transform.Position + cubeEntity.Transform.Right * (cubeCollider.Size.X); var leftSide = cubeEntity.Transform.Position + (-cubeEntity.Transform.Right) * (cubeCollider.Size.X); if (SegmentToSegmentIntersection(OldClosestPointToCube, closestPointToCube, movementNormal, rightSide + cubeEntity.Transform.Forward * (cubeCollider.Size.Z), leftSide + cubeEntity.Transform.Forward * (cubeCollider.Size.Z), cubeEntity.Transform.Forward)) { return(true); } if (SegmentToSegmentIntersection(OldClosestPointToCube, closestPointToCube, movementNormal, rightSide + -cubeEntity.Transform.Forward * (cubeCollider.Size.Z), leftSide + -cubeEntity.Transform.Forward * (cubeCollider.Size.Z), -cubeEntity.Transform.Forward)) { return(true); } var forwardSide = cubeEntity.Transform.Position + cubeEntity.Transform.Forward * (cubeCollider.Size.Z); var backwardSide = cubeEntity.Transform.Position + (-cubeEntity.Transform.Forward) * (cubeCollider.Size.Z); if (SegmentToSegmentIntersection(OldClosestPointToCube, closestPointToCube, movementNormal, forwardSide + cubeEntity.Transform.Right * (cubeCollider.Size.X), backwardSide + cubeEntity.Transform.Right * (cubeCollider.Size.X), cubeEntity.Transform.Right)) { return(true); } if (SegmentToSegmentIntersection(OldClosestPointToCube, closestPointToCube, movementNormal, forwardSide + -cubeEntity.Transform.Right * (cubeCollider.Size.X), backwardSide + -cubeEntity.Transform.Right * (cubeCollider.Size.X), -cubeEntity.Transform.Right)) { return(true); } return(false); }