public bool CollisionDetection(CollidingAdvancedSprite CAS)
 {
     CollisionUtils.CreateCollidingSpriteTransformMatrix(CAS);
     CollisionUtils.CreateCollidingSpriteTransformMatrix(this);
     if (Rotation == 0 || Rotation == Math.PI)
     {
         if (Intersects(CAS))
         {
             CollisionUtils.CreateCollidingSpriteTransformMatrix(CAS);
             CollisionUtils.CreateCollidingSpriteTransformMatrix(this);
             CollisionUtils.GetColColors(this);
             CollisionUtils.GetColColors(CAS);
             return(CollisionUtils.IntersectPixels(this.TransformMatrix * Matrix.CreateTranslation(new Vector3(this.currentAnim.ColCorrection, 0f)), this.ColBoundingBox.Width, this.ColBoundingBox.Height, Colors, this.IgnoreTranslucentCol, CAS.TransformMatrix * Matrix.CreateTranslation(new Vector3(CAS.currentAnim.ColCorrection, 0f)), CAS.ColBoundingBox.Width, CAS.ColBoundingBox.Height, CAS.Colors, CAS.IgnoreTranslucentCol));
         }
     }
     else
     {
         CollisionUtils.CreateCollidingSpriteTransformMatrix(CAS);
         CollisionUtils.CreateCollidingSpriteTransformMatrix(this);
         colltemp = CollisionUtils.CalculateBoundingRectangle(tempdrawrect, _transformMatrix);
         if (colltemp.Intersects(CollisionUtils.CalculateBoundingRectangle(CAS.tempdrawrect, CAS._transformMatrix)))
         {
             CollisionUtils.GetColColors(this);
             CollisionUtils.GetColColors(CAS);
             return(CollisionUtils.IntersectPixels(this.TransformMatrix * Matrix.CreateTranslation(new Vector3(this.currentAnim.ColCorrection, 0f)), this.ColBoundingBox.Width, this.ColBoundingBox.Height, Colors, this.IgnoreTranslucentCol, CAS.TransformMatrix * Matrix.CreateTranslation(new Vector3(CAS.currentAnim.ColCorrection, 0f)), CAS.ColBoundingBox.Width, CAS.ColBoundingBox.Height, CAS.Colors, CAS.IgnoreTranslucentCol));
         }
     }
     return(false);
 }
Exemplo n.º 2
0
 /// <summary>
 /// Get the colors from the sprite map for perpixel collision
 /// </summary>
 /// <param name="CAS">the sprite</param>
 /// <param name="SpriteSheet">the sprite sheet</param>
 /// <returns></returns>
 public static Color[] GetColors(CollidingAdvancedSprite CAS)
 {
     CAS.Colors = new Color[(int)CAS.CurrentAnim.SpriteSize.X * (int)CAS.CurrentAnim.SpriteSize.Y];
     CAS.Tex.GetData <Color>(0, CAS.sourcerect, CAS.Colors, 0, (int)CAS.CurrentAnim.SpriteSize.X * (int)CAS.CurrentAnim.SpriteSize.Y);
     return(CAS.Colors);
 }
Exemplo n.º 3
0
 /// <summary>
 /// Create the transformation Matrix for the colliding sprite
 /// </summary>
 /// <param name="CAS">The Sprite</param>
 public static void CreateCollidingSpriteTransformMatrix(CollidingAdvancedSprite CAS)
 {
     CAS._transformMatrix = Matrix.CreateTranslation(new Vector3(CAS.RotationOrigin, 0f)) * Matrix.CreateScale(new Vector3(CAS.Scale, 0f)) * Matrix.CreateRotationZ(CAS.Rotation) * Matrix.CreateTranslation(new Vector3(-CAS.RotationOrigin * CAS.Scale, 0));
 }
Exemplo n.º 4
0
 /// <summary>
 /// Get the colors from the Collision map for perpixel collision
 /// </summary>
 /// <param name="CAS">the sprite</param>
 /// <param name="SpriteSheet">the sprite sheet</param>
 /// <returns></returns>
 public static void GetColColors(CollidingAdvancedSprite CAS)
 {
     CAS.Colors = new Color[(int)CAS.CurrentAnim.ColSize.X * (int)CAS.CurrentAnim.ColSize.Y];
     CAS.Tex.GetData <Color>(0, CAS.CollisionTextureLoc, CAS.Colors, 0, (int)CAS.CurrentAnim.ColSize.X * (int)CAS.CurrentAnim.ColSize.Y);
 }