public bool HitTestArea(UpdateState state, Rectangle area, bool cache)
{
if (!Visible) { return false; }
var globalLeft = 0.0f;
var globalTop = 0.0f;
var globalRight = 0.0f;
var globalBottom = 0.0f;
if (_HitTestCache.ContainsKey(area))
{
var positions = _HitTestCache[area];
globalLeft = positions.X;
globalTop = positions.Y;
globalRight = positions.Z;
globalBottom = positions.W;
}
else
{
var globalPosition = LocalRect(area.X, area.Y, area.Width, area.Height);
if (cache)
{
globalLeft = globalPosition.X;
globalTop = globalPosition.Y;
globalRight = globalPosition.Right;
globalBottom = globalPosition.Bottom;
_HitTestCache.Add(area, new Vector4(globalPosition.X, globalPosition.Y, globalPosition.Right, globalPosition.Bottom));
}
}
var mx = state.MouseState.X;
var my = state.MouseState.Y;
if (mx >= globalLeft && mx <= globalRight &&
my >= globalTop && my <= globalBottom)
{
return true;
}
return false;
}