public static bool BoundingBoxTest(SFML.Graphics.Sprite Object1, SFML.Graphics.Shape Object2) { OrientedBoundingBox OBB1 = new OrientedBoundingBox(Object1); OrientedBoundingBox OBB2 = new OrientedBoundingBox(Object2); return(BoundingBoxTest(OBB1, OBB2)); }
public static bool CircleTest(SFML.Graphics.Sprite Object1, SFML.Graphics.Shape Object2) { SFML.Window.Vector2f Obj1Size = GetSpriteSize(Object1); SFML.Window.Vector2f Obj2Size = GetSpriteSize(Object2); float Radius1 = (Obj1Size.X + Obj1Size.Y) / 4.0f; float Radius2 = (Obj2Size.X + Obj2Size.Y) / 4.0f; SFML.Window.Vector2f Distance = GetSpriteCenter(Object1) - GetSpriteCenter(Object2); return(Distance.X * Distance.X + Distance.Y * Distance.Y <= (Radius1 + Radius2) * (Radius1 + Radius2)); }
public OrientedBoundingBox(SFML.Graphics.Shape Object) // Calculate the four points of the OBB from a transformed (scaled, rotated...) sprite { Points = new SFML.Window.Vector2f[4]; SFML.Graphics.Transform trans = Object.Transform; Points[0] = trans.TransformPoint(0.0f, 0.0f); Points[1] = trans.TransformPoint(Object.GetLocalBounds().Width, 0.0f); Points[2] = trans.TransformPoint(Object.GetLocalBounds().Width, Object.GetLocalBounds().Height); Points[3] = trans.TransformPoint(0.0f, Object.GetLocalBounds().Height); }
private static SFML.Window.Vector2f GetSpriteSize(SFML.Graphics.Shape Object) { SFML.Graphics.IntRect OriginalSize = Object.TextureRect; SFML.Window.Vector2f Scale = Object.Scale; return(new SFML.Window.Vector2f(OriginalSize.Width * Scale.X, OriginalSize.Height * Scale.Y)); }
private static SFML.Window.Vector2f GetSpriteCenter(SFML.Graphics.Shape Object) { SFML.Graphics.FloatRect AABB = Object.GetGlobalBounds(); return(new SFML.Window.Vector2f(AABB.Left + AABB.Width / 2.0f, AABB.Top + AABB.Height / 2.0f)); }