Esempio n. 1
0
        public CollisionVector CollidesWith(Vector3D vector, Vector3D origin)
        {
            CollisionVector collisionVector = null;

            vector = Matrix3D.Invert(_transform.TransformationMatrix).Transform(vector);
            origin = Matrix3D.Invert(_transform.TransformationMatrix).TransformVector(origin);
            foreach (BaseUnit unit in _units)
            {
                collisionVector = unit.CollidesWith(vector, origin);
                if (collisionVector != null)
                {
                    return(new CollisionVector(collisionVector.Color,
                                               _transform.TransformationMatrix.Transform(collisionVector.Vector), collisionVector.Face));
                }
            }
            return(collisionVector);
        }
Esempio n. 2
0
        public CollisionVector CollidesWith(Vector3D vector, Vector3D origin)
        {
            vector = Vector3D.Normalize(vector);

            vector = Matrix3D.Invert(_transform.TransformationMatrix).Transform(vector);
            origin = Matrix3D.Invert(_transform.TransformationMatrix).TransformVector(origin);

            var  result      = VectorAABBIntersection(vector, origin);
            bool intersected = result.intersected;

            if (!intersected)
            {
                return(null);
            }

            //Collision found
            Vector3D collisionVector = result.collisionVector;

            collisionVector = _transform.TransformationMatrix.Transform(collisionVector);

            //Find collision face
            //0 - South
            //1 - East
            //2 - North
            //3 - West
            //4 - Up
            //5 - Down

            //TODO: Find face
            byte collisionFace = 0;


            CollisionVector collVector = new CollisionVector(_color, collisionVector, collisionFace);

            return(collVector);
        }