new feature: shape and collision.
This commit is contained in:
parent
1a52f19dd4
commit
f6eecee3aa
|
|
@ -56,7 +56,7 @@ void e2d::EAction::setTarget(ENode * node)
|
|||
|
||||
e2d::EAction * e2d::EAction::reverse() const
|
||||
{
|
||||
assert(0);
|
||||
ASSERT(false, "EAction cannot be reversed!");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ void e2d::EActionGradual::_init()
|
|||
|
||||
void e2d::EActionGradual::_update()
|
||||
{
|
||||
EAction::_update();
|
||||
// 判断时间间隔是否足够
|
||||
if (m_fDuration == 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -21,9 +21,9 @@ e2d::EActionSequence::EActionSequence(int number, EAction * action1, ...) :
|
|||
|
||||
e2d::EActionSequence::~EActionSequence()
|
||||
{
|
||||
for (auto action = m_vActions.begin(); action != m_vActions.end(); action++)
|
||||
for (auto action : m_vActions)
|
||||
{
|
||||
SafeRelease(&(*action));
|
||||
SafeRelease(&action);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -33,9 +33,9 @@ void e2d::EActionSequence::_init()
|
|||
// 将所有动作与目标绑定
|
||||
if (m_pTarget)
|
||||
{
|
||||
for (auto action = m_vActions.begin(); action != m_vActions.end(); action++)
|
||||
for (auto action : m_vActions)
|
||||
{
|
||||
(*action)->setTarget(m_pTarget);
|
||||
action->setTarget(m_pTarget);
|
||||
}
|
||||
}
|
||||
// 初始化第一个动作
|
||||
|
|
@ -66,18 +66,18 @@ void e2d::EActionSequence::_update()
|
|||
void e2d::EActionSequence::_reset()
|
||||
{
|
||||
EAction::_reset();
|
||||
for (auto action = m_vActions.begin(); action != m_vActions.end(); action++)
|
||||
for (auto action : m_vActions)
|
||||
{
|
||||
(*action)->_reset();
|
||||
action->_reset();
|
||||
}
|
||||
m_nActionIndex = 0;
|
||||
}
|
||||
|
||||
void e2d::EActionSequence::_resetTime()
|
||||
{
|
||||
for (auto action = m_vActions.begin(); action != m_vActions.end(); action++)
|
||||
for (auto action : m_vActions)
|
||||
{
|
||||
(*action)->_resetTime();
|
||||
action->_resetTime();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -93,9 +93,9 @@ void e2d::EActionSequence::addAction(EAction * action)
|
|||
e2d::EActionSequence * e2d::EActionSequence::clone() const
|
||||
{
|
||||
auto a = new EActionSequence();
|
||||
for (auto action = m_vActions.begin(); action != m_vActions.end(); action++)
|
||||
for (auto action : m_vActions)
|
||||
{
|
||||
a->addAction((*action)->clone());
|
||||
a->addAction(action->clone());
|
||||
}
|
||||
return a;
|
||||
}
|
||||
|
|
@ -103,15 +103,15 @@ e2d::EActionSequence * e2d::EActionSequence::clone() const
|
|||
e2d::EActionSequence * e2d::EActionSequence::reverse(bool actionReverse) const
|
||||
{
|
||||
auto a = new EActionSequence();
|
||||
for (auto action = m_vActions.begin(); action != m_vActions.end(); action++)
|
||||
for (auto action : m_vActions)
|
||||
{
|
||||
if (actionReverse)
|
||||
{
|
||||
a->addAction((*action)->reverse());
|
||||
a->addAction(action->reverse());
|
||||
}
|
||||
else
|
||||
{
|
||||
a->addAction((*action)->clone());
|
||||
a->addAction(action->clone());
|
||||
}
|
||||
}
|
||||
// 将动作顺序逆序排列
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ e2d::EAnimation::EAnimation(float invertal)
|
|||
|
||||
e2d::EAnimation::~EAnimation()
|
||||
{
|
||||
for (auto frame = m_vFrames.begin(); frame != m_vFrames.end(); frame++)
|
||||
for (auto frame : m_vFrames)
|
||||
{
|
||||
SafeRelease(&(*frame));
|
||||
SafeRelease(&frame);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -62,7 +62,7 @@ void e2d::EAnimation::_reset()
|
|||
m_nFrameIndex = 0;
|
||||
}
|
||||
|
||||
void e2d::EAnimation::addKeyframe(EKeyframe * frame)
|
||||
void e2d::EAnimation::addKeyframe(EImage * frame)
|
||||
{
|
||||
if (frame)
|
||||
{
|
||||
|
|
@ -74,9 +74,9 @@ void e2d::EAnimation::addKeyframe(EKeyframe * frame)
|
|||
e2d::EAnimation * e2d::EAnimation::clone() const
|
||||
{
|
||||
auto a = new EAnimation(m_fInterval);
|
||||
for (auto frame = m_vFrames.begin(); frame != m_vFrames.end(); frame++)
|
||||
for (auto frame : m_vFrames)
|
||||
{
|
||||
a->addKeyframe((*frame));
|
||||
a->addKeyframe(frame);
|
||||
}
|
||||
return a;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -167,6 +167,8 @@ void e2d::EGame::uninit()
|
|||
EMusicManager::__uninit();
|
||||
// 恢复计时操作
|
||||
ETime::__uninit();
|
||||
// 헌왕暠튬뻠닸
|
||||
EImage::clearCache();
|
||||
// 删除渲染相关资源
|
||||
ERenderer::__discardResources();
|
||||
// 刷新内存池
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ void e2d::ERenderer::__render()
|
|||
if (FAILED(hr))
|
||||
{
|
||||
// 渲染时产生了未知的错误,退出游戏
|
||||
ASSERT(false, L"Renderer error!");
|
||||
ASSERT(false, L"Renderer error: %#X!", hr);
|
||||
EGame::quit();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,83 +1,82 @@
|
|||
#include "..\enodes.h"
|
||||
#include <map>
|
||||
|
||||
|
||||
struct ResKey
|
||||
{
|
||||
ResKey() { resNameHash = 0; resTypeHash = 0; }
|
||||
|
||||
bool operator < (ResKey const& key) const
|
||||
{
|
||||
if (resNameHash > key.resNameHash)
|
||||
return true;
|
||||
else if (resNameHash == key.resNameHash)
|
||||
return resTypeHash > key.resTypeHash;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t resNameHash;
|
||||
size_t resTypeHash;
|
||||
};
|
||||
|
||||
static std::map<size_t, ID2D1Bitmap*> s_mBitmapsFromFile;
|
||||
static std::map<ResKey, ID2D1Bitmap*> s_mBitmapsFromResource;
|
||||
|
||||
|
||||
e2d::EImage::EImage()
|
||||
: m_pBitmap(nullptr)
|
||||
, m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_fSourceClipWidth(0)
|
||||
, m_fSourceClipHeight(0)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EImage::EImage(LPCTSTR fileName)
|
||||
e2d::EImage::EImage(LPCTSTR strFileName)
|
||||
{
|
||||
this->loadFromFile(fileName);
|
||||
this->loadFrom(strFileName);
|
||||
}
|
||||
|
||||
e2d::EImage::EImage(LPCTSTR resourceName, LPCTSTR resourceType)
|
||||
e2d::EImage::EImage(LPCTSTR strFileName, float nClipX, float nClipY, float nClipWidth, float nClipHeight)
|
||||
{
|
||||
this->loadFromResource(resourceName, resourceType);
|
||||
this->loadFrom(strFileName);
|
||||
this->clip(nClipX, nClipY, nClipWidth, nClipHeight);
|
||||
}
|
||||
|
||||
e2d::EImage::~EImage()
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::EImage::loadFromFile(const EString & fileName)
|
||||
void e2d::EImage::loadFrom(const EString & strFilePath)
|
||||
{
|
||||
WARN_IF(fileName.isEmpty(), "EImage cannot load bitmap from NULL file name.");
|
||||
WARN_IF(strFilePath.isEmpty(), "EImage cannot load bitmap from NULL file name.");
|
||||
|
||||
if (fileName.isEmpty())
|
||||
if (strFilePath.isEmpty())
|
||||
return;
|
||||
|
||||
if (!e2d::EImage::preload(fileName))
|
||||
if (!EImage::preload(strFilePath))
|
||||
{
|
||||
WARN_IF(true, "Load EImage from file failed!");
|
||||
return;
|
||||
}
|
||||
|
||||
m_pBitmap = s_mBitmapsFromFile.at(fileName.hash());
|
||||
m_pBitmap = s_mBitmapsFromFile.at(strFilePath.hash());
|
||||
m_fSourceClipX = m_fSourceClipY = 0;
|
||||
m_fSourceClipWidth = m_pBitmap->GetSize().width;
|
||||
m_fSourceClipHeight = m_pBitmap->GetSize().height;
|
||||
}
|
||||
|
||||
void e2d::EImage::loadFromResource(LPCTSTR resourceName, LPCTSTR resourceType)
|
||||
void e2d::EImage::loadFrom(const EString & strFilePath, float x, float y, float width, float height)
|
||||
{
|
||||
WARN_IF(!resourceName || !resourceType, "EImage cannot load bitmap from NULL resource.");
|
||||
loadFrom(strFilePath);
|
||||
clip(x, y, width, height);
|
||||
}
|
||||
|
||||
if (!resourceName || !resourceType)
|
||||
return;
|
||||
|
||||
if (!e2d::EImage::preload(resourceName, resourceType))
|
||||
void e2d::EImage::clip(float x, float y, float width, float height)
|
||||
{
|
||||
if (m_pBitmap)
|
||||
{
|
||||
WARN_IF(true, "Load EImage from resource failed!");
|
||||
return;
|
||||
m_fSourceClipX = min(max(x, 0), this->getSourceWidth());
|
||||
m_fSourceClipY = min(max(y, 0), this->getSourceHeight());
|
||||
m_fSourceClipWidth = min(max(width, 0), this->getSourceWidth() - m_fSourceClipX);
|
||||
m_fSourceClipHeight = min(max(height, 0), this->getSourceHeight() - m_fSourceClipY);
|
||||
}
|
||||
}
|
||||
|
||||
ResKey key;
|
||||
std::hash<LPCTSTR> h;
|
||||
key.resNameHash = h(resourceName);
|
||||
key.resTypeHash = h(resourceType);
|
||||
float e2d::EImage::getWidth() const
|
||||
{
|
||||
return m_fSourceClipWidth;
|
||||
}
|
||||
|
||||
m_pBitmap = s_mBitmapsFromResource.at(key);
|
||||
float e2d::EImage::getHeight() const
|
||||
{
|
||||
return m_fSourceClipHeight;
|
||||
}
|
||||
|
||||
e2d::ESize e2d::EImage::getSize() const
|
||||
{
|
||||
return ESize(m_fSourceClipWidth, m_fSourceClipHeight);
|
||||
}
|
||||
|
||||
float e2d::EImage::getSourceWidth() const
|
||||
|
|
@ -116,6 +115,21 @@ e2d::ESize e2d::EImage::getSourceSize() const
|
|||
}
|
||||
}
|
||||
|
||||
float e2d::EImage::getClipX() const
|
||||
{
|
||||
return m_fSourceClipX;
|
||||
}
|
||||
|
||||
float e2d::EImage::getClipY() const
|
||||
{
|
||||
return m_fSourceClipY;
|
||||
}
|
||||
|
||||
e2d::EPoint e2d::EImage::getClipPos() const
|
||||
{
|
||||
return EPoint(m_fSourceClipX, m_fSourceClipY);
|
||||
}
|
||||
|
||||
bool e2d::EImage::preload(const EString & fileName)
|
||||
{
|
||||
if (s_mBitmapsFromFile.find(fileName.hash()) != s_mBitmapsFromFile.end())
|
||||
|
|
@ -192,161 +206,16 @@ bool e2d::EImage::preload(const EString & fileName)
|
|||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
||||
bool e2d::EImage::preload(LPCTSTR resourceName, LPCTSTR resourceType)
|
||||
{
|
||||
std::hash<LPCTSTR> h;
|
||||
|
||||
ResKey key;
|
||||
key.resNameHash = h(resourceName);
|
||||
key.resTypeHash = h(resourceType);
|
||||
|
||||
if (s_mBitmapsFromResource.find(key) != s_mBitmapsFromResource.end())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
IWICBitmapDecoder *pDecoder = nullptr;
|
||||
IWICBitmapFrameDecode *pSource = nullptr;
|
||||
IWICStream *pStream = nullptr;
|
||||
IWICFormatConverter *pConverter = nullptr;
|
||||
ID2D1Bitmap *pBitmap = nullptr;
|
||||
|
||||
HRSRC imageResHandle = nullptr;
|
||||
HGLOBAL imageResDataHandle = nullptr;
|
||||
void *pImageFile = nullptr;
|
||||
DWORD imageFileSize = 0;
|
||||
|
||||
// 定位资源
|
||||
imageResHandle = ::FindResourceW(HINST_THISCOMPONENT, resourceName, resourceType);
|
||||
|
||||
hr = imageResHandle ? S_OK : E_FAIL;
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 加载资源
|
||||
imageResDataHandle = ::LoadResource(HINST_THISCOMPONENT, imageResHandle);
|
||||
|
||||
hr = imageResDataHandle ? S_OK : E_FAIL;
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 获取文件指针,并锁定资源
|
||||
pImageFile = ::LockResource(imageResDataHandle);
|
||||
|
||||
hr = pImageFile ? S_OK : E_FAIL;
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 计算大小
|
||||
imageFileSize = SizeofResource(HINST_THISCOMPONENT, imageResHandle);
|
||||
|
||||
hr = imageFileSize ? S_OK : E_FAIL;
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 创建 WIC 流
|
||||
hr = ERenderer::getIWICImagingFactory()->CreateStream(&pStream);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 初始化流
|
||||
hr = pStream->InitializeFromMemory(
|
||||
reinterpret_cast<BYTE*>(pImageFile),
|
||||
imageFileSize
|
||||
);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 创建流的解码器
|
||||
hr = ERenderer::getIWICImagingFactory()->CreateDecoderFromStream(
|
||||
pStream,
|
||||
NULL,
|
||||
WICDecodeMetadataCacheOnLoad,
|
||||
&pDecoder
|
||||
);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 创建初始化框架
|
||||
hr = pDecoder->GetFrame(0, &pSource);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 创建图片格式转换器
|
||||
// (DXGI_FORMAT_B8G8R8A8_UNORM + D2D1_ALPHA_MODE_PREMULTIPLIED).
|
||||
hr = ERenderer::getIWICImagingFactory()->CreateFormatConverter(&pConverter);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 图片格式转换成 32bppPBGRA
|
||||
hr = pConverter->Initialize(
|
||||
pSource,
|
||||
GUID_WICPixelFormat32bppPBGRA,
|
||||
WICBitmapDitherTypeNone,
|
||||
NULL,
|
||||
0.f,
|
||||
WICBitmapPaletteTypeMedianCut
|
||||
);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 从 WIC 位图创建一个 Direct2D 位图
|
||||
hr = ERenderer::getRenderTarget()->CreateBitmapFromWicBitmap(
|
||||
pConverter,
|
||||
NULL,
|
||||
&pBitmap
|
||||
);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
std::hash<LPCTSTR> h;
|
||||
|
||||
ResKey key;
|
||||
key.resNameHash = h(resourceName);
|
||||
key.resTypeHash = h(resourceType);
|
||||
|
||||
s_mBitmapsFromResource.insert(
|
||||
std::map<ResKey, ID2D1Bitmap*>::value_type(
|
||||
key,
|
||||
pBitmap)
|
||||
);
|
||||
}
|
||||
|
||||
// 释放相关资源
|
||||
SafeReleaseInterface(&pDecoder);
|
||||
SafeReleaseInterface(&pSource);
|
||||
SafeReleaseInterface(&pStream);
|
||||
SafeReleaseInterface(&pConverter);
|
||||
|
||||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
||||
void e2d::EImage::clearCache()
|
||||
{
|
||||
for (auto child = s_mBitmapsFromFile.begin(); child != s_mBitmapsFromFile.end(); child++)
|
||||
for (auto child : s_mBitmapsFromFile)
|
||||
{
|
||||
SafeReleaseInterface(&(*child).second);
|
||||
}
|
||||
for (auto child = s_mBitmapsFromFile.begin(); child != s_mBitmapsFromFile.end(); child++)
|
||||
{
|
||||
SafeReleaseInterface(&(*child).second);
|
||||
SafeReleaseInterface(&child.second);
|
||||
}
|
||||
s_mBitmapsFromFile.clear();
|
||||
s_mBitmapsFromResource.clear();
|
||||
}
|
||||
|
||||
ID2D1Bitmap * e2d::EImage::_getBitmap()
|
||||
ID2D1Bitmap * e2d::EImage::getBitmap()
|
||||
{
|
||||
return m_pBitmap;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,118 +0,0 @@
|
|||
#include "..\ecommon.h"
|
||||
|
||||
e2d::EKeyframe::EKeyframe()
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_fSourceClipWidth(0)
|
||||
, m_fSourceClipHeight(0)
|
||||
, m_pImage(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EKeyframe::EKeyframe(EImage * texture)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_fSourceClipWidth(0)
|
||||
, m_fSourceClipHeight(0)
|
||||
, m_pImage(nullptr)
|
||||
{
|
||||
_setImage(texture);
|
||||
}
|
||||
|
||||
e2d::EKeyframe::EKeyframe(const EString & imageFileName)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_fSourceClipWidth(0)
|
||||
, m_fSourceClipHeight(0)
|
||||
, m_pImage(nullptr)
|
||||
{
|
||||
_setImage(new EImage(imageFileName));
|
||||
}
|
||||
|
||||
e2d::EKeyframe::EKeyframe(LPCTSTR resourceName, LPCTSTR resourceType)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_fSourceClipWidth(0)
|
||||
, m_fSourceClipHeight(0)
|
||||
, m_pImage(nullptr)
|
||||
{
|
||||
_setImage(new EImage(resourceName, resourceType));
|
||||
}
|
||||
|
||||
e2d::EKeyframe::EKeyframe(EImage * texture, float x, float y, float width, float height)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_fSourceClipWidth(0)
|
||||
, m_fSourceClipHeight(0)
|
||||
, m_pImage(nullptr)
|
||||
{
|
||||
_setImage(texture);
|
||||
_clipTexture(x, y, width, height);
|
||||
}
|
||||
|
||||
e2d::EKeyframe::EKeyframe(const EString & imageFileName, float x, float y, float width, float height)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_fSourceClipWidth(0)
|
||||
, m_fSourceClipHeight(0)
|
||||
, m_pImage(nullptr)
|
||||
{
|
||||
_setImage(new EImage(imageFileName));
|
||||
_clipTexture(x, y, width, height);
|
||||
}
|
||||
|
||||
e2d::EKeyframe::EKeyframe(LPCTSTR resourceName, LPCTSTR resourceType, float x, float y, float width, float height)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_fSourceClipWidth(0)
|
||||
, m_fSourceClipHeight(0)
|
||||
, m_pImage(nullptr)
|
||||
{
|
||||
_setImage(new EImage(resourceName, resourceType));
|
||||
_clipTexture(x, y, width, height);
|
||||
}
|
||||
|
||||
e2d::EKeyframe::~EKeyframe()
|
||||
{
|
||||
SafeRelease(&m_pImage);
|
||||
}
|
||||
|
||||
float e2d::EKeyframe::getWidth() const
|
||||
{
|
||||
return m_fSourceClipWidth;
|
||||
}
|
||||
|
||||
float e2d::EKeyframe::getHeight() const
|
||||
{
|
||||
return m_fSourceClipHeight;
|
||||
}
|
||||
|
||||
e2d::EImage * e2d::EKeyframe::getImage() const
|
||||
{
|
||||
return m_pImage;
|
||||
}
|
||||
|
||||
void e2d::EKeyframe::_setImage(EImage * texture)
|
||||
{
|
||||
if (texture)
|
||||
{
|
||||
SafeRelease(&m_pImage);
|
||||
m_pImage = texture;
|
||||
m_pImage->retain();
|
||||
m_fSourceClipX = 0;
|
||||
m_fSourceClipY = 0;
|
||||
m_fSourceClipWidth = texture->getSourceWidth();
|
||||
m_fSourceClipHeight = texture->getSourceHeight();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EKeyframe::_clipTexture(float x, float y, float width, float height)
|
||||
{
|
||||
if (m_pImage)
|
||||
{
|
||||
m_fSourceClipX = min(max(x, 0), m_pImage->getSourceWidth());
|
||||
m_fSourceClipY = min(max(y, 0), m_pImage->getSourceHeight());
|
||||
m_fSourceClipWidth = min(max(width, 0), m_pImage->getSourceWidth() - m_fSourceClipX);
|
||||
m_fSourceClipHeight = min(max(height, 0), m_pImage->getSourceHeight() - m_fSourceClipY);
|
||||
}
|
||||
}
|
||||
|
|
@ -7,8 +7,9 @@
|
|||
|
||||
e2d::EScene::EScene()
|
||||
: m_bWillSave(true)
|
||||
, m_bAutoUpdate(true)
|
||||
, m_bSortNeeded(false)
|
||||
, m_bGeometryVisiable(false)
|
||||
, m_bShapeVisiable(false)
|
||||
, m_pRoot(new ENode())
|
||||
{
|
||||
m_pRoot->retain();
|
||||
|
|
@ -27,23 +28,31 @@ void e2d::EScene::_render()
|
|||
{
|
||||
m_pRoot->_render();
|
||||
|
||||
if (m_bGeometryVisiable)
|
||||
if (m_bShapeVisiable)
|
||||
{
|
||||
// 恢复矩阵转换
|
||||
ERenderer::getRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity());
|
||||
// 绘制所有几何图形
|
||||
m_pRoot->_drawGeometry();
|
||||
m_pRoot->_drawShape();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EScene::_update()
|
||||
{
|
||||
// 执行 onUpdate 函数
|
||||
this->onUpdate();
|
||||
if (m_bAutoUpdate)
|
||||
{
|
||||
this->onUpdate();
|
||||
}
|
||||
// 更新根节点
|
||||
m_pRoot->_update();
|
||||
}
|
||||
|
||||
void e2d::EScene::setAutoUpdate(bool bAutoUpdate)
|
||||
{
|
||||
m_bAutoUpdate = bAutoUpdate;
|
||||
}
|
||||
|
||||
void e2d::EScene::add(ENode * child, int order /* = 0 */)
|
||||
{
|
||||
m_pRoot->addChild(child, order);
|
||||
|
|
@ -54,42 +63,12 @@ bool e2d::EScene::remove(ENode * child)
|
|||
return m_pRoot->removeChild(child);
|
||||
}
|
||||
|
||||
void e2d::EScene::remove(const EString &childName)
|
||||
{
|
||||
return m_pRoot->removeChild(childName);
|
||||
}
|
||||
|
||||
std::vector<e2d::ENode*> e2d::EScene::getChildren()
|
||||
{
|
||||
return m_pRoot->m_vChildren;
|
||||
}
|
||||
|
||||
size_t e2d::EScene::getChildrenCount() const
|
||||
{
|
||||
return m_pRoot->getChildrenCount();
|
||||
}
|
||||
|
||||
e2d::ENode * e2d::EScene::getChild(const EString &childName)
|
||||
{
|
||||
return m_pRoot->getChild(childName);
|
||||
}
|
||||
|
||||
e2d::ENode * e2d::EScene::getRoot() const
|
||||
{
|
||||
return m_pRoot;
|
||||
}
|
||||
|
||||
void e2d::EScene::clearAllChildren()
|
||||
void e2d::EScene::setShapeVisiable(bool visiable)
|
||||
{
|
||||
m_pRoot->clearAllChildren();
|
||||
}
|
||||
|
||||
void e2d::EScene::runAction(EAction * action)
|
||||
{
|
||||
this->m_pRoot->runAction(action);
|
||||
}
|
||||
|
||||
void e2d::EScene::setGeometryVisiable(bool visiable)
|
||||
{
|
||||
m_bGeometryVisiable = visiable;
|
||||
m_bShapeVisiable = visiable;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@ EString::EString(const wchar_t *str)
|
|||
}
|
||||
else
|
||||
{
|
||||
this->EString::EString();
|
||||
_size = 0;
|
||||
_string = new wchar_t[1];
|
||||
_string[0] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -49,7 +51,9 @@ EString::EString(const EString &str)
|
|||
}
|
||||
else
|
||||
{
|
||||
this->EString::EString();
|
||||
_size = 0;
|
||||
_string = new wchar_t[1];
|
||||
_string[0] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -63,7 +67,9 @@ e2d::EString::EString(const std::wstring &str)
|
|||
}
|
||||
else
|
||||
{
|
||||
this->EString::EString();
|
||||
_size = 0;
|
||||
_string = new wchar_t[1];
|
||||
_string[0] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -86,8 +92,9 @@ EString &EString::operator=(const wchar_t *str)
|
|||
}
|
||||
else
|
||||
{
|
||||
_string = nullptr;
|
||||
_size = 0;
|
||||
_string = new wchar_t[1];
|
||||
_string[0] = 0;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
|
@ -106,8 +113,9 @@ EString &EString::operator=(const EString &str)
|
|||
}
|
||||
else
|
||||
{
|
||||
_string = nullptr;
|
||||
_size = 0;
|
||||
_string = new wchar_t[1];
|
||||
_string[0] = 0;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
|
@ -123,15 +131,23 @@ EString & e2d::EString::operator=(const std::wstring &str)
|
|||
}
|
||||
else
|
||||
{
|
||||
_string = nullptr;
|
||||
_size = 0;
|
||||
_string = new wchar_t[1];
|
||||
_string[0] = 0;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool EString::operator==(const wchar_t *str)
|
||||
{
|
||||
return (wcscmp(str, _string) == 0);
|
||||
if (str)
|
||||
{
|
||||
return (wcscmp(str, _string) == 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool EString::operator ==(const EString &str)
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
#include "..\ecommon.h"
|
||||
|
||||
e2d::EPhysicsEvent::INTERSECT_RELATION e2d::EPhysicsEvent::s_nRelation = e2d::EPhysicsEvent::UNKNOWN;
|
||||
e2d::EGeometry * e2d::EPhysicsEvent::s_pActiveGeometry = nullptr;
|
||||
e2d::EGeometry * e2d::EPhysicsEvent::s_pPassiveGeometry = nullptr;
|
||||
|
||||
e2d::EPhysicsEvent::INTERSECT_RELATION e2d::EPhysicsEvent::getMsg()
|
||||
{
|
||||
return EPhysicsEvent::s_nRelation;
|
||||
}
|
||||
|
||||
e2d::EGeometry * e2d::EPhysicsEvent::getActiveGeometry()
|
||||
{
|
||||
return EPhysicsEvent::s_pActiveGeometry;
|
||||
}
|
||||
|
||||
e2d::EGeometry * e2d::EPhysicsEvent::getPassiveGeometry()
|
||||
{
|
||||
return EPhysicsEvent::s_pPassiveGeometry;
|
||||
}
|
||||
|
|
@ -1,112 +0,0 @@
|
|||
#include "..\egeometry.h"
|
||||
#include "..\emanagers.h"
|
||||
#include "..\enodes.h"
|
||||
|
||||
e2d::EGeometry::EGeometry()
|
||||
: m_nCategoryBitmask(0)
|
||||
, m_nCollisionBitmask(0)
|
||||
, m_bIsVisiable(true)
|
||||
, m_nColor(EColor::RED)
|
||||
, m_fOpacity(1)
|
||||
, m_pParentNode(nullptr)
|
||||
, m_pTransformedGeometry(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EGeometry::~EGeometry()
|
||||
{
|
||||
SafeReleaseInterface(&m_pTransformedGeometry);
|
||||
}
|
||||
|
||||
e2d::ENode * e2d::EGeometry::getParentNode() const
|
||||
{
|
||||
return m_pParentNode;
|
||||
}
|
||||
|
||||
UINT32 e2d::EGeometry::getCategoryBitmask() const
|
||||
{
|
||||
return m_nCategoryBitmask;
|
||||
}
|
||||
|
||||
UINT32 e2d::EGeometry::getCollisionBitmask() const
|
||||
{
|
||||
return m_nCollisionBitmask;
|
||||
}
|
||||
|
||||
void e2d::EGeometry::setCategoryBitmask(UINT32 mask)
|
||||
{
|
||||
m_nCategoryBitmask = mask;
|
||||
}
|
||||
|
||||
void e2d::EGeometry::setCollisionBitmask(UINT32 mask)
|
||||
{
|
||||
m_nCollisionBitmask = mask;
|
||||
}
|
||||
|
||||
void e2d::EGeometry::setVisiable(bool bVisiable)
|
||||
{
|
||||
m_bIsVisiable = bVisiable;
|
||||
}
|
||||
|
||||
void e2d::EGeometry::setColor(UINT32 color)
|
||||
{
|
||||
m_nColor = color;
|
||||
}
|
||||
|
||||
void e2d::EGeometry::setOpacity(float opacity)
|
||||
{
|
||||
m_fOpacity = min(max(opacity, 0), 1);
|
||||
}
|
||||
|
||||
void e2d::EGeometry::_render()
|
||||
{
|
||||
if (m_pTransformedGeometry)
|
||||
{
|
||||
ID2D1SolidColorBrush * pBrush = ERenderer::getSolidColorBrush();
|
||||
// 创建画刷
|
||||
ERenderer::getRenderTarget()->CreateSolidColorBrush(
|
||||
D2D1::ColorF(
|
||||
m_nColor,
|
||||
m_fOpacity),
|
||||
&pBrush
|
||||
);
|
||||
// 绘制几何形状
|
||||
ERenderer::getRenderTarget()->DrawGeometry(m_pTransformedGeometry, pBrush);
|
||||
}
|
||||
}
|
||||
|
||||
e2d::EPhysicsEvent::INTERSECT_RELATION e2d::EGeometry::_intersectWith(EGeometry * pGeometry)
|
||||
{
|
||||
if (m_pTransformedGeometry && pGeometry->m_pTransformedGeometry)
|
||||
{
|
||||
D2D1_GEOMETRY_RELATION relation;
|
||||
|
||||
m_pTransformedGeometry->CompareWithGeometry(
|
||||
pGeometry->m_pTransformedGeometry,
|
||||
D2D1::Matrix3x2F::Identity(),
|
||||
&relation
|
||||
);
|
||||
|
||||
return EPhysicsEvent::INTERSECT_RELATION(relation);
|
||||
}
|
||||
return EPhysicsEvent::UNKNOWN;
|
||||
}
|
||||
|
||||
void e2d::EGeometry::_transform()
|
||||
{
|
||||
if (m_pParentNode)
|
||||
{
|
||||
// 释放原形状
|
||||
SafeReleaseInterface(&m_pTransformedGeometry);
|
||||
|
||||
// 根据父节点转换几何图形
|
||||
ERenderer::getID2D1Factory()->CreateTransformedGeometry(
|
||||
_getD2dGeometry(),
|
||||
m_pParentNode->m_MatriFinal,
|
||||
&m_pTransformedGeometry
|
||||
);
|
||||
|
||||
// 判断形状变换后的情况
|
||||
EPhysicsManager::PhysicsGeometryProc(this);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
#include "..\elisteners.h"
|
||||
#include "..\emanagers.h"
|
||||
#include "..\enodes.h"
|
||||
|
||||
e2d::EListener::EListener()
|
||||
: m_bRunning(false)
|
||||
, m_bAlways(false)
|
||||
, m_pParentNode(nullptr)
|
||||
, m_bSwallow(false)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListener::EListener(const EString & name)
|
||||
: m_bRunning(false)
|
||||
, m_bAlways(false)
|
||||
, m_pParentNode(nullptr)
|
||||
, m_bSwallow(false)
|
||||
{
|
||||
m_sName = name;
|
||||
}
|
||||
|
||||
bool e2d::EListener::isRunning() const
|
||||
{
|
||||
return m_bRunning;
|
||||
}
|
||||
|
||||
void e2d::EListener::start()
|
||||
{
|
||||
m_bRunning = true;
|
||||
}
|
||||
|
||||
void e2d::EListener::stop()
|
||||
{
|
||||
m_bRunning = false;
|
||||
}
|
||||
|
||||
e2d::EString e2d::EListener::getName() const
|
||||
{
|
||||
return m_sName;
|
||||
}
|
||||
|
||||
e2d::ENode * e2d::EListener::getParentNode() const
|
||||
{
|
||||
return m_pParentNode;
|
||||
}
|
||||
|
||||
void e2d::EListener::setName(const EString & name)
|
||||
{
|
||||
m_sName = name;
|
||||
}
|
||||
|
||||
void e2d::EListener::setSwallow(bool bSwallow)
|
||||
{
|
||||
m_bSwallow = bSwallow;
|
||||
}
|
||||
|
||||
void e2d::EListener::setAlwaysWorking(bool bAlways)
|
||||
{
|
||||
m_bAlways = bAlways;
|
||||
}
|
||||
|
||||
bool e2d::EListener::_isReady() const
|
||||
{
|
||||
if (m_bRunning && m_pParentNode)
|
||||
{
|
||||
if (m_pParentNode->getParentScene() == ESceneManager::getCurrentScene())
|
||||
{
|
||||
if (!EGame::isPaused() || m_bAlways)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1,60 +0,0 @@
|
|||
#include "..\elisteners.h"
|
||||
#include "..\egeometry.h"
|
||||
#include "..\emanagers.h"
|
||||
|
||||
e2d::EListenerPhysics::EListenerPhysics()
|
||||
: EListener()
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerPhysics::EListenerPhysics(const EString & name)
|
||||
: EListener(name)
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerPhysics::EListenerPhysics(const PhysLsnrCallback & callback)
|
||||
: EListener()
|
||||
, m_Callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerPhysics::EListenerPhysics(const EString & name, const PhysLsnrCallback & callback)
|
||||
: EListener(name)
|
||||
, m_Callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::EListenerPhysics::_callOn()
|
||||
{
|
||||
if (m_Callback)
|
||||
{
|
||||
m_Callback();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EListenerPhysics::setCallback(const PhysLsnrCallback & callback)
|
||||
{
|
||||
m_Callback = callback;
|
||||
}
|
||||
|
||||
void e2d::EListenerPhysics::bindWith(EScene * pParentScene)
|
||||
{
|
||||
WARN_IF(m_pParentNode != nullptr, "A listener cannot bind with two object.");
|
||||
|
||||
if (pParentScene)
|
||||
{
|
||||
EPhysicsManager::bindListener(this, pParentScene);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EListenerPhysics::bindWith(ENode * pParentNode)
|
||||
{
|
||||
WARN_IF(m_pParentNode != nullptr, "A listener cannot bind with two object.");
|
||||
|
||||
if (pParentNode != nullptr)
|
||||
{
|
||||
EPhysicsManager::bindListener(this, pParentNode);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
#include "..\elisteners.h"
|
||||
#include "..\egeometry.h"
|
||||
|
||||
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision()
|
||||
: EListenerPhysics()
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision(const EString & name)
|
||||
: EListenerPhysics(name)
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision(const ClsLsnrCallback & callback)
|
||||
: EListenerPhysics()
|
||||
, m_Callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision(const EString & name, const ClsLsnrCallback & callback)
|
||||
: EListenerPhysics(name)
|
||||
, m_Callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::EListenerPhysicsCollision::_callOn()
|
||||
{
|
||||
if (EPhysicsEvent::getMsg() == EPhysicsEvent::OVERLAP ||
|
||||
EPhysicsEvent::getMsg() == EPhysicsEvent::CONTAINS ||
|
||||
EPhysicsEvent::getMsg() == EPhysicsEvent::IS_CONTAINED)
|
||||
{
|
||||
if (m_Callback)
|
||||
{
|
||||
m_Callback();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -20,16 +20,16 @@ void e2d::EActionManager::resumeAllActionsBindedWith(ENode * pTargetNode)
|
|||
{
|
||||
if (pTargetNode)
|
||||
{
|
||||
for (auto action = s_vActions.begin(); action != s_vActions.end(); action++)
|
||||
for (auto action : s_vActions)
|
||||
{
|
||||
if ((*action)->getTarget() == pTargetNode)
|
||||
if (action->getTarget() == pTargetNode)
|
||||
{
|
||||
(*action)->start();
|
||||
action->start();
|
||||
}
|
||||
}
|
||||
for (auto child = pTargetNode->getChildren().begin(); child != pTargetNode->getChildren().end(); child++)
|
||||
for (auto child : pTargetNode->getChildren())
|
||||
{
|
||||
EActionManager::resumeAllActionsBindedWith((*child));
|
||||
EActionManager::resumeAllActionsBindedWith(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -38,16 +38,16 @@ void e2d::EActionManager::pauseAllActionsBindedWith(ENode * pTargetNode)
|
|||
{
|
||||
if (pTargetNode)
|
||||
{
|
||||
for (auto action = s_vActions.begin(); action != s_vActions.end(); action++)
|
||||
for (auto action : s_vActions)
|
||||
{
|
||||
if ((*action)->getTarget() == pTargetNode)
|
||||
if (action->getTarget() == pTargetNode)
|
||||
{
|
||||
(*action)->pause();
|
||||
action->pause();
|
||||
}
|
||||
}
|
||||
for (auto child = pTargetNode->getChildren().begin(); child != pTargetNode->getChildren().end(); child++)
|
||||
for (auto child : pTargetNode->getChildren())
|
||||
{
|
||||
EActionManager::pauseAllActionsBindedWith((*child));
|
||||
EActionManager::pauseAllActionsBindedWith(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -56,16 +56,16 @@ void e2d::EActionManager::stopAllActionsBindedWith(ENode * pTargetNode)
|
|||
{
|
||||
if (pTargetNode)
|
||||
{
|
||||
for (auto action = s_vActions.begin(); action != s_vActions.end(); action++)
|
||||
for (auto action : s_vActions)
|
||||
{
|
||||
if ((*action)->getTarget() == pTargetNode)
|
||||
if (action->getTarget() == pTargetNode)
|
||||
{
|
||||
(*action)->stop();
|
||||
action->stop();
|
||||
}
|
||||
}
|
||||
for (auto child = pTargetNode->getChildren().begin(); child != pTargetNode->getChildren().end(); child++)
|
||||
for (auto child : pTargetNode->getChildren())
|
||||
{
|
||||
EActionManager::stopAllActionsBindedWith((*child));
|
||||
EActionManager::stopAllActionsBindedWith(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -92,33 +92,33 @@ void e2d::EActionManager::__clearAllActionsBindedWith(ENode * pTargetNode)
|
|||
|
||||
void e2d::EActionManager::resumeAllActions()
|
||||
{
|
||||
for (auto child = ESceneManager::getCurrentScene()->getChildren().begin(); child != ESceneManager::getCurrentScene()->getChildren().end(); child++)
|
||||
for (auto child : ESceneManager::getCurrentScene()->getRoot()->getChildren())
|
||||
{
|
||||
EActionManager::resumeAllActionsBindedWith((*child));
|
||||
EActionManager::resumeAllActionsBindedWith(child);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EActionManager::pauseAllActions()
|
||||
{
|
||||
for (auto child = ESceneManager::getCurrentScene()->getChildren().begin(); child != ESceneManager::getCurrentScene()->getChildren().end(); child++)
|
||||
for (auto child : ESceneManager::getCurrentScene()->getRoot()->getChildren())
|
||||
{
|
||||
EActionManager::pauseAllActionsBindedWith((*child));
|
||||
EActionManager::pauseAllActionsBindedWith(child);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EActionManager::stopAllActions()
|
||||
{
|
||||
for (auto child = ESceneManager::getCurrentScene()->getChildren().begin(); child != ESceneManager::getCurrentScene()->getChildren().end(); child++)
|
||||
for (auto child : ESceneManager::getCurrentScene()->getRoot()->getChildren())
|
||||
{
|
||||
EActionManager::stopAllActionsBindedWith((*child));
|
||||
EActionManager::stopAllActionsBindedWith(child);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EActionManager::__resetAllActions()
|
||||
{
|
||||
for (auto action = s_vActions.begin(); action != s_vActions.end(); action++)
|
||||
for (auto action : s_vActions)
|
||||
{
|
||||
(*action)->_resetTime();
|
||||
action->_resetTime();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,29 +15,27 @@ static MusicList& getMusicList()
|
|||
}
|
||||
|
||||
|
||||
e2d::EMusic * e2d::EMusicManager::add(const EString & strFilePath)
|
||||
bool e2d::EMusicManager::add(const EString & strFilePath)
|
||||
{
|
||||
EMusic * pPlayer = get(strFilePath);
|
||||
if (pPlayer)
|
||||
{
|
||||
return pPlayer;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
UINT nRet = strFilePath.hash();
|
||||
|
||||
getMusicList().insert(MusicPair(nRet, new EMusic()));
|
||||
pPlayer = getMusicList()[nRet];
|
||||
pPlayer = new EMusic();
|
||||
|
||||
if (pPlayer->_open(strFilePath))
|
||||
{
|
||||
return pPlayer;
|
||||
getMusicList().insert(MusicPair(nRet, pPlayer));
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
delete pPlayer;
|
||||
getMusicList().erase(nRet);
|
||||
return nullptr;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -57,25 +55,25 @@ e2d::EMusic * e2d::EMusicManager::get(const EString & strFilePath)
|
|||
|
||||
void e2d::EMusicManager::pauseAllMusics()
|
||||
{
|
||||
for (auto iter = getMusicList().begin(); iter != getMusicList().end(); iter++)
|
||||
for (auto iter : getMusicList())
|
||||
{
|
||||
(*iter).second->pause();
|
||||
iter.second->pause();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMusicManager::resumeAllMusics()
|
||||
{
|
||||
for (auto iter = getMusicList().begin(); iter != getMusicList().end(); iter++)
|
||||
for (auto iter : getMusicList())
|
||||
{
|
||||
(*iter).second->resume();
|
||||
iter.second->resume();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMusicManager::stopAllMusics()
|
||||
{
|
||||
for (auto iter = getMusicList().begin(); iter != getMusicList().end(); iter++)
|
||||
for (auto iter : getMusicList())
|
||||
{
|
||||
(*iter).second->stop();
|
||||
iter.second->stop();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -111,10 +109,10 @@ bool e2d::EMusicManager::__init()
|
|||
|
||||
void e2d::EMusicManager::__uninit()
|
||||
{
|
||||
for (auto iter = getMusicList().begin(); iter != getMusicList().end(); iter++)
|
||||
for (auto iter : getMusicList())
|
||||
{
|
||||
(*iter).second->_close();
|
||||
(*iter).second->release();
|
||||
iter.second->_close();
|
||||
delete iter.second;
|
||||
}
|
||||
getMusicList().clear();
|
||||
|
||||
|
|
|
|||
|
|
@ -1,225 +0,0 @@
|
|||
#include "..\emanagers.h"
|
||||
#include "..\enodes.h"
|
||||
#include "..\elisteners.h"
|
||||
#include "..\egeometry.h"
|
||||
|
||||
// 监听器集合
|
||||
std::vector<e2d::EListenerPhysics*> s_vListeners;
|
||||
// 形状集合
|
||||
std::vector<e2d::EGeometry*> s_vGeometries;
|
||||
|
||||
|
||||
void e2d::EPhysicsManager::PhysicsGeometryProc(EGeometry * pActiveGeometry)
|
||||
{
|
||||
if (s_vListeners.empty() || s_vGeometries.empty() || EGame::isPaused())
|
||||
return;
|
||||
|
||||
// pActiveGeometry 为主动方
|
||||
EPhysicsEvent::s_pActiveGeometry = pActiveGeometry;
|
||||
// 判断变化后的状态
|
||||
for (UINT i = 0; i < s_vGeometries.size(); i++)
|
||||
{
|
||||
auto pPassiveGeometry = s_vGeometries[i];
|
||||
// 不与其他场景的物体判断
|
||||
if (!pPassiveGeometry->getParentNode() ||
|
||||
(pPassiveGeometry->getParentNode()->getParentScene() != ESceneManager::getCurrentScene()))
|
||||
continue;
|
||||
|
||||
if (pActiveGeometry != pPassiveGeometry)
|
||||
{
|
||||
// 判断两物体是否是相互冲突的物体
|
||||
if (pActiveGeometry->m_nCollisionBitmask & pPassiveGeometry->m_nCategoryBitmask)
|
||||
{
|
||||
// pPassiveGeometry 为被动方
|
||||
EPhysicsEvent::s_pPassiveGeometry = pPassiveGeometry;
|
||||
// 获取两方的关系
|
||||
EPhysicsEvent::s_nRelation = pActiveGeometry->_intersectWith(pPassiveGeometry);
|
||||
// 如果关系不为未知或无交集,响应监听器
|
||||
if (EPhysicsEvent::s_nRelation != EPhysicsEvent::UNKNOWN &&
|
||||
EPhysicsEvent::s_nRelation != EPhysicsEvent::DISJOINT)
|
||||
{
|
||||
// 执行监听器
|
||||
PhysicsListenerProc();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::PhysicsListenerProc()
|
||||
{
|
||||
// 执行鼠标消息监听函数
|
||||
size_t i = s_vListeners.size();
|
||||
|
||||
do
|
||||
{
|
||||
auto listener = s_vListeners[--i];
|
||||
|
||||
if (listener->_isReady())
|
||||
{
|
||||
listener->_callOn();
|
||||
if (listener->m_bSwallow)
|
||||
break;
|
||||
}
|
||||
} while (i != 0);
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::bindListener(EListenerPhysics * listener, EScene * pParentScene)
|
||||
{
|
||||
EPhysicsManager::bindListener(listener, pParentScene->getRoot());
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::bindListener(EListenerPhysics * listener, ENode * pParentNode)
|
||||
{
|
||||
WARN_IF(listener == nullptr, "EListenerPhysics NULL pointer exception!");
|
||||
WARN_IF(pParentNode == nullptr, "EListenerPhysics add to a NULL ENode pointer!");
|
||||
|
||||
if (listener && pParentNode)
|
||||
{
|
||||
ASSERT(
|
||||
!listener->m_pParentNode,
|
||||
"The listener is already binded, it cannot bind again!"
|
||||
);
|
||||
|
||||
listener->retain();
|
||||
listener->start();
|
||||
listener->m_pParentNode = pParentNode;
|
||||
s_vListeners.push_back(listener);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::_addGeometry(EGeometry * geometry)
|
||||
{
|
||||
if (geometry)
|
||||
{
|
||||
geometry->retain();
|
||||
s_vGeometries.push_back(geometry);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::_delGeometry(EGeometry * geometry)
|
||||
{
|
||||
if (geometry)
|
||||
{
|
||||
for (UINT i = 0; i < s_vGeometries.size(); i++)
|
||||
{
|
||||
if (s_vGeometries[i] == geometry)
|
||||
{
|
||||
SafeRelease(&geometry);
|
||||
s_vGeometries.erase(s_vGeometries.begin() + i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::startListeners(const EString & name)
|
||||
{
|
||||
for (auto listener = s_vListeners.begin(); listener != s_vListeners.end(); listener++)
|
||||
{
|
||||
if ((*listener)->getName() == name)
|
||||
{
|
||||
(*listener)->start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::stopListeners(const EString & name)
|
||||
{
|
||||
for (auto listener = s_vListeners.begin(); listener != s_vListeners.end(); listener++)
|
||||
{
|
||||
if ((*listener)->getName() == name)
|
||||
{
|
||||
(*listener)->stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::delListeners(const EString & name)
|
||||
{
|
||||
std::vector<EListenerPhysics*>::iterator iter;
|
||||
for (iter = s_vListeners.begin(); iter != s_vListeners.end();)
|
||||
{
|
||||
if ((*iter)->getName() == name)
|
||||
{
|
||||
SafeRelease(&(*iter));
|
||||
iter = s_vListeners.erase(iter);
|
||||
}
|
||||
else
|
||||
{
|
||||
iter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::startAllListenersBindedWith(EScene * pParentScene)
|
||||
{
|
||||
EPhysicsManager::startAllListenersBindedWith(pParentScene->getRoot());
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::stopAllListenersBindedWith(EScene * pParentScene)
|
||||
{
|
||||
EPhysicsManager::stopAllListenersBindedWith(pParentScene->getRoot());
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::startAllListenersBindedWith(ENode * pParentNode)
|
||||
{
|
||||
for (auto listener = s_vListeners.begin(); listener != s_vListeners.end(); listener++)
|
||||
{
|
||||
if ((*listener)->getParentNode() == pParentNode)
|
||||
{
|
||||
(*listener)->start();
|
||||
}
|
||||
}
|
||||
for (auto child = pParentNode->getChildren().begin(); child != pParentNode->getChildren().end(); child++)
|
||||
{
|
||||
EPhysicsManager::startAllListenersBindedWith((*child));
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::stopAllListenersBindedWith(ENode * pParentNode)
|
||||
{
|
||||
for (auto listener = s_vListeners.begin(); listener != s_vListeners.end(); listener++)
|
||||
{
|
||||
if ((*listener)->getParentNode() == pParentNode)
|
||||
{
|
||||
(*listener)->stop();
|
||||
}
|
||||
}
|
||||
for (auto child = pParentNode->getChildren().begin(); child != pParentNode->getChildren().end(); child++)
|
||||
{
|
||||
EPhysicsManager::stopAllListenersBindedWith((*child));
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::startAllListeners()
|
||||
{
|
||||
EPhysicsManager::startAllListenersBindedWith(ESceneManager::getCurrentScene());
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::stopAllListeners()
|
||||
{
|
||||
EPhysicsManager::stopAllListenersBindedWith(ESceneManager::getCurrentScene());
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::_clearManager()
|
||||
{
|
||||
s_vListeners.clear();
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::_clearAllListenersBindedWith(ENode * pParentNode)
|
||||
{
|
||||
for (UINT i = 0; i < s_vListeners.size();)
|
||||
{
|
||||
auto listener = s_vListeners[i];
|
||||
if (listener->getParentNode() == pParentNode)
|
||||
{
|
||||
SafeRelease(&listener);
|
||||
s_vListeners.erase(s_vListeners.begin() + i);
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -79,21 +79,40 @@ e2d::EScene * e2d::ESceneManager::getCurrentScene()
|
|||
|
||||
void e2d::ESceneManager::__update()
|
||||
{
|
||||
// 更新场景内容
|
||||
if (s_pCurrentScene)
|
||||
{
|
||||
s_pCurrentScene->_update();
|
||||
}
|
||||
|
||||
// 正在切换场景时,执行场景切换动画
|
||||
if (s_pTransition)
|
||||
{
|
||||
// 更新场景内容
|
||||
if (s_pNextScene)
|
||||
{
|
||||
s_pNextScene->_update();
|
||||
}
|
||||
// 更新场景动画
|
||||
s_pTransition->_update();
|
||||
|
||||
if (s_pTransition->isEnding())
|
||||
{
|
||||
s_pTransition->release();
|
||||
s_pTransition = nullptr;
|
||||
}
|
||||
return;
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 下一场景指针不为空时,切换场景
|
||||
if (s_pNextScene)
|
||||
{
|
||||
// 执行当前场景的 onExit 函数
|
||||
s_pCurrentScene->onExit();
|
||||
|
||||
// 若要保存当前场景,把它放入栈中
|
||||
if (s_pCurrentScene->m_bWillSave)
|
||||
{
|
||||
|
|
@ -104,21 +123,12 @@ void e2d::ESceneManager::__update()
|
|||
SafeRelease(&s_pCurrentScene);
|
||||
}
|
||||
|
||||
// 执行当前场景的 onExit 函数
|
||||
s_pCurrentScene->onExit();
|
||||
|
||||
// 执行下一场景的 onEnter 函数
|
||||
s_pNextScene->onEnter();
|
||||
|
||||
s_pCurrentScene = s_pNextScene; // 切换场景
|
||||
s_pNextScene = nullptr; // 下一场景置空
|
||||
}
|
||||
|
||||
// 断言当前场景非空
|
||||
ASSERT(s_pCurrentScene != nullptr, "Current scene NULL pointer exception.");
|
||||
|
||||
// 更新场景内容
|
||||
s_pCurrentScene->_update();
|
||||
}
|
||||
|
||||
void e2d::ESceneManager::__render()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,67 @@
|
|||
#include "..\emanagers.h"
|
||||
#include "..\enodes.h"
|
||||
#include "..\eshape.h"
|
||||
|
||||
// 形状集合
|
||||
std::vector<e2d::EShape*> s_vShapes;
|
||||
|
||||
|
||||
void e2d::EShapeManager::__updateShape(e2d::EShape * pActiveShape)
|
||||
{
|
||||
ENode* pActiveNode = pActiveShape->m_pParentNode;
|
||||
if (pActiveNode)
|
||||
{
|
||||
// 获取节点所在场景
|
||||
EScene* pCurrentScene = pActiveNode->getParentScene();
|
||||
// 判断与其他形状的交集情况
|
||||
for (auto pPassiveShape : s_vShapes)
|
||||
{
|
||||
// 判断两物体是否是相互冲突的物体
|
||||
if (pActiveShape->m_nCollisionBitmask & pPassiveShape->m_nCategoryBitmask)
|
||||
{
|
||||
// 获取被碰撞节点
|
||||
ENode* pPassiveNode = pPassiveShape->m_pParentNode;
|
||||
// 判断两节点是否处于同一场景中
|
||||
if (pPassiveNode &&
|
||||
pPassiveNode != pActiveNode &&
|
||||
pPassiveNode->getParentScene() == pCurrentScene)
|
||||
{
|
||||
// 判断两形状交集情况
|
||||
int relation = pActiveShape->getRelationWith(pPassiveShape);
|
||||
// 忽略 UNKNOWN 和 DISJOINT 情况
|
||||
if (relation != ERelation::UNKNOWN && relation != ERelation::DISJOINT)
|
||||
{
|
||||
pActiveNode->onCollide(pPassiveNode, relation);
|
||||
pPassiveNode->onCollide(pActiveNode, pPassiveShape->getRelationWith(pActiveShape));
|
||||
pCurrentScene->onCollide(pActiveNode, pPassiveNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EShapeManager::__addShape(EShape * pShape)
|
||||
{
|
||||
if (pShape)
|
||||
{
|
||||
pShape->retain();
|
||||
s_vShapes.push_back(pShape);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EShapeManager::__delShape(EShape * pShape)
|
||||
{
|
||||
if (pShape)
|
||||
{
|
||||
for (size_t i = 0; i < s_vShapes.size(); i++)
|
||||
{
|
||||
if (s_vShapes[i] == pShape)
|
||||
{
|
||||
SafeRelease(&pShape);
|
||||
s_vShapes.erase(s_vShapes.begin() + i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -46,22 +46,22 @@ void e2d::ETimerManager::bindTimer(ETimer * timer, ENode * pParentNode)
|
|||
|
||||
void e2d::ETimerManager::startTimers(const EString & name)
|
||||
{
|
||||
for (auto timer = s_vTimers.begin(); timer != s_vTimers.end(); timer++)
|
||||
for (auto timer : s_vTimers)
|
||||
{
|
||||
if ((*timer)->getName() == name)
|
||||
if (timer->getName() == name)
|
||||
{
|
||||
(*timer)->start();
|
||||
timer->start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ETimerManager::stopTimers(const EString & name)
|
||||
{
|
||||
for (auto timer = s_vTimers.begin(); timer != s_vTimers.end(); timer++)
|
||||
for (auto timer : s_vTimers)
|
||||
{
|
||||
if ((*timer)->getName() == name)
|
||||
if (timer->getName() == name)
|
||||
{
|
||||
(*timer)->stop();
|
||||
timer->stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -95,11 +95,11 @@ void e2d::ETimerManager::stopAllTimersBindedWith(EScene * pParentScene)
|
|||
|
||||
void e2d::ETimerManager::startAllTimersBindedWith(ENode * pParentNode)
|
||||
{
|
||||
for (auto timer = s_vTimers.begin(); timer != s_vTimers.end(); timer++)
|
||||
for (auto timer : s_vTimers)
|
||||
{
|
||||
if ((*timer)->getParentNode() == pParentNode)
|
||||
if (timer->getParentNode() == pParentNode)
|
||||
{
|
||||
(*timer)->start();
|
||||
timer->start();
|
||||
}
|
||||
}
|
||||
for (auto child = pParentNode->getChildren().begin(); child != pParentNode->getChildren().end(); child++)
|
||||
|
|
@ -110,16 +110,16 @@ void e2d::ETimerManager::startAllTimersBindedWith(ENode * pParentNode)
|
|||
|
||||
void e2d::ETimerManager::stopAllTimersBindedWith(ENode * pParentNode)
|
||||
{
|
||||
for (auto timer = s_vTimers.begin(); timer != s_vTimers.end(); timer++)
|
||||
for (auto timer : s_vTimers)
|
||||
{
|
||||
if ((*timer)->getParentNode() == pParentNode)
|
||||
if (timer->getParentNode() == pParentNode)
|
||||
{
|
||||
(*timer)->stop();
|
||||
timer->stop();
|
||||
}
|
||||
}
|
||||
for (auto child = pParentNode->getChildren().begin(); child != pParentNode->getChildren().end(); child++)
|
||||
for (auto child : pParentNode->getChildren())
|
||||
{
|
||||
ETimerManager::stopAllTimersBindedWith((*child));
|
||||
ETimerManager::stopAllTimersBindedWith(child);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -142,9 +142,9 @@ void e2d::ETimerManager::__clearAllTimersBindedWith(ENode * pParentNode)
|
|||
|
||||
void e2d::ETimerManager::__resetAllTimers()
|
||||
{
|
||||
for (auto timer = s_vTimers.begin(); timer != s_vTimers.end(); timer++)
|
||||
for (auto timer : s_vTimers)
|
||||
{
|
||||
(*timer)->m_fLast = ETime::getTotalTime();
|
||||
timer->m_fLast = ETime::getTotalTime();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,4 @@
|
|||
#include "..\enodes.h"
|
||||
#include "..\elisteners.h"
|
||||
#include "..\emanagers.h"
|
||||
|
||||
e2d::EButton::EButton()
|
||||
: m_Callback((const BtnClkCallback &)nullptr)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,4 @@
|
|||
#include "..\enodes.h"
|
||||
#include "..\elisteners.h"
|
||||
#include "..\emanagers.h"
|
||||
|
||||
e2d::EButtonToggle::EButtonToggle()
|
||||
: EButton()
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
#include "..\enodes.h"
|
||||
#include "..\elisteners.h"
|
||||
|
||||
e2d::EMenu::EMenu()
|
||||
: m_bEnable(true)
|
||||
|
|
@ -35,9 +34,9 @@ void e2d::EMenu::setEnable(bool enable)
|
|||
{
|
||||
m_bEnable = enable;
|
||||
|
||||
for (auto button = m_vButtons.begin(); button != m_vButtons.end(); button++)
|
||||
for (auto button : m_vButtons)
|
||||
{
|
||||
(*button)->setEnable(enable);
|
||||
button->setEnable(enable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
#include "..\emanagers.h"
|
||||
#include "..\etools.h"
|
||||
#include "..\eactions.h"
|
||||
#include "..\egeometry.h"
|
||||
#include "..\eshape.h"
|
||||
#include <algorithm>
|
||||
|
||||
// 默认中心点位置
|
||||
|
|
@ -24,59 +24,29 @@ e2d::ENode::ENode()
|
|||
, m_MatriFinal(D2D1::Matrix3x2F::Identity())
|
||||
, m_bVisiable(true)
|
||||
, m_bDisplayedInScene(false)
|
||||
, m_pGeometry(nullptr)
|
||||
, m_pShape(nullptr)
|
||||
, m_pParent(nullptr)
|
||||
, m_pParentScene(nullptr)
|
||||
, m_nHashName(0)
|
||||
, m_bSortChildrenNeeded(false)
|
||||
, m_bTransformNeeded(false)
|
||||
, m_bAutoUpdate(true)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::ENode::ENode(const EString & name)
|
||||
: m_nOrder(0)
|
||||
, m_fScaleX(1.0f)
|
||||
, m_fScaleY(1.0f)
|
||||
, m_fRotation(0)
|
||||
, m_fSkewAngleX(0)
|
||||
, m_fSkewAngleY(0)
|
||||
, m_fDisplayOpacity(1.0f)
|
||||
, m_fRealOpacity(1.0f)
|
||||
, m_fPivotX(s_fDefaultPiovtX)
|
||||
, m_fPivotY(s_fDefaultPiovtY)
|
||||
, m_MatriInitial(D2D1::Matrix3x2F::Identity())
|
||||
, m_MatriFinal(D2D1::Matrix3x2F::Identity())
|
||||
, m_bVisiable(true)
|
||||
, m_bDisplayedInScene(false)
|
||||
, m_pGeometry(nullptr)
|
||||
, m_pParent(nullptr)
|
||||
, m_pParentScene(nullptr)
|
||||
, m_nHashName(0)
|
||||
, m_bSortChildrenNeeded(false)
|
||||
, m_bTransformNeeded(false)
|
||||
{
|
||||
this->setName(name);
|
||||
}
|
||||
|
||||
e2d::ENode::~ENode()
|
||||
{
|
||||
ETimerManager::__clearAllTimersBindedWith(this);
|
||||
EActionManager::__clearAllActionsBindedWith(this);
|
||||
EPhysicsManager::_clearAllListenersBindedWith(this);
|
||||
EPhysicsManager::_delGeometry(m_pGeometry);
|
||||
for (auto child = m_vChildren.begin(); child != m_vChildren.end(); child++)
|
||||
EShapeManager::__delShape(m_pShape);
|
||||
for (auto child : m_vChildren)
|
||||
{
|
||||
SafeRelease(&(*child));
|
||||
SafeRelease(&child);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ENode::_update()
|
||||
{
|
||||
if (!m_bVisiable)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_bTransformNeeded)
|
||||
{
|
||||
_updateTransform(this);
|
||||
|
|
@ -84,8 +54,21 @@ void e2d::ENode::_update()
|
|||
|
||||
if (!m_vChildren.empty())
|
||||
{
|
||||
this->_sortChildren();
|
||||
// ×Ó½ÚµãÅÅÐò
|
||||
if (m_bSortChildrenNeeded)
|
||||
{
|
||||
std::sort(
|
||||
std::begin(m_vChildren),
|
||||
std::end(m_vChildren),
|
||||
[](ENode * n1, ENode * n2) {
|
||||
return n1->getOrder() < n2->getOrder();
|
||||
}
|
||||
);
|
||||
|
||||
m_bSortChildrenNeeded = false;
|
||||
}
|
||||
|
||||
// ±éÀú×Ó½Úµã
|
||||
size_t size = m_vChildren.size();
|
||||
size_t i;
|
||||
for (i = 0; i < size; i++)
|
||||
|
|
@ -103,7 +86,10 @@ void e2d::ENode::_update()
|
|||
}
|
||||
|
||||
// 执行 onUpdate 函数
|
||||
this->onUpdate();
|
||||
if (m_bAutoUpdate)
|
||||
{
|
||||
this->onUpdate();
|
||||
}
|
||||
|
||||
// 访问剩余节点
|
||||
for (; i < size; i++)
|
||||
|
|
@ -159,31 +145,31 @@ void e2d::ENode::_render()
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::ENode::_drawGeometry()
|
||||
void e2d::ENode::_drawShape()
|
||||
{
|
||||
// 绘制自身的几何形状
|
||||
if (m_pGeometry && m_pGeometry->m_bIsVisiable)
|
||||
if (m_pShape && m_pShape->m_bIsVisiable)
|
||||
{
|
||||
m_pGeometry->_render();
|
||||
m_pShape->_render();
|
||||
}
|
||||
|
||||
// 绘制所有子节点的几何形状
|
||||
for (auto child = m_vChildren.begin(); child != m_vChildren.end(); child++)
|
||||
for (auto child : m_vChildren)
|
||||
{
|
||||
(*child)->_drawGeometry();
|
||||
child->_drawShape();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ENode::_onEnter()
|
||||
{
|
||||
if (!this->m_bDisplayedInScene && this->isVisiable())
|
||||
if (!this->m_bDisplayedInScene)
|
||||
{
|
||||
this->m_bDisplayedInScene = true;
|
||||
this->onEnter();
|
||||
|
||||
for (auto child = m_vChildren.begin(); child != m_vChildren.end(); child++)
|
||||
for (auto child : m_vChildren)
|
||||
{
|
||||
(*child)->_onEnter();
|
||||
child->_onEnter();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -195,30 +181,13 @@ void e2d::ENode::_onExit()
|
|||
this->m_bDisplayedInScene = false;
|
||||
this->onExit();
|
||||
|
||||
for (auto child = m_vChildren.begin(); child != m_vChildren.end(); child++)
|
||||
for (auto child : m_vChildren)
|
||||
{
|
||||
(*child)->_onExit();
|
||||
child->_onExit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ENode::_sortChildren()
|
||||
{
|
||||
if (m_bSortChildrenNeeded)
|
||||
{
|
||||
// ×Ó½ÚµãÅÅÐò
|
||||
std::sort(
|
||||
std::begin(m_vChildren),
|
||||
std::end(m_vChildren),
|
||||
[](ENode * n1, ENode * n2) {
|
||||
return n1->getOrder() < n2->getOrder();
|
||||
}
|
||||
);
|
||||
|
||||
m_bSortChildrenNeeded = false;
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ENode::_updateTransform()
|
||||
{
|
||||
// 计算中心点坐标
|
||||
|
|
@ -253,9 +222,9 @@ void e2d::ENode::_updateTransform()
|
|||
|
||||
void e2d::ENode::_updateChildrenTransform()
|
||||
{
|
||||
for (auto child = m_vChildren.begin(); child != m_vChildren.end(); child++)
|
||||
for (auto child : m_vChildren)
|
||||
{
|
||||
_updateTransform((*child));
|
||||
_updateTransform(child);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -264,9 +233,9 @@ void e2d::ENode::_updateTransform(ENode * node)
|
|||
// 计算自身的转换矩阵
|
||||
node->_updateTransform();
|
||||
// 绑定于自身的形状也进行相应转换
|
||||
if (node->m_pGeometry)
|
||||
if (node->m_pShape)
|
||||
{
|
||||
node->m_pGeometry->_transform();
|
||||
node->m_pShape->_transform();
|
||||
}
|
||||
// 遍历子节点下的所有节点
|
||||
node->_updateChildrenTransform();
|
||||
|
|
@ -276,9 +245,9 @@ void e2d::ENode::_updateTransform(ENode * node)
|
|||
|
||||
void e2d::ENode::_updateChildrenOpacity()
|
||||
{
|
||||
for (auto child = m_vChildren.begin(); child != m_vChildren.end(); child++)
|
||||
for (auto child : m_vChildren)
|
||||
{
|
||||
_updateOpacity((*child));
|
||||
_updateOpacity(child);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -386,6 +355,11 @@ float e2d::ENode::getOpacity() const
|
|||
return m_fRealOpacity;
|
||||
}
|
||||
|
||||
e2d::EShape * e2d::ENode::getShape() const
|
||||
{
|
||||
return m_pShape;
|
||||
}
|
||||
|
||||
int e2d::ENode::getOrder() const
|
||||
{
|
||||
return m_nOrder;
|
||||
|
|
@ -441,21 +415,6 @@ void e2d::ENode::movePos(const EVector2 & v)
|
|||
this->movePos(v.x, v.y);
|
||||
}
|
||||
|
||||
void e2d::ENode::_setWidth(float width)
|
||||
{
|
||||
this->_setSize(width, m_Size.height);
|
||||
}
|
||||
|
||||
void e2d::ENode::_setHeight(float height)
|
||||
{
|
||||
this->_setSize(m_Size.width, height);
|
||||
}
|
||||
|
||||
void e2d::ENode::_setSize(const ESize & size)
|
||||
{
|
||||
this->_setSize(size.width, size.height);
|
||||
}
|
||||
|
||||
void e2d::ENode::_setSize(float width, float height)
|
||||
{
|
||||
if (m_Size.width == width && m_Size.height == height)
|
||||
|
|
@ -550,32 +509,33 @@ void e2d::ENode::setPivot(float pivotX, float pivotY)
|
|||
m_bTransformNeeded = true;
|
||||
}
|
||||
|
||||
void e2d::ENode::setGeometry(EGeometry * geometry)
|
||||
void e2d::ENode::setShape(EShape * pShape)
|
||||
{
|
||||
// 删除旧的形状
|
||||
EPhysicsManager::_delGeometry(m_pGeometry);
|
||||
EShapeManager::__delShape(m_pShape);
|
||||
// 添加新的形状
|
||||
EPhysicsManager::_addGeometry(geometry);
|
||||
EShapeManager::__addShape(pShape);
|
||||
|
||||
if (geometry)
|
||||
if (pShape)
|
||||
{
|
||||
// 双向绑定
|
||||
this->m_pGeometry = geometry;
|
||||
geometry->m_pParentNode = this;
|
||||
this->m_pShape = pShape;
|
||||
pShape->m_pParentNode = this;
|
||||
}
|
||||
else
|
||||
{
|
||||
this->m_pGeometry = nullptr;
|
||||
this->m_pShape = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ENode::addChild(ENode * child, int order /* = 0 */)
|
||||
{
|
||||
WARN_IF(child == nullptr, "ENode::addChild NULL pointer exception.");
|
||||
ASSERT(child->m_pParent == nullptr, "ENode already added. It can't be added again!");
|
||||
|
||||
if (child)
|
||||
{
|
||||
ASSERT(child->m_pParent == nullptr, "ENode already added. It can't be added again!");
|
||||
|
||||
for (ENode * parent = this; parent != nullptr; parent = parent->getParent())
|
||||
{
|
||||
ASSERT(child != parent, "A ENode cannot be the child of his own children!");
|
||||
|
|
@ -623,9 +583,9 @@ std::vector<e2d::ENode*>& e2d::ENode::getChildren()
|
|||
return m_vChildren;
|
||||
}
|
||||
|
||||
size_t e2d::ENode::getChildrenCount() const
|
||||
int e2d::ENode::getChildrenCount() const
|
||||
{
|
||||
return m_vChildren.size();
|
||||
return static_cast<int>(m_vChildren.size());
|
||||
}
|
||||
|
||||
e2d::ENode * e2d::ENode::getChild(const EString & name)
|
||||
|
|
@ -634,15 +594,30 @@ e2d::ENode * e2d::ENode::getChild(const EString & name)
|
|||
|
||||
unsigned int hash = name.hash();
|
||||
|
||||
for (auto child = m_vChildren.begin(); child != m_vChildren.end(); child++)
|
||||
for (auto child : m_vChildren)
|
||||
{
|
||||
// 不同的名称可能会有相同的 Hash 值,但是先比较 Hash 可以提升搜索速度
|
||||
if ((*child)->m_nHashName == hash && (*child)->m_sName == name)
|
||||
return (*child);
|
||||
if (child->m_nHashName == hash && child->m_sName == name)
|
||||
return child;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::vector<e2d::ENode*> e2d::ENode::getChildren(const EString & name)
|
||||
{
|
||||
std::vector<ENode*> vChildren;
|
||||
|
||||
WARN_IF(name.isEmpty(), "Invalid ENode name.");
|
||||
|
||||
unsigned int hash = name.hash();
|
||||
|
||||
for (auto child : m_vChildren)
|
||||
if (child->m_nHashName == hash && child->m_sName == name)
|
||||
vChildren.push_back(child);
|
||||
|
||||
return std::move(vChildren);
|
||||
}
|
||||
|
||||
void e2d::ENode::removeFromParent()
|
||||
{
|
||||
if (m_pParent)
|
||||
|
|
@ -653,7 +628,7 @@ void e2d::ENode::removeFromParent()
|
|||
|
||||
bool e2d::ENode::removeChild(ENode * child)
|
||||
{
|
||||
WARN_IF(child == nullptr, "ENode::removeChild NULL pointer exception.");
|
||||
WARN_IF(child == nullptr, "ENode::removeChildren NULL pointer exception.");
|
||||
|
||||
if (m_vChildren.empty())
|
||||
{
|
||||
|
|
@ -669,11 +644,16 @@ bool e2d::ENode::removeChild(ENode * child)
|
|||
{
|
||||
m_vChildren.erase(m_vChildren.begin() + i);
|
||||
child->m_pParent = nullptr;
|
||||
|
||||
if (child->m_pParentScene)
|
||||
{
|
||||
child->_setParentScene(nullptr);
|
||||
}
|
||||
child->_onExit();
|
||||
if (child->m_bDisplayedInScene)
|
||||
{
|
||||
child->_onExit();
|
||||
}
|
||||
|
||||
child->release();
|
||||
return true;
|
||||
}
|
||||
|
|
@ -682,7 +662,7 @@ bool e2d::ENode::removeChild(ENode * child)
|
|||
return false;
|
||||
}
|
||||
|
||||
void e2d::ENode::removeChild(const EString & childName)
|
||||
void e2d::ENode::removeChildren(const EString & childName)
|
||||
{
|
||||
WARN_IF(childName.isEmpty(), "Invalid ENode name.");
|
||||
|
||||
|
|
@ -706,9 +686,11 @@ void e2d::ENode::removeChild(const EString & childName)
|
|||
{
|
||||
child->_setParentScene(nullptr);
|
||||
}
|
||||
child->_onExit();
|
||||
if (child->m_bDisplayedInScene)
|
||||
{
|
||||
child->_onExit();
|
||||
}
|
||||
child->release();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -716,10 +698,13 @@ void e2d::ENode::removeChild(const EString & childName)
|
|||
void e2d::ENode::clearAllChildren()
|
||||
{
|
||||
// 所有节点的引用计数减一
|
||||
for (auto child = m_vChildren.begin(); child != m_vChildren.end(); child++)
|
||||
for (auto child : m_vChildren)
|
||||
{
|
||||
(*child)->_onExit();
|
||||
(*child)->release();
|
||||
if (child->m_bDisplayedInScene)
|
||||
{
|
||||
child->_onExit();
|
||||
}
|
||||
child->release();
|
||||
}
|
||||
// 清空储存节点的容器
|
||||
m_vChildren.clear();
|
||||
|
|
@ -727,10 +712,14 @@ void e2d::ENode::clearAllChildren()
|
|||
|
||||
void e2d::ENode::runAction(EAction * action)
|
||||
{
|
||||
ASSERT(
|
||||
(!action->getTarget()),
|
||||
"The action is already running, it cannot run again!"
|
||||
WARN_IF(
|
||||
action->getTarget() != nullptr,
|
||||
"The action is already running, The clone of the action will be created automatically!"
|
||||
);
|
||||
if (action->getTarget())
|
||||
{
|
||||
action = action->clone();
|
||||
}
|
||||
action->setTarget(this);
|
||||
EActionManager::addAction(action);
|
||||
}
|
||||
|
|
@ -778,13 +767,18 @@ bool e2d::ENode::isPointIn(EPoint point)
|
|||
}
|
||||
else
|
||||
{
|
||||
for (auto child = m_vChildren.begin(); child != m_vChildren.end(); child++)
|
||||
if ((*child)->isPointIn(point))
|
||||
for (auto child : m_vChildren)
|
||||
if (child->isPointIn(point))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void e2d::ENode::setAutoUpdate(bool bAutoUpdate)
|
||||
{
|
||||
m_bAutoUpdate = bAutoUpdate;
|
||||
}
|
||||
|
||||
void e2d::ENode::setDefaultPiovt(float defaultPiovtX, float defaultPiovtY)
|
||||
{
|
||||
s_fDefaultPiovtX = min(max(defaultPiovtX, 0), 1);
|
||||
|
|
@ -817,17 +811,13 @@ void e2d::ENode::stopAllActions()
|
|||
void e2d::ENode::setVisiable(bool value)
|
||||
{
|
||||
m_bVisiable = value;
|
||||
if (m_bDisplayedInScene == false)
|
||||
{
|
||||
this->_onEnter();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ENode::setName(const EString & name)
|
||||
{
|
||||
WARN_IF(name.isEmpty(), "Invalid ENode name.");
|
||||
|
||||
if (!name.isEmpty())
|
||||
if (!name.isEmpty() && m_sName != name)
|
||||
{
|
||||
// 保存节点名
|
||||
m_sName = name;
|
||||
|
|
@ -839,8 +829,8 @@ void e2d::ENode::setName(const EString & name)
|
|||
void e2d::ENode::_setParentScene(EScene * scene)
|
||||
{
|
||||
m_pParentScene = scene;
|
||||
for (auto child = m_vChildren.begin(); child != m_vChildren.end(); child++)
|
||||
for (auto child : m_vChildren)
|
||||
{
|
||||
(*child)->_setParentScene(scene);
|
||||
child->_setParentScene(scene);
|
||||
}
|
||||
}
|
||||
|
|
@ -2,62 +2,29 @@
|
|||
|
||||
|
||||
e2d::ESprite::ESprite()
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_pImage(nullptr)
|
||||
: m_pImage(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::ESprite::ESprite(EImage * image)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_pImage(nullptr)
|
||||
: m_pImage(nullptr)
|
||||
{
|
||||
loadFrom(image);
|
||||
}
|
||||
|
||||
e2d::ESprite::ESprite(EKeyframe * spriteFrame)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_pImage(nullptr)
|
||||
{
|
||||
loadFrom(spriteFrame);
|
||||
}
|
||||
|
||||
e2d::ESprite::ESprite(LPCTSTR imageFileName)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_pImage(nullptr)
|
||||
: m_pImage(nullptr)
|
||||
{
|
||||
loadFrom(imageFileName);
|
||||
}
|
||||
|
||||
e2d::ESprite::ESprite(LPCTSTR imageFileName, float x, float y, float width, float height)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_pImage(nullptr)
|
||||
: m_pImage(nullptr)
|
||||
{
|
||||
loadFrom(imageFileName);
|
||||
clip(x, y, width, height);
|
||||
}
|
||||
|
||||
e2d::ESprite::ESprite(LPCTSTR resourceName, LPCTSTR resourceType)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_pImage(nullptr)
|
||||
{
|
||||
loadFrom(resourceName, resourceType);
|
||||
}
|
||||
|
||||
e2d::ESprite::ESprite(LPCTSTR resourceName, LPCTSTR resourceType, float x, float y, float width, float height)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_pImage(nullptr)
|
||||
{
|
||||
loadFrom(resourceName, resourceType);
|
||||
clip(x, y, width, height);
|
||||
}
|
||||
|
||||
e2d::ESprite::~ESprite()
|
||||
{
|
||||
SafeRelease(&m_pImage);
|
||||
|
|
@ -71,9 +38,7 @@ void e2d::ESprite::loadFrom(EImage * image)
|
|||
m_pImage = image;
|
||||
m_pImage->retain();
|
||||
|
||||
m_fSourceClipX = m_fSourceClipY = 0;
|
||||
ENode::_setWidth(m_pImage->getSourceWidth());
|
||||
ENode::_setHeight(m_pImage->getSourceHeight());
|
||||
ENode::_setSize(m_pImage->getWidth(), m_pImage->getHeight());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -82,49 +47,35 @@ void e2d::ESprite::loadFrom(LPCTSTR imageFileName)
|
|||
loadFrom(new EImage(imageFileName));
|
||||
}
|
||||
|
||||
void e2d::ESprite::loadFrom(LPCTSTR resourceName, LPCTSTR resourceType)
|
||||
{
|
||||
loadFrom(new EImage(resourceName, resourceType));
|
||||
}
|
||||
|
||||
void e2d::ESprite::loadFrom(EImage * image, float x, float y, float width, float height)
|
||||
{
|
||||
loadFrom(image);
|
||||
clip(x, y, width, height);
|
||||
}
|
||||
|
||||
void e2d::ESprite::loadFrom(EKeyframe * frame)
|
||||
{
|
||||
if (frame)
|
||||
{
|
||||
loadFrom(frame->m_pImage);
|
||||
clip(frame->m_fSourceClipX, frame->m_fSourceClipY, frame->m_fSourceClipWidth, frame->m_fSourceClipHeight);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ESprite::clip(float x, float y, float width, float height)
|
||||
{
|
||||
m_fSourceClipX = min(max(x, 0), m_pImage->getSourceWidth());
|
||||
m_fSourceClipY = min(max(y, 0), m_pImage->getSourceHeight());
|
||||
ENode::_setWidth(min(max(width, 0), m_pImage->getSourceWidth() - m_fSourceClipX));
|
||||
ENode::_setHeight(min(max(height, 0), m_pImage->getSourceHeight() - m_fSourceClipY));
|
||||
m_pImage->clip(x, y, width, height);
|
||||
ENode::_setSize(
|
||||
min(max(width, 0), m_pImage->getSourceWidth() - m_pImage->getClipX()),
|
||||
min(max(height, 0), m_pImage->getSourceHeight() - m_pImage->getClipY())
|
||||
);
|
||||
}
|
||||
|
||||
e2d::EImage * e2d::ESprite::getImage() const
|
||||
{
|
||||
return m_pImage;
|
||||
}
|
||||
|
||||
void e2d::ESprite::onRender()
|
||||
{
|
||||
if (m_pImage && m_pImage->_getBitmap())
|
||||
if (m_pImage && m_pImage->getBitmap())
|
||||
{
|
||||
// Draw bitmap
|
||||
// äÖȾͼƬ
|
||||
ERenderer::getRenderTarget()->DrawBitmap(
|
||||
m_pImage->_getBitmap(),
|
||||
m_pImage->getBitmap(),
|
||||
D2D1::RectF(0, 0, getRealWidth(), getRealHeight()),
|
||||
m_fDisplayOpacity,
|
||||
D2D1_BITMAP_INTERPOLATION_MODE_LINEAR,
|
||||
D2D1::RectF(
|
||||
m_fSourceClipX,
|
||||
m_fSourceClipY,
|
||||
m_fSourceClipX + getRealWidth(),
|
||||
m_fSourceClipY + getRealHeight()
|
||||
m_pImage->getClipX(),
|
||||
m_pImage->getClipY(),
|
||||
m_pImage->getClipX() + getRealWidth(),
|
||||
m_pImage->getClipY() + getRealHeight()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ void e2d::EText::_initTextLayout()
|
|||
// 未设置字体或空字符串时,文本宽高为 0
|
||||
if (!m_pFont || m_sText.isEmpty())
|
||||
{
|
||||
this->_setHeight(0);
|
||||
this->_setSize(0, 0);
|
||||
m_fWordWrappingWidth = 0;
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#include "..\egeometry.h"
|
||||
#include "..\eshape.h"
|
||||
#include "..\enodes.h"
|
||||
|
||||
e2d::ECircle::ECircle()
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#include "..\egeometry.h"
|
||||
#include "..\eshape.h"
|
||||
#include "..\enodes.h"
|
||||
|
||||
e2d::EEllipse::EEllipse()
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#include "..\egeometry.h"
|
||||
#include "..\eshape.h"
|
||||
#include "..\enodes.h"
|
||||
|
||||
e2d::ERectangle::ERectangle()
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
#include "..\eshape.h"
|
||||
#include "..\emanagers.h"
|
||||
#include "..\enodes.h"
|
||||
|
||||
e2d::EShape::EShape()
|
||||
: m_nCategoryBitmask(0)
|
||||
, m_nCollisionBitmask(0)
|
||||
, m_bIsVisiable(true)
|
||||
, m_nColor(EColor::RED)
|
||||
, m_fOpacity(1)
|
||||
, m_pParentNode(nullptr)
|
||||
, m_pTransformedShape(nullptr)
|
||||
, m_bEnable(true)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EShape::~EShape()
|
||||
{
|
||||
SafeReleaseInterface(&m_pTransformedShape);
|
||||
}
|
||||
|
||||
e2d::ENode * e2d::EShape::getParentNode() const
|
||||
{
|
||||
return m_pParentNode;
|
||||
}
|
||||
|
||||
UINT32 e2d::EShape::getCategoryBitmask() const
|
||||
{
|
||||
return m_nCategoryBitmask;
|
||||
}
|
||||
|
||||
UINT32 e2d::EShape::getCollisionBitmask() const
|
||||
{
|
||||
return m_nCollisionBitmask;
|
||||
}
|
||||
|
||||
void e2d::EShape::setCategoryBitmask(UINT32 mask)
|
||||
{
|
||||
m_nCategoryBitmask = mask;
|
||||
}
|
||||
|
||||
void e2d::EShape::setCollisionBitmask(UINT32 mask)
|
||||
{
|
||||
m_nCollisionBitmask = mask;
|
||||
}
|
||||
|
||||
void e2d::EShape::setEnable(bool bEnable)
|
||||
{
|
||||
m_bEnable = bEnable;
|
||||
}
|
||||
|
||||
void e2d::EShape::setVisiable(bool bVisiable)
|
||||
{
|
||||
m_bIsVisiable = bVisiable;
|
||||
}
|
||||
|
||||
void e2d::EShape::setColor(UINT32 color)
|
||||
{
|
||||
m_nColor = color;
|
||||
}
|
||||
|
||||
void e2d::EShape::setOpacity(float opacity)
|
||||
{
|
||||
m_fOpacity = min(max(opacity, 0), 1);
|
||||
}
|
||||
|
||||
void e2d::EShape::_render()
|
||||
{
|
||||
if (m_pTransformedShape && m_bEnable)
|
||||
{
|
||||
ID2D1SolidColorBrush * pBrush = ERenderer::getSolidColorBrush();
|
||||
// 눼쉔뺌岬
|
||||
ERenderer::getRenderTarget()->CreateSolidColorBrush(
|
||||
D2D1::ColorF(
|
||||
m_nColor,
|
||||
m_fOpacity),
|
||||
&pBrush
|
||||
);
|
||||
// 삥齡섯부近榴
|
||||
ERenderer::getRenderTarget()->DrawGeometry(m_pTransformedShape, pBrush);
|
||||
}
|
||||
}
|
||||
|
||||
int e2d::EShape::getRelationWith(EShape * 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 0;
|
||||
}
|
||||
|
||||
void e2d::EShape::_transform()
|
||||
{
|
||||
if (m_pParentNode && m_bEnable)
|
||||
{
|
||||
// 姦렴覩近榴
|
||||
SafeReleaseInterface(&m_pTransformedShape);
|
||||
|
||||
// 몽앴만쌘듐瘻뻣섯부暠近
|
||||
ERenderer::getID2D1Factory()->CreateTransformedGeometry(
|
||||
_getD2dGeometry(),
|
||||
m_pParentNode->m_MatriFinal,
|
||||
&m_pTransformedShape
|
||||
);
|
||||
|
||||
EShapeManager::__updateShape(this);
|
||||
}
|
||||
}
|
||||
|
|
@ -205,7 +205,7 @@ bool EMusic::isPlaying()
|
|||
}
|
||||
}
|
||||
|
||||
float e2d::EMusic::getVolume() const
|
||||
float EMusic::getVolume() const
|
||||
{
|
||||
float fVolume = 0.0f;
|
||||
if (m_pSourceVoice)
|
||||
|
|
@ -215,7 +215,7 @@ float e2d::EMusic::getVolume() const
|
|||
return fVolume;
|
||||
}
|
||||
|
||||
bool e2d::EMusic::setVolume(float fVolume)
|
||||
bool EMusic::setVolume(float fVolume)
|
||||
{
|
||||
if (m_pSourceVoice)
|
||||
{
|
||||
|
|
@ -224,7 +224,7 @@ bool e2d::EMusic::setVolume(float fVolume)
|
|||
return false;
|
||||
}
|
||||
|
||||
float e2d::EMusic::getFrequencyRatio() const
|
||||
float EMusic::getFrequencyRatio() const
|
||||
{
|
||||
float fFrequencyRatio = 0.0f;
|
||||
if (m_pSourceVoice)
|
||||
|
|
@ -234,7 +234,7 @@ float e2d::EMusic::getFrequencyRatio() const
|
|||
return fFrequencyRatio;
|
||||
}
|
||||
|
||||
bool e2d::EMusic::setFrequencyRatio(float fFrequencyRatio)
|
||||
bool EMusic::setFrequencyRatio(float fFrequencyRatio)
|
||||
{
|
||||
if (m_pSourceVoice)
|
||||
{
|
||||
|
|
@ -244,7 +244,7 @@ bool e2d::EMusic::setFrequencyRatio(float fFrequencyRatio)
|
|||
return false;
|
||||
}
|
||||
|
||||
IXAudio2SourceVoice * e2d::EMusic::getIXAudio2SourceVoice() const
|
||||
IXAudio2SourceVoice * EMusic::getIXAudio2SourceVoice() const
|
||||
{
|
||||
return m_pSourceVoice;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -576,7 +576,7 @@ public:
|
|||
|
||||
// 添加关键帧
|
||||
void addKeyframe(
|
||||
EKeyframe * frame /* 添加关键帧 */
|
||||
EImage * frame /* 添加关键帧 */
|
||||
);
|
||||
|
||||
// 设置每一帧的时间间隔(秒)
|
||||
|
|
@ -603,7 +603,7 @@ protected:
|
|||
protected:
|
||||
float m_fInterval;
|
||||
UINT m_nFrameIndex;
|
||||
std::vector<EKeyframe*> m_vFrames;
|
||||
std::vector<EImage*> m_vFrames;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/******************************************************
|
||||
* Easy2D Game Core
|
||||
* Easy2D Game Framework
|
||||
*
|
||||
* Website: https://www.easy2d.cn
|
||||
* Source Code: https://github.com/Nomango/Easy2D
|
||||
|
|
@ -12,8 +12,8 @@
|
|||
#error 仅能在 C++ 环境下使用 Easy2D
|
||||
#endif
|
||||
|
||||
#if _MSC_VER < 1600
|
||||
#error Easy2D 不支持 Visual Studio 2010 以下版本
|
||||
#if _MSC_VER < 1700
|
||||
#error Easy2D 不支持 Visual Studio 2012 以下版本
|
||||
#endif
|
||||
|
||||
|
||||
|
|
@ -22,11 +22,10 @@
|
|||
#include "ebase.h"
|
||||
#include "emanagers.h"
|
||||
#include "enodes.h"
|
||||
#include "elisteners.h"
|
||||
#include "etools.h"
|
||||
#include "eactions.h"
|
||||
#include "etransitions.h"
|
||||
#include "egeometry.h"
|
||||
#include "eshape.h"
|
||||
|
||||
|
||||
#if defined(DEBUG) || defined(_DEBUG)
|
||||
|
|
|
|||
272
core/ecommon.h
272
core/ecommon.h
|
|
@ -86,6 +86,7 @@ struct ESize
|
|||
}
|
||||
};
|
||||
|
||||
|
||||
// 字符串
|
||||
class EString
|
||||
{
|
||||
|
|
@ -219,31 +220,6 @@ private:
|
|||
};
|
||||
|
||||
|
||||
// 二维向量
|
||||
typedef EPoint EVector2;
|
||||
|
||||
// 定时器回调函数(参数为该定时器被调用的次数,从 0 开始)
|
||||
typedef std::function<void(int)> TimerCallback;
|
||||
|
||||
// 按钮点击回调函数
|
||||
typedef std::function<void()> BtnClkCallback;
|
||||
|
||||
// 物理世界消息监听器回调函数
|
||||
typedef std::function<void()> PhysLsnrCallback;
|
||||
|
||||
// 碰撞消息监听器回调函数
|
||||
typedef PhysLsnrCallback ClsLsnrCallback;
|
||||
|
||||
template<typename T>
|
||||
inline void SafeDelete(T** p) { if (*p) { delete *p; *p = nullptr; } }
|
||||
|
||||
template<typename Obj>
|
||||
inline void SafeRelease(Obj** p) { if (*p) { (*p)->release(); *p = nullptr; } }
|
||||
|
||||
template<class Interface>
|
||||
inline void SafeReleaseInterface(Interface **pp) { if (*pp != nullptr) { (*pp)->Release(); (*pp) = nullptr; } }
|
||||
|
||||
|
||||
// 颜色
|
||||
class EColor
|
||||
{
|
||||
|
|
@ -418,13 +394,11 @@ public:
|
|||
};
|
||||
|
||||
|
||||
class EGeometry;
|
||||
|
||||
// 物理消息
|
||||
class EPhysicsEvent
|
||||
// 形状交集关系
|
||||
class ERelation
|
||||
{
|
||||
public:
|
||||
enum INTERSECT_RELATION
|
||||
enum VALUE
|
||||
{
|
||||
UNKNOWN = 0, /* 关系不确定 */
|
||||
DISJOINT = 1, /* 没有交集 */
|
||||
|
|
@ -432,25 +406,12 @@ public:
|
|||
CONTAINS = 3, /* 完全包含 */
|
||||
OVERLAP = 4 /* 部分重叠 */
|
||||
};
|
||||
|
||||
// 获取当前物理碰撞消息类型
|
||||
static INTERSECT_RELATION getMsg();
|
||||
|
||||
// 获取主动方
|
||||
static EGeometry * getActiveGeometry();
|
||||
|
||||
// 获取被动方
|
||||
static EGeometry * getPassiveGeometry();
|
||||
|
||||
public:
|
||||
static INTERSECT_RELATION s_nRelation;
|
||||
static EGeometry * s_pActiveGeometry;
|
||||
static EGeometry * s_pPassiveGeometry;
|
||||
};
|
||||
|
||||
|
||||
class EObjectManager;
|
||||
|
||||
// 基础对象
|
||||
class EObject
|
||||
{
|
||||
friend EObjectManager;
|
||||
|
|
@ -547,41 +508,61 @@ protected:
|
|||
};
|
||||
|
||||
|
||||
class ESprite;
|
||||
|
||||
// 图片
|
||||
class EImage :
|
||||
public EObject
|
||||
{
|
||||
friend ESprite;
|
||||
|
||||
public:
|
||||
// 创建一个空的图片
|
||||
EImage();
|
||||
|
||||
// 从本地文件中读取资源
|
||||
EImage(
|
||||
LPCTSTR fileName
|
||||
LPCTSTR strFilePath /* 图片文件路径 */
|
||||
);
|
||||
|
||||
// 读取程序资源
|
||||
// 从本地文件中读取资源
|
||||
EImage(
|
||||
LPCTSTR resourceName,
|
||||
LPCTSTR resourceType
|
||||
LPCTSTR strFilePath,/* 图片文件路径 */
|
||||
float nClipX, /* 裁剪位置 X 坐标 */
|
||||
float nClipY, /* 裁剪位置 Y 坐标 */
|
||||
float nClipWidth, /* 裁剪宽度 */
|
||||
float nClipHeight /* 裁剪高度 */
|
||||
);
|
||||
|
||||
virtual ~EImage();
|
||||
|
||||
// 从本地文件中读取资源
|
||||
void loadFromFile(
|
||||
const EString & fileName
|
||||
// 裁剪图片
|
||||
void clip(
|
||||
float nClipX, /* 裁剪位置 X 坐标 */
|
||||
float nClipY, /* 裁剪位置 Y 坐标 */
|
||||
float nClipWidth, /* 裁剪宽度 */
|
||||
float nClipHeight /* 裁剪高度 */
|
||||
);
|
||||
|
||||
// 读取程序资源
|
||||
void loadFromResource(
|
||||
LPCTSTR resourceName,
|
||||
LPCTSTR resourceType
|
||||
// 从本地文件中读取图片
|
||||
void loadFrom(
|
||||
const EString & strFilePath
|
||||
);
|
||||
|
||||
// 从本地文件中读取图片并裁剪
|
||||
void loadFrom(
|
||||
const EString & strFilePath,/* 图片文件路径 */
|
||||
float nClipX, /* 裁剪位置 X 坐标 */
|
||||
float nClipY, /* 裁剪位置 Y 坐标 */
|
||||
float nClipWidth, /* 裁剪宽度 */
|
||||
float nClipHeight /* 裁剪高度 */
|
||||
);
|
||||
|
||||
// 获取宽度
|
||||
virtual float getWidth() const;
|
||||
|
||||
// 获取高度
|
||||
virtual float getHeight() const;
|
||||
|
||||
// 获取大小
|
||||
virtual ESize getSize() const;
|
||||
|
||||
// 获取源图片宽度
|
||||
virtual float getSourceWidth() const;
|
||||
|
||||
|
|
@ -590,113 +571,33 @@ public:
|
|||
|
||||
// 获取源图片大小
|
||||
virtual ESize getSourceSize() const;
|
||||
|
||||
// 获取裁剪位置 X 坐标
|
||||
virtual float getClipX() const;
|
||||
|
||||
// 获取裁剪位置 Y 坐标
|
||||
virtual float getClipY() const;
|
||||
|
||||
// 获取裁剪位置
|
||||
virtual EPoint getClipPos() const;
|
||||
|
||||
// 获取 ID2D1Bitmap 对象
|
||||
ID2D1Bitmap * getBitmap();
|
||||
|
||||
// 预加载资源
|
||||
static bool preload(
|
||||
const EString & fileName
|
||||
);
|
||||
|
||||
// 预加载资源
|
||||
static bool preload(
|
||||
LPCTSTR resourceName,
|
||||
LPCTSTR resourceType
|
||||
const EString & sFileName /* 图片文件路径 */
|
||||
);
|
||||
|
||||
// 清空缓存
|
||||
static void clearCache();
|
||||
|
||||
protected:
|
||||
ID2D1Bitmap * _getBitmap();
|
||||
|
||||
protected:
|
||||
ID2D1Bitmap * m_pBitmap;
|
||||
};
|
||||
|
||||
|
||||
class EKeyframe :
|
||||
public EObject
|
||||
{
|
||||
friend ESprite;
|
||||
|
||||
public:
|
||||
// 创建空的关键帧
|
||||
EKeyframe();
|
||||
|
||||
// 创建空的关键帧
|
||||
EKeyframe(
|
||||
EImage * texture
|
||||
);
|
||||
|
||||
// 创建空的关键帧
|
||||
EKeyframe(
|
||||
const EString & imageFileName
|
||||
);
|
||||
|
||||
// 创建空的关键帧
|
||||
EKeyframe(
|
||||
LPCTSTR resourceName,
|
||||
LPCTSTR resourceType
|
||||
);
|
||||
|
||||
// 创建空的关键帧
|
||||
EKeyframe(
|
||||
EImage * texture,
|
||||
float x,
|
||||
float y,
|
||||
float width,
|
||||
float height
|
||||
);
|
||||
|
||||
// 创建空的关键帧
|
||||
EKeyframe(
|
||||
const EString & imageFileName,
|
||||
float x,
|
||||
float y,
|
||||
float width,
|
||||
float height
|
||||
);
|
||||
|
||||
// 创建空的关键帧
|
||||
EKeyframe(
|
||||
LPCTSTR resourceName,
|
||||
LPCTSTR resourceType,
|
||||
float x,
|
||||
float y,
|
||||
float width,
|
||||
float height
|
||||
);
|
||||
|
||||
virtual ~EKeyframe();
|
||||
|
||||
// 获取宽度
|
||||
float getWidth() const;
|
||||
|
||||
// 获取高度
|
||||
float getHeight() const;
|
||||
|
||||
// 获取图片
|
||||
EImage * getImage() const;
|
||||
|
||||
protected:
|
||||
// 修改图片
|
||||
void _setImage(
|
||||
EImage * texture
|
||||
);
|
||||
|
||||
// 裁剪图片
|
||||
void _clipTexture(
|
||||
float x,
|
||||
float y,
|
||||
float width,
|
||||
float height
|
||||
);
|
||||
|
||||
protected:
|
||||
float m_fSourceClipX;
|
||||
float m_fSourceClipY;
|
||||
float m_fSourceClipWidth;
|
||||
float m_fSourceClipHeight;
|
||||
EImage * m_pImage;
|
||||
ID2D1Bitmap * m_pBitmap;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -721,11 +622,11 @@ public:
|
|||
// 重写这个函数,它将在离开这个场景时自动执行
|
||||
virtual void onExit() {}
|
||||
|
||||
// 重写这个函数,它将在窗口激活时执行
|
||||
virtual bool onActivate() { return false; }
|
||||
|
||||
// 重写这个函数,它将在窗口非激活时执行
|
||||
virtual bool onInactive() { return false; }
|
||||
// 重写这个函数,它将在碰撞发生时自动执行
|
||||
virtual void onCollide(
|
||||
ENode * pActiveNode, /* 主动发生碰撞的节点 */
|
||||
ENode * pPassiveNode /* 被动发生碰撞的节点 */
|
||||
) {}
|
||||
|
||||
// 重写这个函数,它将在关闭窗口时执行
|
||||
virtual bool onCloseWindow() { return true; }
|
||||
|
|
@ -733,7 +634,12 @@ public:
|
|||
// 重写这个函数,它将在每一帧画面刷新时执行
|
||||
virtual void onUpdate() {}
|
||||
|
||||
// 添加子节点到场景
|
||||
// 开启或禁用 onUpdate 函数
|
||||
virtual void setAutoUpdate(
|
||||
bool bAutoUpdate
|
||||
);
|
||||
|
||||
// 添加节点到场景
|
||||
void add(
|
||||
ENode * child,
|
||||
int zOrder = 0
|
||||
|
|
@ -744,35 +650,11 @@ public:
|
|||
ENode * child
|
||||
);
|
||||
|
||||
// 删除相同名称的子节点
|
||||
void remove(
|
||||
const EString &childName
|
||||
);
|
||||
|
||||
// 获取所有子节点
|
||||
std::vector<e2d::ENode*> getChildren();
|
||||
|
||||
// 获取子节点数量
|
||||
size_t getChildrenCount() const;
|
||||
|
||||
// 根据名称获取子节点
|
||||
ENode * getChild(
|
||||
const EString &childName
|
||||
);
|
||||
|
||||
// 获取根节点
|
||||
ENode * getRoot() const;
|
||||
|
||||
// 清空所有子成员
|
||||
void clearAllChildren();
|
||||
|
||||
// 执行动画
|
||||
void runAction(
|
||||
EAction * action
|
||||
);
|
||||
|
||||
// 开启几何图形的渲染
|
||||
void setGeometryVisiable(
|
||||
void setShapeVisiable(
|
||||
bool visiable
|
||||
);
|
||||
|
||||
|
|
@ -784,10 +666,30 @@ protected:
|
|||
void _update();
|
||||
|
||||
protected:
|
||||
bool m_bAutoUpdate;
|
||||
bool m_bSortNeeded;
|
||||
bool m_bWillSave;
|
||||
bool m_bGeometryVisiable;
|
||||
bool m_bShapeVisiable;
|
||||
ENode * m_pRoot;
|
||||
};
|
||||
|
||||
|
||||
// 二维向量
|
||||
typedef EPoint EVector2;
|
||||
|
||||
// 定时器回调函数(参数为该定时器被调用的次数,从 0 开始)
|
||||
typedef std::function<void(int)> TimerCallback;
|
||||
|
||||
// 按钮点击回调函数
|
||||
typedef std::function<void()> BtnClkCallback;
|
||||
|
||||
template<typename T>
|
||||
inline void SafeDelete(T** p) { if (*p) { delete *p; *p = nullptr; } }
|
||||
|
||||
template<typename Obj>
|
||||
inline void SafeRelease(Obj** p) { if (*p) { (*p)->release(); *p = nullptr; } }
|
||||
|
||||
template<class Interface>
|
||||
inline void SafeReleaseInterface(Interface **pp) { if (*pp != nullptr) { (*pp)->Release(); (*pp) = nullptr; } }
|
||||
|
||||
}
|
||||
|
|
@ -1,152 +0,0 @@
|
|||
#pragma once
|
||||
#include "ebase.h"
|
||||
#include "egeometry.h"
|
||||
|
||||
namespace e2d
|
||||
{
|
||||
|
||||
class ENode;
|
||||
class EPhysicsManager;
|
||||
|
||||
// 监听器
|
||||
class EListener :
|
||||
public EObject
|
||||
{
|
||||
public:
|
||||
EListener();
|
||||
|
||||
EListener(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
// 获取监听器状态
|
||||
bool isRunning() const;
|
||||
|
||||
// 启动监听
|
||||
void start();
|
||||
|
||||
// 停止监听
|
||||
void stop();
|
||||
|
||||
// 获取监听器名称
|
||||
EString getName() const;
|
||||
|
||||
// 获取监听器所在节点
|
||||
ENode * getParentNode() const;
|
||||
|
||||
// 设置监听器名称
|
||||
void setName(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
// 设置监听器吞噬消息
|
||||
void setSwallow(
|
||||
bool bSwallow
|
||||
);
|
||||
|
||||
// 设置监听器在游戏暂停时继续工作
|
||||
void setAlwaysWorking(
|
||||
bool bAlways
|
||||
);
|
||||
|
||||
// 绑定监听器到场景
|
||||
virtual void bindWith(
|
||||
EScene * pParentScene
|
||||
) = 0;
|
||||
|
||||
// 绑定监听器到节点
|
||||
virtual void bindWith(
|
||||
ENode * pParentNode
|
||||
) = 0;
|
||||
|
||||
protected:
|
||||
// 执行监听器回调函数
|
||||
virtual void _callOn() = 0;
|
||||
|
||||
// 获取监听器状态是否就绪
|
||||
virtual bool _isReady() const;
|
||||
|
||||
protected:
|
||||
EString m_sName;
|
||||
bool m_bRunning;
|
||||
bool m_bAlways;
|
||||
bool m_bSwallow;
|
||||
ENode * m_pParentNode;
|
||||
};
|
||||
|
||||
|
||||
// 物理世界消息监听器
|
||||
class EListenerPhysics :
|
||||
public EListener
|
||||
{
|
||||
friend EPhysicsManager;
|
||||
|
||||
public:
|
||||
EListenerPhysics();
|
||||
|
||||
EListenerPhysics(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
EListenerPhysics(
|
||||
const PhysLsnrCallback &callback
|
||||
);
|
||||
|
||||
EListenerPhysics(
|
||||
const EString &name,
|
||||
const PhysLsnrCallback &callback
|
||||
);
|
||||
|
||||
// 设置监听器回调函数
|
||||
void setCallback(
|
||||
const PhysLsnrCallback &callback
|
||||
);
|
||||
|
||||
// 将监听器与场景绑定
|
||||
virtual void bindWith(
|
||||
EScene * pParentScene
|
||||
) override;
|
||||
|
||||
// 将监听器与节点绑定
|
||||
virtual void bindWith(
|
||||
ENode * pParentNode
|
||||
) override;
|
||||
|
||||
protected:
|
||||
// 执行监听器回调函数
|
||||
virtual void _callOn() override;
|
||||
|
||||
protected:
|
||||
PhysLsnrCallback m_Callback;
|
||||
};
|
||||
|
||||
|
||||
// 几何体冲突消息监听器
|
||||
class EListenerPhysicsCollision :
|
||||
public EListenerPhysics
|
||||
{
|
||||
public:
|
||||
EListenerPhysicsCollision();
|
||||
|
||||
EListenerPhysicsCollision(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
EListenerPhysicsCollision(
|
||||
const ClsLsnrCallback &callback
|
||||
);
|
||||
|
||||
EListenerPhysicsCollision(
|
||||
const EString &name,
|
||||
const ClsLsnrCallback &callback
|
||||
);
|
||||
|
||||
protected:
|
||||
// 执行监听器回调函数
|
||||
virtual void _callOn() override;
|
||||
|
||||
protected:
|
||||
ClsLsnrCallback m_Callback;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -13,7 +13,7 @@ class ENode;
|
|||
class ETimer;
|
||||
class EAction;
|
||||
class EMusic;
|
||||
class EGeometry;
|
||||
class EShape;
|
||||
class ETransition;
|
||||
class EListenerPhysics;
|
||||
|
||||
|
|
@ -81,7 +81,6 @@ private:
|
|||
class ETimerManager
|
||||
{
|
||||
friend EGame;
|
||||
friend EScene;
|
||||
friend ENode;
|
||||
|
||||
public:
|
||||
|
|
@ -156,7 +155,6 @@ private:
|
|||
class EActionManager
|
||||
{
|
||||
friend EGame;
|
||||
friend EScene;
|
||||
friend ENode;
|
||||
|
||||
public:
|
||||
|
|
@ -210,7 +208,7 @@ class EMusicManager
|
|||
|
||||
public:
|
||||
// 添加音乐文件
|
||||
static EMusic * add(
|
||||
static bool add(
|
||||
const EString & strFilePath /* 音乐文件路径 */
|
||||
);
|
||||
|
||||
|
|
@ -243,93 +241,27 @@ private:
|
|||
};
|
||||
|
||||
|
||||
class EPhysicsManager
|
||||
class EShapeManager
|
||||
{
|
||||
friend EGame;
|
||||
friend EScene;
|
||||
friend ENode;
|
||||
friend EGeometry;
|
||||
|
||||
public:
|
||||
// 将监听器与场景绑定
|
||||
static void bindListener(
|
||||
EListenerPhysics * listener,
|
||||
EScene * pParentScene
|
||||
);
|
||||
|
||||
// 将监听器与节点绑定
|
||||
static void bindListener(
|
||||
EListenerPhysics * listener,
|
||||
ENode * pParentNode
|
||||
);
|
||||
|
||||
// 启动具有相同名称的监听器
|
||||
static void startListeners(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
// 停止具有相同名称的监听器
|
||||
static void stopListeners(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
// 删除具有相同名称的监听器
|
||||
static void delListeners(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
// 启动绑定在场景及其子节点上的所有监听器
|
||||
static void startAllListenersBindedWith(
|
||||
EScene * pParentScene
|
||||
);
|
||||
|
||||
// 停止绑定在场景及其子节点上的所有监听器
|
||||
static void stopAllListenersBindedWith(
|
||||
EScene * pParentScene
|
||||
);
|
||||
|
||||
// 启动绑定在节点上的所有监听器
|
||||
static void startAllListenersBindedWith(
|
||||
ENode * pParentNode
|
||||
);
|
||||
|
||||
// 停止绑定在节点上的所有监听器
|
||||
static void stopAllListenersBindedWith(
|
||||
ENode * pParentNode
|
||||
);
|
||||
|
||||
// 启动所有监听器
|
||||
static void startAllListeners();
|
||||
|
||||
// 停止所有监听器
|
||||
static void stopAllListeners();
|
||||
friend EShape;
|
||||
|
||||
private:
|
||||
// 清空监听器管理器
|
||||
static void _clearManager();
|
||||
// 更新形状
|
||||
static void __updateShape(
|
||||
EShape * pActiveShape
|
||||
);
|
||||
|
||||
// 添加形状
|
||||
static void _addGeometry(
|
||||
EGeometry * geometry
|
||||
static void __addShape(
|
||||
EShape * pShape
|
||||
);
|
||||
|
||||
// 删除已绑定的形状
|
||||
static void _delGeometry(
|
||||
EGeometry * geometry
|
||||
static void __delShape(
|
||||
EShape * pShape
|
||||
);
|
||||
|
||||
// 清空绑定在节点上的所有监听器
|
||||
static void _clearAllListenersBindedWith(
|
||||
ENode * pParentNode
|
||||
);
|
||||
|
||||
// 几何图形判断程序
|
||||
static void PhysicsGeometryProc(
|
||||
EGeometry * pActiveGeometry
|
||||
);
|
||||
|
||||
// 物理碰撞监听器执行程序
|
||||
static void PhysicsListenerProc();
|
||||
};
|
||||
|
||||
}
|
||||
194
core/enodes.h
194
core/enodes.h
|
|
@ -4,48 +4,49 @@
|
|||
namespace e2d
|
||||
{
|
||||
|
||||
class EText;
|
||||
class ESprite;
|
||||
|
||||
class EAction;
|
||||
class EButton;
|
||||
class EButtonToggle;
|
||||
class EGeometry;
|
||||
class EMenu;
|
||||
class EShape;
|
||||
class ETransition;
|
||||
|
||||
class ENode :
|
||||
public EObject
|
||||
{
|
||||
friend EScene;
|
||||
friend EButton;
|
||||
friend EButtonToggle;
|
||||
friend EGeometry;
|
||||
friend EShape;
|
||||
friend ETransition;
|
||||
|
||||
public:
|
||||
ENode();
|
||||
|
||||
ENode(
|
||||
const EString & name
|
||||
);
|
||||
|
||||
virtual ~ENode();
|
||||
|
||||
// 节点进入场景时,这个函数将自动运行
|
||||
virtual void onEnter() {}
|
||||
|
||||
// 节点离开场景时,这个函数将自动运行
|
||||
virtual void onExit() {}
|
||||
|
||||
// 每一帧画面刷新时,这个函数将自动运行
|
||||
// 更新节点
|
||||
virtual void onUpdate() {}
|
||||
|
||||
// 渲染节点时,这个函数将自动运行
|
||||
// 渲染节点
|
||||
virtual void onRender() {}
|
||||
|
||||
// 碰撞处理
|
||||
virtual void onCollide(
|
||||
ENode* pCollisionNode, /* 发生碰撞的节点 */
|
||||
int nRelation /* 碰撞关系,取值为 ERelation::VALUE 中的一种 */
|
||||
) {}
|
||||
|
||||
// 进入场景时执行
|
||||
virtual void onEnter() {}
|
||||
|
||||
// 离开场景时执行
|
||||
virtual void onExit() {}
|
||||
|
||||
// 获取节点显示状态
|
||||
virtual bool isVisiable() const;
|
||||
|
||||
// 判断点是否在节点内
|
||||
virtual bool isPointIn(
|
||||
EPoint point
|
||||
);
|
||||
|
||||
// 获取节点名称
|
||||
virtual EString getName() const;
|
||||
|
||||
|
|
@ -103,28 +104,57 @@ public:
|
|||
// 获取节点透明度
|
||||
virtual float getOpacity() const;
|
||||
|
||||
// 获取节点形状
|
||||
virtual EShape * getShape() const;
|
||||
|
||||
// 获取父节点
|
||||
virtual ENode * getParent() const;
|
||||
|
||||
// 获取节点所在场景
|
||||
virtual EScene * getParentScene() const;
|
||||
|
||||
// 获取所有子节点
|
||||
virtual std::vector<ENode*> &getChildren();
|
||||
|
||||
// 获取子节点数量
|
||||
virtual size_t getChildrenCount() const;
|
||||
|
||||
// 根据名字获取子节点
|
||||
// 获取名称相同的子节点
|
||||
virtual ENode * getChild(
|
||||
const EString & name
|
||||
);
|
||||
|
||||
// 获取所有名称相同的子节点
|
||||
virtual std::vector<ENode*> getChildren(
|
||||
const EString & name
|
||||
);
|
||||
|
||||
// 获取所有子节点
|
||||
virtual std::vector<ENode*> &getChildren();
|
||||
|
||||
// 获取子节点数量
|
||||
virtual int getChildrenCount() const;
|
||||
|
||||
// 移除子节点
|
||||
virtual bool removeChild(
|
||||
ENode * child
|
||||
);
|
||||
|
||||
// 移除所有名称相同的子节点
|
||||
virtual void removeChildren(
|
||||
const EString & childName
|
||||
);
|
||||
|
||||
// 从父节点移除
|
||||
virtual void removeFromParent();
|
||||
|
||||
// 移除所有节点
|
||||
virtual void clearAllChildren();
|
||||
|
||||
// 设置节点是否显示
|
||||
virtual void setVisiable(
|
||||
bool value
|
||||
);
|
||||
|
||||
// 开启或禁用 onUpdate 函数
|
||||
virtual void setAutoUpdate(
|
||||
bool bAutoUpdate
|
||||
);
|
||||
|
||||
// 设置节点名称
|
||||
virtual void setName(
|
||||
const EString & name
|
||||
|
|
@ -254,8 +284,8 @@ public:
|
|||
);
|
||||
|
||||
// 设置节点形状
|
||||
virtual void setGeometry(
|
||||
EGeometry * geometry
|
||||
virtual void setShape(
|
||||
EShape * pShape
|
||||
);
|
||||
|
||||
// 添加子节点
|
||||
|
|
@ -264,22 +294,6 @@ public:
|
|||
int order = 0
|
||||
);
|
||||
|
||||
// 从父节点移除
|
||||
virtual void removeFromParent();
|
||||
|
||||
// 移除子节点
|
||||
virtual bool removeChild(
|
||||
ENode * child
|
||||
);
|
||||
|
||||
// 移除子节点
|
||||
virtual void removeChild(
|
||||
const EString & childName
|
||||
);
|
||||
|
||||
// 移除所有节点
|
||||
virtual void clearAllChildren();
|
||||
|
||||
// 执行动画
|
||||
virtual void runAction(
|
||||
EAction * action
|
||||
|
|
@ -309,11 +323,6 @@ public:
|
|||
// 停止所有动画
|
||||
virtual void stopAllActions();
|
||||
|
||||
// 判断点是否在节点内
|
||||
virtual bool isPointIn(
|
||||
EPoint point
|
||||
);
|
||||
|
||||
// 修改节点的默认中心点位置
|
||||
static void setDefaultPiovt(
|
||||
float defaultPiovtX,
|
||||
|
|
@ -328,7 +337,7 @@ protected:
|
|||
virtual void _render();
|
||||
|
||||
// 渲染几何图形
|
||||
virtual void _drawGeometry();
|
||||
virtual void _drawShape();
|
||||
|
||||
// 节点被添加到场景时的执行程序
|
||||
virtual void _onEnter();
|
||||
|
|
@ -336,9 +345,6 @@ protected:
|
|||
// 节点从场景中消失时的执行程序
|
||||
virtual void _onExit();
|
||||
|
||||
// 子节点排序
|
||||
void _sortChildren();
|
||||
|
||||
// 设置节点所在场景
|
||||
virtual void _setParentScene(
|
||||
EScene * scene
|
||||
|
|
@ -359,22 +365,7 @@ protected:
|
|||
// 更新节点透明度
|
||||
static void _updateOpacity(ENode * node);
|
||||
|
||||
// 设置节点宽度
|
||||
virtual void _setWidth(
|
||||
float width
|
||||
);
|
||||
|
||||
// 设置节点高度
|
||||
virtual void _setHeight(
|
||||
float height
|
||||
);
|
||||
|
||||
// 设置节点大小
|
||||
virtual void _setSize(
|
||||
const ESize & size
|
||||
);
|
||||
|
||||
// 设置节点大小
|
||||
// 修改节点大小
|
||||
virtual void _setSize(
|
||||
float width,
|
||||
float height
|
||||
|
|
@ -396,15 +387,16 @@ protected:
|
|||
float m_fPivotY;
|
||||
int m_nOrder;
|
||||
bool m_bVisiable;
|
||||
bool m_bAutoUpdate;
|
||||
bool m_bDisplayedInScene;
|
||||
bool m_bSortChildrenNeeded;
|
||||
bool m_bTransformNeeded;
|
||||
EGeometry * m_pGeometry;
|
||||
EShape * m_pShape;
|
||||
EScene * m_pParentScene;
|
||||
ENode * m_pParent;
|
||||
D2D1::Matrix3x2F m_MatriInitial;
|
||||
D2D1::Matrix3x2F m_MatriFinal;
|
||||
std::vector<ENode*> m_vChildren;
|
||||
std::vector<ENode*> m_vChildren;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -415,16 +407,11 @@ public:
|
|||
// 创建一个空精灵
|
||||
ESprite();
|
||||
|
||||
// 从文理资源创建精灵
|
||||
// 从 EImage 对象创建精灵
|
||||
ESprite(
|
||||
EImage * image
|
||||
);
|
||||
|
||||
// 从关键帧创建精灵
|
||||
ESprite(
|
||||
EKeyframe * spriteFrame
|
||||
);
|
||||
|
||||
// 从文件图片创建精灵
|
||||
ESprite(
|
||||
LPCTSTR imageFileName
|
||||
|
|
@ -439,68 +426,33 @@ public:
|
|||
float height
|
||||
);
|
||||
|
||||
// 从资源图片创建精灵
|
||||
ESprite(
|
||||
LPCTSTR resourceName,
|
||||
LPCTSTR resourceType
|
||||
);
|
||||
|
||||
// 从资源图片创建精灵并裁剪
|
||||
ESprite(
|
||||
LPCTSTR resourceName,
|
||||
LPCTSTR resourceType,
|
||||
float x,
|
||||
float y,
|
||||
float width,
|
||||
float height
|
||||
);
|
||||
|
||||
virtual ~ESprite();
|
||||
|
||||
// 加载精灵图片
|
||||
void loadFrom(
|
||||
virtual void loadFrom(
|
||||
EImage * texture
|
||||
);
|
||||
|
||||
// 从本地文件加载图片
|
||||
void loadFrom(
|
||||
virtual void loadFrom(
|
||||
LPCTSTR imageFileName
|
||||
);
|
||||
|
||||
// 从资源加载图片
|
||||
void loadFrom(
|
||||
LPCTSTR resourceName,
|
||||
LPCTSTR resourceType
|
||||
);
|
||||
|
||||
// 加载图片并裁剪
|
||||
void loadFrom(
|
||||
EImage * image,
|
||||
float x,
|
||||
float y,
|
||||
float width,
|
||||
float height
|
||||
);
|
||||
|
||||
// 从关键帧加载资源
|
||||
void loadFrom(
|
||||
EKeyframe * frame
|
||||
);
|
||||
|
||||
// 裁剪图片
|
||||
void clip(
|
||||
virtual void clip(
|
||||
float x,
|
||||
float y,
|
||||
float width,
|
||||
float height
|
||||
);
|
||||
|
||||
// 获取 EImage 对象
|
||||
virtual EImage * getImage() const;
|
||||
|
||||
// 渲染精灵
|
||||
virtual void onRender() override;
|
||||
|
||||
protected:
|
||||
float m_fSourceClipX;
|
||||
float m_fSourceClipY;
|
||||
EImage * m_pImage;
|
||||
};
|
||||
|
||||
|
|
@ -585,8 +537,6 @@ protected:
|
|||
class EButton :
|
||||
public ENode
|
||||
{
|
||||
friend EMenu;
|
||||
|
||||
public:
|
||||
// 创建一个空按钮
|
||||
EButton();
|
||||
|
|
|
|||
|
|
@ -5,20 +5,25 @@
|
|||
namespace e2d
|
||||
{
|
||||
|
||||
class EPhysicsManager;
|
||||
class EShapeManager;
|
||||
class ENode;
|
||||
|
||||
|
||||
class EGeometry :
|
||||
class EShape :
|
||||
public EObject
|
||||
{
|
||||
friend EPhysicsManager;
|
||||
friend EShapeManager;
|
||||
friend ENode;
|
||||
|
||||
public:
|
||||
EGeometry();
|
||||
EShape();
|
||||
|
||||
virtual ~EGeometry();
|
||||
virtual ~EShape();
|
||||
|
||||
// 判断两形状的交集关系
|
||||
virtual int getRelationWith(
|
||||
EShape * pShape
|
||||
) const;
|
||||
|
||||
// »ñÈ¡¸¸½Úµã
|
||||
ENode * getParentNode() const;
|
||||
|
|
@ -39,7 +44,12 @@ public:
|
|||
UINT32 mask
|
||||
);
|
||||
|
||||
// 设置几何形状的可见性
|
||||
// 启用或关闭该形状
|
||||
virtual void setEnable(
|
||||
bool bEnable
|
||||
);
|
||||
|
||||
// 设置形状的可见性
|
||||
void setVisiable(
|
||||
bool bVisiable
|
||||
);
|
||||
|
|
@ -55,38 +65,35 @@ public:
|
|||
);
|
||||
|
||||
protected:
|
||||
// 判断两形状的交集关系
|
||||
virtual EPhysicsEvent::INTERSECT_RELATION _intersectWith(
|
||||
EGeometry * pGeometry
|
||||
);
|
||||
|
||||
// ת»»ÐÎ×´
|
||||
virtual void _transform();
|
||||
|
||||
// 渲染几何图形
|
||||
// 渲染形状
|
||||
virtual void _render();
|
||||
|
||||
// 获取 ID2D1Geometry 对象
|
||||
virtual ID2D1Geometry * _getD2dGeometry() const = 0;
|
||||
|
||||
protected:
|
||||
bool m_bEnable;
|
||||
bool m_bIsVisiable;
|
||||
UINT32 m_nCategoryBitmask;
|
||||
UINT32 m_nCollisionBitmask;
|
||||
UINT32 m_nColor;
|
||||
float m_fOpacity;
|
||||
ENode * m_pParentNode;
|
||||
ID2D1TransformedGeometry * m_pTransformedGeometry;
|
||||
ID2D1TransformedGeometry * m_pTransformedShape;
|
||||
};
|
||||
|
||||
|
||||
class ERectangle :
|
||||
public EGeometry
|
||||
public EShape
|
||||
{
|
||||
public:
|
||||
// 创建一个空几何矩形
|
||||
// 创建一个空矩形
|
||||
ERectangle();
|
||||
|
||||
// 根据左上角坐标和宽高创建几何矩形
|
||||
// 根据左上角坐标和宽高创建矩形
|
||||
ERectangle(
|
||||
float x,
|
||||
float y,
|
||||
|
|
@ -94,7 +101,7 @@ public:
|
|||
float height
|
||||
);
|
||||
|
||||
// 创建一个和节点位置大小相同的几何矩形
|
||||
// 创建一个和节点位置大小相同的矩形
|
||||
ERectangle(
|
||||
ENode * node
|
||||
);
|
||||
|
|
@ -117,19 +124,19 @@ protected:
|
|||
|
||||
|
||||
class ECircle :
|
||||
public EGeometry
|
||||
public EShape
|
||||
{
|
||||
public:
|
||||
// 创建一个空的几何圆形
|
||||
// 创建一个空的圆形
|
||||
ECircle();
|
||||
|
||||
// 根据圆心和半径创建几何圆形
|
||||
// 根据圆心和半径创建圆形
|
||||
ECircle(
|
||||
EPoint center,
|
||||
float radius
|
||||
);
|
||||
|
||||
// 创建一个和节点位置大小相同的几何圆形
|
||||
// 创建一个和节点位置大小相同的圆形
|
||||
ECircle(
|
||||
ENode * node
|
||||
);
|
||||
|
|
@ -150,20 +157,20 @@ protected:
|
|||
|
||||
|
||||
class EEllipse :
|
||||
public EGeometry
|
||||
public EShape
|
||||
{
|
||||
public:
|
||||
// 创建一个空的几何椭圆
|
||||
// 创建一个空的椭圆
|
||||
EEllipse();
|
||||
|
||||
// 根据圆心和半径创建几何椭圆
|
||||
// 根据圆心和半径创建椭圆
|
||||
EEllipse(
|
||||
EPoint center,
|
||||
float radiusX,
|
||||
float radiusY
|
||||
);
|
||||
|
||||
// 创建一个和节点位置大小相同的几何椭圆
|
||||
// 创建一个和节点位置大小相同的椭圆
|
||||
EEllipse(
|
||||
ENode * node
|
||||
);
|
||||
|
|
@ -217,14 +217,13 @@ public:
|
|||
|
||||
// 音乐播放器
|
||||
class EMusic
|
||||
: public EObject
|
||||
{
|
||||
friend EMusicManager;
|
||||
|
||||
public:
|
||||
// 播放
|
||||
bool play(
|
||||
int nLoopCount = 0 /* 重复播放次数 */
|
||||
int nLoopCount = 0 /* 重复播放次数,设置为 255 时循环播放 */
|
||||
);
|
||||
|
||||
// 暂停
|
||||
|
|
|
|||
|
|
@ -14,12 +14,10 @@
|
|||
<ClInclude Include="..\..\core\eactions.h" />
|
||||
<ClInclude Include="..\..\core\easy2d.h" />
|
||||
<ClInclude Include="..\..\core\ebase.h" />
|
||||
<ClInclude Include="..\..\core\ecommon.h" />
|
||||
<ClInclude Include="..\..\core\egeometry.h" />
|
||||
<ClInclude Include="..\..\core\elisteners.h" />
|
||||
<ClInclude Include="..\..\core\emacros.h" />
|
||||
<ClInclude Include="..\..\core\emanagers.h" />
|
||||
<ClInclude Include="..\..\core\enodes.h" />
|
||||
<ClInclude Include="..\..\core\eshape.h" />
|
||||
<ClInclude Include="..\..\core\etools.h" />
|
||||
<ClInclude Include="..\..\core\etransitions.h" />
|
||||
</ItemGroup>
|
||||
|
|
@ -48,22 +46,14 @@
|
|||
<ClCompile Include="..\..\core\Base\Window.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Font.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Image.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Keyframe.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Object.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Scene.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\String.cpp" />
|
||||
<ClCompile Include="..\..\core\Event\PhysicsEvent.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\Circle.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\Ellipse.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\Geometry.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\Rectangle.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\Listener.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\ListenerPhysics.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\ListenerPhysicsCollision.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\ActionManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\MusicManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\ObjectManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\PhysicsManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\SceneManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\ShapeManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\TimerManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Button.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\ButtonToggle.cpp" />
|
||||
|
|
@ -71,7 +61,12 @@
|
|||
<ClCompile Include="..\..\core\Node\Node.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Sprite.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Text.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Circle.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Ellipse.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Rectangle.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Shape.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Data.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\File.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Music.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Random.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Timer.cpp" />
|
||||
|
|
|
|||
|
|
@ -10,18 +10,9 @@
|
|||
<Filter Include="Common">
|
||||
<UniqueIdentifier>{08126b0c-d139-48f9-8559-3d9d9e3a5940}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Event">
|
||||
<UniqueIdentifier>{a00a6f30-ec6b-42be-93a2-c540466670a8}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Manager">
|
||||
<UniqueIdentifier>{a8185fe2-5477-4293-97d6-d84f27d354bb}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Geometry">
|
||||
<UniqueIdentifier>{dfaa8954-50d7-49c5-8aa6-7232c6d5c557}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Listener">
|
||||
<UniqueIdentifier>{9b2673ff-9077-4d74-b7ec-b435e5540b66}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Node">
|
||||
<UniqueIdentifier>{70412fec-4c60-425b-81c9-4547e5a1b78a}</UniqueIdentifier>
|
||||
</Filter>
|
||||
|
|
@ -31,19 +22,20 @@
|
|||
<Filter Include="Transition">
|
||||
<UniqueIdentifier>{337d5a0f-60fd-473a-83da-b2a3515affd9}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Shape">
|
||||
<UniqueIdentifier>{dfaa8954-50d7-49c5-8aa6-7232c6d5c557}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\core\eactions.h" />
|
||||
<ClInclude Include="..\..\core\easy2d.h" />
|
||||
<ClInclude Include="..\..\core\ebase.h" />
|
||||
<ClInclude Include="..\..\core\ecommon.h" />
|
||||
<ClInclude Include="..\..\core\egeometry.h" />
|
||||
<ClInclude Include="..\..\core\elisteners.h" />
|
||||
<ClInclude Include="..\..\core\emacros.h" />
|
||||
<ClInclude Include="..\..\core\emanagers.h" />
|
||||
<ClInclude Include="..\..\core\enodes.h" />
|
||||
<ClInclude Include="..\..\core\etools.h" />
|
||||
<ClInclude Include="..\..\core\etransitions.h" />
|
||||
<ClInclude Include="..\..\core\eshape.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\core\Action\Action.cpp">
|
||||
|
|
@ -118,9 +110,6 @@
|
|||
<ClCompile Include="..\..\core\Common\Image.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Common\Keyframe.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Common\Object.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
|
|
@ -130,45 +119,18 @@
|
|||
<ClCompile Include="..\..\core\Common\String.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Event\PhysicsEvent.cpp">
|
||||
<Filter>Event</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\ActionManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\ObjectManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\PhysicsManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\SceneManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\TimerManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\Circle.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\Ellipse.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\Geometry.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\Rectangle.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\Listener.cpp">
|
||||
<Filter>Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\ListenerPhysics.cpp">
|
||||
<Filter>Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\ListenerPhysicsCollision.cpp">
|
||||
<Filter>Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\Data.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
|
|
@ -211,5 +173,26 @@
|
|||
<ClCompile Include="..\..\core\Node\Text.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Shape\Circle.cpp">
|
||||
<Filter>Shape</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Shape\Ellipse.cpp">
|
||||
<Filter>Shape</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Shape\Rectangle.cpp">
|
||||
<Filter>Shape</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Shape\Shape.cpp">
|
||||
<Filter>Shape</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\MusicManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\ShapeManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\File.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -89,11 +89,10 @@
|
|||
<ClInclude Include="..\..\core\easy2d.h" />
|
||||
<ClInclude Include="..\..\core\ebase.h" />
|
||||
<ClInclude Include="..\..\core\ecommon.h" />
|
||||
<ClInclude Include="..\..\core\egeometry.h" />
|
||||
<ClInclude Include="..\..\core\elisteners.h" />
|
||||
<ClInclude Include="..\..\core\emacros.h" />
|
||||
<ClInclude Include="..\..\core\emanagers.h" />
|
||||
<ClInclude Include="..\..\core\enodes.h" />
|
||||
<ClInclude Include="..\..\core\eshape.h" />
|
||||
<ClInclude Include="..\..\core\etools.h" />
|
||||
<ClInclude Include="..\..\core\etransitions.h" />
|
||||
</ItemGroup>
|
||||
|
|
@ -122,22 +121,14 @@
|
|||
<ClCompile Include="..\..\core\Base\Window.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Font.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Image.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Keyframe.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Object.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Scene.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\String.cpp" />
|
||||
<ClCompile Include="..\..\core\Event\PhysicsEvent.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\Circle.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\Ellipse.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\Geometry.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\Rectangle.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\Listener.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\ListenerPhysics.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\ListenerPhysicsCollision.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\ActionManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\MusicManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\ObjectManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\PhysicsManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\SceneManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\ShapeManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\TimerManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Button.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\ButtonToggle.cpp" />
|
||||
|
|
@ -145,7 +136,12 @@
|
|||
<ClCompile Include="..\..\core\Node\Node.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Sprite.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Text.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Circle.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Ellipse.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Rectangle.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Shape.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Data.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\File.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Music.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Random.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Timer.cpp" />
|
||||
|
|
|
|||
|
|
@ -10,18 +10,9 @@
|
|||
<Filter Include="Common">
|
||||
<UniqueIdentifier>{08126b0c-d139-48f9-8559-3d9d9e3a5940}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Event">
|
||||
<UniqueIdentifier>{a00a6f30-ec6b-42be-93a2-c540466670a8}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Manager">
|
||||
<UniqueIdentifier>{a8185fe2-5477-4293-97d6-d84f27d354bb}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Geometry">
|
||||
<UniqueIdentifier>{dfaa8954-50d7-49c5-8aa6-7232c6d5c557}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Listener">
|
||||
<UniqueIdentifier>{9b2673ff-9077-4d74-b7ec-b435e5540b66}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Node">
|
||||
<UniqueIdentifier>{70412fec-4c60-425b-81c9-4547e5a1b78a}</UniqueIdentifier>
|
||||
</Filter>
|
||||
|
|
@ -31,19 +22,21 @@
|
|||
<Filter Include="Transition">
|
||||
<UniqueIdentifier>{337d5a0f-60fd-473a-83da-b2a3515affd9}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Shape">
|
||||
<UniqueIdentifier>{dfaa8954-50d7-49c5-8aa6-7232c6d5c557}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\core\eactions.h" />
|
||||
<ClInclude Include="..\..\core\easy2d.h" />
|
||||
<ClInclude Include="..\..\core\ebase.h" />
|
||||
<ClInclude Include="..\..\core\ecommon.h" />
|
||||
<ClInclude Include="..\..\core\egeometry.h" />
|
||||
<ClInclude Include="..\..\core\elisteners.h" />
|
||||
<ClInclude Include="..\..\core\emacros.h" />
|
||||
<ClInclude Include="..\..\core\emanagers.h" />
|
||||
<ClInclude Include="..\..\core\enodes.h" />
|
||||
<ClInclude Include="..\..\core\etools.h" />
|
||||
<ClInclude Include="..\..\core\etransitions.h" />
|
||||
<ClInclude Include="..\..\core\eshape.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\core\Action\Action.cpp">
|
||||
|
|
@ -118,9 +111,6 @@
|
|||
<ClCompile Include="..\..\core\Common\Image.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Common\Keyframe.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Common\Object.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
|
|
@ -130,45 +120,18 @@
|
|||
<ClCompile Include="..\..\core\Common\String.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Event\PhysicsEvent.cpp">
|
||||
<Filter>Event</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\ActionManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\ObjectManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\PhysicsManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\SceneManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\TimerManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\Circle.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\Ellipse.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\Geometry.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\Rectangle.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\Listener.cpp">
|
||||
<Filter>Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\ListenerPhysics.cpp">
|
||||
<Filter>Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\ListenerPhysicsCollision.cpp">
|
||||
<Filter>Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\Data.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
|
|
@ -211,5 +174,26 @@
|
|||
<ClCompile Include="..\..\core\Node\Text.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Shape\Circle.cpp">
|
||||
<Filter>Shape</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Shape\Ellipse.cpp">
|
||||
<Filter>Shape</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Shape\Rectangle.cpp">
|
||||
<Filter>Shape</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Shape\Shape.cpp">
|
||||
<Filter>Shape</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\ShapeManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\File.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\MusicManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -214,22 +214,13 @@
|
|||
<ClCompile Include="..\..\core\Base\Window.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Font.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Object.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Keyframe.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Scene.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\String.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\Image.cpp" />
|
||||
<ClCompile Include="..\..\core\Event\PhysicsEvent.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\Circle.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\Ellipse.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\Geometry.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\Rectangle.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\ListenerPhysicsCollision.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\Listener.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\ListenerPhysics.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\ActionManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\MusicManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\ObjectManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\PhysicsManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\ShapeManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\SceneManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\TimerManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Button.cpp" />
|
||||
|
|
@ -238,6 +229,10 @@
|
|||
<ClCompile Include="..\..\core\Node\Node.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Sprite.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Text.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Circle.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Ellipse.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Rectangle.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Shape.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Data.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\File.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Music.cpp" />
|
||||
|
|
@ -253,8 +248,7 @@
|
|||
<ClInclude Include="..\..\core\easy2d.h" />
|
||||
<ClInclude Include="..\..\core\ebase.h" />
|
||||
<ClInclude Include="..\..\core\ecommon.h" />
|
||||
<ClInclude Include="..\..\core\egeometry.h" />
|
||||
<ClInclude Include="..\..\core\elisteners.h" />
|
||||
<ClInclude Include="..\..\core\eshape.h" />
|
||||
<ClInclude Include="..\..\core\emacros.h" />
|
||||
<ClInclude Include="..\..\core\emanagers.h" />
|
||||
<ClInclude Include="..\..\core\enodes.h" />
|
||||
|
|
|
|||
|
|
@ -19,17 +19,11 @@
|
|||
<Filter Include="Manager">
|
||||
<UniqueIdentifier>{9031e36b-fa85-4b4e-8e80-657c7e68f283}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Listener">
|
||||
<UniqueIdentifier>{b9bb1728-5106-4574-998e-8564b49cb4a1}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Geometry">
|
||||
<UniqueIdentifier>{d5f86335-f3a0-450d-92a3-7edd9348d995}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Common">
|
||||
<UniqueIdentifier>{be5d9314-b00a-4f11-bd2a-1f720dc32407}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Event">
|
||||
<UniqueIdentifier>{6d0b43af-2432-4221-b572-4bef331ae10e}</UniqueIdentifier>
|
||||
<Filter Include="Shape">
|
||||
<UniqueIdentifier>{d5f86335-f3a0-450d-92a3-7edd9348d995}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
@ -105,9 +99,6 @@
|
|||
<ClCompile Include="..\..\core\Common\Image.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Common\Keyframe.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Common\Object.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
|
|
@ -117,39 +108,12 @@
|
|||
<ClCompile Include="..\..\core\Common\Scene.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Event\PhysicsEvent.cpp">
|
||||
<Filter>Event</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\Circle.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\Ellipse.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\Geometry.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\Rectangle.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\Listener.cpp">
|
||||
<Filter>Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\ListenerPhysics.cpp">
|
||||
<Filter>Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\ListenerPhysicsCollision.cpp">
|
||||
<Filter>Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\ActionManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\ObjectManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\PhysicsManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\TimerManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
|
|
@ -204,6 +168,21 @@
|
|||
<ClCompile Include="..\..\core\Manager\MusicManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\ShapeManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Shape\Circle.cpp">
|
||||
<Filter>Shape</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Shape\Ellipse.cpp">
|
||||
<Filter>Shape</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Shape\Rectangle.cpp">
|
||||
<Filter>Shape</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Shape\Shape.cpp">
|
||||
<Filter>Shape</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\core\etools.h" />
|
||||
|
|
@ -214,8 +193,7 @@
|
|||
<ClInclude Include="..\..\core\easy2d.h" />
|
||||
<ClInclude Include="..\..\core\eactions.h" />
|
||||
<ClInclude Include="..\..\core\etransitions.h" />
|
||||
<ClInclude Include="..\..\core\egeometry.h" />
|
||||
<ClInclude Include="..\..\core\elisteners.h" />
|
||||
<ClInclude Include="..\..\core\emanagers.h" />
|
||||
<ClInclude Include="..\..\core\eshape.h" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
Loading…
Reference in New Issue