private void MoveBodyToGameObject() { m_gameObject.ForceUpdateAbsTransformation(); Vector3 absRotate = CatMath.MatrixToEulerAngleVector3(m_gameObject.AbsTransform); m_body.SetTransform(new Vector2(m_gameObject.AbsPosition.X, m_gameObject.AbsPosition.Y), absRotate.Z); }
public override bool IsBodyInLightRange(Vector2[] _vertices, Matrix _transform) { if (!m_isLightOn) { return(false); } return(CatMath.IsConvexIntersect(m_verticeList.ToArray(), Matrix.CreateTranslation(new Vector3(m_offset.X, m_offset.Y, 0.0f)) * m_gameObject.AbsTransform, _vertices, _transform)); }
bool ISelectable.IsSelected(float cameraX, float cameraY) { // TODO: make it validate for 3D world // 1) transform to world coordinate, resulting in a ray. // 2) test collision between ray and triangle Camera camera = Mgr <Camera> .Singleton; Vector3 nearPoint = camera.CameraToWorld(new Vector3(cameraX, cameraY, 0.0f)); Vector3 farPoint = camera.CameraToWorld(new Vector3(cameraX, cameraY, 0.9f)); Vector3 direction = farPoint - nearPoint; Vector4 p0 = Vector4.Transform(new Vector4(-m_size.X / 2.0f + m_offset.X, m_size.Y / 2.0f + m_offset.Y, 0.0f, 1.0f), m_gameObject.AbsTransform); Vector4 p1 = Vector4.Transform(new Vector4(-m_size.X / 2.0f + m_offset.X, -m_size.Y / 2.0f + m_offset.Y, 0.0f, 1.0f), m_gameObject.AbsTransform); Vector4 p2 = Vector4.Transform(new Vector4(m_size.X / 2.0f + m_offset.X, m_size.Y / 2.0f + m_offset.Y, 0.0f, 1.0f), m_gameObject.AbsTransform); Vector4 p3 = Vector4.Transform(new Vector4(m_size.X / 2.0f + m_offset.X, -m_size.Y / 2.0f + m_offset.Y, 0.0f, 1.0f), m_gameObject.AbsTransform); Vector3 p0v3 = new Vector3(p0.X, p0.Y, p0.Z); Vector3 p1v3 = new Vector3(p1.X, p1.Y, p1.Z); Vector3 p2v3 = new Vector3(p2.X, p2.Y, p2.Z); Vector3 p3v3 = new Vector3(p3.X, p3.Y, p3.Z); float u, v, t; if (CatMath.IntersectTriangle(nearPoint, direction, p0v3, p1v3, p2v3, out t, out u, out v) == true) { return(true); } if (CatMath.IntersectTriangle(nearPoint, direction, p2v3, p1v3, p3v3, out t, out u, out v) == true) { return(true); } return(false); }
public override bool IsBodyInLightRange(Vector2[] _vertices, Matrix _transform) { return CatMath.IsConvexIntersect(m_verticeList.ToArray(), m_gameObject.AbsTransform, _vertices, _transform); }