private bool isPixelsCollided(IPixelsCollidable i_Source) { bool isPixelsCollided = false; int top = Math.Max(Bounds.Top, i_Source.Bounds.Top); int bottom = Math.Min(Bounds.Bottom, i_Source.Bounds.Bottom); int left = Math.Max(Bounds.Left, i_Source.Bounds.Left); int right = Math.Min(Bounds.Right, i_Source.Bounds.Right); this.m_LastCollisionRectangle = new Rectangle(left, top, right - left, bottom - top); (i_Source as CollidableSprite).m_LastCollisionRectangle = new Rectangle(top, left, right - left, top - bottom); for (int y = top; y < bottom; y++) { for (int x = left; x < right; x++) { Color pixelA = this.Pixels[(x - this.Bounds.Left) + ((y - this.Bounds.Top) * this.Bounds.Width)]; Color pixelB = i_Source.Pixels[(x - i_Source.Bounds.Left) + ((y - i_Source.Bounds.Top) * i_Source.Bounds.Width)]; if (pixelA.A != 0 && pixelB.A != 0) { ///keep colliding pixels data this.m_CollidedPixelsPositions.Add(new Vector2(x, y)); (i_Source as CollidableSprite).LastCollisionPixelsPositions.Add(new Vector2(x, y)); this.m_CollidedPixelsIndex.Add(new Vector2(x - this.Bounds.Left, y - this.Bounds.Top)); (i_Source as CollidableSprite).LastCollisionPixelsIndex.Add(new Vector2(x - i_Source.Bounds.Left, y - i_Source.Bounds.Top)); isPixelsCollided = true; } } } return(isPixelsCollided); }
private bool checkPixelsCollision(ICollidable i_Source) { bool pixelsCollided = false; bool rectanglesCollided = false; IPixelsCollidable source = i_Source as IPixelsCollidable; if (source != null) { rectanglesCollided = source.Bounds.Intersects(this.Bounds); } if (rectanglesCollided) { pixelsCollided = this.isPixelsCollided(i_Source as IPixelsCollidable); } return(pixelsCollided); }
private bool checkRectangleCollision(ICollidable i_Source) { { bool collided = false; IPixelsCollidable source = i_Source as IPixelsCollidable; if (source != null) { collided = source.Bounds.Intersects(this.Bounds); } if (collided) { collided = true; } return(collided); } }