增加Rect抽象矩形类
This commit is contained in:
parent
d8ea376ceb
commit
0d066e131a
|
|
@ -41,4 +41,9 @@ e2d::Point::operator e2d::Size() const
|
|||
e2d::Point e2d::Point::operator-() const
|
||||
{
|
||||
return Point(-x, -y);
|
||||
}
|
||||
}
|
||||
|
||||
bool e2d::Point::operator==(const Point & point) const
|
||||
{
|
||||
return (x == point.x) && (y == point.y);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,59 @@
|
|||
#include "..\e2dcommon.h"
|
||||
|
||||
e2d::Rect::Rect(void)
|
||||
{
|
||||
setRect(0.0, 0.0, 0.0, 0.0);
|
||||
}
|
||||
|
||||
e2d::Rect::Rect(double x, double y, double width, double height)
|
||||
{
|
||||
setRect(x, y, width, height);
|
||||
}
|
||||
|
||||
e2d::Rect::Rect(const Point& pos, const Size& size)
|
||||
{
|
||||
setRect(pos.x, pos.y, size.width, size.height);
|
||||
}
|
||||
|
||||
e2d::Rect::Rect(const Rect& other)
|
||||
{
|
||||
setRect(other.origin.x, other.origin.y, other.size.width, other.size.height);
|
||||
}
|
||||
|
||||
e2d::Rect& e2d::Rect::operator= (const Rect& other)
|
||||
{
|
||||
setRect(other.origin.x, other.origin.y, other.size.width, other.size.height);
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool e2d::Rect::operator==(const Rect & rect) const
|
||||
{
|
||||
return (origin == rect.origin) && (size == rect.size);
|
||||
}
|
||||
|
||||
void e2d::Rect::setRect(double x, double y, double width, double height)
|
||||
{
|
||||
origin.x = x;
|
||||
origin.y = y;
|
||||
|
||||
size.width = width;
|
||||
size.height = height;
|
||||
}
|
||||
|
||||
bool e2d::Rect::containsPoint(const Point& point) const
|
||||
{
|
||||
if (point.x >= origin.x && point.x <= (origin.y + size.height)
|
||||
&& point.y >= origin.y && point.y <= (origin.y + size.height))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::Rect::intersects(const Rect& rect) const
|
||||
{
|
||||
return !((origin.x + size.width) < rect.origin.x ||
|
||||
(rect.origin.x + rect.size.width) < origin.x ||
|
||||
(origin.y + size.height) < rect.origin.y ||
|
||||
(rect.origin.y + rect.size.height) < origin.y);
|
||||
}
|
||||
|
|
@ -40,4 +40,9 @@ e2d::Size::operator e2d::Point() const
|
|||
e2d::Size e2d::Size::operator-() const
|
||||
{
|
||||
return Size(-width, -height);
|
||||
}
|
||||
}
|
||||
|
||||
bool e2d::Size::operator==(const Size & size) const
|
||||
{
|
||||
return (width == size.width) && (height == size.height);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ e2d::String & e2d::String::operator=(const String &str)
|
|||
return (*this);
|
||||
}
|
||||
|
||||
bool e2d::String::operator==(const wchar_t *str)
|
||||
bool e2d::String::operator==(const wchar_t *str) const
|
||||
{
|
||||
if (str)
|
||||
{
|
||||
|
|
@ -141,7 +141,7 @@ bool e2d::String::operator==(const wchar_t *str)
|
|||
}
|
||||
}
|
||||
|
||||
bool e2d::String::operator==(const char *str)
|
||||
bool e2d::String::operator==(const char *str) const
|
||||
{
|
||||
if (str)
|
||||
{
|
||||
|
|
@ -154,12 +154,12 @@ bool e2d::String::operator==(const char *str)
|
|||
}
|
||||
}
|
||||
|
||||
bool e2d::String::operator ==(const e2d::String &str)
|
||||
bool e2d::String::operator ==(const e2d::String &str) const
|
||||
{
|
||||
return _str == str._str;
|
||||
}
|
||||
|
||||
bool e2d::String::operator!=(const wchar_t *str)
|
||||
bool e2d::String::operator!=(const wchar_t *str) const
|
||||
{
|
||||
if (str)
|
||||
{
|
||||
|
|
@ -171,7 +171,7 @@ bool e2d::String::operator!=(const wchar_t *str)
|
|||
}
|
||||
}
|
||||
|
||||
bool e2d::String::operator!=(const char *str)
|
||||
bool e2d::String::operator!=(const char *str) const
|
||||
{
|
||||
if (str)
|
||||
{
|
||||
|
|
@ -184,7 +184,7 @@ bool e2d::String::operator!=(const char *str)
|
|||
}
|
||||
}
|
||||
|
||||
bool e2d::String::operator!=(const e2d::String &str)
|
||||
bool e2d::String::operator!=(const e2d::String &str) const
|
||||
{
|
||||
return _str != str._str;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -188,7 +188,7 @@ void e2d::Button::_fixedUpdate()
|
|||
{
|
||||
// 鼠标左键抬起时,判断鼠标坐标是否在按钮内部
|
||||
if (_isSelected &&
|
||||
_normal->isPointIn(Input::getMousePos()))
|
||||
_normal->containsPoint(Input::getMousePos()))
|
||||
{
|
||||
_runCallback();
|
||||
}
|
||||
|
|
@ -198,7 +198,7 @@ void e2d::Button::_fixedUpdate()
|
|||
|
||||
if (Input::isPress(Input::Mouse::LEFT))
|
||||
{
|
||||
if (_normal->isPointIn(Input::getMousePos()))
|
||||
if (_normal->containsPoint(Input::getMousePos()))
|
||||
{
|
||||
// 鼠标左键按下,且位于按钮内时,标记 _isSelected 为 true
|
||||
_isSelected = true;
|
||||
|
|
@ -208,14 +208,14 @@ void e2d::Button::_fixedUpdate()
|
|||
|
||||
if (_isSelected && Input::isDown(Input::Mouse::LEFT))
|
||||
{
|
||||
if (_normal->isPointIn(Input::getMousePos()))
|
||||
if (_normal->containsPoint(Input::getMousePos()))
|
||||
{
|
||||
_setState(ButtonState::SELECTED);
|
||||
Window::setCursor(Window::Cursor::HAND);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (_normal->isPointIn(Input::getMousePos()))
|
||||
else if (_normal->containsPoint(Input::getMousePos()))
|
||||
{
|
||||
_setState(ButtonState::MOUSEOVER);
|
||||
Window::setCursor(Window::Cursor::HAND);
|
||||
|
|
@ -225,7 +225,7 @@ void e2d::Button::_fixedUpdate()
|
|||
_setState(ButtonState::NORMAL);
|
||||
}
|
||||
|
||||
if (_visiable && !_enable && _normal && _normal->isPointIn(Input::getMousePos()))
|
||||
if (_visiable && !_enable && _normal && _normal->containsPoint(Input::getMousePos()))
|
||||
{
|
||||
Window::setCursor(Window::Cursor::NO);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -825,7 +825,7 @@ e2d::Action * e2d::Node::getAction(const String& name)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
bool e2d::Node::isPointIn(Point point) const
|
||||
bool e2d::Node::containsPoint(const Point& point) const
|
||||
{
|
||||
BOOL ret = 0;
|
||||
// 如果存在碰撞体,用碰撞体判断
|
||||
|
|
@ -867,7 +867,7 @@ bool e2d::Node::isPointIn(Point point) const
|
|||
return false;
|
||||
}
|
||||
|
||||
bool e2d::Node::isOverlappedWith(const Node * node) const
|
||||
bool e2d::Node::intersects(Node * node) const
|
||||
{
|
||||
// 如果存在碰撞体,用碰撞体判断
|
||||
if (this->_collider && node->_collider)
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ enum class LineJoin : int
|
|||
ROUND = 2 /* 圆角 */
|
||||
};
|
||||
|
||||
|
||||
class Size;
|
||||
|
||||
// 坐标
|
||||
|
|
@ -37,18 +38,21 @@ public:
|
|||
|
||||
Point(double x, double y);
|
||||
|
||||
Point operator + (Point const & p) const;
|
||||
Point operator - (Point const & p) const;
|
||||
Point operator * (double const & value) const;
|
||||
Point operator / (double const & value) const;
|
||||
Point operator + (Point const & point) const;
|
||||
Point operator - (Point const & point) const;
|
||||
Point operator * (double const & point) const;
|
||||
Point operator / (double const & point) const;
|
||||
Point operator - () const;
|
||||
bool operator== (const Point& point) const;
|
||||
|
||||
operator e2d::Size() const;
|
||||
};
|
||||
|
||||
|
||||
// 二维向量
|
||||
typedef Point Vector;
|
||||
|
||||
|
||||
// 大小
|
||||
class Size
|
||||
{
|
||||
|
|
@ -63,14 +67,69 @@ public:
|
|||
|
||||
Size operator + (Size const & size) const;
|
||||
Size operator - (Size const & size) const;
|
||||
Size operator * (double const & value) const;
|
||||
Size operator / (double const & value) const;
|
||||
Size operator * (double const & size) const;
|
||||
Size operator / (double const & size) const;
|
||||
Size operator - () const;
|
||||
bool operator== (const Size& size) const;
|
||||
|
||||
operator e2d::Point() const;
|
||||
};
|
||||
|
||||
|
||||
// 矩形
|
||||
class Rect
|
||||
{
|
||||
public:
|
||||
Point origin; // 原点坐标
|
||||
Size size; // 宽度和高度
|
||||
|
||||
public:
|
||||
Rect();
|
||||
|
||||
Rect(
|
||||
double x,
|
||||
double y,
|
||||
double width,
|
||||
double height
|
||||
);
|
||||
|
||||
Rect(
|
||||
const Point& pos,
|
||||
const Size& size
|
||||
);
|
||||
|
||||
Rect(
|
||||
const Rect& other
|
||||
);
|
||||
|
||||
Rect& operator= (
|
||||
const Rect& other
|
||||
);
|
||||
|
||||
bool operator== (
|
||||
const Rect& rect
|
||||
) const;
|
||||
|
||||
// 设置矩形
|
||||
void setRect(
|
||||
double x,
|
||||
double y,
|
||||
double width,
|
||||
double height
|
||||
);
|
||||
|
||||
// 判断点是否在矩形内
|
||||
bool containsPoint(
|
||||
const Point& point
|
||||
) const;
|
||||
|
||||
// 判断两矩形是否相交
|
||||
bool intersects(
|
||||
const Rect& rect
|
||||
) const;
|
||||
};
|
||||
|
||||
|
||||
// 字符串
|
||||
class String
|
||||
{
|
||||
|
|
@ -186,12 +245,12 @@ public:
|
|||
operator wchar_t* () const;
|
||||
|
||||
// 比较运算符
|
||||
bool operator== (const String &);
|
||||
bool operator== (const char *);
|
||||
bool operator== (const wchar_t *);
|
||||
bool operator!= (const String &);
|
||||
bool operator!= (const char *);
|
||||
bool operator!= (const wchar_t *);
|
||||
bool operator== (const String &) const;
|
||||
bool operator== (const char *) const;
|
||||
bool operator== (const wchar_t *) const;
|
||||
bool operator!= (const String &) const;
|
||||
bool operator!= (const char *) const;
|
||||
bool operator!= (const wchar_t *) const;
|
||||
bool operator> (const String &) const;
|
||||
bool operator>= (const String &) const;
|
||||
bool operator< (const String &) const;
|
||||
|
|
|
|||
|
|
@ -52,13 +52,13 @@ public:
|
|||
virtual bool isVisiable() const;
|
||||
|
||||
// 判断点是否在节点内
|
||||
virtual bool isPointIn(
|
||||
Point point
|
||||
virtual bool containsPoint(
|
||||
const Point& point
|
||||
) const;
|
||||
|
||||
// 判断两节点是否重叠
|
||||
virtual bool isOverlappedWith(
|
||||
const Node * node
|
||||
// 判断两物体是否相交
|
||||
virtual bool intersects(
|
||||
Node * node
|
||||
) const;
|
||||
|
||||
// 获取节点名称
|
||||
|
|
|
|||
|
|
@ -231,6 +231,7 @@
|
|||
<ClCompile Include="..\..\core\Common\Function.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Object.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Point.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Rect.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Scene.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Size.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\String.cpp" />
|
||||
|
|
|
|||
|
|
@ -234,6 +234,9 @@
|
|||
<ClCompile Include="..\..\core\Node\ToggleButton.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Common\Rect.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\core\easy2d.h" />
|
||||
|
|
|
|||
Loading…
Reference in New Issue