package collision

import "git.kirsle.net/go/render"

// GetBoundingRect computes the full pairs of points for the bounding box of
// the actor.
//
// The X,Y coordinates are the position in the level of the actor,
// The W,H are the size of the actor's drawn box.
func GetBoundingRect(a Actor) render.Rect {
	var (
		P = a.Position()
		S = a.Size()
	)
	return render.Rect{
		X: P.X,
		Y: P.Y,
		W: S.W,
		H: S.H,
	}
}

// GetBoundingRectHitbox returns the bounding rect of the Actor taking into
// account their self-declared collision hitbox.
//
// The rect returned has the X,Y coordinate set to the actor's position, plus
// the X,Y of their hitbox, if any.
//
// The W,H of the rect is the W,H of their declared hitbox.
//
// If the actor has NOT declared its hitbox, this function returns exactly the
// same way as GetBoundingRect() does.
func GetBoundingRectHitbox(a Actor, hitbox render.Rect) render.Rect {
	rect := GetBoundingRect(a)
	if !hitbox.IsZero() {
		rect.X += hitbox.X
		rect.Y += hitbox.Y
		rect.W = hitbox.W
		rect.H = hitbox.H
	}
	return rect
}

// SizePlusHitbox adjusts an actor's canvas Size() to better fit the
// declared Hitbox by the actor's script.
func SizePlusHitbox(size render.Rect, hitbox render.Rect) render.Rect {
	size.X += hitbox.X
	size.Y += hitbox.Y
	size.W -= size.W - hitbox.W
	size.H -= size.H - hitbox.H
	return size
}
