parent
349ddedb3c
commit
02ccbff4eb
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
|
|
||||||
e2d::Action::Action()
|
e2d::Action::Action()
|
||||||
: m_bRunning(false)
|
: m_bRunning(false)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
|
|
||||||
e2d::ActionDelay::ActionDelay(double duration)
|
e2d::ActionDelay::ActionDelay(double duration)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
|
|
||||||
e2d::ActionFunc::ActionFunc(Function func) :
|
e2d::ActionFunc::ActionFunc(Function func) :
|
||||||
m_Callback(func)
|
m_Callback(func)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
|
|
||||||
e2d::ActionGradual::ActionGradual(double duration)
|
e2d::ActionGradual::ActionGradual(double duration)
|
||||||
: m_fRateOfProgress(0)
|
: m_fRateOfProgress(0)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
|
|
||||||
e2d::ActionLoop::ActionLoop(Action * action, int times /* = -1 */)
|
e2d::ActionLoop::ActionLoop(Action * action, int times /* = -1 */)
|
||||||
: m_pAction(action)
|
: m_pAction(action)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
|
|
||||||
|
|
||||||
e2d::ActionMoveBy::ActionMoveBy(double duration, Vector vector) :
|
e2d::ActionMoveBy::ActionMoveBy(double duration, Vector vector) :
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
|
|
||||||
e2d::ActionMoveTo::ActionMoveTo(double duration, Point pos) :
|
e2d::ActionMoveTo::ActionMoveTo(double duration, Point pos) :
|
||||||
ActionMoveBy(duration, Vector())
|
ActionMoveBy(duration, Vector())
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
|
|
||||||
|
|
||||||
e2d::ActionOpacityBy::ActionOpacityBy(double duration, double opacity) :
|
e2d::ActionOpacityBy::ActionOpacityBy(double duration, double opacity) :
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
|
|
||||||
|
|
||||||
e2d::ActionOpacityTo::ActionOpacityTo(double duration, double opacity) :
|
e2d::ActionOpacityTo::ActionOpacityTo(double duration, double opacity) :
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
|
|
||||||
|
|
||||||
e2d::ActionRotateBy::ActionRotateBy(double duration, double rotation) :
|
e2d::ActionRotateBy::ActionRotateBy(double duration, double rotation) :
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
|
|
||||||
|
|
||||||
e2d::ActionRotateTo::ActionRotateTo(double duration, double rotation) :
|
e2d::ActionRotateTo::ActionRotateTo(double duration, double rotation) :
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
|
|
||||||
|
|
||||||
e2d::ActionScaleBy::ActionScaleBy(double duration, double scale)
|
e2d::ActionScaleBy::ActionScaleBy(double duration, double scale)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
|
|
||||||
e2d::ActionScaleTo::ActionScaleTo(double duration, double scale)
|
e2d::ActionScaleTo::ActionScaleTo(double duration, double scale)
|
||||||
: ActionScaleBy(duration, 0, 0)
|
: ActionScaleBy(duration, 0, 0)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
|
|
||||||
e2d::ActionSequence::ActionSequence()
|
e2d::ActionSequence::ActionSequence()
|
||||||
: m_nActionIndex(0)
|
: m_nActionIndex(0)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
|
|
||||||
e2d::ActionTwo::ActionTwo(Action * pActionFirst, Action * pActionSecond, bool bAtSameTime/* = false*/)
|
e2d::ActionTwo::ActionTwo(Action * pActionFirst, Action * pActionSecond, bool bAtSameTime/* = false*/)
|
||||||
: m_pFirstAction(pActionFirst)
|
: m_pFirstAction(pActionFirst)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
|
|
||||||
e2d::Animation::Animation()
|
e2d::Animation::Animation()
|
||||||
: m_nFrameIndex(0)
|
: m_nFrameIndex(0)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\ebase.h"
|
#include "..\ebase.h"
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
|
|
||||||
|
|
||||||
// ¿ØÖÆÓÎÏ·ÖÕÖ¹
|
// ¿ØÖÆÓÎÏ·ÖÕÖ¹
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#include "..\ebase.h"
|
#include "..\ebase.h"
|
||||||
#include "..\etools.h"
|
#include "..\etool.h"
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
|
|
||||||
#pragma comment(lib, "dinput8.lib")
|
#pragma comment(lib, "dinput8.lib")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\ebase.h"
|
#include "..\ebase.h"
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
|
|
||||||
static ID2D1Factory * s_pDirect2dFactory = nullptr;
|
static ID2D1Factory * s_pDirect2dFactory = nullptr;
|
||||||
static ID2D1HwndRenderTarget * s_pRenderTarget = nullptr;
|
static ID2D1HwndRenderTarget * s_pRenderTarget = nullptr;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\ebase.h"
|
#include "..\ebase.h"
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
#include <imm.h>
|
#include <imm.h>
|
||||||
#pragma comment (lib ,"imm32.lib")
|
#pragma comment (lib ,"imm32.lib")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,109 @@
|
||||||
|
#include "..\ecollider.h"
|
||||||
|
#include "..\emanager.h"
|
||||||
|
#include "..\enode.h"
|
||||||
|
|
||||||
|
e2d::Collider::Collider()
|
||||||
|
: m_bIsVisiable(true)
|
||||||
|
, m_nColor(Color::RED)
|
||||||
|
, m_fOpacity(1)
|
||||||
|
, m_pParentNode(nullptr)
|
||||||
|
, m_pTransformedGeometry(nullptr)
|
||||||
|
, m_bEnable(true)
|
||||||
|
, m_bAutoResize(true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Collider::~Collider()
|
||||||
|
{
|
||||||
|
SafeReleaseInterface(&m_pTransformedGeometry);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Node * e2d::Collider::getParentNode() const
|
||||||
|
{
|
||||||
|
return m_pParentNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Collider::setEnable(bool bEnable)
|
||||||
|
{
|
||||||
|
m_bEnable = bEnable;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Collider::setVisiable(bool bVisiable)
|
||||||
|
{
|
||||||
|
m_bIsVisiable = bVisiable;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Collider::setColor(UINT32 color)
|
||||||
|
{
|
||||||
|
m_nColor = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Collider::setOpacity(double opacity)
|
||||||
|
{
|
||||||
|
m_fOpacity = min(max(static_cast<float>(opacity), 0), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Collider::setAutoResize(bool bEnable)
|
||||||
|
{
|
||||||
|
m_bAutoResize = bEnable;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Collider::_render()
|
||||||
|
{
|
||||||
|
if (m_pTransformedGeometry && m_bEnable)
|
||||||
|
{
|
||||||
|
ID2D1SolidColorBrush * pBrush = Renderer::getSolidColorBrush();
|
||||||
|
// 눼쉔뺌岬
|
||||||
|
Renderer::getRenderTarget()->CreateSolidColorBrush(
|
||||||
|
D2D1::ColorF(
|
||||||
|
m_nColor,
|
||||||
|
m_fOpacity),
|
||||||
|
&pBrush
|
||||||
|
);
|
||||||
|
// 삥齡섯부툭旒竟
|
||||||
|
Renderer::getRenderTarget()->DrawGeometry(m_pTransformedGeometry, pBrush);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int e2d::Collider::getRelationWith(Collider * pCollider) const
|
||||||
|
{
|
||||||
|
if (m_pTransformedGeometry && pCollider->m_pTransformedGeometry)
|
||||||
|
{
|
||||||
|
if (m_bEnable && pCollider->m_bEnable)
|
||||||
|
{
|
||||||
|
D2D1_GEOMETRY_RELATION relation;
|
||||||
|
|
||||||
|
m_pTransformedGeometry->CompareWithGeometry(
|
||||||
|
pCollider->m_pTransformedGeometry,
|
||||||
|
D2D1::Matrix3x2F::Identity(),
|
||||||
|
&relation
|
||||||
|
);
|
||||||
|
|
||||||
|
return relation;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Relation::UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Collider::_transform()
|
||||||
|
{
|
||||||
|
if (m_pParentNode && m_bEnable)
|
||||||
|
{
|
||||||
|
if (m_bAutoResize)
|
||||||
|
{
|
||||||
|
this->_resize();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 姦렴覩툭旒竟
|
||||||
|
SafeReleaseInterface(&m_pTransformedGeometry);
|
||||||
|
|
||||||
|
// 몽앴만쌘듐瘻뻣섯부暠近
|
||||||
|
Renderer::getID2D1Factory()->CreateTransformedGeometry(
|
||||||
|
getD2dGeometry(),
|
||||||
|
m_pParentNode->m_MatriFinal,
|
||||||
|
&m_pTransformedGeometry
|
||||||
|
);
|
||||||
|
|
||||||
|
ColliderManager::__updateCollider(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
#include "..\eshape.h"
|
#include "..\ecollider.h"
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
|
|
||||||
e2d::ShapeCircle::ShapeCircle()
|
e2d::ColliderCircle::ColliderCircle()
|
||||||
: m_pD2dCircle(nullptr)
|
: m_pD2dCircle(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::ShapeCircle::ShapeCircle(Point center, double radius)
|
e2d::ColliderCircle::ColliderCircle(Point center, double radius)
|
||||||
: m_pD2dCircle(nullptr)
|
: m_pD2dCircle(nullptr)
|
||||||
{
|
{
|
||||||
this->setCircle(center, radius);
|
this->setCircle(center, radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::ShapeCircle::ShapeCircle(Node * node)
|
e2d::ColliderCircle::ColliderCircle(Node * node)
|
||||||
: m_pD2dCircle(nullptr)
|
: m_pD2dCircle(nullptr)
|
||||||
{
|
{
|
||||||
double minSide = min(node->getRealWidth(), node->getRealHeight());
|
double minSide = min(node->getRealWidth(), node->getRealHeight());
|
||||||
|
|
@ -25,12 +25,12 @@ e2d::ShapeCircle::ShapeCircle(Node * node)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::ShapeCircle::~ShapeCircle()
|
e2d::ColliderCircle::~ColliderCircle()
|
||||||
{
|
{
|
||||||
SafeReleaseInterface(&m_pD2dCircle);
|
SafeReleaseInterface(&m_pD2dCircle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::ShapeCircle::setCircle(Point center, double radius)
|
void e2d::ColliderCircle::setCircle(Point center, double radius)
|
||||||
{
|
{
|
||||||
SafeReleaseInterface(&m_pD2dCircle);
|
SafeReleaseInterface(&m_pD2dCircle);
|
||||||
|
|
||||||
|
|
@ -45,7 +45,7 @@ void e2d::ShapeCircle::setCircle(Point center, double radius)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::ShapeCircle::_resize()
|
void e2d::ColliderCircle::_resize()
|
||||||
{
|
{
|
||||||
if (m_pParentNode && m_bEnable)
|
if (m_pParentNode && m_bEnable)
|
||||||
{
|
{
|
||||||
|
|
@ -60,7 +60,7 @@ void e2d::ShapeCircle::_resize()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ID2D1EllipseGeometry * e2d::ShapeCircle::getD2dGeometry() const
|
ID2D1EllipseGeometry * e2d::ColliderCircle::getD2dGeometry() const
|
||||||
{
|
{
|
||||||
return m_pD2dCircle;
|
return m_pD2dCircle;
|
||||||
}
|
}
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
#include "..\eshape.h"
|
#include "..\ecollider.h"
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
|
|
||||||
e2d::ShapeEllipse::ShapeEllipse()
|
e2d::ColliderEllipse::ColliderEllipse()
|
||||||
: m_pD2dEllipse(nullptr)
|
: m_pD2dEllipse(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::ShapeEllipse::ShapeEllipse(Point center, double radiusX, double radiusY)
|
e2d::ColliderEllipse::ColliderEllipse(Point center, double radiusX, double radiusY)
|
||||||
: m_pD2dEllipse(nullptr)
|
: m_pD2dEllipse(nullptr)
|
||||||
{
|
{
|
||||||
this->setEllipse(center, radiusX, radiusY);
|
this->setEllipse(center, radiusX, radiusY);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::ShapeEllipse::ShapeEllipse(Node * node)
|
e2d::ColliderEllipse::ColliderEllipse(Node * node)
|
||||||
: m_pD2dEllipse(nullptr)
|
: m_pD2dEllipse(nullptr)
|
||||||
{
|
{
|
||||||
this->setEllipse(
|
this->setEllipse(
|
||||||
|
|
@ -25,12 +25,12 @@ e2d::ShapeEllipse::ShapeEllipse(Node * node)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::ShapeEllipse::~ShapeEllipse()
|
e2d::ColliderEllipse::~ColliderEllipse()
|
||||||
{
|
{
|
||||||
SafeReleaseInterface(&m_pD2dEllipse);
|
SafeReleaseInterface(&m_pD2dEllipse);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::ShapeEllipse::setEllipse(Point center, double radiusX, double radiusY)
|
void e2d::ColliderEllipse::setEllipse(Point center, double radiusX, double radiusY)
|
||||||
{
|
{
|
||||||
SafeReleaseInterface(&m_pD2dEllipse);
|
SafeReleaseInterface(&m_pD2dEllipse);
|
||||||
|
|
||||||
|
|
@ -45,7 +45,7 @@ void e2d::ShapeEllipse::setEllipse(Point center, double radiusX, double radiusY)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::ShapeEllipse::_resize()
|
void e2d::ColliderEllipse::_resize()
|
||||||
{
|
{
|
||||||
if (m_pParentNode && m_bEnable)
|
if (m_pParentNode && m_bEnable)
|
||||||
{
|
{
|
||||||
|
|
@ -60,7 +60,7 @@ void e2d::ShapeEllipse::_resize()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ID2D1EllipseGeometry * e2d::ShapeEllipse::getD2dGeometry() const
|
ID2D1EllipseGeometry * e2d::ColliderEllipse::getD2dGeometry() const
|
||||||
{
|
{
|
||||||
return m_pD2dEllipse;
|
return m_pD2dEllipse;
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
#include "..\ecollider.h"
|
||||||
|
#include "..\enode.h"
|
||||||
|
|
||||||
|
e2d::ColliderRect::ColliderRect()
|
||||||
|
: m_pD2dRectangle(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::ColliderRect::ColliderRect(double x, double y, double width, double height)
|
||||||
|
: m_pD2dRectangle(nullptr)
|
||||||
|
{
|
||||||
|
this->setRect(x, y, x + width, y + height);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::ColliderRect::ColliderRect(Node * node)
|
||||||
|
: m_pD2dRectangle(nullptr)
|
||||||
|
{
|
||||||
|
this->setRect(0, 0, node->getRealWidth(), node->getRealHeight());
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::ColliderRect::~ColliderRect()
|
||||||
|
{
|
||||||
|
SafeReleaseInterface(&m_pD2dRectangle);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::ColliderRect::setRect(double left, double top, double right, double bottom)
|
||||||
|
{
|
||||||
|
SafeReleaseInterface(&m_pD2dRectangle);
|
||||||
|
|
||||||
|
Renderer::getID2D1Factory()->CreateRectangleGeometry(
|
||||||
|
D2D1::RectF(
|
||||||
|
static_cast<float>(left),
|
||||||
|
static_cast<float>(top),
|
||||||
|
static_cast<float>(right),
|
||||||
|
static_cast<float>(bottom)),
|
||||||
|
&m_pD2dRectangle
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::ColliderRect::_resize()
|
||||||
|
{
|
||||||
|
if (m_pParentNode && m_bEnable)
|
||||||
|
{
|
||||||
|
this->setRect( 0, 0, m_pParentNode->getRealWidth(), m_pParentNode->getRealHeight());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ID2D1RectangleGeometry * e2d::ColliderRect::getD2dGeometry() const
|
||||||
|
{
|
||||||
|
return m_pD2dRectangle;
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
|
|
||||||
e2d::Font::Font()
|
e2d::Font::Font()
|
||||||
: fontFamily("")
|
: fontFamily("")
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
static std::map<size_t, ID2D1Bitmap*> s_mBitmapsFromFile;
|
static std::map<size_t, ID2D1Bitmap*> s_mBitmapsFromFile;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\ebase.h"
|
#include "..\ebase.h"
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
|
|
||||||
e2d::Object::Object()
|
e2d::Object::Object()
|
||||||
: m_nRefCount(0)
|
: m_nRefCount(0)
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
#include "..\ebase.h"
|
#include "..\ebase.h"
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
|
|
||||||
e2d::Scene::Scene()
|
e2d::Scene::Scene()
|
||||||
: m_bWillSave(true)
|
: m_bWillSave(true)
|
||||||
, m_bAutoUpdate(true)
|
, m_bAutoUpdate(true)
|
||||||
, m_bSortNeeded(false)
|
, m_bSortNeeded(false)
|
||||||
, m_bShapeVisiable(false)
|
, m_bColliderVisiable(false)
|
||||||
, m_pRoot(new Node())
|
, m_pRoot(new Node())
|
||||||
{
|
{
|
||||||
m_pRoot->retain();
|
m_pRoot->retain();
|
||||||
|
|
@ -23,12 +23,12 @@ void e2d::Scene::_render()
|
||||||
{
|
{
|
||||||
m_pRoot->_render();
|
m_pRoot->_render();
|
||||||
|
|
||||||
if (m_bShapeVisiable)
|
if (m_bColliderVisiable)
|
||||||
{
|
{
|
||||||
// 恢复矩阵转换
|
// 恢复矩阵转换
|
||||||
Renderer::getRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity());
|
Renderer::getRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity());
|
||||||
// 绘制所有几何图形
|
// 绘制所有几何图形
|
||||||
m_pRoot->_drawShape();
|
m_pRoot->_drawCollider();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -73,7 +73,7 @@ e2d::Node * e2d::Scene::getRoot() const
|
||||||
return m_pRoot;
|
return m_pRoot;
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Scene::showOutline(bool visiable)
|
void e2d::Scene::showCollider(bool visiable)
|
||||||
{
|
{
|
||||||
m_bShapeVisiable = visiable;
|
m_bColliderVisiable = visiable;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,17 @@ e2d::String e2d::String::parse(int value)
|
||||||
return std::move(tmp);
|
return std::move(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
e2d::String e2d::String::parse(unsigned int value)
|
||||||
|
{
|
||||||
|
String tmp;
|
||||||
|
#if HIGHER_THAN_VS2010
|
||||||
|
tmp.m_str = std::to_wstring(value);
|
||||||
|
#else
|
||||||
|
tmp.m_str = std::to_wstring(static_cast<long long>(value));
|
||||||
|
#endif
|
||||||
|
return std::move(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
e2d::String e2d::String::parse(float value)
|
e2d::String e2d::String::parse(float value)
|
||||||
{
|
{
|
||||||
String tmp;
|
String tmp;
|
||||||
|
|
@ -303,6 +314,12 @@ e2d::String & e2d::String::operator<<(int value)
|
||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
e2d::String & e2d::String::operator<<(unsigned int value)
|
||||||
|
{
|
||||||
|
(*this) += String::parse(value);
|
||||||
|
return (*this);
|
||||||
|
}
|
||||||
|
|
||||||
e2d::String & e2d::String::operator<<(float value)
|
e2d::String & e2d::String::operator<<(float value)
|
||||||
{
|
{
|
||||||
(*this) += String::parse(value);
|
(*this) += String::parse(value);
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
|
|
||||||
static std::vector<e2d::Action*> s_vActions;
|
static std::vector<e2d::Action*> s_vActions;
|
||||||
static std::vector<e2d::Action*> s_vRunningActions;
|
static std::vector<e2d::Action*> s_vRunningActions;
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
#include "..\eshape.h"
|
#include "..\ecollider.h"
|
||||||
#include "..\etools.h"
|
#include "..\etool.h"
|
||||||
|
|
||||||
// 形状集合
|
// 碰撞体集合
|
||||||
static std::vector<e2d::ShapeBase*> s_vShapes;
|
static std::vector<e2d::Collider*> s_vColliders;
|
||||||
// 监听器容器
|
// 监听器容器
|
||||||
static std::vector<e2d::CollisionListener*> s_vListeners;
|
static std::vector<e2d::CollisionListener*> s_vListeners;
|
||||||
// 碰撞触发状态
|
// 碰撞触发状态
|
||||||
|
|
@ -14,12 +14,12 @@ static e2d::Node * s_pActiveNode = nullptr;
|
||||||
static e2d::Node * s_pPassiveNode = nullptr;
|
static e2d::Node * s_pPassiveNode = nullptr;
|
||||||
|
|
||||||
|
|
||||||
void e2d::CollisionManager::setEnable(bool bEnable)
|
void e2d::ColliderManager::setEnable(bool bEnable)
|
||||||
{
|
{
|
||||||
s_bCollisionEnable = bEnable;
|
s_bCollisionEnable = bEnable;
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::CollisionManager::__update()
|
void e2d::ColliderManager::__update()
|
||||||
{
|
{
|
||||||
if (s_vListeners.size() == 0)
|
if (s_vListeners.size() == 0)
|
||||||
return;
|
return;
|
||||||
|
|
@ -40,28 +40,28 @@ void e2d::CollisionManager::__update()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::CollisionManager::__updateShape(e2d::ShapeBase * pActiveShape)
|
void e2d::ColliderManager::__updateCollider(e2d::Collider * pActiveCollider)
|
||||||
{
|
{
|
||||||
// 判断碰撞触发是否打开
|
// 判断碰撞触发是否打开
|
||||||
if (!s_bCollisionEnable)
|
if (!s_bCollisionEnable)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Node* pActiveNode = pActiveShape->m_pParentNode;
|
Node* pActiveNode = pActiveCollider->m_pParentNode;
|
||||||
if (pActiveNode)
|
if (pActiveNode)
|
||||||
{
|
{
|
||||||
// 获取节点所在场景
|
// 获取节点所在场景
|
||||||
Scene* pCurrentScene = pActiveNode->getParentScene();
|
Scene* pCurrentScene = pActiveNode->getParentScene();
|
||||||
|
|
||||||
// 判断与其他形状的交集情况
|
// 判断与其他碰撞体的交集情况
|
||||||
for (size_t i = 0; i < s_vShapes.size(); i++)
|
for (size_t i = 0; i < s_vColliders.size(); i++)
|
||||||
{
|
{
|
||||||
auto pPassiveShape = s_vShapes[i];
|
auto pPassiveCollider = s_vColliders[i];
|
||||||
// 判断两个形状是否是同一个对象
|
// 判断两个碰撞体是否是同一个对象
|
||||||
if (pActiveShape == pPassiveShape)
|
if (pActiveCollider == pPassiveCollider)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// 获取被碰撞节点
|
// 获取被碰撞节点
|
||||||
Node* pPassiveNode = pPassiveShape->m_pParentNode;
|
Node* pPassiveNode = pPassiveCollider->m_pParentNode;
|
||||||
// 判断两节点是否处于同一场景中
|
// 判断两节点是否处于同一场景中
|
||||||
if (pPassiveNode &&
|
if (pPassiveNode &&
|
||||||
pPassiveNode->getParentScene() == pCurrentScene)
|
pPassiveNode->getParentScene() == pCurrentScene)
|
||||||
|
|
@ -77,8 +77,8 @@ void e2d::CollisionManager::__updateShape(e2d::ShapeBase * pActiveShape)
|
||||||
|
|
||||||
if (IsCollideWith(pActiveNode, pPassiveNode->getHashName()))
|
if (IsCollideWith(pActiveNode, pPassiveNode->getHashName()))
|
||||||
{
|
{
|
||||||
// 判断两形状交集情况
|
// 判断两碰撞体交集情况
|
||||||
int relation = pActiveShape->getRelationWith(pPassiveShape);
|
int relation = pActiveCollider->getRelationWith(pPassiveCollider);
|
||||||
// 忽略 UNKNOWN 和 DISJOINT 情况
|
// 忽略 UNKNOWN 和 DISJOINT 情况
|
||||||
if (relation != Relation::UNKNOWN && relation != Relation::DISJOINT)
|
if (relation != Relation::UNKNOWN && relation != Relation::DISJOINT)
|
||||||
{
|
{
|
||||||
|
|
@ -86,8 +86,8 @@ void e2d::CollisionManager::__updateShape(e2d::ShapeBase * pActiveShape)
|
||||||
s_pPassiveNode = pPassiveNode;
|
s_pPassiveNode = pPassiveNode;
|
||||||
pActiveNode->onCollide(pPassiveNode);
|
pActiveNode->onCollide(pPassiveNode);
|
||||||
pPassiveNode->onCollide(pActiveNode);
|
pPassiveNode->onCollide(pActiveNode);
|
||||||
pCurrentScene->onCollide();
|
pCurrentScene->onCollide(pActiveNode, pPassiveNode);
|
||||||
CollisionManager::__update();
|
ColliderManager::__update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -97,7 +97,7 @@ void e2d::CollisionManager::__updateShape(e2d::ShapeBase * pActiveShape)
|
||||||
s_pPassiveNode = nullptr;
|
s_pPassiveNode = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::CollisionManager::__add(CollisionListener * pListener)
|
void e2d::ColliderManager::__add(CollisionListener * pListener)
|
||||||
{
|
{
|
||||||
WARN_IF(pListener == nullptr, "CollisionListener NULL pointer exception!");
|
WARN_IF(pListener == nullptr, "CollisionListener NULL pointer exception!");
|
||||||
|
|
||||||
|
|
@ -126,12 +126,12 @@ void e2d::CollisionManager::__add(CollisionListener * pListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::CollisionManager::add(Function func, String name)
|
void e2d::ColliderManager::add(Function func, String name)
|
||||||
{
|
{
|
||||||
(new CollisionListener(func, name))->start();
|
(new CollisionListener(func, name))->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::CollisionManager::start(String name)
|
void e2d::ColliderManager::start(String name)
|
||||||
{
|
{
|
||||||
FOR_LOOP(pListener, s_vListeners)
|
FOR_LOOP(pListener, s_vListeners)
|
||||||
{
|
{
|
||||||
|
|
@ -142,7 +142,7 @@ void e2d::CollisionManager::start(String name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::CollisionManager::stop(String name)
|
void e2d::ColliderManager::stop(String name)
|
||||||
{
|
{
|
||||||
FOR_LOOP(pListener, s_vListeners)
|
FOR_LOOP(pListener, s_vListeners)
|
||||||
{
|
{
|
||||||
|
|
@ -153,7 +153,7 @@ void e2d::CollisionManager::stop(String name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::CollisionManager::clear(String name)
|
void e2d::ColliderManager::clear(String name)
|
||||||
{
|
{
|
||||||
FOR_LOOP(pListener, s_vListeners)
|
FOR_LOOP(pListener, s_vListeners)
|
||||||
{
|
{
|
||||||
|
|
@ -164,7 +164,7 @@ void e2d::CollisionManager::clear(String name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::CollisionManager::startAll()
|
void e2d::ColliderManager::startAll()
|
||||||
{
|
{
|
||||||
FOR_LOOP(pListener, s_vListeners)
|
FOR_LOOP(pListener, s_vListeners)
|
||||||
{
|
{
|
||||||
|
|
@ -172,7 +172,7 @@ void e2d::CollisionManager::startAll()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::CollisionManager::stopAll()
|
void e2d::ColliderManager::stopAll()
|
||||||
{
|
{
|
||||||
FOR_LOOP(pListener, s_vListeners)
|
FOR_LOOP(pListener, s_vListeners)
|
||||||
{
|
{
|
||||||
|
|
@ -180,7 +180,7 @@ void e2d::CollisionManager::stopAll()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::CollisionManager::clearAll()
|
void e2d::ColliderManager::clearAll()
|
||||||
{
|
{
|
||||||
FOR_LOOP(pListener, s_vListeners)
|
FOR_LOOP(pListener, s_vListeners)
|
||||||
{
|
{
|
||||||
|
|
@ -188,7 +188,7 @@ void e2d::CollisionManager::clearAll()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<e2d::CollisionListener*> e2d::CollisionManager::get(String name)
|
std::vector<e2d::CollisionListener*> e2d::ColliderManager::get(String name)
|
||||||
{
|
{
|
||||||
std::vector<CollisionListener*> vListeners;
|
std::vector<CollisionListener*> vListeners;
|
||||||
FOR_LOOP(pListener, s_vListeners)
|
FOR_LOOP(pListener, s_vListeners)
|
||||||
|
|
@ -201,12 +201,22 @@ std::vector<e2d::CollisionListener*> e2d::CollisionManager::get(String name)
|
||||||
return std::move(vListeners);
|
return std::move(vListeners);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<e2d::CollisionListener*> e2d::CollisionManager::getAll()
|
std::vector<e2d::CollisionListener*> e2d::ColliderManager::getAll()
|
||||||
{
|
{
|
||||||
return s_vListeners;
|
return s_vListeners;
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Node* e2d::CollisionManager::isCausedBy(Node * pNode)
|
e2d::Node * e2d::ColliderManager::getActiveNode()
|
||||||
|
{
|
||||||
|
return s_pActiveNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Node * e2d::ColliderManager::getPassiveNode()
|
||||||
|
{
|
||||||
|
return s_pPassiveNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Node* e2d::ColliderManager::isCausedBy(Node * pNode)
|
||||||
{
|
{
|
||||||
if (s_pActiveNode == pNode)
|
if (s_pActiveNode == pNode)
|
||||||
return s_pPassiveNode;
|
return s_pPassiveNode;
|
||||||
|
|
@ -215,7 +225,7 @@ e2d::Node* e2d::CollisionManager::isCausedBy(Node * pNode)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Node* e2d::CollisionManager::isCausedBy(String name)
|
e2d::Node* e2d::ColliderManager::isCausedBy(String name)
|
||||||
{
|
{
|
||||||
if (s_pActiveNode->getName() == name)
|
if (s_pActiveNode->getName() == name)
|
||||||
return s_pActiveNode;
|
return s_pActiveNode;
|
||||||
|
|
@ -224,30 +234,30 @@ e2d::Node* e2d::CollisionManager::isCausedBy(String name)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::CollisionManager::__addShape(ShapeBase * pShape)
|
void e2d::ColliderManager::__addCollider(Collider * pCollider)
|
||||||
{
|
{
|
||||||
if (pShape)
|
if (pCollider)
|
||||||
{
|
{
|
||||||
if (pShape->m_pParentNode)
|
if (pCollider->m_pParentNode)
|
||||||
{
|
{
|
||||||
WARN_IF(true, "CollisionManager::__add Failed! The shape is already added.");
|
WARN_IF(true, "ColliderManager::__add Failed! The shape is already added.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pShape->retain();
|
pCollider->retain();
|
||||||
s_vShapes.push_back(pShape);
|
s_vColliders.push_back(pCollider);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::CollisionManager::__removeShape(ShapeBase * pShape)
|
void e2d::ColliderManager::__removeCollider(Collider * pCollider)
|
||||||
{
|
{
|
||||||
if (pShape)
|
if (pCollider)
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < s_vShapes.size(); i++)
|
for (size_t i = 0; i < s_vColliders.size(); i++)
|
||||||
{
|
{
|
||||||
if (s_vShapes[i] == pShape)
|
if (s_vColliders[i] == pCollider)
|
||||||
{
|
{
|
||||||
SafeRelease(&pShape);
|
SafeRelease(&pCollider);
|
||||||
s_vShapes.erase(s_vShapes.begin() + i);
|
s_vColliders.erase(s_vColliders.begin() + i);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
#include "..\etools.h"
|
#include "..\etool.h"
|
||||||
|
|
||||||
// 监听器容器
|
// 监听器容器
|
||||||
static std::vector<e2d::InputListener*> s_vListeners;
|
static std::vector<e2d::InputListener*> s_vListeners;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
#include "..\etools.h"
|
#include "..\etool.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#if HIGHER_THAN_VS2010
|
#if HIGHER_THAN_VS2010
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
#include "..\ebase.h"
|
#include "..\ebase.h"
|
||||||
|
|
||||||
// ObjectManager 释放池的实现机制:
|
// ObjectManager 释放池的实现机制:
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
#include "..\ebase.h"
|
#include "..\ebase.h"
|
||||||
#include "..\etransitions.h"
|
#include "..\etransition.h"
|
||||||
|
|
||||||
static e2d::Scene * s_pCurrentScene = nullptr;
|
static e2d::Scene * s_pCurrentScene = nullptr;
|
||||||
static e2d::Scene * s_pNextScene = nullptr;
|
static e2d::Scene * s_pNextScene = nullptr;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
#include "..\etools.h"
|
#include "..\etool.h"
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
|
|
||||||
static std::vector<e2d::Timer*> s_vTimers;
|
static std::vector<e2d::Timer*> s_vTimers;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
|
|
||||||
#define SAFE_SETTER(pointer, func, ...) if (pointer) { pointer->##func(__VA_ARGS__); }
|
#define SAFE_SETTER(pointer, func, ...) if (pointer) { pointer->##func(__VA_ARGS__); }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
|
|
||||||
e2d::ButtonToggle::ButtonToggle()
|
e2d::ButtonToggle::ButtonToggle()
|
||||||
: Button()
|
: Button()
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,22 @@
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
|
|
||||||
e2d::Menu::Menu()
|
e2d::Menu::Menu()
|
||||||
: m_bEnable(true)
|
: m_bEnable(true)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if HIGHER_THAN_VS2012
|
||||||
|
e2d::Menu::Menu(const InitList<Button*>& vButtons)
|
||||||
|
: m_bEnable(true)
|
||||||
|
{
|
||||||
|
FOR_LOOP(button, vButtons)
|
||||||
|
{
|
||||||
|
this->addButton(button);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
e2d::Menu::Menu(int number, Button * button1, ...)
|
e2d::Menu::Menu(int number, Button * button1, ...)
|
||||||
: m_bEnable(true)
|
: m_bEnable(true)
|
||||||
{
|
{
|
||||||
|
|
@ -17,6 +29,7 @@ e2d::Menu::Menu(int number, Button * button1, ...)
|
||||||
number--;
|
number--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool e2d::Menu::isEnable() const
|
bool e2d::Menu::isEnable() const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
#include "..\etools.h"
|
#include "..\etool.h"
|
||||||
#include "..\eactions.h"
|
#include "..\eaction.h"
|
||||||
#include "..\eshape.h"
|
#include "..\ecollider.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
// 默认中心点位置
|
// 默认中心点位置
|
||||||
static float s_fDefaultPiovtX = 0;
|
static float s_fDefaultPiovtX = 0;
|
||||||
static float s_fDefaultPiovtY = 0;
|
static float s_fDefaultPiovtY = 0;
|
||||||
static bool s_fDefaultShapeEnabled = true;
|
static bool s_fDefaultColliderEnabled = true;
|
||||||
|
|
||||||
e2d::Node::Node()
|
e2d::Node::Node()
|
||||||
: m_nOrder(0)
|
: m_nOrder(0)
|
||||||
|
|
@ -29,7 +29,7 @@ e2d::Node::Node()
|
||||||
, m_MatriFinal(D2D1::Matrix3x2F::Identity())
|
, m_MatriFinal(D2D1::Matrix3x2F::Identity())
|
||||||
, m_bVisiable(true)
|
, m_bVisiable(true)
|
||||||
, m_bDisplayedInScene(false)
|
, m_bDisplayedInScene(false)
|
||||||
, m_pShape(nullptr)
|
, m_pCollider(nullptr)
|
||||||
, m_pParent(nullptr)
|
, m_pParent(nullptr)
|
||||||
, m_pParentScene(nullptr)
|
, m_pParentScene(nullptr)
|
||||||
, m_nHashName(0)
|
, m_nHashName(0)
|
||||||
|
|
@ -37,17 +37,17 @@ e2d::Node::Node()
|
||||||
, m_bTransformNeeded(false)
|
, m_bTransformNeeded(false)
|
||||||
, m_bAutoUpdate(true)
|
, m_bAutoUpdate(true)
|
||||||
{
|
{
|
||||||
if (s_fDefaultShapeEnabled)
|
if (s_fDefaultColliderEnabled)
|
||||||
{
|
{
|
||||||
auto rect = new ShapeRectangle(this);
|
auto rect = new ColliderRect(this);
|
||||||
this->setShape(rect);
|
this->setCollider(rect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Node::~Node()
|
e2d::Node::~Node()
|
||||||
{
|
{
|
||||||
ActionManager::__clearAllBindedWith(this);
|
ActionManager::__clearAllBindedWith(this);
|
||||||
CollisionManager::__removeShape(m_pShape);
|
ColliderManager::__removeCollider(m_pCollider);
|
||||||
FOR_LOOP(child, m_vChildren)
|
FOR_LOOP(child, m_vChildren)
|
||||||
{
|
{
|
||||||
SafeRelease(&child);
|
SafeRelease(&child);
|
||||||
|
|
@ -165,18 +165,18 @@ void e2d::Node::_render()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Node::_drawShape()
|
void e2d::Node::_drawCollider()
|
||||||
{
|
{
|
||||||
// 绘制自身的几何形状
|
// 绘制自身的几何碰撞体
|
||||||
if (m_pShape && m_pShape->m_bIsVisiable)
|
if (m_pCollider && m_pCollider->m_bIsVisiable)
|
||||||
{
|
{
|
||||||
m_pShape->_render();
|
m_pCollider->_render();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 绘制所有子节点的几何形状
|
// 绘制所有子节点的几何碰撞体
|
||||||
FOR_LOOP(child, m_vChildren)
|
FOR_LOOP(child, m_vChildren)
|
||||||
{
|
{
|
||||||
child->_drawShape();
|
child->_drawCollider();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -250,10 +250,10 @@ void e2d::Node::_updateTransform(Node * node)
|
||||||
{
|
{
|
||||||
// 计算自身的转换矩阵
|
// 计算自身的转换矩阵
|
||||||
node->_updateTransform();
|
node->_updateTransform();
|
||||||
// 绑定于自身的形状也进行相应转换
|
// 绑定于自身的碰撞体也进行相应转换
|
||||||
if (node->m_pShape)
|
if (node->m_pCollider)
|
||||||
{
|
{
|
||||||
node->m_pShape->_transform();
|
node->m_pCollider->_transform();
|
||||||
}
|
}
|
||||||
// 遍历子节点下的所有节点
|
// 遍历子节点下的所有节点
|
||||||
node->_updateChildrenTransform();
|
node->_updateChildrenTransform();
|
||||||
|
|
@ -378,9 +378,9 @@ double e2d::Node::getOpacity() const
|
||||||
return m_fRealOpacity;
|
return m_fRealOpacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::ShapeBase * e2d::Node::getShape() const
|
e2d::Collider * e2d::Node::getCollider() const
|
||||||
{
|
{
|
||||||
return m_pShape;
|
return m_pCollider;
|
||||||
}
|
}
|
||||||
|
|
||||||
int e2d::Node::getOrder() const
|
int e2d::Node::getOrder() const
|
||||||
|
|
@ -547,28 +547,28 @@ void e2d::Node::setSize(Size size)
|
||||||
this->setSize(size.width, size.height);
|
this->setSize(size.width, size.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Node::setShape(int type)
|
void e2d::Node::setCollider(int nColliderType)
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (nColliderType)
|
||||||
{
|
{
|
||||||
case Shape::RECTANGLE:
|
case ColliderType::RECT:
|
||||||
{
|
{
|
||||||
auto rect = new ShapeRectangle(this);
|
auto rect = new ColliderRect(this);
|
||||||
this->setShape(rect);
|
this->setCollider(rect);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case Shape::CIRCLE:
|
case ColliderType::CIRCLE:
|
||||||
{
|
{
|
||||||
auto rect = new ShapeCircle(this);
|
auto rect = new ColliderCircle(this);
|
||||||
this->setShape(rect);
|
this->setCollider(rect);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case Shape::ELLIPSE:
|
case ColliderType::ELLIPSE:
|
||||||
{
|
{
|
||||||
auto rect = new ShapeEllipse(this);
|
auto rect = new ColliderEllipse(this);
|
||||||
this->setShape(rect);
|
this->setCollider(rect);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -577,42 +577,42 @@ void e2d::Node::setShape(int type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Node::setShape(ShapeBase * pShape)
|
void e2d::Node::setCollider(Collider * pCollider)
|
||||||
{
|
{
|
||||||
// 删除旧的形状
|
// 删除旧的碰撞体
|
||||||
CollisionManager::__removeShape(m_pShape);
|
ColliderManager::__removeCollider(m_pCollider);
|
||||||
// 添加新的形状
|
// 添加新的碰撞体
|
||||||
CollisionManager::__addShape(pShape);
|
ColliderManager::__addCollider(pCollider);
|
||||||
|
|
||||||
if (pShape)
|
if (pCollider)
|
||||||
{
|
{
|
||||||
// 双向绑定
|
// 双向绑定
|
||||||
this->m_pShape = pShape;
|
this->m_pCollider = pCollider;
|
||||||
pShape->m_pParentNode = this;
|
pCollider->m_pParentNode = this;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this->m_pShape = nullptr;
|
this->m_pCollider = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Node::addCollider(String collliderName)
|
void e2d::Node::addColliableName(String collliderName)
|
||||||
{
|
{
|
||||||
unsigned int hash = collliderName.getHashCode();
|
unsigned int hash = collliderName.getHashCode();
|
||||||
m_vColliders.insert(hash);
|
m_vColliders.insert(hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HIGHER_THAN_VS2012
|
#if HIGHER_THAN_VS2012
|
||||||
void e2d::Node::addCollider(const InitList<String>& vCollliderName)
|
void e2d::Node::addColliableName(const InitList<String>& vCollliderName)
|
||||||
{
|
{
|
||||||
for (const auto &name : vCollliderName)
|
for (const auto &name : vCollliderName)
|
||||||
{
|
{
|
||||||
this->addCollider(name);
|
this->addColliableName(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void e2d::Node::removeCollider(String collliderName)
|
void e2d::Node::removeColliableName(String collliderName)
|
||||||
{
|
{
|
||||||
unsigned int hash = collliderName.getHashCode();
|
unsigned int hash = collliderName.getHashCode();
|
||||||
m_vColliders.erase(hash);
|
m_vColliders.erase(hash);
|
||||||
|
|
@ -887,10 +887,10 @@ std::vector<e2d::Action*> e2d::Node::getActions(String strActionName)
|
||||||
bool e2d::Node::isPointIn(Point point) const
|
bool e2d::Node::isPointIn(Point point) const
|
||||||
{
|
{
|
||||||
BOOL ret = 0;
|
BOOL ret = 0;
|
||||||
// 如果存在形状,用形状判断
|
// 如果存在碰撞体,用碰撞体判断
|
||||||
if (m_pShape)
|
if (m_pCollider)
|
||||||
{
|
{
|
||||||
m_pShape->getD2dGeometry()->FillContainsPoint(
|
m_pCollider->getD2dGeometry()->FillContainsPoint(
|
||||||
D2D1::Point2F(
|
D2D1::Point2F(
|
||||||
static_cast<float>(point.x),
|
static_cast<float>(point.x),
|
||||||
static_cast<float>(point.y)),
|
static_cast<float>(point.y)),
|
||||||
|
|
@ -900,13 +900,13 @@ bool e2d::Node::isPointIn(Point point) const
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 为节点创建一个临时形状
|
// 为节点创建一个临时碰撞体
|
||||||
ID2D1RectangleGeometry * rect;
|
ID2D1RectangleGeometry * rect;
|
||||||
Renderer::getID2D1Factory()->CreateRectangleGeometry(
|
Renderer::getID2D1Factory()->CreateRectangleGeometry(
|
||||||
D2D1::RectF(0, 0, m_fWidth, m_fHeight),
|
D2D1::RectF(0, 0, m_fWidth, m_fHeight),
|
||||||
&rect
|
&rect
|
||||||
);
|
);
|
||||||
// 判断点是否在形状内
|
// 判断点是否在碰撞体内
|
||||||
rect->FillContainsPoint(
|
rect->FillContainsPoint(
|
||||||
D2D1::Point2F(
|
D2D1::Point2F(
|
||||||
static_cast<float>(point.x),
|
static_cast<float>(point.x),
|
||||||
|
|
@ -914,7 +914,7 @@ bool e2d::Node::isPointIn(Point point) const
|
||||||
m_MatriFinal,
|
m_MatriFinal,
|
||||||
&ret
|
&ret
|
||||||
);
|
);
|
||||||
// 删除临时创建的形状
|
// 删除临时创建的碰撞体
|
||||||
SafeReleaseInterface(&rect);
|
SafeReleaseInterface(&rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -933,10 +933,10 @@ bool e2d::Node::isPointIn(Point point) const
|
||||||
|
|
||||||
bool e2d::Node::isIntersectWith(const Node * pNode) const
|
bool e2d::Node::isIntersectWith(const Node * pNode) const
|
||||||
{
|
{
|
||||||
// 如果存在形状,用形状判断
|
// 如果存在碰撞体,用碰撞体判断
|
||||||
if (this->m_pShape && pNode->m_pShape)
|
if (this->m_pCollider && pNode->m_pCollider)
|
||||||
{
|
{
|
||||||
int relation = this->m_pShape->getRelationWith(pNode->m_pShape);
|
int relation = this->m_pCollider->getRelationWith(pNode->m_pCollider);
|
||||||
if ((relation != Relation::UNKNOWN) &&
|
if ((relation != Relation::UNKNOWN) &&
|
||||||
(relation != Relation::DISJOINT))
|
(relation != Relation::DISJOINT))
|
||||||
{
|
{
|
||||||
|
|
@ -945,10 +945,10 @@ bool e2d::Node::isIntersectWith(const Node * pNode) const
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 为节点创建一个临时形状
|
// 为节点创建一个临时碰撞体
|
||||||
ID2D1RectangleGeometry * pRect1;
|
ID2D1RectangleGeometry * pRect1;
|
||||||
ID2D1RectangleGeometry * pRect2;
|
ID2D1RectangleGeometry * pRect2;
|
||||||
ID2D1TransformedGeometry * pShape;
|
ID2D1TransformedGeometry * pCollider;
|
||||||
D2D1_GEOMETRY_RELATION relation;
|
D2D1_GEOMETRY_RELATION relation;
|
||||||
|
|
||||||
// 根据自身大小位置创建矩形
|
// 根据自身大小位置创建矩形
|
||||||
|
|
@ -960,7 +960,7 @@ bool e2d::Node::isIntersectWith(const Node * pNode) const
|
||||||
Renderer::getID2D1Factory()->CreateTransformedGeometry(
|
Renderer::getID2D1Factory()->CreateTransformedGeometry(
|
||||||
pRect1,
|
pRect1,
|
||||||
m_MatriFinal,
|
m_MatriFinal,
|
||||||
&pShape
|
&pCollider
|
||||||
);
|
);
|
||||||
// 根据相比较节点的大小位置创建矩形
|
// 根据相比较节点的大小位置创建矩形
|
||||||
Renderer::getID2D1Factory()->CreateRectangleGeometry(
|
Renderer::getID2D1Factory()->CreateRectangleGeometry(
|
||||||
|
|
@ -968,15 +968,15 @@ bool e2d::Node::isIntersectWith(const Node * pNode) const
|
||||||
&pRect2
|
&pRect2
|
||||||
);
|
);
|
||||||
// 获取相交状态
|
// 获取相交状态
|
||||||
pShape->CompareWithGeometry(
|
pCollider->CompareWithGeometry(
|
||||||
pRect2,
|
pRect2,
|
||||||
pNode->m_MatriFinal,
|
pNode->m_MatriFinal,
|
||||||
&relation
|
&relation
|
||||||
);
|
);
|
||||||
// 删除临时创建的形状
|
// 删除临时创建的碰撞体
|
||||||
SafeReleaseInterface(&pRect1);
|
SafeReleaseInterface(&pRect1);
|
||||||
SafeReleaseInterface(&pRect2);
|
SafeReleaseInterface(&pRect2);
|
||||||
SafeReleaseInterface(&pShape);
|
SafeReleaseInterface(&pCollider);
|
||||||
if ((relation != D2D1_GEOMETRY_RELATION_UNKNOWN) &&
|
if ((relation != D2D1_GEOMETRY_RELATION_UNKNOWN) &&
|
||||||
(relation != D2D1_GEOMETRY_RELATION_DISJOINT))
|
(relation != D2D1_GEOMETRY_RELATION_DISJOINT))
|
||||||
{
|
{
|
||||||
|
|
@ -1009,9 +1009,9 @@ void e2d::Node::setDefaultPiovt(double defaultPiovtX, double defaultPiovtY)
|
||||||
s_fDefaultPiovtY = min(max(static_cast<float>(defaultPiovtY), 0), 1);
|
s_fDefaultPiovtY = min(max(static_cast<float>(defaultPiovtY), 0), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Node::setDefaultShapeEnable(bool bEnable)
|
void e2d::Node::setDefaultColliderEnable(bool bEnable)
|
||||||
{
|
{
|
||||||
s_fDefaultShapeEnabled = bEnable;
|
s_fDefaultColliderEnabled = bEnable;
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Node::resumeAllActions()
|
void e2d::Node::resumeAllActions()
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
#include "..\..\eshape.h"
|
||||||
|
|
||||||
|
e2d::Circle::Circle()
|
||||||
|
: m_fRadius(0)
|
||||||
|
{
|
||||||
|
this->setPivot(0.5, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Circle::Circle(double radius)
|
||||||
|
{
|
||||||
|
this->setRadius(radius);
|
||||||
|
this->setPivot(0.5, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Circle::Circle(Point center, double radius)
|
||||||
|
{
|
||||||
|
this->setRadius(radius);
|
||||||
|
this->setPos(center);
|
||||||
|
this->setPivot(0.5, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Circle::Circle(double centerX, double centerY, double radius)
|
||||||
|
{
|
||||||
|
this->setRadius(radius);
|
||||||
|
this->setPos(centerX, centerY);
|
||||||
|
this->setPivot(0.5, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Circle::~Circle()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
double e2d::Circle::getRadius() const
|
||||||
|
{
|
||||||
|
return m_fRadius;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Circle::setRadius(double radius)
|
||||||
|
{
|
||||||
|
m_fRadius = static_cast<float>(radius);
|
||||||
|
Node::setSize(radius * 2, radius * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Circle::_renderLine()
|
||||||
|
{
|
||||||
|
Renderer::getRenderTarget()->DrawEllipse(
|
||||||
|
D2D1::Ellipse(D2D1::Point2F(m_fRadius, m_fRadius), m_fRadius, m_fRadius),
|
||||||
|
Renderer::getSolidColorBrush(),
|
||||||
|
m_fStrokeWidth
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Circle::_renderFill()
|
||||||
|
{
|
||||||
|
Renderer::getRenderTarget()->FillEllipse(
|
||||||
|
D2D1::Ellipse(D2D1::Point2F(m_fRadius, m_fRadius), m_fRadius, m_fRadius),
|
||||||
|
Renderer::getSolidColorBrush()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
#include "..\..\eshape.h"
|
||||||
|
|
||||||
|
e2d::Ellipse::Ellipse()
|
||||||
|
: m_fRadiusX(0)
|
||||||
|
, m_fRadiusY(0)
|
||||||
|
{
|
||||||
|
this->setPivot(0.5, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Ellipse::Ellipse(double radiusX, double radiusY)
|
||||||
|
{
|
||||||
|
this->setRadiusX(radiusX);
|
||||||
|
this->setRadiusY(radiusY);
|
||||||
|
this->setPivot(0.5, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Ellipse::Ellipse(Point center, double radiusX, double radiusY)
|
||||||
|
{
|
||||||
|
this->setRadiusX(radiusX);
|
||||||
|
this->setRadiusY(radiusY);
|
||||||
|
this->setPos(center);
|
||||||
|
this->setPivot(0.5, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Ellipse::Ellipse(double centerX, double centerY, double radiusX, double radiusY)
|
||||||
|
{
|
||||||
|
this->setRadiusX(radiusX);
|
||||||
|
this->setRadiusY(radiusY);
|
||||||
|
this->setPos(centerX, centerY);
|
||||||
|
this->setPivot(0.5, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Ellipse::~Ellipse()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
double e2d::Ellipse::getRadiusX() const
|
||||||
|
{
|
||||||
|
return m_fRadiusX;
|
||||||
|
}
|
||||||
|
|
||||||
|
double e2d::Ellipse::getRadiusY() const
|
||||||
|
{
|
||||||
|
return m_fRadiusY;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Ellipse::setRadiusX(double radiusX)
|
||||||
|
{
|
||||||
|
m_fRadiusX = static_cast<float>(radiusX);
|
||||||
|
Node::setWidth(radiusX * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Ellipse::setRadiusY(double radiusY)
|
||||||
|
{
|
||||||
|
m_fRadiusY = static_cast<float>(radiusY);
|
||||||
|
Node::setHeight(radiusY * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Ellipse::_renderLine()
|
||||||
|
{
|
||||||
|
Renderer::getRenderTarget()->DrawEllipse(
|
||||||
|
D2D1::Ellipse(D2D1::Point2F(m_fRadiusX, m_fRadiusY), m_fRadiusX, m_fRadiusY),
|
||||||
|
Renderer::getSolidColorBrush(),
|
||||||
|
m_fStrokeWidth
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Ellipse::_renderFill()
|
||||||
|
{
|
||||||
|
Renderer::getRenderTarget()->FillEllipse(
|
||||||
|
D2D1::Ellipse(D2D1::Point2F(m_fRadiusX, m_fRadiusY), m_fRadiusX, m_fRadiusY),
|
||||||
|
Renderer::getSolidColorBrush()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
#include "..\..\eshape.h"
|
||||||
|
|
||||||
|
e2d::Rect::Rect()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Rect::Rect(double width, double height)
|
||||||
|
{
|
||||||
|
this->setSize(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Rect::Rect(Size size)
|
||||||
|
{
|
||||||
|
this->setSize(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Rect::Rect(double top, double left, double width, double height)
|
||||||
|
{
|
||||||
|
this->setPivot(0, 0);
|
||||||
|
this->setPos(top, left);
|
||||||
|
this->setSize(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Rect::Rect(Point topLeft, Size size)
|
||||||
|
{
|
||||||
|
this->setPivot(0, 0);
|
||||||
|
this->setPos(topLeft);
|
||||||
|
this->setSize(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Rect::~Rect()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Rect::_renderLine()
|
||||||
|
{
|
||||||
|
Renderer::getRenderTarget()->DrawRectangle(
|
||||||
|
D2D1::RectF(0, 0, m_fWidth, m_fHeight),
|
||||||
|
Renderer::getSolidColorBrush(),
|
||||||
|
m_fStrokeWidth
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Rect::_renderFill()
|
||||||
|
{
|
||||||
|
Renderer::getRenderTarget()->FillRectangle(
|
||||||
|
D2D1::RectF(0, 0, m_fWidth, m_fHeight),
|
||||||
|
Renderer::getSolidColorBrush()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,80 @@
|
||||||
|
#include "..\..\eshape.h"
|
||||||
|
|
||||||
|
e2d::RoundRect::RoundRect()
|
||||||
|
: m_fRadiusX(0)
|
||||||
|
, m_fRadiusY(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::RoundRect::RoundRect(double width, double height, double radiusX, double radiusY)
|
||||||
|
: m_fRadiusX(static_cast<float>(radiusX))
|
||||||
|
, m_fRadiusY(static_cast<float>(radiusY))
|
||||||
|
{
|
||||||
|
this->setSize(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::RoundRect::RoundRect(Size size, double radiusX, double radiusY)
|
||||||
|
: m_fRadiusX(static_cast<float>(radiusX))
|
||||||
|
, m_fRadiusY(static_cast<float>(radiusY))
|
||||||
|
{
|
||||||
|
this->setSize(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::RoundRect::RoundRect(double top, double left, double width, double height, double radiusX, double radiusY)
|
||||||
|
: m_fRadiusX(static_cast<float>(radiusX))
|
||||||
|
, m_fRadiusY(static_cast<float>(radiusY))
|
||||||
|
{
|
||||||
|
this->setPivot(0, 0);
|
||||||
|
this->setPos(top, left);
|
||||||
|
this->setSize(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::RoundRect::RoundRect(Point topLeft, Size size, double radiusX, double radiusY)
|
||||||
|
: m_fRadiusX(static_cast<float>(radiusX))
|
||||||
|
, m_fRadiusY(static_cast<float>(radiusY))
|
||||||
|
{
|
||||||
|
this->setPivot(0, 0);
|
||||||
|
this->setPos(topLeft);
|
||||||
|
this->setSize(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::RoundRect::~RoundRect()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
double e2d::RoundRect::getRadiusX() const
|
||||||
|
{
|
||||||
|
return m_fRadiusX;
|
||||||
|
}
|
||||||
|
|
||||||
|
double e2d::RoundRect::getRadiusY() const
|
||||||
|
{
|
||||||
|
return m_fRadiusY;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::RoundRect::setRadiusX(double radiusX)
|
||||||
|
{
|
||||||
|
m_fRadiusX = static_cast<float>(radiusX);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::RoundRect::setRadiusY(double radiusY)
|
||||||
|
{
|
||||||
|
m_fRadiusY = static_cast<float>(radiusY);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::RoundRect::_renderLine()
|
||||||
|
{
|
||||||
|
Renderer::getRenderTarget()->DrawRoundedRectangle(
|
||||||
|
D2D1::RoundedRect(D2D1::RectF(0, 0, m_fWidth, m_fHeight), m_fRadiusX, m_fRadiusY),
|
||||||
|
Renderer::getSolidColorBrush(),
|
||||||
|
m_fStrokeWidth
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::RoundRect::_renderFill()
|
||||||
|
{
|
||||||
|
Renderer::getRenderTarget()->FillRoundedRectangle(
|
||||||
|
D2D1::RoundedRect(D2D1::RectF(0, 0, m_fWidth, m_fHeight), m_fRadiusX, m_fRadiusY),
|
||||||
|
Renderer::getSolidColorBrush()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,86 @@
|
||||||
|
#include "..\..\eshape.h"
|
||||||
|
|
||||||
|
e2d::Shape::Shape()
|
||||||
|
: m_nStyle(ShapeStyle::SOLID)
|
||||||
|
, m_nFillColor(Color::WHITE)
|
||||||
|
, m_nLineColor(Color::BLUE)
|
||||||
|
, m_fStrokeWidth(1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Shape::~Shape()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Shape::onRender()
|
||||||
|
{
|
||||||
|
switch (m_nStyle)
|
||||||
|
{
|
||||||
|
case ShapeStyle::FILL:
|
||||||
|
{
|
||||||
|
Renderer::getSolidColorBrush()->SetColor(D2D1::ColorF(m_nFillColor, m_fDisplayOpacity));
|
||||||
|
this->_renderFill();
|
||||||
|
|
||||||
|
Renderer::getSolidColorBrush()->SetColor(D2D1::ColorF(m_nLineColor, m_fDisplayOpacity));
|
||||||
|
this->_renderLine();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case ShapeStyle::ROUND:
|
||||||
|
{
|
||||||
|
Renderer::getSolidColorBrush()->SetColor(D2D1::ColorF(m_nLineColor, m_fDisplayOpacity));
|
||||||
|
this->_renderLine();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case ShapeStyle::SOLID:
|
||||||
|
{
|
||||||
|
Renderer::getSolidColorBrush()->SetColor(D2D1::ColorF(m_nFillColor, m_fDisplayOpacity));
|
||||||
|
this->_renderFill();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT32 e2d::Shape::getFillColor() const
|
||||||
|
{
|
||||||
|
return m_nFillColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT32 e2d::Shape::getLineColor() const
|
||||||
|
{
|
||||||
|
return m_nLineColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
double e2d::Shape::getStrokeWidth() const
|
||||||
|
{
|
||||||
|
return m_fStrokeWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
int e2d::Shape::getStyle() const
|
||||||
|
{
|
||||||
|
return m_nStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Shape::setFillColor(UINT32 fillColor)
|
||||||
|
{
|
||||||
|
m_nFillColor = fillColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Shape::setLineColor(UINT32 lineColor)
|
||||||
|
{
|
||||||
|
m_nLineColor = lineColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Shape::setStrokeWidth(double strokeWidth)
|
||||||
|
{
|
||||||
|
m_fStrokeWidth = static_cast<float>(strokeWidth);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Shape::setStyle(int style)
|
||||||
|
{
|
||||||
|
m_nStyle = style;
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
|
|
||||||
|
|
||||||
e2d::Sprite::Sprite()
|
e2d::Sprite::Sprite()
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
|
|
||||||
|
|
||||||
e2d::Text::Text()
|
e2d::Text::Text()
|
||||||
|
|
|
||||||
|
|
@ -1,109 +0,0 @@
|
||||||
#include "..\eshape.h"
|
|
||||||
#include "..\emanagers.h"
|
|
||||||
#include "..\enodes.h"
|
|
||||||
|
|
||||||
e2d::ShapeBase::ShapeBase()
|
|
||||||
: m_bIsVisiable(true)
|
|
||||||
, m_nColor(Color::RED)
|
|
||||||
, m_fOpacity(1)
|
|
||||||
, m_pParentNode(nullptr)
|
|
||||||
, m_pTransformedShape(nullptr)
|
|
||||||
, m_bEnable(true)
|
|
||||||
, m_bAutoResize(true)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
e2d::ShapeBase::~ShapeBase()
|
|
||||||
{
|
|
||||||
SafeReleaseInterface(&m_pTransformedShape);
|
|
||||||
}
|
|
||||||
|
|
||||||
e2d::Node * e2d::ShapeBase::getParentNode() const
|
|
||||||
{
|
|
||||||
return m_pParentNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::ShapeBase::setEnable(bool bEnable)
|
|
||||||
{
|
|
||||||
m_bEnable = bEnable;
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::ShapeBase::setVisiable(bool bVisiable)
|
|
||||||
{
|
|
||||||
m_bIsVisiable = bVisiable;
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::ShapeBase::setColor(UINT32 color)
|
|
||||||
{
|
|
||||||
m_nColor = color;
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::ShapeBase::setOpacity(double opacity)
|
|
||||||
{
|
|
||||||
m_fOpacity = min(max(static_cast<float>(opacity), 0), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::ShapeBase::setAutoResize(bool bEnable)
|
|
||||||
{
|
|
||||||
m_bAutoResize = bEnable;
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::ShapeBase::_render()
|
|
||||||
{
|
|
||||||
if (m_pTransformedShape && m_bEnable)
|
|
||||||
{
|
|
||||||
ID2D1SolidColorBrush * pBrush = Renderer::getSolidColorBrush();
|
|
||||||
// 눼쉔뺌岬
|
|
||||||
Renderer::getRenderTarget()->CreateSolidColorBrush(
|
|
||||||
D2D1::ColorF(
|
|
||||||
m_nColor,
|
|
||||||
m_fOpacity),
|
|
||||||
&pBrush
|
|
||||||
);
|
|
||||||
// 삥齡섯부近榴
|
|
||||||
Renderer::getRenderTarget()->DrawGeometry(m_pTransformedShape, pBrush);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int e2d::ShapeBase::getRelationWith(ShapeBase * pShape) const
|
|
||||||
{
|
|
||||||
if (m_pTransformedShape && pShape->m_pTransformedShape)
|
|
||||||
{
|
|
||||||
if (m_bEnable && pShape->m_bEnable)
|
|
||||||
{
|
|
||||||
D2D1_GEOMETRY_RELATION relation;
|
|
||||||
|
|
||||||
m_pTransformedShape->CompareWithGeometry(
|
|
||||||
pShape->m_pTransformedShape,
|
|
||||||
D2D1::Matrix3x2F::Identity(),
|
|
||||||
&relation
|
|
||||||
);
|
|
||||||
|
|
||||||
return relation;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Relation::UNKNOWN;
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::ShapeBase::_transform()
|
|
||||||
{
|
|
||||||
if (m_pParentNode && m_bEnable)
|
|
||||||
{
|
|
||||||
if (m_bAutoResize)
|
|
||||||
{
|
|
||||||
this->_resize();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 姦렴覩近榴
|
|
||||||
SafeReleaseInterface(&m_pTransformedShape);
|
|
||||||
|
|
||||||
// 몽앴만쌘듐瘻뻣섯부暠近
|
|
||||||
Renderer::getID2D1Factory()->CreateTransformedGeometry(
|
|
||||||
getD2dGeometry(),
|
|
||||||
m_pParentNode->m_MatriFinal,
|
|
||||||
&m_pTransformedShape
|
|
||||||
);
|
|
||||||
|
|
||||||
CollisionManager::__updateShape(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
||||||
#include "..\eshape.h"
|
|
||||||
#include "..\enodes.h"
|
|
||||||
|
|
||||||
e2d::ShapeRectangle::ShapeRectangle()
|
|
||||||
: m_pD2dRectangle(nullptr)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
e2d::ShapeRectangle::ShapeRectangle(double x, double y, double width, double height)
|
|
||||||
: m_pD2dRectangle(nullptr)
|
|
||||||
{
|
|
||||||
this->setRect(x, y, x + width, y + height);
|
|
||||||
}
|
|
||||||
|
|
||||||
e2d::ShapeRectangle::ShapeRectangle(Node * node)
|
|
||||||
: m_pD2dRectangle(nullptr)
|
|
||||||
{
|
|
||||||
this->setRect(
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
node->getRealWidth(),
|
|
||||||
node->getRealHeight()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
e2d::ShapeRectangle::~ShapeRectangle()
|
|
||||||
{
|
|
||||||
SafeReleaseInterface(&m_pD2dRectangle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::ShapeRectangle::setRect(double left, double top, double right, double bottom)
|
|
||||||
{
|
|
||||||
SafeReleaseInterface(&m_pD2dRectangle);
|
|
||||||
|
|
||||||
Renderer::getID2D1Factory()->CreateRectangleGeometry(
|
|
||||||
D2D1::RectF(
|
|
||||||
static_cast<float>(left),
|
|
||||||
static_cast<float>(top),
|
|
||||||
static_cast<float>(right),
|
|
||||||
static_cast<float>(bottom)),
|
|
||||||
&m_pD2dRectangle
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::ShapeRectangle::_resize()
|
|
||||||
{
|
|
||||||
if (m_pParentNode && m_bEnable)
|
|
||||||
{
|
|
||||||
this->setRect(
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
m_pParentNode->getRealWidth(),
|
|
||||||
m_pParentNode->getRealHeight()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ID2D1RectangleGeometry * e2d::ShapeRectangle::getD2dGeometry() const
|
|
||||||
{
|
|
||||||
return m_pD2dRectangle;
|
|
||||||
}
|
|
||||||
|
|
@ -1,24 +1,24 @@
|
||||||
#include "..\etools.h"
|
#include "..\etool.h"
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
|
|
||||||
e2d::CollisionListener::CollisionListener()
|
e2d::CollisionListener::CollisionListener()
|
||||||
: Listener()
|
: Listener()
|
||||||
{
|
{
|
||||||
CollisionManager::__add(this);
|
ColliderManager::__add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::CollisionListener::CollisionListener(Function func)
|
e2d::CollisionListener::CollisionListener(Function func)
|
||||||
: Listener()
|
: Listener()
|
||||||
, m_callback(func)
|
, m_callback(func)
|
||||||
{
|
{
|
||||||
CollisionManager::__add(this);
|
ColliderManager::__add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::CollisionListener::CollisionListener(Function func, String name)
|
e2d::CollisionListener::CollisionListener(Function func, String name)
|
||||||
: Listener(name)
|
: Listener(name)
|
||||||
, m_callback(func)
|
, m_callback(func)
|
||||||
{
|
{
|
||||||
CollisionManager::__add(this);
|
ColliderManager::__add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::CollisionListener::_update()
|
void e2d::CollisionListener::_update()
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\etools.h"
|
#include "..\etool.h"
|
||||||
|
|
||||||
static e2d::String s_sDefaultFileName = L"DefaultData.ini";
|
static e2d::String s_sDefaultFileName = L"DefaultData.ini";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\etools.h"
|
#include "..\etool.h"
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
|
|
||||||
e2d::InputListener::InputListener()
|
e2d::InputListener::InputListener()
|
||||||
: Listener()
|
: Listener()
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\etools.h"
|
#include "..\etool.h"
|
||||||
|
|
||||||
e2d::Listener::Listener()
|
e2d::Listener::Listener()
|
||||||
: m_bRunning(false)
|
: m_bRunning(false)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\etools.h"
|
#include "..\etool.h"
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
|
|
||||||
using namespace e2d;
|
using namespace e2d;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\etools.h"
|
#include "..\etool.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <commdlg.h>
|
#include <commdlg.h>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "..\etools.h"
|
#include "..\etool.h"
|
||||||
|
|
||||||
std::default_random_engine &e2d::Random::getEngine()
|
std::default_random_engine &e2d::Random::getEngine()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#include "..\etools.h"
|
#include "..\etool.h"
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
#include "..\emanagers.h"
|
#include "..\emanager.h"
|
||||||
|
|
||||||
e2d::Timer::Timer(Function func, String name, double interval /* = 0 */, int updateTimes /* = -1 */, bool atOnce /* = false */, bool autoRelease /* = false */)
|
e2d::Timer::Timer(Function func, String name, double interval /* = 0 */, int updateTimes /* = -1 */, bool atOnce /* = false */, bool autoRelease /* = false */)
|
||||||
: m_bRunning(false)
|
: m_bRunning(false)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\ebase.h"
|
#include "..\ebase.h"
|
||||||
#include "..\etransitions.h"
|
#include "..\etransition.h"
|
||||||
|
|
||||||
e2d::Transition::Transition(double duration)
|
e2d::Transition::Transition(double duration)
|
||||||
: m_bEnd(false)
|
: m_bEnd(false)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\etransitions.h"
|
#include "..\etransition.h"
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
|
|
||||||
e2d::TransitionEmerge::TransitionEmerge(double duration)
|
e2d::TransitionEmerge::TransitionEmerge(double duration)
|
||||||
: Transition(duration)
|
: Transition(duration)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\etransitions.h"
|
#include "..\etransition.h"
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
|
|
||||||
e2d::TransitionFade::TransitionFade(double fadeOutDuration, double fadeInDuration)
|
e2d::TransitionFade::TransitionFade(double fadeOutDuration, double fadeInDuration)
|
||||||
: Transition(0)
|
: Transition(0)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#include "..\etransitions.h"
|
#include "..\etransition.h"
|
||||||
#include "..\enodes.h"
|
#include "..\enode.h"
|
||||||
|
|
||||||
e2d::TransitionMove::TransitionMove(double duration, MOVE_DIRECT direct)
|
e2d::TransitionMove::TransitionMove(double duration, MOVE_DIRECT direct)
|
||||||
: Transition(duration)
|
: Transition(duration)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "enodes.h"
|
#include "enode.h"
|
||||||
|
|
||||||
namespace e2d
|
namespace e2d
|
||||||
{
|
{
|
||||||
|
|
@ -20,12 +20,13 @@
|
||||||
#include "emacros.h"
|
#include "emacros.h"
|
||||||
#include "ecommon.h"
|
#include "ecommon.h"
|
||||||
#include "ebase.h"
|
#include "ebase.h"
|
||||||
#include "emanagers.h"
|
#include "emanager.h"
|
||||||
#include "enodes.h"
|
#include "enode.h"
|
||||||
#include "etools.h"
|
|
||||||
#include "eactions.h"
|
|
||||||
#include "etransitions.h"
|
|
||||||
#include "eshape.h"
|
#include "eshape.h"
|
||||||
|
#include "etool.h"
|
||||||
|
#include "eaction.h"
|
||||||
|
#include "etransition.h"
|
||||||
|
#include "ecollider.h"
|
||||||
|
|
||||||
|
|
||||||
#if defined(DEBUG) || defined(_DEBUG)
|
#if defined(DEBUG) || defined(_DEBUG)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,202 @@
|
||||||
|
#pragma once
|
||||||
|
#include "ebase.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace e2d
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
class ColliderManager;
|
||||||
|
|
||||||
|
// 碰撞体
|
||||||
|
class Collider :
|
||||||
|
public Object
|
||||||
|
{
|
||||||
|
friend ColliderManager;
|
||||||
|
friend Node;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Collider();
|
||||||
|
|
||||||
|
virtual ~Collider();
|
||||||
|
|
||||||
|
// 判断两碰撞体的交集关系
|
||||||
|
virtual int getRelationWith(
|
||||||
|
Collider * pCollider
|
||||||
|
) const;
|
||||||
|
|
||||||
|
// 获取父节点
|
||||||
|
Node * getParentNode() const;
|
||||||
|
|
||||||
|
// 启用或关闭该碰撞体
|
||||||
|
virtual void setEnable(
|
||||||
|
bool bEnable
|
||||||
|
);
|
||||||
|
|
||||||
|
// 设置碰撞体的可见性
|
||||||
|
void setVisiable(
|
||||||
|
bool bVisiable
|
||||||
|
);
|
||||||
|
|
||||||
|
// 设置绘制颜色
|
||||||
|
void setColor(
|
||||||
|
UINT32 color
|
||||||
|
);
|
||||||
|
|
||||||
|
// 设置绘制透明度
|
||||||
|
void setOpacity(
|
||||||
|
double opacity
|
||||||
|
);
|
||||||
|
|
||||||
|
// 设置大小跟随
|
||||||
|
void setAutoResize(
|
||||||
|
bool bEnable
|
||||||
|
);
|
||||||
|
|
||||||
|
// 获取 ID2D1Geometry 对象
|
||||||
|
virtual ID2D1Geometry * getD2dGeometry() const = 0;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// 转换碰撞体
|
||||||
|
virtual void _transform();
|
||||||
|
|
||||||
|
// 重设大小
|
||||||
|
virtual void _resize() = 0;
|
||||||
|
|
||||||
|
// 渲染碰撞体
|
||||||
|
virtual void _render();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool m_bEnable;
|
||||||
|
bool m_bIsVisiable;
|
||||||
|
bool m_bAutoResize;
|
||||||
|
UINT32 m_nColor;
|
||||||
|
float m_fOpacity;
|
||||||
|
Node * m_pParentNode;
|
||||||
|
ID2D1TransformedGeometry * m_pTransformedGeometry;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 矩形
|
||||||
|
class ColliderRect :
|
||||||
|
public Collider
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// 创建一个默认矩形
|
||||||
|
ColliderRect();
|
||||||
|
|
||||||
|
// 根据左上角坐标和宽高创建矩形
|
||||||
|
ColliderRect(
|
||||||
|
double x,
|
||||||
|
double y,
|
||||||
|
double width,
|
||||||
|
double height
|
||||||
|
);
|
||||||
|
|
||||||
|
// 创建一个和节点位置大小相同的矩形
|
||||||
|
ColliderRect(
|
||||||
|
Node * node
|
||||||
|
);
|
||||||
|
|
||||||
|
virtual ~ColliderRect();
|
||||||
|
|
||||||
|
// 修改矩形大小
|
||||||
|
void setRect(
|
||||||
|
double left,
|
||||||
|
double top,
|
||||||
|
double right,
|
||||||
|
double bottom
|
||||||
|
);
|
||||||
|
|
||||||
|
// 获取 ID2D1Geometry 对象
|
||||||
|
virtual ID2D1RectangleGeometry * getD2dGeometry() const override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// 重设大小
|
||||||
|
virtual void _resize();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ID2D1RectangleGeometry * m_pD2dRectangle;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 圆形
|
||||||
|
class ColliderCircle :
|
||||||
|
public Collider
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// 创建一个默认圆形
|
||||||
|
ColliderCircle();
|
||||||
|
|
||||||
|
// 根据圆心和半径创建圆形
|
||||||
|
ColliderCircle(
|
||||||
|
Point center,
|
||||||
|
double radius
|
||||||
|
);
|
||||||
|
|
||||||
|
// 创建一个和节点位置大小相同的圆形
|
||||||
|
ColliderCircle(
|
||||||
|
Node * node
|
||||||
|
);
|
||||||
|
|
||||||
|
virtual ~ColliderCircle();
|
||||||
|
|
||||||
|
// 修改圆形大小
|
||||||
|
void setCircle(
|
||||||
|
Point center,
|
||||||
|
double radius
|
||||||
|
);
|
||||||
|
|
||||||
|
// 获取 ID2D1Geometry 对象
|
||||||
|
virtual ID2D1EllipseGeometry * getD2dGeometry() const override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// 重设大小
|
||||||
|
virtual void _resize();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ID2D1EllipseGeometry * m_pD2dCircle;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 椭圆形
|
||||||
|
class ColliderEllipse :
|
||||||
|
public Collider
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// 创建一个默认椭圆
|
||||||
|
ColliderEllipse();
|
||||||
|
|
||||||
|
// 根据圆心和半径创建椭圆
|
||||||
|
ColliderEllipse(
|
||||||
|
Point center,
|
||||||
|
double radiusX,
|
||||||
|
double radiusY
|
||||||
|
);
|
||||||
|
|
||||||
|
// 创建一个和节点位置大小相同的椭圆
|
||||||
|
ColliderEllipse(
|
||||||
|
Node * node
|
||||||
|
);
|
||||||
|
|
||||||
|
virtual ~ColliderEllipse();
|
||||||
|
|
||||||
|
// 修改椭圆大小
|
||||||
|
void setEllipse(
|
||||||
|
Point center,
|
||||||
|
double radiusX,
|
||||||
|
double radiusY
|
||||||
|
);
|
||||||
|
|
||||||
|
// 获取 ID2D1Geometry 对象
|
||||||
|
virtual ID2D1EllipseGeometry * getD2dGeometry() const override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// 重设大小
|
||||||
|
virtual void _resize();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ID2D1EllipseGeometry * m_pD2dEllipse;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -75,7 +75,7 @@ struct Size
|
||||||
|
|
||||||
|
|
||||||
// 字符串
|
// 字符串
|
||||||
class String
|
class String final
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
String();
|
String();
|
||||||
|
|
@ -137,6 +137,7 @@ public:
|
||||||
|
|
||||||
// 数字类型转字符串
|
// 数字类型转字符串
|
||||||
static String parse(int value);
|
static String parse(int value);
|
||||||
|
static String parse(unsigned int value);
|
||||||
static String parse(float value);
|
static String parse(float value);
|
||||||
static String parse(double value);
|
static String parse(double value);
|
||||||
|
|
||||||
|
|
@ -184,6 +185,7 @@ public:
|
||||||
String& operator<< (const wchar_t *);
|
String& operator<< (const wchar_t *);
|
||||||
String& operator<< (wchar_t *);
|
String& operator<< (wchar_t *);
|
||||||
String& operator<< (int value);
|
String& operator<< (int value);
|
||||||
|
String& operator<< (unsigned int value);
|
||||||
String& operator<< (float value);
|
String& operator<< (float value);
|
||||||
String& operator<< (double value);
|
String& operator<< (double value);
|
||||||
|
|
||||||
|
|
@ -379,7 +381,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// 形状交集关系
|
// 碰撞体交集关系
|
||||||
class Relation
|
class Relation
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -394,13 +396,26 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// 形状类别
|
// 形状样式
|
||||||
class Shape
|
class ShapeStyle
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum : int
|
enum : int
|
||||||
{
|
{
|
||||||
RECTANGLE, /* 矩形 */
|
SOLID, /* 填充 */
|
||||||
|
ROUND, /* 轮廓 */
|
||||||
|
FILL, /* 轮廓 + 填充 */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 碰撞体类别
|
||||||
|
class ColliderType
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum : int
|
||||||
|
{
|
||||||
|
RECT, /* 矩形 */
|
||||||
CIRCLE, /* 圆形 */
|
CIRCLE, /* 圆形 */
|
||||||
ELLIPSE /* 椭圆形 */
|
ELLIPSE /* 椭圆形 */
|
||||||
};
|
};
|
||||||
|
|
@ -565,7 +580,10 @@ public:
|
||||||
virtual void onExit() {}
|
virtual void onExit() {}
|
||||||
|
|
||||||
// 重写这个函数,它将在碰撞发生时自动执行
|
// 重写这个函数,它将在碰撞发生时自动执行
|
||||||
virtual void onCollide() {}
|
virtual void onCollide(
|
||||||
|
Node* pActiveNode, /* 碰撞发生时的主动体 */
|
||||||
|
Node* pPassiveNode /* 碰撞发生时的被动体 */
|
||||||
|
) {}
|
||||||
|
|
||||||
// 重写这个函数,它将在关闭窗口时执行(返回 false 将阻止窗口关闭)
|
// 重写这个函数,它将在关闭窗口时执行(返回 false 将阻止窗口关闭)
|
||||||
virtual bool onCloseWindow() { return true; }
|
virtual bool onCloseWindow() { return true; }
|
||||||
|
|
@ -601,7 +619,7 @@ public:
|
||||||
Node * getRoot() const;
|
Node * getRoot() const;
|
||||||
|
|
||||||
// 开启或关闭节点轮廓渲染
|
// 开启或关闭节点轮廓渲染
|
||||||
void showOutline(
|
void showCollider(
|
||||||
bool visiable = true
|
bool visiable = true
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -616,7 +634,7 @@ protected:
|
||||||
bool m_bAutoUpdate;
|
bool m_bAutoUpdate;
|
||||||
bool m_bSortNeeded;
|
bool m_bSortNeeded;
|
||||||
bool m_bWillSave;
|
bool m_bWillSave;
|
||||||
bool m_bShapeVisiable;
|
bool m_bColliderVisiable;
|
||||||
Node * m_pRoot;
|
Node * m_pRoot;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,13 +12,13 @@ class Node;
|
||||||
class Timer;
|
class Timer;
|
||||||
class Action;
|
class Action;
|
||||||
class Music;
|
class Music;
|
||||||
class ShapeBase;
|
class Collider;
|
||||||
class Transition;
|
class Transition;
|
||||||
class InputListener;
|
class InputListener;
|
||||||
class CollisionListener;
|
class CollisionListener;
|
||||||
|
|
||||||
// 对象管理器
|
// 对象管理器
|
||||||
class ObjectManager
|
class ObjectManager final
|
||||||
{
|
{
|
||||||
friend Game;
|
friend Game;
|
||||||
|
|
||||||
|
|
@ -41,7 +41,7 @@ private:
|
||||||
|
|
||||||
|
|
||||||
// 场景管理器
|
// 场景管理器
|
||||||
class SceneManager
|
class SceneManager final
|
||||||
{
|
{
|
||||||
friend Game;
|
friend Game;
|
||||||
friend Renderer;
|
friend Renderer;
|
||||||
|
|
@ -87,7 +87,7 @@ private:
|
||||||
|
|
||||||
|
|
||||||
// 定时器管理器
|
// 定时器管理器
|
||||||
class TimerManager
|
class TimerManager final
|
||||||
{
|
{
|
||||||
friend Game;
|
friend Game;
|
||||||
friend Node;
|
friend Node;
|
||||||
|
|
@ -150,7 +150,7 @@ private:
|
||||||
|
|
||||||
|
|
||||||
// 动作管理器
|
// 动作管理器
|
||||||
class ActionManager
|
class ActionManager final
|
||||||
{
|
{
|
||||||
friend Game;
|
friend Game;
|
||||||
friend Node;
|
friend Node;
|
||||||
|
|
@ -235,7 +235,7 @@ private:
|
||||||
|
|
||||||
|
|
||||||
// 音乐管理工具
|
// 音乐管理工具
|
||||||
class MusicManager
|
class MusicManager final
|
||||||
{
|
{
|
||||||
friend Game;
|
friend Game;
|
||||||
|
|
||||||
|
|
@ -305,7 +305,7 @@ private:
|
||||||
|
|
||||||
|
|
||||||
// 键盘和鼠标消息管理器
|
// 键盘和鼠标消息管理器
|
||||||
class InputManager
|
class InputManager final
|
||||||
{
|
{
|
||||||
friend Input;
|
friend Input;
|
||||||
friend InputListener;
|
friend InputListener;
|
||||||
|
|
@ -361,10 +361,10 @@ private:
|
||||||
|
|
||||||
|
|
||||||
// 碰撞管理器
|
// 碰撞管理器
|
||||||
class CollisionManager
|
class ColliderManager final
|
||||||
{
|
{
|
||||||
friend Node;
|
friend Node;
|
||||||
friend ShapeBase;
|
friend Collider;
|
||||||
friend CollisionListener;
|
friend CollisionListener;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
@ -411,13 +411,19 @@ public:
|
||||||
// 获取全部监听器
|
// 获取全部监听器
|
||||||
static std::vector<CollisionListener*> getAll();
|
static std::vector<CollisionListener*> getAll();
|
||||||
|
|
||||||
|
// 获取碰撞发生时的主动体
|
||||||
|
static Node * getActiveNode();
|
||||||
|
|
||||||
|
// 获取碰撞发生时的被动体
|
||||||
|
static Node * getPassiveNode();
|
||||||
|
|
||||||
// 判断碰撞是否由该节点引发(如果是,返回与其相撞的节点指针,否则返回空)
|
// 判断碰撞是否由该节点引发(如果是,返回与其相撞的节点指针,否则返回空)
|
||||||
static Node* isCausedBy(
|
static Node * isCausedBy(
|
||||||
Node * pNode
|
Node * pNode
|
||||||
);
|
);
|
||||||
|
|
||||||
// 判断发生碰撞的节点名称是否相同(若相同返回其指针,否则返回空)
|
// 判断发生碰撞的节点名称是否相同(若相同返回其指针,否则返回空)
|
||||||
static Node* isCausedBy(
|
static Node * isCausedBy(
|
||||||
String name
|
String name
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -430,19 +436,19 @@ private:
|
||||||
// 更新监听器
|
// 更新监听器
|
||||||
static void __update();
|
static void __update();
|
||||||
|
|
||||||
// 更新形状
|
// 更新碰撞体
|
||||||
static void __updateShape(
|
static void __updateCollider(
|
||||||
ShapeBase * pActiveShape
|
Collider * pActiveCollider
|
||||||
);
|
);
|
||||||
|
|
||||||
// 添加形状
|
// 添加碰撞体
|
||||||
static void __addShape(
|
static void __addCollider(
|
||||||
ShapeBase * pShape
|
Collider * pCollider
|
||||||
);
|
);
|
||||||
|
|
||||||
// 删除已绑定的形状
|
// 删除已绑定的碰撞体
|
||||||
static void __removeShape(
|
static void __removeCollider(
|
||||||
ShapeBase * pShape
|
Collider * pCollider
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -7,16 +7,16 @@ namespace e2d
|
||||||
|
|
||||||
class Action;
|
class Action;
|
||||||
class Transition;
|
class Transition;
|
||||||
class ShapeBase;
|
class Collider;
|
||||||
class CollisionManager;
|
class ColliderManager;
|
||||||
|
|
||||||
class Node :
|
class Node :
|
||||||
public Object
|
public Object
|
||||||
{
|
{
|
||||||
friend Scene;
|
friend Scene;
|
||||||
friend ShapeBase;
|
friend Collider;
|
||||||
friend Transition;
|
friend Transition;
|
||||||
friend CollisionManager;
|
friend ColliderManager;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Node();
|
Node();
|
||||||
|
|
@ -116,8 +116,8 @@ public:
|
||||||
// 获取节点透明度
|
// 获取节点透明度
|
||||||
virtual double getOpacity() const;
|
virtual double getOpacity() const;
|
||||||
|
|
||||||
// 获取节点形状
|
// 获取节点碰撞体
|
||||||
virtual ShapeBase * getShape() const;
|
virtual Collider * getCollider() const;
|
||||||
|
|
||||||
// 获取父节点
|
// 获取父节点
|
||||||
virtual Node * getParent() const;
|
virtual Node * getParent() const;
|
||||||
|
|
@ -291,50 +291,50 @@ public:
|
||||||
);
|
);
|
||||||
|
|
||||||
// 修改节点宽度
|
// 修改节点宽度
|
||||||
void setWidth(
|
virtual void setWidth(
|
||||||
double width
|
double width
|
||||||
);
|
);
|
||||||
|
|
||||||
// 修改节点高度
|
// 修改节点高度
|
||||||
void setHeight(
|
virtual void setHeight(
|
||||||
double height
|
double height
|
||||||
);
|
);
|
||||||
|
|
||||||
// 修改节点大小
|
// 修改节点大小
|
||||||
void setSize(
|
virtual void setSize(
|
||||||
double width,
|
double width,
|
||||||
double height
|
double height
|
||||||
);
|
);
|
||||||
|
|
||||||
// 修改节点大小
|
// 修改节点大小
|
||||||
void setSize(
|
virtual void setSize(
|
||||||
Size size
|
Size size
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置节点形状
|
// 设置碰撞体
|
||||||
virtual void setShape(
|
virtual void setCollider(
|
||||||
int type
|
int nColliderType
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置节点形状
|
// 设置碰撞体
|
||||||
virtual void setShape(
|
virtual void setCollider(
|
||||||
ShapeBase * pShape
|
Collider * pCollider
|
||||||
);
|
);
|
||||||
|
|
||||||
// 添加可碰撞节点的名称
|
// 添加可碰撞节点的名称
|
||||||
virtual void addCollider(
|
virtual void addColliableName(
|
||||||
String collliderName
|
String collliderName
|
||||||
);
|
);
|
||||||
|
|
||||||
#if HIGHER_THAN_VS2012
|
#if HIGHER_THAN_VS2012
|
||||||
// 添加多个可碰撞节点的名称
|
// 添加多个可碰撞节点的名称
|
||||||
virtual void addCollider(
|
virtual void addColliableName(
|
||||||
const InitList<String>& vCollliderName /* 名称数组 */
|
const InitList<String>& vCollliderName /* 名称数组 */
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// 移除可碰撞节点的名称
|
// 移除可碰撞节点的名称
|
||||||
virtual void removeCollider(
|
virtual void removeColliableName(
|
||||||
String collliderName
|
String collliderName
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -397,8 +397,8 @@ public:
|
||||||
double defaultPiovtY
|
double defaultPiovtY
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置节点是否包含默认形状(默认打开)
|
// 设置节点是否包含默认碰撞体(默认打开)
|
||||||
static void setDefaultShapeEnable(
|
static void setDefaultColliderEnable(
|
||||||
bool bEnable
|
bool bEnable
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -410,7 +410,7 @@ protected:
|
||||||
void _render();
|
void _render();
|
||||||
|
|
||||||
// 渲染图形
|
// 渲染图形
|
||||||
void _drawShape();
|
void _drawCollider();
|
||||||
|
|
||||||
// 节点被添加到场景时的执行程序
|
// 节点被添加到场景时的执行程序
|
||||||
void _onEnter();
|
void _onEnter();
|
||||||
|
|
@ -460,7 +460,7 @@ protected:
|
||||||
bool m_bDisplayedInScene;
|
bool m_bDisplayedInScene;
|
||||||
bool m_bSortChildrenNeeded;
|
bool m_bSortChildrenNeeded;
|
||||||
bool m_bTransformNeeded;
|
bool m_bTransformNeeded;
|
||||||
ShapeBase * m_pShape;
|
Collider * m_pCollider;
|
||||||
Scene * m_pParentScene;
|
Scene * m_pParentScene;
|
||||||
Node * m_pParent;
|
Node * m_pParent;
|
||||||
D2D1::Matrix3x2F m_MatriInitial;
|
D2D1::Matrix3x2F m_MatriInitial;
|
||||||
|
|
@ -885,12 +885,19 @@ public:
|
||||||
// 创建空菜单
|
// 创建空菜单
|
||||||
Menu();
|
Menu();
|
||||||
|
|
||||||
|
#if HIGHER_THAN_VS2012
|
||||||
|
// 创建菜单
|
||||||
|
Menu(
|
||||||
|
const InitList<Button*>& vButtons /* 按钮数组 */
|
||||||
|
);
|
||||||
|
#else
|
||||||
// 创建菜单
|
// 创建菜单
|
||||||
Menu(
|
Menu(
|
||||||
int number, /* 菜单中按钮的数量 */
|
int number, /* 菜单中按钮的数量 */
|
||||||
Button * button1, /* 第一个按钮 */
|
Button * button1, /* 第一个按钮 */
|
||||||
...
|
...
|
||||||
);
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
// 获取菜单是否禁用
|
// 获取菜单是否禁用
|
||||||
bool isEnable() const;
|
bool isEnable() const;
|
||||||
342
core/eshape.h
342
core/eshape.h
|
|
@ -1,202 +1,290 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "ebase.h"
|
#include "enode.h"
|
||||||
|
|
||||||
|
|
||||||
namespace e2d
|
namespace e2d
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
class CollisionManager;
|
|
||||||
|
|
||||||
// ĐÎ×´
|
// ĐÎ×´
|
||||||
class ShapeBase :
|
class Shape :
|
||||||
public Object
|
public Node
|
||||||
{
|
{
|
||||||
friend CollisionManager;
|
|
||||||
friend Node;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ShapeBase();
|
Shape();
|
||||||
|
|
||||||
virtual ~ShapeBase();
|
virtual ~Shape();
|
||||||
|
|
||||||
// 判断两形状的交集关系
|
// 获取样式
|
||||||
virtual int getRelationWith(
|
int getStyle() const;
|
||||||
ShapeBase * pShape
|
|
||||||
) const;
|
|
||||||
|
|
||||||
// 获取父节点
|
// 获取填充颜色
|
||||||
Node * getParentNode() const;
|
UINT32 getFillColor() const;
|
||||||
|
|
||||||
// 启用或关闭该形状
|
// 获取线条颜色
|
||||||
virtual void setEnable(
|
UINT32 getLineColor() const;
|
||||||
bool bEnable
|
|
||||||
|
// 获取线条宽度
|
||||||
|
double getStrokeWidth() const;
|
||||||
|
|
||||||
|
// 设置填充颜色
|
||||||
|
void setFillColor(
|
||||||
|
UINT32 fillColor
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置形状的可见性
|
// 设置线条颜色
|
||||||
void setVisiable(
|
void setLineColor(
|
||||||
bool bVisiable
|
UINT32 lineColor
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置绘制颜色
|
// 设置线条宽度
|
||||||
void setColor(
|
void setStrokeWidth(
|
||||||
UINT32 color
|
double strokeWidth
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置绘制透明度
|
// 设置样式
|
||||||
void setOpacity(
|
void setStyle(int style);
|
||||||
double opacity
|
|
||||||
);
|
|
||||||
|
|
||||||
// 设置大小跟随
|
|
||||||
void setAutoResize(
|
|
||||||
bool bEnable
|
|
||||||
);
|
|
||||||
|
|
||||||
// 获取 ID2D1Geometry 对象
|
|
||||||
virtual ID2D1Geometry * getD2dGeometry() const = 0;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// 转换形状
|
|
||||||
virtual void _transform();
|
|
||||||
|
|
||||||
// 重设大小
|
|
||||||
virtual void _resize() = 0;
|
|
||||||
|
|
||||||
// äÖČžĐÎ×´
|
// äÖČžĐÎ×´
|
||||||
virtual void _render();
|
virtual void onRender() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool m_bEnable;
|
// 渲染轮廓
|
||||||
bool m_bIsVisiable;
|
virtual void _renderLine() = 0;
|
||||||
bool m_bAutoResize;
|
|
||||||
UINT32 m_nColor;
|
// 渲染填充色
|
||||||
float m_fOpacity;
|
virtual void _renderFill() = 0;
|
||||||
Node * m_pParentNode;
|
|
||||||
ID2D1TransformedGeometry * m_pTransformedShape;
|
protected:
|
||||||
|
int m_nStyle;
|
||||||
|
float m_fStrokeWidth;
|
||||||
|
UINT32 m_nLineColor;
|
||||||
|
UINT32 m_nFillColor;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// žŘĐÎ
|
// žŘĐÎ
|
||||||
class ShapeRectangle :
|
class Rect :
|
||||||
public ShapeBase
|
public Shape
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// 创建一个默认矩形
|
Rect();
|
||||||
ShapeRectangle();
|
|
||||||
|
|
||||||
// 根据左上角坐标和宽高创建矩形
|
Rect(
|
||||||
ShapeRectangle(
|
double width, /* 宽度 */
|
||||||
double x,
|
double height /* 高度 */
|
||||||
double y,
|
|
||||||
double width,
|
|
||||||
double height
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// 创建一个和节点位置大小相同的矩形
|
Rect(
|
||||||
ShapeRectangle(
|
Size size /* 宽度和高度 */
|
||||||
Node * node
|
|
||||||
);
|
);
|
||||||
|
|
||||||
virtual ~ShapeRectangle();
|
Rect(
|
||||||
|
double top, /* 左上角横坐标 */
|
||||||
// 修改矩形大小
|
double left, /* 左上角纵坐标 */
|
||||||
void setRect(
|
double width, /* 宽度 */
|
||||||
double left,
|
double height /* 高度 */
|
||||||
double top,
|
|
||||||
double right,
|
|
||||||
double bottom
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// 获取 ID2D1Geometry 对象
|
Rect(
|
||||||
virtual ID2D1RectangleGeometry * getD2dGeometry() const override;
|
Point topLeft, /* 左上角坐标 */
|
||||||
|
Size size /* 宽度和高度 */
|
||||||
|
);
|
||||||
|
|
||||||
|
virtual ~Rect();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// 重设大小
|
// 渲染轮廓
|
||||||
virtual void _resize();
|
virtual void _renderLine() override;
|
||||||
|
|
||||||
|
// 渲染填充色
|
||||||
|
virtual void _renderFill() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 圆角矩形
|
||||||
|
class RoundRect :
|
||||||
|
public Shape
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RoundRect();
|
||||||
|
|
||||||
|
RoundRect(
|
||||||
|
double width, /* 宽度 */
|
||||||
|
double height, /* 高度 */
|
||||||
|
double radiusX, /* 圆角半径 */
|
||||||
|
double radiusY /* 圆角半径 */
|
||||||
|
);
|
||||||
|
|
||||||
|
RoundRect(
|
||||||
|
Size size, /* 宽度和高度 */
|
||||||
|
double radiusX, /* 圆角半径 */
|
||||||
|
double radiusY /* 圆角半径 */
|
||||||
|
);
|
||||||
|
|
||||||
|
RoundRect(
|
||||||
|
double top, /* 左上角横坐标 */
|
||||||
|
double left, /* 左上角纵坐标 */
|
||||||
|
double width, /* 宽度 */
|
||||||
|
double height, /* 高度 */
|
||||||
|
double radiusX, /* 圆角半径 */
|
||||||
|
double radiusY /* 圆角半径 */
|
||||||
|
);
|
||||||
|
|
||||||
|
RoundRect(
|
||||||
|
Point topLeft, /* 左上角坐标 */
|
||||||
|
Size size, /* 宽度和高度 */
|
||||||
|
double radiusX, /* 圆角半径 */
|
||||||
|
double radiusY /* 圆角半径 */
|
||||||
|
);
|
||||||
|
|
||||||
|
virtual ~RoundRect();
|
||||||
|
|
||||||
|
// 获取圆角半径
|
||||||
|
double getRadiusX() const;
|
||||||
|
|
||||||
|
// 获取圆角半径
|
||||||
|
double getRadiusY() const;
|
||||||
|
|
||||||
|
// 设置圆角半径
|
||||||
|
virtual void setRadiusX(
|
||||||
|
double radiusX
|
||||||
|
);
|
||||||
|
|
||||||
|
// 设置圆角半径
|
||||||
|
virtual void setRadiusY(
|
||||||
|
double radiusY
|
||||||
|
);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ID2D1RectangleGeometry * m_pD2dRectangle;
|
// 渲染轮廓
|
||||||
|
virtual void _renderLine() override;
|
||||||
|
|
||||||
|
// 渲染填充色
|
||||||
|
virtual void _renderFill() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
float m_fRadiusX;
|
||||||
|
float m_fRadiusY;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Ô˛ĐÎ
|
// Ô˛ĐÎ
|
||||||
class ShapeCircle :
|
class Circle :
|
||||||
public ShapeBase
|
public Shape
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// 创建一个默认圆形
|
Circle();
|
||||||
ShapeCircle();
|
|
||||||
|
|
||||||
// 根据圆心和半径创建圆形
|
Circle(
|
||||||
ShapeCircle(
|
double radius /* 半径 */
|
||||||
Point center,
|
);
|
||||||
|
|
||||||
|
Circle(
|
||||||
|
Point center, /* 圆心坐标 */
|
||||||
|
double radius /* 半径 */
|
||||||
|
);
|
||||||
|
|
||||||
|
Circle(
|
||||||
|
double centerX, /* 圆心横坐标 */
|
||||||
|
double centerY, /* 圆心纵坐标 */
|
||||||
|
double radius /* 半径 */
|
||||||
|
);
|
||||||
|
|
||||||
|
virtual ~Circle();
|
||||||
|
|
||||||
|
// 获取半径
|
||||||
|
double getRadius() const;
|
||||||
|
|
||||||
|
// 设置半径
|
||||||
|
virtual void setRadius(
|
||||||
double radius
|
double radius
|
||||||
);
|
);
|
||||||
|
|
||||||
// 创建一个和节点位置大小相同的圆形
|
public:
|
||||||
ShapeCircle(
|
// 禁用的函数
|
||||||
Node * node
|
void setWidth() {}
|
||||||
);
|
|
||||||
|
|
||||||
virtual ~ShapeCircle();
|
// 禁用的函数
|
||||||
|
void setHeight() {}
|
||||||
|
|
||||||
// 修改圆形大小
|
// 禁用的函数
|
||||||
void setCircle(
|
void setSize() {}
|
||||||
Point center,
|
|
||||||
double radius
|
|
||||||
);
|
|
||||||
|
|
||||||
// 获取 ID2D1Geometry 对象
|
|
||||||
virtual ID2D1EllipseGeometry * getD2dGeometry() const override;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// 重设大小
|
// 渲染轮廓
|
||||||
virtual void _resize();
|
virtual void _renderLine() override;
|
||||||
|
|
||||||
|
// 渲染填充色
|
||||||
|
virtual void _renderFill() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ID2D1EllipseGeometry * m_pD2dCircle;
|
float m_fRadius;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// ÍÖÔ˛ĐÎ
|
// ÍÖÔ˛ĐÎ
|
||||||
class ShapeEllipse :
|
class Ellipse :
|
||||||
public ShapeBase
|
public Shape
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// 创建一个默认椭圆
|
Ellipse();
|
||||||
ShapeEllipse();
|
|
||||||
|
|
||||||
// 根据圆心和半径创建椭圆
|
Ellipse(
|
||||||
ShapeEllipse(
|
double radiusX, /* 横轴半径 */
|
||||||
Point center,
|
double radiusY /* 纵轴半径 */
|
||||||
double radiusX,
|
);
|
||||||
|
|
||||||
|
Ellipse(
|
||||||
|
Point center, /* 圆心坐标 */
|
||||||
|
double radiusX, /* 横轴半径 */
|
||||||
|
double radiusY /* 纵轴半径 */
|
||||||
|
);
|
||||||
|
|
||||||
|
Ellipse(
|
||||||
|
double centerX, /* 圆心横坐标 */
|
||||||
|
double centerY, /* 圆心纵坐标 */
|
||||||
|
double radiusX, /* 横轴半径 */
|
||||||
|
double radiusY /* 纵轴半径 */
|
||||||
|
);
|
||||||
|
|
||||||
|
virtual ~Ellipse();
|
||||||
|
|
||||||
|
// 获取横轴半径
|
||||||
|
double getRadiusX() const;
|
||||||
|
|
||||||
|
// 获取纵轴半径
|
||||||
|
double getRadiusY() const;
|
||||||
|
|
||||||
|
// 设置横轴半径
|
||||||
|
virtual void setRadiusX(
|
||||||
|
double radiusX
|
||||||
|
);
|
||||||
|
|
||||||
|
// 设置纵轴半径
|
||||||
|
virtual void setRadiusY(
|
||||||
double radiusY
|
double radiusY
|
||||||
);
|
);
|
||||||
|
|
||||||
// 创建一个和节点位置大小相同的椭圆
|
public:
|
||||||
ShapeEllipse(
|
// 禁用的函数
|
||||||
Node * node
|
void setWidth() {}
|
||||||
);
|
|
||||||
|
|
||||||
virtual ~ShapeEllipse();
|
// 禁用的函数
|
||||||
|
void setHeight() {}
|
||||||
|
|
||||||
// 修改椭圆大小
|
// 禁用的函数
|
||||||
void setEllipse(
|
void setSize() {}
|
||||||
Point center,
|
|
||||||
double radiusX,
|
|
||||||
double radiusY
|
|
||||||
);
|
|
||||||
|
|
||||||
// 获取 ID2D1Geometry 对象
|
|
||||||
virtual ID2D1EllipseGeometry * getD2dGeometry() const override;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// 重设大小
|
// 渲染轮廓
|
||||||
virtual void _resize();
|
virtual void _renderLine() override;
|
||||||
|
|
||||||
|
// 渲染填充色
|
||||||
|
virtual void _renderFill() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ID2D1EllipseGeometry * m_pD2dEllipse;
|
float m_fRadiusX;
|
||||||
|
float m_fRadiusY;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -8,7 +8,7 @@ namespace e2d
|
||||||
class TimerManager;
|
class TimerManager;
|
||||||
class MusicManager;
|
class MusicManager;
|
||||||
class InputManager;
|
class InputManager;
|
||||||
class CollisionManager;
|
class ColliderManager;
|
||||||
|
|
||||||
// 随机数产生器
|
// 随机数产生器
|
||||||
class Random
|
class Random
|
||||||
|
|
@ -196,7 +196,7 @@ protected:
|
||||||
class CollisionListener
|
class CollisionListener
|
||||||
: public Listener
|
: public Listener
|
||||||
{
|
{
|
||||||
friend CollisionManager;
|
friend ColliderManager;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CollisionListener();
|
CollisionListener();
|
||||||
|
|
@ -211,6 +211,10 @@
|
||||||
<ClCompile Include="..\..\core\Base\Renderer.cpp" />
|
<ClCompile Include="..\..\core\Base\Renderer.cpp" />
|
||||||
<ClCompile Include="..\..\core\Base\Time.cpp" />
|
<ClCompile Include="..\..\core\Base\Time.cpp" />
|
||||||
<ClCompile Include="..\..\core\Base\Window.cpp" />
|
<ClCompile Include="..\..\core\Base\Window.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Collider\Collider.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Collider\ColliderCircle.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Collider\ColliderEllipse.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Collider\ColliderRect.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Font.cpp" />
|
<ClCompile Include="..\..\core\Common\Font.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Object.cpp" />
|
<ClCompile Include="..\..\core\Common\Object.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Point.cpp" />
|
<ClCompile Include="..\..\core\Common\Point.cpp" />
|
||||||
|
|
@ -222,19 +226,20 @@
|
||||||
<ClCompile Include="..\..\core\Manager\InputManager.cpp" />
|
<ClCompile Include="..\..\core\Manager\InputManager.cpp" />
|
||||||
<ClCompile Include="..\..\core\Manager\MusicManager.cpp" />
|
<ClCompile Include="..\..\core\Manager\MusicManager.cpp" />
|
||||||
<ClCompile Include="..\..\core\Manager\ObjectManager.cpp" />
|
<ClCompile Include="..\..\core\Manager\ObjectManager.cpp" />
|
||||||
<ClCompile Include="..\..\core\Manager\CollisionManager.cpp" />
|
<ClCompile Include="..\..\core\Manager\ColliderManager.cpp" />
|
||||||
<ClCompile Include="..\..\core\Manager\SceneManager.cpp" />
|
<ClCompile Include="..\..\core\Manager\SceneManager.cpp" />
|
||||||
<ClCompile Include="..\..\core\Manager\TimerManager.cpp" />
|
<ClCompile Include="..\..\core\Manager\TimerManager.cpp" />
|
||||||
<ClCompile Include="..\..\core\Node\Button.cpp" />
|
<ClCompile Include="..\..\core\Node\Button.cpp" />
|
||||||
<ClCompile Include="..\..\core\Node\ButtonToggle.cpp" />
|
<ClCompile Include="..\..\core\Node\ButtonToggle.cpp" />
|
||||||
<ClCompile Include="..\..\core\Node\Menu.cpp" />
|
<ClCompile Include="..\..\core\Node\Menu.cpp" />
|
||||||
<ClCompile Include="..\..\core\Node\Node.cpp" />
|
<ClCompile Include="..\..\core\Node\Node.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Node\Shape\Circle.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Node\Shape\Ellipse.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Node\Shape\Rect.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Node\Shape\RoundRect.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Node\Shape\Shape.cpp" />
|
||||||
<ClCompile Include="..\..\core\Node\Sprite.cpp" />
|
<ClCompile Include="..\..\core\Node\Sprite.cpp" />
|
||||||
<ClCompile Include="..\..\core\Node\Text.cpp" />
|
<ClCompile Include="..\..\core\Node\Text.cpp" />
|
||||||
<ClCompile Include="..\..\core\Shape\ShapeBase.cpp" />
|
|
||||||
<ClCompile Include="..\..\core\Shape\ShapeCircle.cpp" />
|
|
||||||
<ClCompile Include="..\..\core\Shape\ShapeEllipse.cpp" />
|
|
||||||
<ClCompile Include="..\..\core\Shape\ShapeRectangle.cpp" />
|
|
||||||
<ClCompile Include="..\..\core\Tool\CollisionListener.cpp" />
|
<ClCompile Include="..\..\core\Tool\CollisionListener.cpp" />
|
||||||
<ClCompile Include="..\..\core\Tool\Data.cpp" />
|
<ClCompile Include="..\..\core\Tool\Data.cpp" />
|
||||||
<ClCompile Include="..\..\core\Tool\InputListener.cpp" />
|
<ClCompile Include="..\..\core\Tool\InputListener.cpp" />
|
||||||
|
|
@ -249,16 +254,17 @@
|
||||||
<ClCompile Include="..\..\core\Transition\TransitionMove.cpp" />
|
<ClCompile Include="..\..\core\Transition\TransitionMove.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\core\eactions.h" />
|
<ClInclude Include="..\..\core\eaction.h" />
|
||||||
<ClInclude Include="..\..\core\easy2d.h" />
|
<ClInclude Include="..\..\core\easy2d.h" />
|
||||||
<ClInclude Include="..\..\core\ebase.h" />
|
<ClInclude Include="..\..\core\ebase.h" />
|
||||||
<ClInclude Include="..\..\core\ecommon.h" />
|
<ClInclude Include="..\..\core\ecommon.h" />
|
||||||
<ClInclude Include="..\..\core\eshape.h" />
|
<ClInclude Include="..\..\core\ecollider.h" />
|
||||||
<ClInclude Include="..\..\core\emacros.h" />
|
<ClInclude Include="..\..\core\emacros.h" />
|
||||||
<ClInclude Include="..\..\core\emanagers.h" />
|
<ClInclude Include="..\..\core\emanager.h" />
|
||||||
<ClInclude Include="..\..\core\enodes.h" />
|
<ClInclude Include="..\..\core\enode.h" />
|
||||||
<ClInclude Include="..\..\core\etools.h" />
|
<ClInclude Include="..\..\core\eshape.h" />
|
||||||
<ClInclude Include="..\..\core\etransitions.h" />
|
<ClInclude Include="..\..\core\etool.h" />
|
||||||
|
<ClInclude Include="..\..\core\etransition.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,11 @@
|
||||||
<Filter Include="Common">
|
<Filter Include="Common">
|
||||||
<UniqueIdentifier>{be5d9314-b00a-4f11-bd2a-1f720dc32407}</UniqueIdentifier>
|
<UniqueIdentifier>{be5d9314-b00a-4f11-bd2a-1f720dc32407}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="Shape">
|
<Filter Include="Collider">
|
||||||
<UniqueIdentifier>{d5f86335-f3a0-450d-92a3-7edd9348d995}</UniqueIdentifier>
|
<UniqueIdentifier>{765a2a00-5764-40f9-a15d-17b0640c6b53}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Node\Shape">
|
||||||
|
<UniqueIdentifier>{eb72b49a-5b2f-4fc0-9ad2-8f5e02efac6f}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
@ -168,21 +171,9 @@
|
||||||
<ClCompile Include="..\..\core\Tool\Path.cpp">
|
<ClCompile Include="..\..\core\Tool\Path.cpp">
|
||||||
<Filter>Tool</Filter>
|
<Filter>Tool</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\core\Shape\ShapeRectangle.cpp">
|
|
||||||
<Filter>Shape</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\Shape\ShapeEllipse.cpp">
|
|
||||||
<Filter>Shape</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\Shape\ShapeCircle.cpp">
|
|
||||||
<Filter>Shape</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\Tool\InputListener.cpp">
|
<ClCompile Include="..\..\core\Tool\InputListener.cpp">
|
||||||
<Filter>Tool</Filter>
|
<Filter>Tool</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\core\Manager\CollisionManager.cpp">
|
|
||||||
<Filter>Manager</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\Tool\CollisionListener.cpp">
|
<ClCompile Include="..\..\core\Tool\CollisionListener.cpp">
|
||||||
<Filter>Tool</Filter>
|
<Filter>Tool</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
@ -195,20 +186,48 @@
|
||||||
<ClCompile Include="..\..\core\Action\ActionFunc.cpp">
|
<ClCompile Include="..\..\core\Action\ActionFunc.cpp">
|
||||||
<Filter>Action</Filter>
|
<Filter>Action</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\core\Shape\ShapeBase.cpp">
|
<ClCompile Include="..\..\core\Collider\Collider.cpp">
|
||||||
<Filter>Shape</Filter>
|
<Filter>Collider</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\Collider\ColliderCircle.cpp">
|
||||||
|
<Filter>Collider</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\Collider\ColliderEllipse.cpp">
|
||||||
|
<Filter>Collider</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\Collider\ColliderRect.cpp">
|
||||||
|
<Filter>Collider</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\Manager\ColliderManager.cpp">
|
||||||
|
<Filter>Manager</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\Node\Shape\Shape.cpp">
|
||||||
|
<Filter>Node\Shape</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\Node\Shape\Circle.cpp">
|
||||||
|
<Filter>Node\Shape</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\Node\Shape\Rect.cpp">
|
||||||
|
<Filter>Node\Shape</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\Node\Shape\RoundRect.cpp">
|
||||||
|
<Filter>Node\Shape</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\Node\Shape\Ellipse.cpp">
|
||||||
|
<Filter>Node\Shape</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\core\etools.h" />
|
|
||||||
<ClInclude Include="..\..\core\enodes.h" />
|
|
||||||
<ClInclude Include="..\..\core\emacros.h" />
|
<ClInclude Include="..\..\core\emacros.h" />
|
||||||
<ClInclude Include="..\..\core\ecommon.h" />
|
<ClInclude Include="..\..\core\ecommon.h" />
|
||||||
<ClInclude Include="..\..\core\ebase.h" />
|
<ClInclude Include="..\..\core\ebase.h" />
|
||||||
<ClInclude Include="..\..\core\easy2d.h" />
|
<ClInclude Include="..\..\core\easy2d.h" />
|
||||||
<ClInclude Include="..\..\core\eactions.h" />
|
<ClInclude Include="..\..\core\ecollider.h" />
|
||||||
<ClInclude Include="..\..\core\etransitions.h" />
|
|
||||||
<ClInclude Include="..\..\core\emanagers.h" />
|
|
||||||
<ClInclude Include="..\..\core\eshape.h" />
|
<ClInclude Include="..\..\core\eshape.h" />
|
||||||
|
<ClInclude Include="..\..\core\etransition.h" />
|
||||||
|
<ClInclude Include="..\..\core\emanager.h" />
|
||||||
|
<ClInclude Include="..\..\core\enode.h" />
|
||||||
|
<ClInclude Include="..\..\core\etool.h" />
|
||||||
|
<ClInclude Include="..\..\core\eaction.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
Loading…
Reference in New Issue