예제 #1
0
        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);
        }
예제 #2
0
 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));
 }
예제 #3
0
        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);
        }
예제 #4
0
 public override bool IsBodyInLightRange(Vector2[] _vertices, Matrix _transform) {
     return CatMath.IsConvexIntersect(m_verticeList.ToArray(), m_gameObject.AbsTransform,
         _vertices, _transform);
 }