namespace BP
{
	class Rect
	{
		float minX;
		float minY;
		float maxX;
		float maxY;
		float width;
		float height;
		//------------------------------------------------------------------------------------------------------------------------
		Rect()
		{
		}
		//------------------------------------------------------------------------------------------------------------------------
		Rect(const float x, const float y, const float width, const float height)
		{
			minX = x - width;
			minY = y - height;
			maxX = x + width;
			maxY = y + height;
			this.width = width;
			this.height = height;
		}
		//------------------------------------------------------------------------------------------------------------------------
		void SetSize(const float width, const float height)
		{
			kVec3 center = Center();
			minX = center.x - width;
			minY = center.z - height;
			maxX = center.x + width;
			maxY = center.z + height;
			this.width = width;
			this.height = height;
		}
		//------------------------------------------------------------------------------------------------------------------------
		kStr ToString()
		{
			return "minX: " + minX + " minY: " + minY + " maxX: " + maxX + " maxY: " + maxY + " width: " + width + " height: " + height;
		}
		//------------------------------------------------------------------------------------------------------------------------
		// Rect(const float mx, const float my, const float max, const float may)
		// {
			// minX = mx;
			// minY = my;
			// maxX = max;
			// maxY = may;
			// width = (maxX - minX) * 0.5f;
			// height = (maxY - minY) * 0.5f;
		// }
		//------------------------------------------------------------------------------------------------------------------------
		bool opEquals(const Rect &in other)
		{
			return minX == other.minX && minY == other.minY && maxX == other.maxX && maxY == other.maxY;
		}
		//------------------------------------------------------------------------------------------------------------------------
		Rect@ opAssign(const Rect &in other)
		{
			minX = other.minX;
			minY = other.minY;
			maxX = other.maxX;
			maxY = other.maxY;
			width = other.width;
			height = other.height;
			
			return this;
		}
		//------------------------------------------------------------------------------------------------------------------------
		kVec3 Center()
		{
			return kVec3(minX + width, 0.0f, minY + height);
			// return kVec3((maxX - minX) * 0.5f, 0.0f, (maxY - minY) * 0.5f);
		}
		//------------------------------------------------------------------------------------------------------------------------
		bool ContainsPoint(const kVec3 &in point)
		{
			return (point.x >= minX + (width / 2.0f) && point.x <= maxX - (width / 2.0f) && point.z >= minY && point.z <= maxY);
		}
		//------------------------------------------------------------------------------------------------------------------------
		// bool ContainsPoint(const kVec3 &in point)
		// {
			// return (point.x >= minX && point.x <= maxX && point.z >= minY && point.z <= maxY);
		// }
		//------------------------------------------------------------------------------------------------------------------------
	};
}
