update a lot of new features.
This commit is contained in:
parent
b71119548a
commit
c79ba16d29
|
|
@ -1,15 +1,13 @@
|
|||
#include "..\eactions.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
e2d::EAction::EAction() :
|
||||
m_bRunning(false),
|
||||
m_bEnding(false),
|
||||
m_bInit(false),
|
||||
m_pTarget(nullptr),
|
||||
m_pParentScene(nullptr)
|
||||
e2d::EAction::EAction()
|
||||
: m_bRunning(false)
|
||||
, m_bEnding(false)
|
||||
, m_bInit(false)
|
||||
, m_pTarget(nullptr)
|
||||
, m_pParentScene(nullptr)
|
||||
, m_fLast(0)
|
||||
{
|
||||
// 默认动作 15ms 运行一次
|
||||
setInterval(15);
|
||||
}
|
||||
|
||||
e2d::EAction::~EAction()
|
||||
|
|
@ -34,7 +32,7 @@ void e2d::EAction::start()
|
|||
void e2d::EAction::resume()
|
||||
{
|
||||
m_bRunning = true;
|
||||
m_tLast = GetNow();
|
||||
m_fLast = ETime::getTotalTime();
|
||||
}
|
||||
|
||||
void e2d::EAction::pause()
|
||||
|
|
@ -47,22 +45,11 @@ void e2d::EAction::stop()
|
|||
m_bEnding = true;
|
||||
}
|
||||
|
||||
void e2d::EAction::setInterval(LONGLONG milliSeconds)
|
||||
{
|
||||
// 设置动作的时间间隔
|
||||
SetInterval(m_nAnimationInterval, milliSeconds);
|
||||
}
|
||||
|
||||
void e2d::EAction::setTarget(ENode * node)
|
||||
{
|
||||
if (m_pTarget)
|
||||
if (!m_pTarget && node)
|
||||
{
|
||||
// 动作只能有一个目标
|
||||
return;
|
||||
}
|
||||
|
||||
if (node)
|
||||
{
|
||||
m_pTarget = node;
|
||||
}
|
||||
}
|
||||
|
|
@ -82,7 +69,7 @@ void e2d::EAction::_init()
|
|||
{
|
||||
m_bInit = true;
|
||||
// 记录当前时间
|
||||
m_tLast = GetNow();
|
||||
m_fLast = ETime::getTotalTime();
|
||||
}
|
||||
|
||||
void e2d::EAction::_update()
|
||||
|
|
@ -97,10 +84,10 @@ void e2d::EAction::_reset()
|
|||
{
|
||||
m_bInit = false;
|
||||
m_bEnding = false;
|
||||
m_tLast = GetNow();
|
||||
m_fLast = ETime::getTotalTime();
|
||||
}
|
||||
|
||||
void e2d::EAction::_resetTime()
|
||||
{
|
||||
m_tLast = GetNow();
|
||||
m_fLast = ETime::getTotalTime();
|
||||
}
|
||||
|
|
@ -1,14 +1,13 @@
|
|||
#include "..\eactions.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
e2d::EActionDelay::EActionDelay(float duration)
|
||||
{
|
||||
setInterval(static_cast<LONGLONG>(duration * 1000));
|
||||
m_fDelayTime = max(duration, 0);
|
||||
}
|
||||
|
||||
e2d::EActionDelay * e2d::EActionDelay::clone() const
|
||||
{
|
||||
return new EActionDelay(static_cast<float>(ToMilliseconds(m_nAnimationInterval.QuadPart)) / 1000.0f);
|
||||
return new EActionDelay(m_fDelayTime);
|
||||
}
|
||||
|
||||
void e2d::EActionDelay::_init()
|
||||
|
|
@ -20,7 +19,7 @@ void e2d::EActionDelay::_update()
|
|||
{
|
||||
EAction::_update();
|
||||
// 判断时间间隔是否足够
|
||||
if (IsIntervalFull(m_tLast, m_nAnimationInterval))
|
||||
if ((ETime::getTotalTime() - m_fLast) >= m_fDelayTime)
|
||||
{
|
||||
this->stop();
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
#include "..\eactions.h"
|
||||
|
||||
e2d::EActionGradual::EActionGradual(float duration)
|
||||
: m_fRateOfProgress(0)
|
||||
{
|
||||
m_fDuration = max(duration, 0);
|
||||
}
|
||||
|
||||
void e2d::EActionGradual::_init()
|
||||
{
|
||||
EAction::_init();
|
||||
}
|
||||
|
||||
void e2d::EActionGradual::_update()
|
||||
{
|
||||
// 判断时间间隔是否足够
|
||||
if (m_fDuration == 0)
|
||||
{
|
||||
m_fRateOfProgress = 1;
|
||||
this->stop();
|
||||
return;
|
||||
}
|
||||
// 计算动画进度
|
||||
m_fRateOfProgress = min((ETime::getTotalTime() - m_fLast) / m_fDuration, 1);
|
||||
// 判断动作是否结束
|
||||
if (m_fRateOfProgress >= 1)
|
||||
{
|
||||
this->stop();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EActionGradual::_reset()
|
||||
{
|
||||
EAction::_reset();
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
#include "..\eactions.h"
|
||||
|
||||
|
||||
e2d::EActionMoveBy::EActionMoveBy(float duration, EVector2 vector) :
|
||||
EActionGradual(duration)
|
||||
{
|
||||
m_MoveVec = vector;
|
||||
}
|
||||
|
||||
void e2d::EActionMoveBy::_init()
|
||||
{
|
||||
EActionGradual::_init();
|
||||
if (m_pTarget)
|
||||
{
|
||||
m_BeginPos = m_pTarget->getPos();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EActionMoveBy::_update()
|
||||
{
|
||||
EActionGradual::_update();
|
||||
|
||||
if (m_pTarget == nullptr)
|
||||
{
|
||||
this->stop();
|
||||
return;
|
||||
}
|
||||
|
||||
// ÒÆ¶¯½Úµã
|
||||
m_pTarget->setPos(
|
||||
m_BeginPos.x + m_MoveVec.x * m_fRateOfProgress,
|
||||
m_BeginPos.y + m_MoveVec.y * m_fRateOfProgress
|
||||
);
|
||||
}
|
||||
|
||||
void e2d::EActionMoveBy::_reset()
|
||||
{
|
||||
EActionGradual::_reset();
|
||||
}
|
||||
|
||||
e2d::EActionMoveBy * e2d::EActionMoveBy::clone() const
|
||||
{
|
||||
return new EActionMoveBy(m_fDuration, m_MoveVec);
|
||||
}
|
||||
|
||||
e2d::EActionMoveBy * e2d::EActionMoveBy::reverse() const
|
||||
{
|
||||
return new EActionMoveBy(m_fDuration, EVector2(-m_MoveVec.x, -m_MoveVec.y));
|
||||
}
|
||||
|
|
@ -1,14 +1,14 @@
|
|||
#include "..\eactions.h"
|
||||
|
||||
e2d::EActionMoveTo::EActionMoveTo(float duration, EPoint pos) :
|
||||
EActionMoveBy(duration, EVec())
|
||||
EActionMoveBy(duration, EVector2())
|
||||
{
|
||||
m_EndPos = pos;
|
||||
}
|
||||
|
||||
e2d::EActionMoveTo * e2d::EActionMoveTo::clone() const
|
||||
{
|
||||
return new EActionMoveTo(m_fTotalDuration / 1000, m_EndPos);
|
||||
return new EActionMoveTo(m_fDuration, m_EndPos);
|
||||
}
|
||||
|
||||
void e2d::EActionMoveTo::_init()
|
||||
|
|
@ -18,25 +18,15 @@ void e2d::EActionOpacityBy::_init()
|
|||
|
||||
void e2d::EActionOpacityBy::_update()
|
||||
{
|
||||
EAction::_update();
|
||||
EActionGradual::_update();
|
||||
|
||||
if (m_pTarget == nullptr)
|
||||
{
|
||||
this->stop();
|
||||
return;
|
||||
}
|
||||
|
||||
while (EActionGradual::_isDelayEnough())
|
||||
{
|
||||
// 设置节点透明度
|
||||
m_pTarget->setOpacity(m_nBeginVal + m_nVariation * m_fRateOfProgress);
|
||||
// 判断动作是否结束
|
||||
if (_isEnd())
|
||||
{
|
||||
this->stop();
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 设置节点透明度
|
||||
m_pTarget->setOpacity(m_nBeginVal + m_nVariation * m_fRateOfProgress);
|
||||
}
|
||||
|
||||
void e2d::EActionOpacityBy::_reset()
|
||||
|
|
@ -46,10 +36,10 @@ void e2d::EActionOpacityBy::_reset()
|
|||
|
||||
e2d::EActionOpacityBy * e2d::EActionOpacityBy::clone() const
|
||||
{
|
||||
return new EActionOpacityBy(m_fTotalDuration / 1000, m_nVariation);
|
||||
return new EActionOpacityBy(m_fDuration, m_nVariation);
|
||||
}
|
||||
|
||||
e2d::EActionOpacityBy * e2d::EActionOpacityBy::reverse() const
|
||||
{
|
||||
return new EActionOpacityBy(m_fTotalDuration / 1000, -m_nVariation);
|
||||
return new EActionOpacityBy(m_fDuration, -m_nVariation);
|
||||
}
|
||||
|
|
@ -9,7 +9,7 @@ e2d::EActionOpacityTo::EActionOpacityTo(float duration, float opacity) :
|
|||
|
||||
e2d::EActionOpacityTo * e2d::EActionOpacityTo::clone() const
|
||||
{
|
||||
return new EActionOpacityTo(m_fTotalDuration / 1000, m_nEndVal);
|
||||
return new EActionOpacityTo(m_fDuration, m_nEndVal);
|
||||
}
|
||||
|
||||
void e2d::EActionOpacityTo::_init()
|
||||
|
|
@ -18,7 +18,7 @@ void e2d::EActionRotateBy::_init()
|
|||
|
||||
void e2d::EActionRotateBy::_update()
|
||||
{
|
||||
EAction::_update();
|
||||
EActionGradual::_update();
|
||||
|
||||
if (m_pTarget == nullptr)
|
||||
{
|
||||
|
|
@ -26,17 +26,8 @@ void e2d::EActionRotateBy::_update()
|
|||
return;
|
||||
}
|
||||
|
||||
while (EActionGradual::_isDelayEnough())
|
||||
{
|
||||
// 旋转节点
|
||||
m_pTarget->setRotation(m_nBeginVal + m_nVariation * m_fRateOfProgress);
|
||||
// 判断动作是否结束
|
||||
if (_isEnd())
|
||||
{
|
||||
this->stop();
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 旋转节点
|
||||
m_pTarget->setRotation(m_nBeginVal + m_nVariation * m_fRateOfProgress);
|
||||
}
|
||||
|
||||
void e2d::EActionRotateBy::_reset()
|
||||
|
|
@ -46,10 +37,10 @@ void e2d::EActionRotateBy::_reset()
|
|||
|
||||
e2d::EActionRotateBy * e2d::EActionRotateBy::clone() const
|
||||
{
|
||||
return new EActionRotateBy(m_fTotalDuration / 1000, m_nVariation);
|
||||
return new EActionRotateBy(m_fDuration, m_nVariation);
|
||||
}
|
||||
|
||||
e2d::EActionRotateBy * e2d::EActionRotateBy::reverse() const
|
||||
{
|
||||
return new EActionRotateBy(m_fTotalDuration / 1000, -m_nVariation);
|
||||
return new EActionRotateBy(m_fDuration, -m_nVariation);
|
||||
}
|
||||
|
|
@ -9,7 +9,7 @@ e2d::EActionRotateTo::EActionRotateTo(float duration, float rotation) :
|
|||
|
||||
e2d::EActionRotateTo * e2d::EActionRotateTo::clone() const
|
||||
{
|
||||
return new EActionRotateTo(m_fTotalDuration / 1000, m_nEndVal);
|
||||
return new EActionRotateTo(m_fDuration, m_nEndVal);
|
||||
}
|
||||
|
||||
void e2d::EActionRotateTo::_init()
|
||||
|
|
@ -27,7 +27,7 @@ void e2d::EActionScaleBy::_init()
|
|||
|
||||
void e2d::EActionScaleBy::_update()
|
||||
{
|
||||
EAction::_update();
|
||||
EActionGradual::_update();
|
||||
|
||||
if (m_pTarget == nullptr)
|
||||
{
|
||||
|
|
@ -35,19 +35,10 @@ void e2d::EActionScaleBy::_update()
|
|||
return;
|
||||
}
|
||||
|
||||
while (EActionGradual::_isDelayEnough())
|
||||
{
|
||||
// 缩放节点
|
||||
m_pTarget->setScale(
|
||||
m_nBeginScaleX + m_nVariationX * m_fRateOfProgress,
|
||||
m_nBeginScaleX + m_nVariationX * m_fRateOfProgress);
|
||||
// 判断动作是否结束
|
||||
if (_isEnd())
|
||||
{
|
||||
this->stop();
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 缩放节点
|
||||
m_pTarget->setScale(
|
||||
m_nBeginScaleX + m_nVariationX * m_fRateOfProgress,
|
||||
m_nBeginScaleX + m_nVariationX * m_fRateOfProgress);
|
||||
}
|
||||
|
||||
void e2d::EActionScaleBy::_reset()
|
||||
|
|
@ -57,10 +48,10 @@ void e2d::EActionScaleBy::_reset()
|
|||
|
||||
e2d::EActionScaleBy * e2d::EActionScaleBy::clone() const
|
||||
{
|
||||
return new EActionScaleBy(m_fTotalDuration / 1000, m_nVariationX, m_nVariationY);
|
||||
return new EActionScaleBy(m_fDuration, m_nVariationX, m_nVariationY);
|
||||
}
|
||||
|
||||
e2d::EActionScaleBy * e2d::EActionScaleBy::reverse() const
|
||||
{
|
||||
return new EActionScaleBy(m_fTotalDuration / 1000, -m_nVariationX, -m_nVariationY);
|
||||
return new EActionScaleBy(m_fDuration, -m_nVariationX, -m_nVariationY);
|
||||
}
|
||||
|
|
@ -16,7 +16,7 @@ e2d::EActionScaleTo::EActionScaleTo(float duration, float scaleX, float scaleY)
|
|||
|
||||
e2d::EActionScaleTo * e2d::EActionScaleTo::clone() const
|
||||
{
|
||||
return new EActionScaleTo(m_fTotalDuration / 1000, m_nEndScaleX, m_nEndScaleY);
|
||||
return new EActionScaleTo(m_fDuration, m_nEndScaleX, m_nEndScaleY);
|
||||
}
|
||||
|
||||
void e2d::EActionScaleTo::_init()
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
#include "..\eactions.h"
|
||||
#include <stdarg.h>
|
||||
|
||||
e2d::EActionSequence::EActionSequence() :
|
||||
m_nActionIndex(0)
|
||||
|
|
@ -1,18 +1,14 @@
|
|||
#include "..\eactions.h"
|
||||
#include "..\Win\winbase.h"
|
||||
#include <typeinfo>
|
||||
|
||||
e2d::EAnimation::EAnimation() :
|
||||
m_nFrameIndex(0)
|
||||
e2d::EAnimation::EAnimation()
|
||||
: m_nFrameIndex(0)
|
||||
{
|
||||
// 帧动画默认 0.1s 刷新一次
|
||||
setInterval(100);
|
||||
}
|
||||
|
||||
e2d::EAnimation::EAnimation(LONGLONG frameDelay) :
|
||||
m_nFrameIndex(0)
|
||||
e2d::EAnimation::EAnimation(float invertal)
|
||||
: m_nFrameIndex(0)
|
||||
, m_fInterval(invertal)
|
||||
{
|
||||
setInterval(frameDelay);
|
||||
}
|
||||
|
||||
e2d::EAnimation::~EAnimation()
|
||||
|
|
@ -23,6 +19,11 @@ e2d::EAnimation::~EAnimation()
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::EAnimation::setInterval(float interval)
|
||||
{
|
||||
m_fInterval = max(interval, 0);
|
||||
}
|
||||
|
||||
void e2d::EAnimation::_init()
|
||||
{
|
||||
EAction::_init();
|
||||
|
|
@ -39,11 +40,11 @@ void e2d::EAnimation::_update()
|
|||
}
|
||||
|
||||
// 判断时间间隔是否足够
|
||||
while (IsIntervalFull(m_tLast, m_nAnimationInterval))
|
||||
while ((ETime::getTotalTime() - m_fLast) >= m_fInterval)
|
||||
{
|
||||
// 重新记录时间
|
||||
m_tLast.QuadPart += m_nAnimationInterval.QuadPart;
|
||||
// 加载精灵帧
|
||||
m_fLast += m_fInterval;
|
||||
// ¼ÓÔØ¹Ø¼üÖ¡
|
||||
reinterpret_cast<ESprite*>(m_pTarget)->loadFrom(m_vFrames[m_nFrameIndex]);
|
||||
m_nFrameIndex++;
|
||||
// 判断动作是否结束
|
||||
|
|
@ -61,7 +62,7 @@ void e2d::EAnimation::_reset()
|
|||
m_nFrameIndex = 0;
|
||||
}
|
||||
|
||||
void e2d::EAnimation::addFrame(ESpriteFrame * frame)
|
||||
void e2d::EAnimation::addKeyframe(EKeyframe * frame)
|
||||
{
|
||||
if (frame)
|
||||
{
|
||||
|
|
@ -72,10 +73,10 @@ void e2d::EAnimation::addFrame(ESpriteFrame * frame)
|
|||
|
||||
e2d::EAnimation * e2d::EAnimation::clone() const
|
||||
{
|
||||
auto a = new EAnimation(ToMilliseconds(m_nAnimationInterval.QuadPart));
|
||||
auto a = new EAnimation(m_fInterval);
|
||||
for (auto frame = m_vFrames.begin(); frame != m_vFrames.end(); frame++)
|
||||
{
|
||||
a->addFrame((*frame));
|
||||
a->addKeyframe((*frame));
|
||||
}
|
||||
return a;
|
||||
}
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
#include "..\eactions.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
e2d::EActionGradual::EActionGradual(float duration)
|
||||
: m_fRateOfProgress(0)
|
||||
, m_fDuration(0)
|
||||
, m_fTotalDuration(duration * 1000)
|
||||
{
|
||||
}
|
||||
|
||||
bool e2d::EActionGradual::_isEnd() const
|
||||
{
|
||||
return m_fDuration >= m_fTotalDuration;
|
||||
}
|
||||
|
||||
void e2d::EActionGradual::_init()
|
||||
{
|
||||
EAction::_init();
|
||||
}
|
||||
#include <iostream>
|
||||
bool e2d::EActionGradual::_isDelayEnough()
|
||||
{
|
||||
// 判断时间间隔是否足够
|
||||
if (m_fTotalDuration == 0)
|
||||
{
|
||||
m_fRateOfProgress = 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (IsIntervalFull(m_tLast, m_nAnimationInterval))
|
||||
{
|
||||
// 重新记录时间
|
||||
m_tLast.QuadPart += m_nAnimationInterval.QuadPart;
|
||||
m_fDuration += static_cast<float>(ToMilliseconds(m_nAnimationInterval.QuadPart));
|
||||
std::cout << ToMilliseconds(m_nAnimationInterval.QuadPart) << std::endl;
|
||||
// 计算动画进度
|
||||
m_fRateOfProgress = m_fDuration / m_fTotalDuration;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void e2d::EActionGradual::_reset()
|
||||
{
|
||||
EAction::_reset();
|
||||
m_fDuration = 0;
|
||||
}
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
#include "..\eactions.h"
|
||||
|
||||
|
||||
e2d::EActionMoveBy::EActionMoveBy(float duration, EVec vector) :
|
||||
EActionGradual(duration)
|
||||
{
|
||||
m_MoveVec = vector;
|
||||
}
|
||||
|
||||
void e2d::EActionMoveBy::_init()
|
||||
{
|
||||
EActionGradual::_init();
|
||||
if (m_pTarget)
|
||||
{
|
||||
m_BeginPos = m_pTarget->getPos();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EActionMoveBy::_update()
|
||||
{
|
||||
EAction::_update();
|
||||
|
||||
if (m_pTarget == nullptr)
|
||||
{
|
||||
this->stop();
|
||||
return;
|
||||
}
|
||||
|
||||
while (EActionGradual::_isDelayEnough())
|
||||
{
|
||||
// 移动节点
|
||||
m_pTarget->setPos(
|
||||
m_BeginPos.x + m_MoveVec.x * m_fRateOfProgress,
|
||||
m_BeginPos.y + m_MoveVec.y * m_fRateOfProgress
|
||||
);
|
||||
// 判断动作是否结束
|
||||
if (_isEnd())
|
||||
{
|
||||
this->stop();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EActionMoveBy::_reset()
|
||||
{
|
||||
EActionGradual::_reset();
|
||||
}
|
||||
|
||||
e2d::EActionMoveBy * e2d::EActionMoveBy::clone() const
|
||||
{
|
||||
return new EActionMoveBy(m_fTotalDuration / 1000, m_MoveVec);
|
||||
}
|
||||
|
||||
e2d::EActionMoveBy * e2d::EActionMoveBy::reverse() const
|
||||
{
|
||||
return new EActionMoveBy(m_fTotalDuration / 1000, EVec(-m_MoveVec.x, -m_MoveVec.y));
|
||||
}
|
||||
|
|
@ -1,784 +0,0 @@
|
|||
#include "..\ebase.h"
|
||||
#include "..\Win\winbase.h"
|
||||
#include "..\emanagers.h"
|
||||
#include "..\enodes.h"
|
||||
#include "..\etransitions.h"
|
||||
#include "..\etools.h"
|
||||
#include <stack>
|
||||
#include <imm.h>
|
||||
#pragma comment (lib ,"imm32.lib")
|
||||
#include <mmsystem.h>
|
||||
#pragma comment(lib, "winmm.lib")
|
||||
|
||||
|
||||
// 唯一实例指针
|
||||
static e2d::EApp * s_pInstance = nullptr;
|
||||
// 场景栈
|
||||
static std::stack<e2d::EScene*> s_SceneStack;
|
||||
// 游戏开始时间
|
||||
static LARGE_INTEGER s_tStart;
|
||||
|
||||
|
||||
e2d::EApp::EApp()
|
||||
: m_bEnd(false)
|
||||
, m_bPaused(false)
|
||||
, m_bManualPaused(false)
|
||||
, m_bShowConsole(false)
|
||||
, m_nAnimationInterval()
|
||||
, m_ClearColor(EColor::BLACK)
|
||||
, m_pTransition(nullptr)
|
||||
, m_pCurrentScene(nullptr)
|
||||
, m_pNextScene(nullptr)
|
||||
{
|
||||
CoInitialize(NULL);
|
||||
|
||||
// 获取时钟频率
|
||||
LARGE_INTEGER tFreq;
|
||||
QueryPerformanceFrequency(&tFreq);
|
||||
// 默认帧率为 60
|
||||
m_nAnimationInterval.QuadPart = static_cast<LONGLONG>(1.0 / 60 * tFreq.QuadPart);
|
||||
}
|
||||
|
||||
e2d::EApp::~EApp()
|
||||
{
|
||||
SafeReleaseInterface(&GetSolidColorBrush());
|
||||
SafeReleaseInterface(&GetRenderTarget());
|
||||
SafeReleaseInterface(&GetFactory());
|
||||
SafeReleaseInterface(&GetImagingFactory());
|
||||
SafeReleaseInterface(&GetDirectWriteFactory());
|
||||
CoUninitialize();
|
||||
}
|
||||
|
||||
e2d::EApp * e2d::EApp::getInstance()
|
||||
{
|
||||
if (!s_pInstance)
|
||||
{
|
||||
s_pInstance = new EApp();
|
||||
}
|
||||
return s_pInstance;
|
||||
}
|
||||
|
||||
bool e2d::EApp::init(const EString &title, UINT32 width, UINT32 height, const EWindowStyle &wStyle /* = nullptr */)
|
||||
{
|
||||
EApp * pApp = EApp::getInstance();
|
||||
HRESULT hr;
|
||||
|
||||
// 保存窗口样式
|
||||
pApp->m_WindowStyle = wStyle;
|
||||
// 保存窗口名称
|
||||
pApp->m_sTitle = title;
|
||||
|
||||
// 注册窗口类
|
||||
WNDCLASSEX wcex = { sizeof(WNDCLASSEX) };
|
||||
wcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
|
||||
wcex.lpfnWndProc = EApp::WndProc;
|
||||
wcex.cbClsExtra = 0;
|
||||
wcex.cbWndExtra = sizeof(LONG_PTR);
|
||||
wcex.hInstance = HINST_THISCOMPONENT;
|
||||
wcex.hbrBackground = (HBRUSH)(GetStockObject(BLACK_BRUSH));
|
||||
wcex.lpszMenuName = NULL;
|
||||
wcex.hCursor = LoadCursor(NULL, IDI_APPLICATION);
|
||||
wcex.lpszClassName = L"Easy2DApp";
|
||||
// 设置窗口是否有关闭按钮
|
||||
if (wStyle.m_bNoClose)
|
||||
{
|
||||
wcex.style |= CS_NOCLOSE;
|
||||
}
|
||||
// 设置程序图标
|
||||
if (wStyle.m_pIconID)
|
||||
{
|
||||
wcex.hIcon = (HICON)::LoadImage(
|
||||
GetModuleHandle(NULL),
|
||||
wStyle.m_pIconID,
|
||||
IMAGE_ICON,
|
||||
0,
|
||||
0,
|
||||
LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
|
||||
}
|
||||
|
||||
RegisterClassEx(&wcex);
|
||||
|
||||
// 因为 CreateWindow 函数使用的是像素大小,获取系统的 DPI 以使它
|
||||
// 适应窗口缩放
|
||||
FLOAT dpiX, dpiY;
|
||||
|
||||
// 工厂将返回当前的系统 DPI,这个值也将用来创建窗口
|
||||
GetFactory()->GetDesktopDpi(&dpiX, &dpiY);
|
||||
|
||||
width = static_cast<UINT>(ceil(width * dpiX / 96.f));
|
||||
height = static_cast<UINT>(ceil(height * dpiY / 96.f));
|
||||
|
||||
// 获取屏幕分辨率
|
||||
UINT screenWidth = static_cast<UINT>(GetSystemMetrics(SM_CXSCREEN));
|
||||
UINT screenHeight = static_cast<UINT>(GetSystemMetrics(SM_CYSCREEN));
|
||||
// 当输入的窗口大小比分辨率大时,给出警告
|
||||
WARN_IF(screenWidth < width || screenHeight < height, "The window is larger than screen!");
|
||||
// 取最小值
|
||||
width = min(width, screenWidth);
|
||||
height = min(height, screenHeight);
|
||||
|
||||
// 创建窗口样式
|
||||
DWORD dwStyle = WS_OVERLAPPED | WS_SYSMENU;
|
||||
if (!wStyle.m_bNoMiniSize)
|
||||
{
|
||||
dwStyle |= WS_MINIMIZEBOX;
|
||||
}
|
||||
// 创建窗口
|
||||
GetHWnd() = CreateWindow(
|
||||
L"Easy2DApp",
|
||||
title,
|
||||
dwStyle,
|
||||
0, 0, width, height,
|
||||
NULL,
|
||||
NULL,
|
||||
HINST_THISCOMPONENT,
|
||||
NULL
|
||||
);
|
||||
|
||||
hr = GetHWnd() ? S_OK : E_FAIL;
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 禁用输入法
|
||||
EApp::setKeyboardLayoutEnable(false);
|
||||
// 重设客户区大小
|
||||
EApp::setWindowSize(width, height);
|
||||
}
|
||||
else
|
||||
{
|
||||
UnregisterClass(L"Easy2DApp", HINST_THISCOMPONENT);
|
||||
}
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
MessageBox(nullptr, L"Initialize Failed!", L"Error", MB_OK);
|
||||
}
|
||||
|
||||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
||||
int e2d::EApp::run()
|
||||
{
|
||||
if (GetHWnd() == nullptr)
|
||||
{
|
||||
MessageBox(nullptr, L"Invalid window handle!", L"Error", MB_OK);
|
||||
return -1;
|
||||
}
|
||||
|
||||
EApp * pApp = EApp::getInstance();
|
||||
// 进入第一个场景
|
||||
pApp->_enterNextScene();
|
||||
// 关闭控制台
|
||||
if (!pApp->m_bShowConsole)
|
||||
{
|
||||
showConsole(false);
|
||||
}
|
||||
// 显示窗口
|
||||
ShowWindow(GetHWnd(), SW_SHOWNORMAL);
|
||||
UpdateWindow(GetHWnd());
|
||||
// 设置窗口置顶
|
||||
if (pApp->m_WindowStyle.m_bTopMost)
|
||||
{
|
||||
SetWindowPos(GetHWnd(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||
}
|
||||
|
||||
// 挂起时长
|
||||
LONG nWait = 0L;
|
||||
// 时间间隔
|
||||
LONGLONG nInterval;
|
||||
// 上一帧画面绘制时间
|
||||
LARGE_INTEGER tLast;
|
||||
// 时钟频率
|
||||
LARGE_INTEGER tFreq;
|
||||
|
||||
// 修改时间精度
|
||||
timeBeginPeriod(1);
|
||||
// 获取时钟频率
|
||||
QueryPerformanceFrequency(&tFreq);
|
||||
// 刷新当前时间
|
||||
QueryPerformanceCounter(&GetNow());
|
||||
// 记录开始时间
|
||||
s_tStart = GetNow();
|
||||
tLast = GetNow();
|
||||
// 窗口消息
|
||||
MSG msg;
|
||||
|
||||
while (!pApp->m_bEnd)
|
||||
{
|
||||
// 处理窗口消息
|
||||
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
// 刷新当前时间
|
||||
QueryPerformanceCounter(&GetNow());
|
||||
// 计算时间间隔
|
||||
nInterval = GetNow().QuadPart - tLast.QuadPart;
|
||||
// 判断间隔时间是否足够
|
||||
if (nInterval >= pApp->m_nAnimationInterval.QuadPart)
|
||||
{
|
||||
// 记录当前时间
|
||||
tLast.QuadPart += pApp->m_nAnimationInterval.QuadPart;
|
||||
// 更新游戏内容
|
||||
pApp->_update();
|
||||
// 刷新游戏画面
|
||||
pApp->_render();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 计算挂起时长
|
||||
nWait = static_cast<LONG>(ToMilliseconds(pApp->m_nAnimationInterval.QuadPart - nInterval) - 1LL);
|
||||
// 挂起线程,释放 CPU 占用
|
||||
if (nWait > 1L)
|
||||
{
|
||||
Sleep(nWait);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 关闭控制台
|
||||
EApp::showConsole(false);
|
||||
// 重置时间精度
|
||||
timeEndPeriod(1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void e2d::EApp::pause()
|
||||
{
|
||||
EApp::getInstance()->m_bManualPaused = true;
|
||||
}
|
||||
|
||||
void e2d::EApp::resume()
|
||||
{
|
||||
if (isPaused())
|
||||
{
|
||||
EApp::getInstance()->m_bPaused = false;
|
||||
EApp::getInstance()->m_bManualPaused = false;
|
||||
EApp::getInstance()->_updateTime();
|
||||
}
|
||||
}
|
||||
|
||||
bool e2d::EApp::isPaused()
|
||||
{
|
||||
return s_pInstance->m_bPaused || s_pInstance->m_bManualPaused;
|
||||
}
|
||||
|
||||
void e2d::EApp::quit()
|
||||
{
|
||||
getInstance()->m_bEnd = true; // 这个变量将控制游戏是否结束
|
||||
}
|
||||
|
||||
void e2d::EApp::showConsole(bool show /* = true */)
|
||||
{
|
||||
static FILE * stdoutstream = nullptr;
|
||||
static FILE * stdinstream = nullptr;
|
||||
static FILE * stderrstream = nullptr;
|
||||
|
||||
EApp::getInstance()->m_bShowConsole = show;
|
||||
// 查找已存在的控制台句柄
|
||||
HWND hwnd = GetConsoleWindow();
|
||||
// 关闭控制台
|
||||
if (show)
|
||||
{
|
||||
if (hwnd)
|
||||
{
|
||||
ShowWindow(hwnd, SW_SHOWNORMAL);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 显示一个新控制台
|
||||
if (AllocConsole())
|
||||
{
|
||||
freopen_s(&stdoutstream, "CONOUT$", "w+t", stdout);
|
||||
freopen_s(&stderrstream, "CONOUT$", "w+t", stderr);
|
||||
freopen_s(&stdinstream, "CONIN$", "r+t", stdin);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox(nullptr, L"Alloc Console Failed!", L"Error", MB_OK);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hwnd)
|
||||
{
|
||||
if (stdoutstream)
|
||||
{
|
||||
fclose(stdoutstream);
|
||||
fclose(stdinstream);
|
||||
fclose(stderrstream);
|
||||
|
||||
stdoutstream = stdinstream = stderrstream = nullptr;
|
||||
}
|
||||
FreeConsole();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool e2d::EApp::onActivate()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::EApp::onInactive()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::EApp::onCloseWindow()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void e2d::EApp::_update()
|
||||
{
|
||||
if (isPaused())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 正在切换场景时,执行场景切换动画
|
||||
if (m_pTransition)
|
||||
{
|
||||
m_pTransition->_update();
|
||||
if (m_pTransition->isEnding())
|
||||
{
|
||||
m_pTransition->release();
|
||||
m_pTransition = nullptr;
|
||||
// 进入下一场景
|
||||
_enterNextScene();
|
||||
// 刷新计时器
|
||||
_updateTime();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// 下一场景指针不为空时,切换场景
|
||||
if (m_pNextScene)
|
||||
{
|
||||
// 进入下一场景
|
||||
_enterNextScene();
|
||||
}
|
||||
|
||||
// 断言当前场景非空
|
||||
ASSERT(m_pCurrentScene != nullptr, "Current scene NULL pointer exception.");
|
||||
|
||||
EObjectManager::__flush(); // 刷新内存池
|
||||
ETimerManager::TimerProc(); // 定时器管理器执行程序
|
||||
EActionManager::ActionProc(); // 动作管理器执行程序
|
||||
}
|
||||
|
||||
void e2d::EApp::_render()
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
// 开始绘图
|
||||
GetRenderTarget()->BeginDraw();
|
||||
// 使用背景色清空屏幕
|
||||
GetRenderTarget()->Clear(D2D1::ColorF(m_ClearColor));
|
||||
// 绘制当前场景
|
||||
if (m_pCurrentScene)
|
||||
{
|
||||
m_pCurrentScene->_render();
|
||||
}
|
||||
// 切换场景时,同时绘制两场景
|
||||
if (m_pTransition && m_pNextScene)
|
||||
{
|
||||
m_pNextScene->_render();
|
||||
}
|
||||
// 终止绘图
|
||||
hr = GetRenderTarget()->EndDraw();
|
||||
|
||||
if (hr == D2DERR_RECREATE_TARGET)
|
||||
{
|
||||
// 如果 Direct3D 设备在执行过程中消失,将丢弃当前的设备相关资源
|
||||
// 并在下一次调用时重建资源
|
||||
hr = S_OK;
|
||||
SafeReleaseInterface(&GetRenderTarget());
|
||||
}
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
// 渲染时产生了未知的错误,退出游戏
|
||||
MessageBox(GetHWnd(), L"Game rendering failed!", L"Error", MB_OK);
|
||||
this->quit();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EApp::setWindowSize(UINT32 width, UINT32 height)
|
||||
{
|
||||
// 获取屏幕分辨率
|
||||
int screenWidth = GetSystemMetrics(SM_CXSCREEN);
|
||||
int screenHeight = GetSystemMetrics(SM_CYSCREEN);
|
||||
// 获取窗口大小(包含菜单栏)
|
||||
tagRECT rcWindow;
|
||||
GetWindowRect(GetHWnd(), &rcWindow);
|
||||
// 获取客户区大小
|
||||
tagRECT rcClient;
|
||||
GetClientRect(GetHWnd(), &rcClient);
|
||||
// 计算边框大小
|
||||
width += (rcWindow.right - rcWindow.left) - (rcClient.right - rcClient.left);
|
||||
height += (rcWindow.bottom - rcWindow.top) - (rcClient.bottom - rcClient.top);
|
||||
// 修改窗口大小,并设置窗口在屏幕居中
|
||||
MoveWindow(GetHWnd(), (screenWidth - width) / 2, (screenHeight - height) / 2, width, height, TRUE);
|
||||
}
|
||||
|
||||
void e2d::EApp::setWindowTitle(const EString &title)
|
||||
{
|
||||
// 设置窗口标题
|
||||
SetWindowText(GetHWnd(), title);
|
||||
// 保存当前标题,用于修改窗口大小时恢复标题
|
||||
getInstance()->m_sTitle = title;
|
||||
}
|
||||
|
||||
e2d::EString e2d::EApp::getTitle()
|
||||
{
|
||||
return getInstance()->m_sTitle;
|
||||
}
|
||||
|
||||
float e2d::EApp::getWidth()
|
||||
{
|
||||
return GetRenderTarget()->GetSize().width;
|
||||
}
|
||||
|
||||
float e2d::EApp::getHeight()
|
||||
{
|
||||
return GetRenderTarget()->GetSize().height;
|
||||
}
|
||||
|
||||
e2d::ESize e2d::EApp::getSize()
|
||||
{
|
||||
return ESize(GetRenderTarget()->GetSize().width, GetRenderTarget()->GetSize().height);
|
||||
}
|
||||
|
||||
void e2d::EApp::enterScene(EScene * scene, ETransition * transition /* = nullptr */, bool saveCurrentScene /* = true */)
|
||||
{
|
||||
ASSERT(scene != nullptr, "Next scene NULL pointer exception!");
|
||||
scene->retain();
|
||||
// 保存下一场景的指针
|
||||
getInstance()->m_pNextScene = scene;
|
||||
// 切换场景时,是否保存当前场景
|
||||
if (getInstance()->m_pCurrentScene)
|
||||
{
|
||||
getInstance()->m_pCurrentScene->m_bWillSave = saveCurrentScene;
|
||||
}
|
||||
// 设置切换场景动画
|
||||
if (transition)
|
||||
{
|
||||
getInstance()->m_pTransition = transition;
|
||||
transition->retain();
|
||||
transition->_setTarget(
|
||||
getInstance()->m_pCurrentScene,
|
||||
getInstance()->m_pNextScene
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EApp::backScene(ETransition * transition /* = nullptr */)
|
||||
{
|
||||
// 栈为空时,调用返回场景函数失败
|
||||
WARN_IF(s_SceneStack.size() == 0, "Scene stack now is empty!");
|
||||
if (s_SceneStack.size() == 0) return;
|
||||
|
||||
// 从栈顶取出场景指针,作为下一场景
|
||||
getInstance()->m_pNextScene = s_SceneStack.top();
|
||||
s_SceneStack.pop();
|
||||
|
||||
// 返回上一场景时,不保存当前场景
|
||||
if (getInstance()->m_pCurrentScene)
|
||||
{
|
||||
getInstance()->m_pCurrentScene->m_bWillSave = false;
|
||||
}
|
||||
|
||||
// 设置切换场景动画
|
||||
if (transition)
|
||||
{
|
||||
getInstance()->m_pTransition = transition;
|
||||
transition->retain();
|
||||
transition->_setTarget(
|
||||
getInstance()->m_pCurrentScene,
|
||||
getInstance()->m_pNextScene
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EApp::clearScene()
|
||||
{
|
||||
// 清空场景栈
|
||||
while (s_SceneStack.size())
|
||||
{
|
||||
auto temp = s_SceneStack.top();
|
||||
SafeRelease(&temp);
|
||||
s_SceneStack.pop();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EApp::setFPS(UINT32 fps)
|
||||
{
|
||||
fps = min(max(fps, 30), 120);
|
||||
|
||||
// 获取时钟频率
|
||||
LARGE_INTEGER tFreq;
|
||||
QueryPerformanceFrequency(&tFreq);
|
||||
EApp::getInstance()->m_nAnimationInterval.QuadPart = static_cast<LONGLONG>(1.0 / fps * tFreq.QuadPart);
|
||||
}
|
||||
|
||||
e2d::EScene * e2d::EApp::getCurrentScene()
|
||||
{
|
||||
return getInstance()->m_pCurrentScene;
|
||||
}
|
||||
|
||||
void e2d::EApp::setAppName(const EString &appname)
|
||||
{
|
||||
getInstance()->m_sAppName = appname;
|
||||
}
|
||||
|
||||
e2d::EString e2d::EApp::getAppName()
|
||||
{
|
||||
if (getInstance()->m_sAppName.isEmpty())
|
||||
getInstance()->m_sAppName = getInstance()->m_sTitle;
|
||||
return getInstance()->m_sAppName;
|
||||
}
|
||||
|
||||
void e2d::EApp::setBkColor(UINT32 color)
|
||||
{
|
||||
getInstance()->m_ClearColor = color;
|
||||
}
|
||||
|
||||
void e2d::EApp::setKeyboardLayoutEnable(bool value)
|
||||
{
|
||||
static HIMC hImc = NULL;
|
||||
|
||||
if (value)
|
||||
{
|
||||
if (hImc != NULL)
|
||||
{
|
||||
ImmAssociateContext(GetHWnd(), hImc);
|
||||
hImc = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hImc == NULL)
|
||||
{
|
||||
hImc = ImmAssociateContext(GetHWnd(), NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HWND e2d::EApp::getHWnd()
|
||||
{
|
||||
return GetHWnd();
|
||||
}
|
||||
|
||||
e2d::EWindowStyle e2d::EApp::getWindowStyle()
|
||||
{
|
||||
return getInstance()->m_WindowStyle;
|
||||
}
|
||||
|
||||
LONGLONG e2d::EApp::getTotalDurationFromStart()
|
||||
{
|
||||
return (s_tStart.QuadPart - GetNow().QuadPart) * 1000LL / GetFreq().QuadPart;
|
||||
}
|
||||
|
||||
void e2d::EApp::hideWindow()
|
||||
{
|
||||
ShowWindow(GetHWnd(), SW_HIDE);
|
||||
}
|
||||
|
||||
void e2d::EApp::showWindow()
|
||||
{
|
||||
ShowWindow(GetHWnd(), SW_SHOWNORMAL);
|
||||
}
|
||||
|
||||
void e2d::EApp::_enterNextScene()
|
||||
{
|
||||
if (m_pNextScene == nullptr)
|
||||
return;
|
||||
|
||||
// 执行当前场景的 onCloseWindow 函数
|
||||
if (m_pCurrentScene)
|
||||
{
|
||||
m_pCurrentScene->onExit();
|
||||
|
||||
if (m_pCurrentScene->m_bWillSave)
|
||||
{
|
||||
// 若要保存当前场景,把它放入栈中
|
||||
s_SceneStack.push(m_pCurrentScene);
|
||||
}
|
||||
else
|
||||
{
|
||||
SafeRelease(&m_pCurrentScene);
|
||||
}
|
||||
}
|
||||
|
||||
// 执行下一场景的 onEnter 函数
|
||||
m_pNextScene->onEnter();
|
||||
|
||||
m_pCurrentScene = m_pNextScene; // 切换场景
|
||||
m_pNextScene = nullptr; // 下一场景置空
|
||||
}
|
||||
|
||||
void e2d::EApp::_updateTime()
|
||||
{
|
||||
// 刷新当前时间
|
||||
QueryPerformanceCounter(&GetNow());
|
||||
// 重置动画和定时器
|
||||
EActionManager::_resetAllActions();
|
||||
ETimerManager::_resetAllTimers();
|
||||
}
|
||||
|
||||
LRESULT e2d::EApp::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (s_pInstance == nullptr)
|
||||
{
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
else
|
||||
{
|
||||
LRESULT result = 0;
|
||||
|
||||
switch (message)
|
||||
{
|
||||
// 处理鼠标消息
|
||||
case WM_LBUTTONUP:
|
||||
case WM_LBUTTONDOWN:
|
||||
case WM_LBUTTONDBLCLK:
|
||||
case WM_MBUTTONUP:
|
||||
case WM_MBUTTONDOWN:
|
||||
case WM_MBUTTONDBLCLK:
|
||||
case WM_RBUTTONUP:
|
||||
case WM_RBUTTONDOWN:
|
||||
case WM_RBUTTONDBLCLK:
|
||||
case WM_MOUSEMOVE:
|
||||
case WM_MOUSEWHEEL:
|
||||
{
|
||||
// 执行场景切换时屏蔽按键和鼠标消息
|
||||
if (!s_pInstance->m_pTransition && !s_pInstance->m_pNextScene)
|
||||
{
|
||||
EMsgManager::MouseProc(message, wParam, lParam);
|
||||
}
|
||||
}
|
||||
result = 0;
|
||||
break;
|
||||
|
||||
// 处理按键消息
|
||||
case WM_KEYDOWN:
|
||||
case WM_KEYUP:
|
||||
{
|
||||
// 执行场景切换时屏蔽按键和鼠标消息
|
||||
if (!s_pInstance->m_pTransition && !s_pInstance->m_pNextScene)
|
||||
{
|
||||
EMsgManager::KeyboardProc(message, wParam, lParam);
|
||||
}
|
||||
}
|
||||
result = 0;
|
||||
break;
|
||||
|
||||
// 处理窗口大小变化消息
|
||||
case WM_SIZE:
|
||||
{
|
||||
UINT width = LOWORD(lParam);
|
||||
UINT height = HIWORD(lParam);
|
||||
// 如果程序接收到一个 WM_SIZE 消息,这个方法将调整渲染
|
||||
// 目标适当。它可能会调用失败,但是这里可以忽略有可能的
|
||||
// 错误,因为这个错误将在下一次调用 EndDraw 时产生
|
||||
GetRenderTarget()->Resize(D2D1::SizeU(width, height));
|
||||
}
|
||||
break;
|
||||
|
||||
// 处理分辨率变化消息
|
||||
case WM_DISPLAYCHANGE:
|
||||
{
|
||||
// 重绘客户区
|
||||
InvalidateRect(hWnd, NULL, FALSE);
|
||||
}
|
||||
result = 0;
|
||||
break;
|
||||
|
||||
// 重绘窗口
|
||||
case WM_PAINT:
|
||||
{
|
||||
s_pInstance->_render();
|
||||
ValidateRect(hWnd, NULL);
|
||||
}
|
||||
result = 0;
|
||||
break;
|
||||
|
||||
// 窗口激活消息
|
||||
case WM_ACTIVATE:
|
||||
{
|
||||
EScene * pCurrentScene = s_pInstance->getCurrentScene();
|
||||
|
||||
if (LOWORD(wParam) == WA_INACTIVE)
|
||||
{
|
||||
if (pCurrentScene &&
|
||||
pCurrentScene->onInactive() &&
|
||||
s_pInstance->onInactive())
|
||||
{
|
||||
s_pInstance->m_bPaused = true;
|
||||
}
|
||||
}
|
||||
else if (s_pInstance->m_bPaused)
|
||||
{
|
||||
if (pCurrentScene &&
|
||||
pCurrentScene->onActivate() &&
|
||||
s_pInstance->onActivate())
|
||||
{
|
||||
s_pInstance->m_bPaused = false;
|
||||
if (!s_pInstance->m_bManualPaused)
|
||||
{
|
||||
s_pInstance->_updateTime();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
result = 1;
|
||||
break;
|
||||
|
||||
// 窗口关闭消息
|
||||
case WM_CLOSE:
|
||||
{
|
||||
EScene * pCurrentScene = s_pInstance->getCurrentScene();
|
||||
|
||||
if (pCurrentScene)
|
||||
{
|
||||
if (pCurrentScene->onCloseWindow() &&
|
||||
s_pInstance->onCloseWindow())
|
||||
{
|
||||
DestroyWindow(hWnd);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (s_pInstance->onCloseWindow())
|
||||
{
|
||||
DestroyWindow(hWnd);
|
||||
}
|
||||
}
|
||||
}
|
||||
result = 1;
|
||||
break;
|
||||
|
||||
// 窗口被销毁
|
||||
case WM_DESTROY:
|
||||
{
|
||||
// 退出程序
|
||||
s_pInstance->quit();
|
||||
// 发送退出消息
|
||||
PostQuitMessage(0);
|
||||
}
|
||||
result = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
result = DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,166 @@
|
|||
#include "..\ebase.h"
|
||||
#include "..\emanagers.h"
|
||||
#include "..\enodes.h"
|
||||
#include "..\etransitions.h"
|
||||
#include "..\etools.h"
|
||||
|
||||
|
||||
// 控制游戏终止
|
||||
static bool s_bEndGame = false;
|
||||
// 控制游戏暂停
|
||||
static bool s_bPaused = false;
|
||||
// 是否进行过初始化
|
||||
static bool s_bInitialized = false;
|
||||
// AppName
|
||||
static e2d::EString s_sAppName;
|
||||
|
||||
|
||||
bool e2d::EGame::init(LPCTSTR sTitle, UINT32 nWidth, UINT32 nHeight, LPCTSTR pIconID, bool bNoClose, bool bNoMiniSize, bool bTopMost)
|
||||
{
|
||||
if (s_bInitialized)
|
||||
{
|
||||
WARN_IF(true, "The game has been initialized!");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 初始化 COM 组件
|
||||
if (SUCCEEDED(CoInitialize(NULL)))
|
||||
{
|
||||
// 创建设备无关资源
|
||||
if (ERenderer::__createDeviceIndependentResources())
|
||||
{
|
||||
// 初始化窗口
|
||||
if (EWindow::__init(sTitle, nWidth, nHeight, pIconID, bNoClose, bNoMiniSize, bTopMost))
|
||||
{
|
||||
// 创建设备相关资源
|
||||
if (ERenderer::__createDeviceResources())
|
||||
{
|
||||
// 重设 Client 大小
|
||||
EWindow::setSize(nWidth, nHeight);
|
||||
// 设置默认 AppName
|
||||
if (s_sAppName.isEmpty())
|
||||
s_sAppName = EWindow::getTitle();
|
||||
// 标志初始化成功
|
||||
s_bInitialized = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return s_bInitialized;
|
||||
}
|
||||
|
||||
int e2d::EGame::run()
|
||||
{
|
||||
if (!s_bInitialized)
|
||||
{
|
||||
ASSERT(false, "You must initialize EGame first!");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 初始化 DirectInput
|
||||
EInput::__init();
|
||||
// 初始化计时操作
|
||||
ETime::__init();
|
||||
// 进入第一个场景
|
||||
ESceneManager::__enterNextScene();
|
||||
// 显示窗口
|
||||
EWindow::showWindow();
|
||||
// 刷新窗口内容
|
||||
::UpdateWindow(EWindow::getHWnd());
|
||||
// 处理窗口消息
|
||||
EWindow::__poll();
|
||||
// 刷新时间信息
|
||||
ETime::__updateNow();
|
||||
ETime::__updateLast();
|
||||
|
||||
// 挂起时长
|
||||
int nWaitMS = 0;
|
||||
|
||||
while (!s_bEndGame)
|
||||
{
|
||||
// 处理窗口消息
|
||||
EWindow::__poll();
|
||||
// 刷新时间信息
|
||||
ETime::__updateNow();
|
||||
|
||||
// 判断是否达到了刷新状态
|
||||
if (ETime::getDeltaTime() >= 17)
|
||||
{
|
||||
ETime::__updateLast();
|
||||
EGame::__update();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 挂起线程
|
||||
ETime::__sleep();
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void e2d::EGame::pause()
|
||||
{
|
||||
s_bPaused = true;
|
||||
}
|
||||
|
||||
void e2d::EGame::resume()
|
||||
{
|
||||
if (isPaused())
|
||||
{
|
||||
s_bPaused = false;
|
||||
// 刷新当前时间
|
||||
ETime::__updateLast();
|
||||
// 重置动画和定时器
|
||||
EActionManager::__resetAllActions();
|
||||
ETimerManager::__resetAllTimers();
|
||||
}
|
||||
}
|
||||
|
||||
bool e2d::EGame::isPaused()
|
||||
{
|
||||
return s_bPaused;
|
||||
}
|
||||
|
||||
void e2d::EGame::quit()
|
||||
{
|
||||
s_bEndGame = true; // 这个变量将控制游戏是否结束
|
||||
}
|
||||
|
||||
void e2d::EGame::uninit()
|
||||
{
|
||||
// 重置窗口属性
|
||||
EWindow::__uninit();
|
||||
// 关闭输入
|
||||
EInput::__uninit();
|
||||
// 恢复计时操作
|
||||
ETime::__uninit();
|
||||
// 删除渲染相关资源
|
||||
ERenderer::__discardResources();
|
||||
|
||||
CoUninitialize();
|
||||
}
|
||||
|
||||
void e2d::EGame::__update()
|
||||
{
|
||||
EInput::__updateDeviceState(); // 获取用户输入
|
||||
|
||||
if (!s_bPaused)
|
||||
{
|
||||
ETimerManager::__update(); // 定时器管理器执行程序
|
||||
EActionManager::__update(); // 动作管理器执行程序
|
||||
ESceneManager::__update(); // 更新游戏内容
|
||||
ERenderer::__render(); // 渲染游戏画面
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EGame::setAppName(const EString &appname)
|
||||
{
|
||||
s_sAppName = appname;
|
||||
}
|
||||
|
||||
e2d::EString e2d::EGame::getAppName()
|
||||
{
|
||||
return s_sAppName;
|
||||
}
|
||||
|
|
@ -0,0 +1,255 @@
|
|||
#include "..\ebase.h"
|
||||
|
||||
#pragma comment(lib, "dinput8.lib")
|
||||
#pragma comment(lib, "dxguid.lib")
|
||||
|
||||
using namespace e2d;
|
||||
|
||||
static IDirectInput8* s_pDirectInput = nullptr; // DirectInput 接口对象
|
||||
static IDirectInputDevice8* s_KeyboardDevice = nullptr; // 键盘设备接口
|
||||
static char s_KeyBuffer[256] = { 0 }; // 用于保存键盘按键信息缓冲区
|
||||
static char s_KeySecBuffer[256] = { 0 }; // 键盘消息二级缓冲区
|
||||
|
||||
static IDirectInputDevice8* s_MouseDevice = nullptr; // 鼠标设备接口
|
||||
static DIMOUSESTATE s_MouseState; // 鼠标信息存储结构体
|
||||
static DIMOUSESTATE s_MouseSecState; // 鼠标信息二级缓冲
|
||||
static POINT s_MousePosition; // 鼠标位置存储结构体
|
||||
|
||||
|
||||
void EInput::__uninit()
|
||||
{
|
||||
if (s_KeyboardDevice)
|
||||
s_KeyboardDevice->Unacquire();
|
||||
if (s_MouseDevice)
|
||||
s_MouseDevice->Unacquire();
|
||||
|
||||
SafeReleaseInterface(&s_MouseDevice);
|
||||
SafeReleaseInterface(&s_KeyboardDevice);
|
||||
SafeReleaseInterface(&s_pDirectInput);
|
||||
}
|
||||
|
||||
HRESULT EInput::__init()
|
||||
{
|
||||
ZeroMemory(s_KeyBuffer, sizeof(s_KeyBuffer));
|
||||
ZeroMemory(s_KeySecBuffer, sizeof(s_KeySecBuffer));
|
||||
ZeroMemory(&s_MouseState, sizeof(s_MouseState));
|
||||
ZeroMemory(&s_MouseSecState, sizeof(s_MouseSecState));
|
||||
|
||||
// 初始化接口对象
|
||||
HRESULT hr = DirectInput8Create(
|
||||
HINST_THISCOMPONENT,
|
||||
DIRECTINPUT_VERSION,
|
||||
IID_IDirectInput8,
|
||||
(void**)&s_pDirectInput,
|
||||
NULL
|
||||
);
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 初始化键盘设备
|
||||
hr = s_pDirectInput->CreateDevice(
|
||||
GUID_SysKeyboard,
|
||||
&s_KeyboardDevice,
|
||||
NULL
|
||||
);
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
s_KeyboardDevice->SetCooperativeLevel(
|
||||
EWindow::getHWnd(),
|
||||
DISCL_FOREGROUND | DISCL_NONEXCLUSIVE
|
||||
);
|
||||
s_KeyboardDevice->SetDataFormat(
|
||||
&c_dfDIKeyboard);
|
||||
s_KeyboardDevice->Acquire();
|
||||
s_KeyboardDevice->Poll();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox(nullptr, L"Keyboard not found. The game will now exit.",
|
||||
L"Error",
|
||||
MB_ICONERROR | MB_OK);
|
||||
EGame::quit();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 初始化鼠标设备
|
||||
hr = s_pDirectInput->CreateDevice(GUID_SysMouse, &s_MouseDevice, NULL);
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
s_MouseDevice->SetCooperativeLevel(EWindow::getHWnd(), DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
|
||||
s_MouseDevice->SetDataFormat(&c_dfDIMouse);
|
||||
s_MouseDevice->Acquire();
|
||||
s_MouseDevice->Poll();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox(nullptr, L"Mouse not found. The game will now exit.",
|
||||
L"Error",
|
||||
MB_ICONERROR | MB_OK);
|
||||
EGame::quit();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
||||
void EInput::__updateDeviceState()
|
||||
{
|
||||
if (s_KeyboardDevice)
|
||||
{
|
||||
HRESULT hr = s_KeyboardDevice->Poll();
|
||||
if (FAILED(hr))
|
||||
{
|
||||
hr = s_KeyboardDevice->Acquire();
|
||||
while (hr == DIERR_INPUTLOST)
|
||||
hr = s_KeyboardDevice->Acquire();
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < 256; i++)
|
||||
s_KeySecBuffer[i] = s_KeyBuffer[i];
|
||||
|
||||
s_KeyboardDevice->GetDeviceState(sizeof(s_KeyBuffer), (void**)&s_KeyBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
if (s_MouseDevice)
|
||||
{
|
||||
HRESULT hr = s_MouseDevice->Poll();
|
||||
if (FAILED(hr))
|
||||
{
|
||||
hr = s_MouseDevice->Acquire();
|
||||
while (hr == DIERR_INPUTLOST)
|
||||
hr = s_MouseDevice->Acquire();
|
||||
}
|
||||
else
|
||||
{
|
||||
s_MouseSecState = s_MouseState;
|
||||
s_MouseDevice->GetDeviceState(sizeof(s_MouseState), (void**)&s_MouseState);
|
||||
}
|
||||
DIK_0;
|
||||
}
|
||||
|
||||
GetCursorPos(&s_MousePosition);
|
||||
ScreenToClient(EWindow::getHWnd(), &s_MousePosition);
|
||||
}
|
||||
|
||||
bool EInput::isKeyDown(int nKeyCode)
|
||||
{
|
||||
if (s_KeyBuffer[nKeyCode] & 0x80)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EInput::isKeyPress(int nKeyCode)
|
||||
{
|
||||
if ((s_KeyBuffer[nKeyCode] & 0x80) && !(s_KeySecBuffer[nKeyCode] & 0x80))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EInput::isKeyRelease(int nKeyCode)
|
||||
{
|
||||
if (!(s_KeyBuffer[nKeyCode] & 0x80) && (s_KeySecBuffer[nKeyCode] & 0x80))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EInput::isMouseLButtonDown()
|
||||
{
|
||||
if (s_MouseState.rgbButtons[0] & 0x80)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EInput::isMouseRButtonDown()
|
||||
{
|
||||
if (s_MouseState.rgbButtons[1] & 0x80)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EInput::isMouseMButtonDown()
|
||||
{
|
||||
if (s_MouseState.rgbButtons[2] & 0x80)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EInput::isMouseLButtonPress()
|
||||
{
|
||||
if ((s_MouseState.rgbButtons[0] & 0x80) && !(s_MouseSecState.rgbButtons[0] & 0x80))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EInput::isMouseRButtonPress()
|
||||
{
|
||||
if ((s_MouseState.rgbButtons[1] & 0x80) && !(s_MouseSecState.rgbButtons[1] & 0x80))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EInput::isMouseMButtonPress()
|
||||
{
|
||||
if ((s_MouseState.rgbButtons[2] & 0x80) && !(s_MouseSecState.rgbButtons[2] & 0x80))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EInput::isMouseLButtonRelease()
|
||||
{
|
||||
if (!(s_MouseState.rgbButtons[0] & 0x80) && (s_MouseSecState.rgbButtons[0] & 0x80))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EInput::isMouseRButtonRelease()
|
||||
{
|
||||
if (!(s_MouseState.rgbButtons[1] & 0x80) && (s_MouseSecState.rgbButtons[1] & 0x80))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EInput::isMouseMButtonRelease()
|
||||
{
|
||||
if (!(s_MouseState.rgbButtons[2] & 0x80) && (s_MouseSecState.rgbButtons[2] & 0x80))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
float EInput::getMouseX()
|
||||
{
|
||||
return (float)s_MousePosition.x;
|
||||
}
|
||||
|
||||
float EInput::getMouseY()
|
||||
{
|
||||
return (float)s_MousePosition.y;
|
||||
}
|
||||
|
||||
EPoint EInput::getMousePos()
|
||||
{
|
||||
return EPoint((float)s_MousePosition.x, (float)s_MousePosition.y);
|
||||
}
|
||||
|
||||
float EInput::getMouseDeltaX()
|
||||
{
|
||||
return (float)s_MouseState.lX;
|
||||
}
|
||||
|
||||
float EInput::getMouseDeltaY()
|
||||
{
|
||||
return (float)s_MouseState.lY;
|
||||
}
|
||||
|
||||
float EInput::getMouseDeltaZ()
|
||||
{
|
||||
return (float)s_MouseState.lZ;
|
||||
}
|
||||
|
|
@ -0,0 +1,169 @@
|
|||
#include "..\ebase.h"
|
||||
#include "..\emanagers.h"
|
||||
|
||||
static ID2D1Factory * s_pDirect2dFactory = nullptr;
|
||||
static ID2D1HwndRenderTarget * s_pRenderTarget = nullptr;
|
||||
static ID2D1SolidColorBrush * s_pSolidBrush = nullptr;
|
||||
static IWICImagingFactory * s_pIWICFactory = nullptr;
|
||||
static IDWriteFactory * s_pDWriteFactory = nullptr;
|
||||
static D2D1_COLOR_F s_nClearColor = D2D1::ColorF(D2D1::ColorF::Black);
|
||||
|
||||
|
||||
bool e2d::ERenderer::__createDeviceIndependentResources()
|
||||
{
|
||||
// 创建设备无关资源,它们的生命周期和程序的时长相同
|
||||
HRESULT hr = D2D1CreateFactory(
|
||||
D2D1_FACTORY_TYPE_SINGLE_THREADED,
|
||||
&s_pDirect2dFactory
|
||||
);
|
||||
|
||||
ASSERT(SUCCEEDED(hr), "Create Device Independent Resources Failed!");
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 创建 WIC 绘图工厂,用于统一处理各种格式的图片
|
||||
hr = CoCreateInstance(
|
||||
CLSID_WICImagingFactory,
|
||||
NULL,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_IWICImagingFactory,
|
||||
reinterpret_cast<void**>(&s_pIWICFactory)
|
||||
);
|
||||
ASSERT(SUCCEEDED(hr), "Create WICImagingFactory Failed!");
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 创建 DirectWrite 工厂
|
||||
hr = DWriteCreateFactory(
|
||||
DWRITE_FACTORY_TYPE_SHARED,
|
||||
__uuidof(IDWriteFactory),
|
||||
reinterpret_cast<IUnknown**>(&s_pDWriteFactory)
|
||||
);
|
||||
ASSERT(SUCCEEDED(hr), "Create DirectWrite Factory Failed!");
|
||||
}
|
||||
|
||||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
||||
bool e2d::ERenderer::__createDeviceResources()
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
if (!s_pRenderTarget)
|
||||
{
|
||||
HWND hWnd = EWindow::getHWnd();
|
||||
|
||||
// 创建设备相关资源。这些资源应在 Direct3D 设备消失时重建,
|
||||
// 比如当 isVisiable 被修改,等等
|
||||
RECT rc;
|
||||
GetClientRect(hWnd, &rc);
|
||||
|
||||
D2D1_SIZE_U size = D2D1::SizeU(
|
||||
rc.right - rc.left,
|
||||
rc.bottom - rc.top
|
||||
);
|
||||
|
||||
// 创建一个 Direct2D 渲染目标
|
||||
hr = s_pDirect2dFactory->CreateHwndRenderTarget(
|
||||
D2D1::RenderTargetProperties(),
|
||||
D2D1::HwndRenderTargetProperties(
|
||||
hWnd,
|
||||
size),
|
||||
&s_pRenderTarget
|
||||
);
|
||||
|
||||
ASSERT(SUCCEEDED(hr), "Create Render Target Failed!");
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 创建画刷
|
||||
hr = s_pRenderTarget->CreateSolidColorBrush(
|
||||
D2D1::ColorF(D2D1::ColorF::White),
|
||||
&s_pSolidBrush
|
||||
);
|
||||
ASSERT(SUCCEEDED(hr), "Create Solid Color Brush Failed!");
|
||||
}
|
||||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
||||
void e2d::ERenderer::__discardDeviceResources()
|
||||
{
|
||||
SafeReleaseInterface(&s_pRenderTarget);
|
||||
SafeReleaseInterface(&s_pSolidBrush);
|
||||
}
|
||||
|
||||
void e2d::ERenderer::__discardResources()
|
||||
{
|
||||
SafeReleaseInterface(&s_pDirect2dFactory);
|
||||
SafeReleaseInterface(&s_pRenderTarget);
|
||||
SafeReleaseInterface(&s_pSolidBrush);
|
||||
SafeReleaseInterface(&s_pIWICFactory);
|
||||
SafeReleaseInterface(&s_pDWriteFactory);
|
||||
}
|
||||
|
||||
void e2d::ERenderer::__render()
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
// 创建设备相关资源
|
||||
ERenderer::__createDeviceResources();
|
||||
|
||||
// 开始渲染
|
||||
s_pRenderTarget->BeginDraw();
|
||||
// 使用背景色清空屏幕
|
||||
s_pRenderTarget->Clear(s_nClearColor);
|
||||
|
||||
// 渲染场景
|
||||
ESceneManager::__render();
|
||||
|
||||
// 终止渲染
|
||||
hr = s_pRenderTarget->EndDraw();
|
||||
|
||||
if (hr == D2DERR_RECREATE_TARGET)
|
||||
{
|
||||
// 如果 Direct3D 设备在执行过程中消失,将丢弃当前的设备相关资源
|
||||
// 并在下一次调用时重建资源
|
||||
hr = S_OK;
|
||||
ERenderer::__discardDeviceResources();
|
||||
}
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
// 渲染时产生了未知的错误,退出游戏
|
||||
ASSERT(false, L"Renderer error!");
|
||||
EGame::quit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void e2d::ERenderer::setBackgroundColor(UINT32 color)
|
||||
{
|
||||
s_nClearColor = D2D1::ColorF(color);
|
||||
}
|
||||
|
||||
ID2D1Factory * e2d::ERenderer::getID2D1Factory()
|
||||
{
|
||||
return s_pDirect2dFactory;
|
||||
}
|
||||
|
||||
ID2D1HwndRenderTarget * e2d::ERenderer::getRenderTarget()
|
||||
{
|
||||
return s_pRenderTarget;
|
||||
}
|
||||
|
||||
ID2D1SolidColorBrush * e2d::ERenderer::getSolidColorBrush()
|
||||
{
|
||||
return s_pSolidBrush;
|
||||
}
|
||||
|
||||
IWICImagingFactory * e2d::ERenderer::getIWICImagingFactory()
|
||||
{
|
||||
return s_pIWICFactory;
|
||||
}
|
||||
|
||||
IDWriteFactory * e2d::ERenderer::getIDWriteFactory()
|
||||
{
|
||||
return s_pDWriteFactory;
|
||||
}
|
||||
|
|
@ -0,0 +1,123 @@
|
|||
#include "..\ebase.h"
|
||||
|
||||
// 上一帧与当前帧的时间间隔
|
||||
static int s_nInterval = 0;
|
||||
// 游戏开始时长
|
||||
static float s_fTotalTime = 0;
|
||||
|
||||
|
||||
float e2d::ETime::getTotalTime()
|
||||
{
|
||||
return s_fTotalTime;
|
||||
}
|
||||
|
||||
int e2d::ETime::getDeltaTime()
|
||||
{
|
||||
return s_nInterval;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if _MSC_VER > 1600
|
||||
|
||||
#include <thread>
|
||||
#include <chrono>
|
||||
using namespace std::chrono;
|
||||
|
||||
|
||||
// 游戏开始时间
|
||||
static steady_clock::time_point s_tStart;
|
||||
// 当前时间
|
||||
static steady_clock::time_point s_tNow;
|
||||
// 上一帧刷新时间
|
||||
static steady_clock::time_point s_tLast;
|
||||
|
||||
|
||||
void e2d::ETime::__init()
|
||||
{
|
||||
s_tStart = s_tLast = s_tNow = steady_clock::now();
|
||||
}
|
||||
|
||||
void e2d::ETime::__uninit()
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::ETime::__updateNow()
|
||||
{
|
||||
s_tNow = steady_clock::now();
|
||||
s_fTotalTime = static_cast<float>(duration_cast<milliseconds>(s_tNow - s_tStart).count()) / 1000.0f;
|
||||
s_nInterval = static_cast<int>(duration_cast<milliseconds>(s_tNow - s_tLast).count());
|
||||
}
|
||||
|
||||
void e2d::ETime::__updateLast()
|
||||
{
|
||||
s_tLast = s_tNow;
|
||||
}
|
||||
|
||||
void e2d::ETime::__sleep()
|
||||
{
|
||||
// 计算挂起时长
|
||||
int nWaitMS = 16 - s_nInterval;
|
||||
// 挂起线程,释放 CPU 占用
|
||||
if (nWaitMS > 1)
|
||||
{
|
||||
std::this_thread::sleep_for(milliseconds(nWaitMS));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
|
||||
|
||||
#include <mmsystem.h>
|
||||
#pragma comment(lib, "winmm.lib")
|
||||
|
||||
// 时钟频率
|
||||
static LARGE_INTEGER s_tFreq;
|
||||
// 当前时间
|
||||
static LARGE_INTEGER s_tNow;
|
||||
// 游戏开始时间
|
||||
static LARGE_INTEGER s_tStart;
|
||||
// 上一帧画面绘制时间
|
||||
static LARGE_INTEGER s_tLast;
|
||||
|
||||
|
||||
|
||||
void e2d::ETime::__init()
|
||||
{
|
||||
::timeBeginPeriod(1); // 修改时间精度
|
||||
::QueryPerformanceFrequency(&s_tFreq); // 获取时钟频率
|
||||
::QueryPerformanceCounter(&s_tNow); // 刷新当前时间
|
||||
s_tStart = s_tLast = s_tNow;
|
||||
}
|
||||
|
||||
void e2d::ETime::__uninit()
|
||||
{
|
||||
::timeEndPeriod(1); // 重置时间精度
|
||||
}
|
||||
|
||||
void e2d::ETime::__updateNow()
|
||||
{
|
||||
::QueryPerformanceCounter(&s_tNow);
|
||||
s_fTotalTime = static_cast<float>(s_tNow.QuadPart - s_tStart.QuadPart) / s_tFreq.QuadPart;
|
||||
s_nInterval = static_cast<int>((s_tNow.QuadPart - s_tLast.QuadPart) * 1000LL / s_tFreq.QuadPart);
|
||||
}
|
||||
|
||||
void e2d::ETime::__updateLast()
|
||||
{
|
||||
s_tLast = s_tNow;
|
||||
}
|
||||
|
||||
void e2d::ETime::__sleep()
|
||||
{
|
||||
// 计算挂起时长
|
||||
int nWaitMS = 16 - s_nInterval;
|
||||
// 挂起线程,释放 CPU 占用
|
||||
if (nWaitMS > 1)
|
||||
{
|
||||
::Sleep(nWaitMS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif // _MSC_VER > 1600
|
||||
|
|
@ -0,0 +1,328 @@
|
|||
#include "..\ebase.h"
|
||||
#include "..\emanagers.h"
|
||||
#include <imm.h>
|
||||
#pragma comment (lib ,"imm32.lib")
|
||||
|
||||
// 窗口句柄
|
||||
static HWND s_HWnd = nullptr;
|
||||
// 是否打开控制台
|
||||
static bool s_bShowConsole = false;
|
||||
|
||||
|
||||
bool e2d::EWindow::__init(LPCTSTR sTitle, UINT32 nWidth, UINT32 nHeight, LPCTSTR pIconID /*= nullptr*/, bool bNoClose /*= false*/, bool bNoMiniSize /*= false*/, bool bTopMost /*= false*/)
|
||||
{
|
||||
// 注册窗口类
|
||||
WNDCLASSEX wcex = { sizeof(WNDCLASSEX) };
|
||||
wcex.style = CS_HREDRAW | CS_VREDRAW;
|
||||
wcex.lpfnWndProc = EWindow::WndProc;
|
||||
wcex.cbClsExtra = 0;
|
||||
wcex.cbWndExtra = sizeof(LONG_PTR);
|
||||
wcex.hInstance = HINST_THISCOMPONENT;
|
||||
wcex.hbrBackground = NULL;
|
||||
wcex.lpszMenuName = NULL;
|
||||
wcex.hCursor = LoadCursor(NULL, IDI_APPLICATION);
|
||||
wcex.lpszClassName = L"Easy2DApp";
|
||||
// 设置窗口是否有关闭按钮
|
||||
if (bNoClose)
|
||||
{
|
||||
wcex.style |= CS_NOCLOSE;
|
||||
}
|
||||
// 设置程序图标
|
||||
if (pIconID)
|
||||
{
|
||||
wcex.hIcon = (HICON)::LoadImage(
|
||||
GetModuleHandle(NULL),
|
||||
pIconID,
|
||||
IMAGE_ICON,
|
||||
0,
|
||||
0,
|
||||
LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
|
||||
}
|
||||
|
||||
RegisterClassEx(&wcex);
|
||||
|
||||
// 因为 CreateWindow 函数使用的是像素大小,获取系统的 DPI 以使它
|
||||
// 适应窗口缩放
|
||||
FLOAT dpiX, dpiY;
|
||||
|
||||
// 工厂将返回当前的系统 DPI,这个值也将用来创建窗口
|
||||
ERenderer::getID2D1Factory()->GetDesktopDpi(&dpiX, &dpiY);
|
||||
|
||||
nWidth = static_cast<UINT>(ceil(nWidth * dpiX / 96.f));
|
||||
nHeight = static_cast<UINT>(ceil(nHeight * dpiY / 96.f));
|
||||
|
||||
// 获取屏幕分辨率
|
||||
UINT screenWidth = static_cast<UINT>(::GetSystemMetrics(SM_CXSCREEN));
|
||||
UINT screenHeight = static_cast<UINT>(::GetSystemMetrics(SM_CYSCREEN));
|
||||
// 当输入的窗口大小比分辨率大时,给出警告
|
||||
WARN_IF(screenWidth < nWidth || screenHeight < nHeight, "The window is larger than screen!");
|
||||
// 取最小值
|
||||
nWidth = min(nWidth, screenWidth);
|
||||
nHeight = min(nHeight, screenHeight);
|
||||
|
||||
// 创建窗口样式
|
||||
DWORD dwStyle = WS_OVERLAPPED | WS_SYSMENU;
|
||||
if (!bNoMiniSize)
|
||||
{
|
||||
dwStyle |= WS_MINIMIZEBOX;
|
||||
}
|
||||
// 创建窗口
|
||||
s_HWnd = CreateWindow(
|
||||
L"Easy2DApp",
|
||||
sTitle,
|
||||
dwStyle,
|
||||
0, 0, nWidth, nHeight,
|
||||
NULL,
|
||||
NULL,
|
||||
HINST_THISCOMPONENT,
|
||||
NULL
|
||||
);
|
||||
|
||||
HRESULT hr = s_HWnd ? S_OK : E_FAIL;
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 禁用输入法
|
||||
EWindow::setTypewritingEnable(false);
|
||||
// 设置窗口置顶
|
||||
if (bTopMost)
|
||||
{
|
||||
::SetWindowPos(s_HWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||
}
|
||||
// 查找是否存在控制台
|
||||
HWND hwnd = ::GetConsoleWindow();
|
||||
if (hwnd)
|
||||
{
|
||||
// 禁用控制台关闭按钮
|
||||
HMENU hmenu = ::GetSystemMenu(hwnd, FALSE);
|
||||
::RemoveMenu(hmenu, SC_CLOSE, MF_BYCOMMAND);
|
||||
// 默认隐藏控制台
|
||||
if (!s_bShowConsole)
|
||||
{
|
||||
::ShowWindow(hwnd, SW_HIDE);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
UnregisterClass(L"Easy2DApp", HINST_THISCOMPONENT);
|
||||
}
|
||||
|
||||
if (FAILED(hr))
|
||||
{
|
||||
MessageBox(nullptr, L"Create Window Failed!", L"Error", MB_OK);
|
||||
}
|
||||
|
||||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
||||
void e2d::EWindow::__uninit()
|
||||
{
|
||||
if (::GetConsoleWindow())
|
||||
{
|
||||
::FreeConsole();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EWindow::__poll()
|
||||
{
|
||||
static MSG msg;
|
||||
|
||||
while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
||||
{
|
||||
::TranslateMessage(&msg);
|
||||
::DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
float e2d::EWindow::getWidth()
|
||||
{
|
||||
return ERenderer::getRenderTarget()->GetSize().width;
|
||||
}
|
||||
|
||||
float e2d::EWindow::getHeight()
|
||||
{
|
||||
return ERenderer::getRenderTarget()->GetSize().height;
|
||||
}
|
||||
|
||||
e2d::ESize e2d::EWindow::getSize()
|
||||
{
|
||||
D2D1_SIZE_F size = ERenderer::getRenderTarget()->GetSize();
|
||||
return ESize(size.width, size.height);
|
||||
}
|
||||
|
||||
HWND e2d::EWindow::getHWnd()
|
||||
{
|
||||
return s_HWnd;
|
||||
}
|
||||
|
||||
void e2d::EWindow::setSize(UINT32 width, UINT32 height)
|
||||
{
|
||||
// 获取屏幕分辨率
|
||||
int screenWidth = ::GetSystemMetrics(SM_CXSCREEN);
|
||||
int screenHeight = ::GetSystemMetrics(SM_CYSCREEN);
|
||||
// 获取窗口大小(包含菜单栏)
|
||||
tagRECT rcWindow;
|
||||
::GetWindowRect(s_HWnd, &rcWindow);
|
||||
// 获取客户区大小
|
||||
tagRECT rcClient;
|
||||
::GetClientRect(s_HWnd, &rcClient);
|
||||
// 计算边框大小
|
||||
width += (rcWindow.right - rcWindow.left) - (rcClient.right - rcClient.left);
|
||||
height += (rcWindow.bottom - rcWindow.top) - (rcClient.bottom - rcClient.top);
|
||||
// 修改窗口大小,并设置窗口在屏幕居中
|
||||
::MoveWindow(s_HWnd, (screenWidth - width) / 2, (screenHeight - height) / 2, width, height, TRUE);
|
||||
}
|
||||
|
||||
void e2d::EWindow::setTitle(const EString &title)
|
||||
{
|
||||
// 设置窗口标题
|
||||
SetWindowText(s_HWnd, title);
|
||||
}
|
||||
|
||||
e2d::EString e2d::EWindow::getTitle()
|
||||
{
|
||||
wchar_t wszTitle[MAX_PATH] = { 0 };
|
||||
::GetWindowText(s_HWnd, wszTitle, MAX_PATH);
|
||||
return wszTitle;
|
||||
}
|
||||
|
||||
void e2d::EWindow::showConsole(bool show /* = true */)
|
||||
{
|
||||
s_bShowConsole = show;
|
||||
// 查找已存在的控制台句柄
|
||||
HWND hwnd = ::GetConsoleWindow();
|
||||
// 关闭控制台
|
||||
if (show)
|
||||
{
|
||||
if (hwnd)
|
||||
{
|
||||
::ShowWindow(hwnd, SW_SHOWNORMAL);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 显示一个新控制台
|
||||
if (::AllocConsole())
|
||||
{
|
||||
hwnd = ::GetConsoleWindow();
|
||||
// 重定向输入输出
|
||||
FILE * stdoutStream, * stdinStream, * stderrStream;
|
||||
freopen_s(&stdoutStream, "conout$", "w+t", stdout);
|
||||
freopen_s(&stdinStream, "conin$", "r+t", stdin);
|
||||
freopen_s(&stderrStream, "conerr$", "w+t", stderr);
|
||||
// 禁用控制台关闭按钮
|
||||
HMENU hmenu = ::GetSystemMenu(hwnd, FALSE);
|
||||
::RemoveMenu(hmenu, SC_CLOSE, MF_BYCOMMAND);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox(nullptr, L"Alloc Console Failed!", L"Error", MB_OK);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hwnd)
|
||||
{
|
||||
::ShowWindow(hwnd, SW_HIDE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EWindow::hideWindow()
|
||||
{
|
||||
::ShowWindow(s_HWnd, SW_HIDE);
|
||||
}
|
||||
|
||||
void e2d::EWindow::showWindow()
|
||||
{
|
||||
::ShowWindow(s_HWnd, SW_SHOWNORMAL);
|
||||
}
|
||||
|
||||
void e2d::EWindow::setTypewritingEnable(bool bEnable)
|
||||
{
|
||||
static HIMC hImc = nullptr;
|
||||
|
||||
if (bEnable)
|
||||
{
|
||||
if (hImc != nullptr)
|
||||
{
|
||||
::ImmAssociateContext(EWindow::getHWnd(), hImc);
|
||||
hImc = nullptr;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hImc == nullptr)
|
||||
{
|
||||
hImc = ::ImmAssociateContext(EWindow::getHWnd(), nullptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
LRESULT e2d::EWindow::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
LRESULT result = 0;
|
||||
|
||||
switch (message)
|
||||
{
|
||||
// 处理窗口大小变化消息
|
||||
case WM_SIZE:
|
||||
{
|
||||
UINT width = LOWORD(lParam);
|
||||
UINT height = HIWORD(lParam);
|
||||
// 如果程序接收到一个 WM_SIZE 消息,这个方法将调整渲染
|
||||
// 目标适当。它可能会调用失败,但是这里可以忽略有可能的
|
||||
// 错误,因为这个错误将在下一次调用 EndDraw 时产生
|
||||
ERenderer::getRenderTarget()->Resize(D2D1::SizeU(width, height));
|
||||
}
|
||||
break;
|
||||
|
||||
// 处理分辨率变化消息
|
||||
case WM_DISPLAYCHANGE:
|
||||
{
|
||||
// 重绘客户区
|
||||
InvalidateRect(hWnd, NULL, FALSE);
|
||||
}
|
||||
result = 0;
|
||||
break;
|
||||
|
||||
// 重绘窗口
|
||||
case WM_PAINT:
|
||||
{
|
||||
e2d::ERenderer::__render();
|
||||
ValidateRect(hWnd, NULL);
|
||||
}
|
||||
result = 0;
|
||||
break;
|
||||
|
||||
// 窗口关闭消息
|
||||
case WM_CLOSE:
|
||||
{
|
||||
e2d::EScene * pCurrentScene = e2d::ESceneManager::getCurrentScene();
|
||||
if (!pCurrentScene || pCurrentScene->onCloseWindow())
|
||||
{
|
||||
e2d::EGame::quit();
|
||||
DestroyWindow(hWnd);
|
||||
}
|
||||
}
|
||||
result = 0;
|
||||
break;
|
||||
|
||||
case WM_DESTROY:
|
||||
{
|
||||
PostQuitMessage(0);
|
||||
}
|
||||
result = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
result = DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
@ -1,118 +0,0 @@
|
|||
#include "..\ecommon.h"
|
||||
|
||||
e2d::ESpriteFrame::ESpriteFrame()
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_fSourceClipWidth(0)
|
||||
, m_fSourceClipHeight(0)
|
||||
, m_pTexture(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::ESpriteFrame::ESpriteFrame(ETexture * texture)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_fSourceClipWidth(0)
|
||||
, m_fSourceClipHeight(0)
|
||||
, m_pTexture(nullptr)
|
||||
{
|
||||
_setTexture(texture);
|
||||
}
|
||||
|
||||
e2d::ESpriteFrame::ESpriteFrame(const EString & imageFileName)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_fSourceClipWidth(0)
|
||||
, m_fSourceClipHeight(0)
|
||||
, m_pTexture(nullptr)
|
||||
{
|
||||
_setTexture(new ETexture(imageFileName));
|
||||
}
|
||||
|
||||
e2d::ESpriteFrame::ESpriteFrame(LPCTSTR resourceName, LPCTSTR resourceType)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_fSourceClipWidth(0)
|
||||
, m_fSourceClipHeight(0)
|
||||
, m_pTexture(nullptr)
|
||||
{
|
||||
_setTexture(new ETexture(resourceName, resourceType));
|
||||
}
|
||||
|
||||
e2d::ESpriteFrame::ESpriteFrame(ETexture * texture, float x, float y, float width, float height)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_fSourceClipWidth(0)
|
||||
, m_fSourceClipHeight(0)
|
||||
, m_pTexture(nullptr)
|
||||
{
|
||||
_setTexture(texture);
|
||||
_clipTexture(x, y, width, height);
|
||||
}
|
||||
|
||||
e2d::ESpriteFrame::ESpriteFrame(const EString & imageFileName, float x, float y, float width, float height)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_fSourceClipWidth(0)
|
||||
, m_fSourceClipHeight(0)
|
||||
, m_pTexture(nullptr)
|
||||
{
|
||||
_setTexture(new ETexture(imageFileName));
|
||||
_clipTexture(x, y, width, height);
|
||||
}
|
||||
|
||||
e2d::ESpriteFrame::ESpriteFrame(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_pTexture(nullptr)
|
||||
{
|
||||
_setTexture(new ETexture(resourceName, resourceType));
|
||||
_clipTexture(x, y, width, height);
|
||||
}
|
||||
|
||||
e2d::ESpriteFrame::~ESpriteFrame()
|
||||
{
|
||||
SafeRelease(&m_pTexture);
|
||||
}
|
||||
|
||||
float e2d::ESpriteFrame::getWidth() const
|
||||
{
|
||||
return m_fSourceClipWidth;
|
||||
}
|
||||
|
||||
float e2d::ESpriteFrame::getHeight() const
|
||||
{
|
||||
return m_fSourceClipHeight;
|
||||
}
|
||||
|
||||
e2d::ETexture * e2d::ESpriteFrame::getTexture() const
|
||||
{
|
||||
return m_pTexture;
|
||||
}
|
||||
|
||||
void e2d::ESpriteFrame::_setTexture(ETexture * texture)
|
||||
{
|
||||
if (texture)
|
||||
{
|
||||
SafeRelease(&m_pTexture);
|
||||
m_pTexture = texture;
|
||||
m_pTexture->retain();
|
||||
m_fSourceClipX = 0;
|
||||
m_fSourceClipY = 0;
|
||||
m_fSourceClipWidth = texture->getSourceWidth();
|
||||
m_fSourceClipHeight = texture->getSourceHeight();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ESpriteFrame::_clipTexture(float x, float y, float width, float height)
|
||||
{
|
||||
if (m_pTexture)
|
||||
{
|
||||
m_fSourceClipX = min(max(x, 0), m_pTexture->getSourceWidth());
|
||||
m_fSourceClipY = min(max(y, 0), m_pTexture->getSourceHeight());
|
||||
m_fSourceClipWidth = min(max(width, 0), m_pTexture->getSourceWidth() - m_fSourceClipX);
|
||||
m_fSourceClipHeight = min(max(height, 0), m_pTexture->getSourceHeight() - m_fSourceClipY);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
#include "..\enodes.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
e2d::EFont::EFont()
|
||||
: m_pTextFormat(nullptr)
|
||||
|
|
@ -84,7 +83,7 @@ void e2d::EFont::_initTextFormat()
|
|||
{
|
||||
SafeReleaseInterface(&m_pTextFormat);
|
||||
|
||||
HRESULT hr = GetDirectWriteFactory()->CreateTextFormat(
|
||||
HRESULT hr = ERenderer::getIDWriteFactory()->CreateTextFormat(
|
||||
m_sFontFamily,
|
||||
NULL,
|
||||
DWRITE_FONT_WEIGHT(m_FontWeight),
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
#include "..\enodes.h"
|
||||
#include "..\Win\winbase.h"
|
||||
#include <map>
|
||||
|
||||
|
||||
|
|
@ -25,51 +24,51 @@ static std::map<size_t, ID2D1Bitmap*> s_mBitmapsFromFile;
|
|||
static std::map<ResKey, ID2D1Bitmap*> s_mBitmapsFromResource;
|
||||
|
||||
|
||||
e2d::ETexture::ETexture()
|
||||
e2d::EImage::EImage()
|
||||
: m_pBitmap(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::ETexture::ETexture(const EString & fileName)
|
||||
e2d::EImage::EImage(LPCTSTR fileName)
|
||||
{
|
||||
this->loadFromFile(fileName);
|
||||
}
|
||||
|
||||
e2d::ETexture::ETexture(LPCTSTR resourceName, LPCTSTR resourceType)
|
||||
e2d::EImage::EImage(LPCTSTR resourceName, LPCTSTR resourceType)
|
||||
{
|
||||
this->loadFromResource(resourceName, resourceType);
|
||||
}
|
||||
|
||||
e2d::ETexture::~ETexture()
|
||||
e2d::EImage::~EImage()
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::ETexture::loadFromFile(const EString & fileName)
|
||||
void e2d::EImage::loadFromFile(const EString & fileName)
|
||||
{
|
||||
WARN_IF(fileName.isEmpty(), "ETexture cannot load bitmap from NULL file name.");
|
||||
WARN_IF(fileName.isEmpty(), "EImage cannot load bitmap from NULL file name.");
|
||||
|
||||
if (fileName.isEmpty())
|
||||
return;
|
||||
|
||||
if (!e2d::ETexture::preload(fileName))
|
||||
if (!e2d::EImage::preload(fileName))
|
||||
{
|
||||
WARN_IF(true, "Load ETexture from file failed!");
|
||||
WARN_IF(true, "Load EImage from file failed!");
|
||||
return;
|
||||
}
|
||||
|
||||
m_pBitmap = s_mBitmapsFromFile.at(fileName.hash());
|
||||
}
|
||||
|
||||
void e2d::ETexture::loadFromResource(LPCTSTR resourceName, LPCTSTR resourceType)
|
||||
void e2d::EImage::loadFromResource(LPCTSTR resourceName, LPCTSTR resourceType)
|
||||
{
|
||||
WARN_IF(!resourceName || !resourceType, "ETexture cannot load bitmap from NULL resource.");
|
||||
WARN_IF(!resourceName || !resourceType, "EImage cannot load bitmap from NULL resource.");
|
||||
|
||||
if (!resourceName || !resourceType)
|
||||
return;
|
||||
|
||||
if (!e2d::ETexture::preload(resourceName, resourceType))
|
||||
if (!e2d::EImage::preload(resourceName, resourceType))
|
||||
{
|
||||
WARN_IF(true, "Load ETexture from resource failed!");
|
||||
WARN_IF(true, "Load EImage from resource failed!");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -81,7 +80,7 @@ void e2d::ETexture::loadFromResource(LPCTSTR resourceName, LPCTSTR resourceType)
|
|||
m_pBitmap = s_mBitmapsFromResource.at(key);
|
||||
}
|
||||
|
||||
float e2d::ETexture::getSourceWidth() const
|
||||
float e2d::EImage::getSourceWidth() const
|
||||
{
|
||||
if (m_pBitmap)
|
||||
{
|
||||
|
|
@ -93,7 +92,7 @@ float e2d::ETexture::getSourceWidth() const
|
|||
}
|
||||
}
|
||||
|
||||
float e2d::ETexture::getSourceHeight() const
|
||||
float e2d::EImage::getSourceHeight() const
|
||||
{
|
||||
if (m_pBitmap)
|
||||
{
|
||||
|
|
@ -105,7 +104,7 @@ float e2d::ETexture::getSourceHeight() const
|
|||
}
|
||||
}
|
||||
|
||||
e2d::ESize e2d::ETexture::getSourceSize() const
|
||||
e2d::ESize e2d::EImage::getSourceSize() const
|
||||
{
|
||||
if (m_pBitmap)
|
||||
{
|
||||
|
|
@ -117,7 +116,7 @@ e2d::ESize e2d::ETexture::getSourceSize() const
|
|||
}
|
||||
}
|
||||
|
||||
bool e2d::ETexture::preload(const EString & fileName)
|
||||
bool e2d::EImage::preload(const EString & fileName)
|
||||
{
|
||||
if (s_mBitmapsFromFile.find(fileName.hash()) != s_mBitmapsFromFile.end())
|
||||
{
|
||||
|
|
@ -133,7 +132,7 @@ bool e2d::ETexture::preload(const EString & fileName)
|
|||
ID2D1Bitmap *pBitmap = nullptr;
|
||||
|
||||
// 创建解码器
|
||||
hr = GetImagingFactory()->CreateDecoderFromFilename(
|
||||
hr = ERenderer::getIWICImagingFactory()->CreateDecoderFromFilename(
|
||||
fileName,
|
||||
NULL,
|
||||
GENERIC_READ,
|
||||
|
|
@ -151,7 +150,7 @@ bool e2d::ETexture::preload(const EString & fileName)
|
|||
{
|
||||
// 创建图片格式转换器
|
||||
// (DXGI_FORMAT_B8G8R8A8_UNORM + D2D1_ALPHA_MODE_PREMULTIPLIED).
|
||||
hr = GetImagingFactory()->CreateFormatConverter(&pConverter);
|
||||
hr = ERenderer::getIWICImagingFactory()->CreateFormatConverter(&pConverter);
|
||||
}
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
|
|
@ -168,7 +167,7 @@ bool e2d::ETexture::preload(const EString & fileName)
|
|||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 从 WIC 位图创建一个 Direct2D 位图
|
||||
hr = GetRenderTarget()->CreateBitmapFromWicBitmap(
|
||||
hr = ERenderer::getRenderTarget()->CreateBitmapFromWicBitmap(
|
||||
pConverter,
|
||||
NULL,
|
||||
&pBitmap
|
||||
|
|
@ -193,7 +192,7 @@ bool e2d::ETexture::preload(const EString & fileName)
|
|||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
||||
bool e2d::ETexture::preload(LPCTSTR resourceName, LPCTSTR resourceType)
|
||||
bool e2d::EImage::preload(LPCTSTR resourceName, LPCTSTR resourceType)
|
||||
{
|
||||
std::hash<LPCTSTR> h;
|
||||
|
||||
|
|
@ -251,7 +250,7 @@ bool e2d::ETexture::preload(LPCTSTR resourceName, LPCTSTR resourceType)
|
|||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 创建 WIC 流
|
||||
hr = GetImagingFactory()->CreateStream(&pStream);
|
||||
hr = ERenderer::getIWICImagingFactory()->CreateStream(&pStream);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
|
|
@ -266,7 +265,7 @@ bool e2d::ETexture::preload(LPCTSTR resourceName, LPCTSTR resourceType)
|
|||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 创建流的解码器
|
||||
hr = GetImagingFactory()->CreateDecoderFromStream(
|
||||
hr = ERenderer::getIWICImagingFactory()->CreateDecoderFromStream(
|
||||
pStream,
|
||||
NULL,
|
||||
WICDecodeMetadataCacheOnLoad,
|
||||
|
|
@ -284,7 +283,7 @@ bool e2d::ETexture::preload(LPCTSTR resourceName, LPCTSTR resourceType)
|
|||
{
|
||||
// 创建图片格式转换器
|
||||
// (DXGI_FORMAT_B8G8R8A8_UNORM + D2D1_ALPHA_MODE_PREMULTIPLIED).
|
||||
hr = GetImagingFactory()->CreateFormatConverter(&pConverter);
|
||||
hr = ERenderer::getIWICImagingFactory()->CreateFormatConverter(&pConverter);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
|
|
@ -303,7 +302,7 @@ bool e2d::ETexture::preload(LPCTSTR resourceName, LPCTSTR resourceType)
|
|||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 从 WIC 位图创建一个 Direct2D 位图
|
||||
hr = GetRenderTarget()->CreateBitmapFromWicBitmap(
|
||||
hr = ERenderer::getRenderTarget()->CreateBitmapFromWicBitmap(
|
||||
pConverter,
|
||||
NULL,
|
||||
&pBitmap
|
||||
|
|
@ -335,7 +334,7 @@ bool e2d::ETexture::preload(LPCTSTR resourceName, LPCTSTR resourceType)
|
|||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
||||
void e2d::ETexture::clearCache()
|
||||
void e2d::EImage::clearCache()
|
||||
{
|
||||
for (auto child = s_mBitmapsFromFile.begin(); child != s_mBitmapsFromFile.end(); child++)
|
||||
{
|
||||
|
|
@ -349,7 +348,7 @@ void e2d::ETexture::clearCache()
|
|||
s_mBitmapsFromResource.clear();
|
||||
}
|
||||
|
||||
ID2D1Bitmap * e2d::ETexture::_getBitmap()
|
||||
ID2D1Bitmap * e2d::EImage::_getBitmap()
|
||||
{
|
||||
return m_pBitmap;
|
||||
}
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
#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);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,7 +3,6 @@
|
|||
#include "..\emanagers.h"
|
||||
#include "..\etools.h"
|
||||
#include "..\eactions.h"
|
||||
#include "..\Win\winbase.h"
|
||||
#include <algorithm>
|
||||
|
||||
e2d::EScene::EScene()
|
||||
|
|
@ -16,7 +15,7 @@ e2d::EScene::EScene()
|
|||
m_pRoot->_onEnter();
|
||||
m_pRoot->_setParentScene(this);
|
||||
m_pRoot->setPivot(0, 0);
|
||||
m_pRoot->_setSize(EApp::getWidth(), EApp::getHeight());
|
||||
m_pRoot->_setSize(EWindow::getWidth(), EWindow::getHeight());
|
||||
}
|
||||
|
||||
e2d::EScene::~EScene()
|
||||
|
|
@ -24,43 +23,27 @@ e2d::EScene::~EScene()
|
|||
SafeRelease(&m_pRoot);
|
||||
}
|
||||
|
||||
void e2d::EScene::onEnter()
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::EScene::onExit()
|
||||
{
|
||||
}
|
||||
|
||||
bool e2d::EScene::onActivate()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::EScene::onInactive()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::EScene::onCloseWindow()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void e2d::EScene::_render()
|
||||
{
|
||||
// ·ÃÎʸù½Úµã
|
||||
m_pRoot->_update();
|
||||
m_pRoot->_render();
|
||||
|
||||
if (m_bGeometryVisiable)
|
||||
{
|
||||
// 恢复矩阵转换
|
||||
GetRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity());
|
||||
ERenderer::getRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity());
|
||||
// 绘制所有几何图形
|
||||
m_pRoot->_drawGeometry();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EScene::_update()
|
||||
{
|
||||
// 执行 onUpdate 函数
|
||||
this->onUpdate();
|
||||
// 更新根节点
|
||||
m_pRoot->_update();
|
||||
}
|
||||
|
||||
void e2d::EScene::add(ENode * child, int order /* = 0 */)
|
||||
{
|
||||
m_pRoot->addChild(child, order);
|
||||
|
|
@ -76,7 +59,7 @@ void e2d::EScene::remove(const EString &childName)
|
|||
return m_pRoot->removeChild(childName);
|
||||
}
|
||||
|
||||
std::vector<e2d::ENode*>& e2d::EScene::getChildren()
|
||||
std::vector<e2d::ENode*> e2d::EScene::getChildren()
|
||||
{
|
||||
return m_pRoot->m_vChildren;
|
||||
}
|
||||
|
|
@ -22,7 +22,7 @@ EString::EString(const wchar_t *str)
|
|||
{
|
||||
if (str)
|
||||
{
|
||||
_size = wcslen(str);
|
||||
_size = static_cast<int>(wcslen(str));
|
||||
_string = new wchar_t[_size + 1];
|
||||
wcscpy_s(_string, _size + 1, str);
|
||||
}
|
||||
|
|
@ -80,7 +80,7 @@ EString &EString::operator=(const wchar_t *str)
|
|||
if (str)
|
||||
{
|
||||
delete[] _string;
|
||||
_size = wcslen(str);
|
||||
_size = static_cast<int>(wcslen(str));
|
||||
_string = new wchar_t[_size + 1];
|
||||
wcscpy_s(_string, _size + 1, str);
|
||||
}
|
||||
|
|
@ -214,7 +214,7 @@ EString &EString::operator+=(const wchar_t *str)
|
|||
{
|
||||
if (!str) return *this;
|
||||
|
||||
int d_size = wcslen(str);
|
||||
int d_size = static_cast<int>(wcslen(str));
|
||||
if (d_size == 0) return *this;
|
||||
|
||||
wchar_t *str_temp = new wchar_t[_size + d_size + 1];
|
||||
|
|
@ -326,7 +326,7 @@ std::wistream & e2d::operator>>(std::wistream &cin, EString &str)
|
|||
str._string = new wchar_t[limit_string_size];
|
||||
|
||||
cin >> std::setw(limit_string_size) >> str._string;
|
||||
str._size = wcslen(str._string);
|
||||
str._size = static_cast<int>(wcslen(str._string));
|
||||
return cin;
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
#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,6 +1,5 @@
|
|||
#include "..\egeometry.h"
|
||||
#include "..\enodes.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
e2d::ECircle::ECircle()
|
||||
: m_pD2dCircle(nullptr)
|
||||
|
|
@ -35,7 +34,7 @@ void e2d::ECircle::_setCircle(EPoint center, float radius)
|
|||
{
|
||||
SafeReleaseInterface(&m_pD2dCircle);
|
||||
|
||||
GetFactory()->CreateEllipseGeometry(
|
||||
ERenderer::getID2D1Factory()->CreateEllipseGeometry(
|
||||
D2D1::Ellipse(
|
||||
D2D1::Point2F(
|
||||
center.x,
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
#include "..\egeometry.h"
|
||||
#include "..\enodes.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
e2d::EEllipse::EEllipse()
|
||||
: m_pD2dEllipse(nullptr)
|
||||
|
|
@ -35,7 +34,7 @@ void e2d::EEllipse::_setEllipse(EPoint center, float radiusX, float radiusY)
|
|||
{
|
||||
SafeReleaseInterface(&m_pD2dEllipse);
|
||||
|
||||
GetFactory()->CreateEllipseGeometry(
|
||||
ERenderer::getID2D1Factory()->CreateEllipseGeometry(
|
||||
D2D1::Ellipse(
|
||||
D2D1::Point2F(
|
||||
center.x,
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
#include "..\egeometry.h"
|
||||
#include "..\emanagers.h"
|
||||
#include "..\enodes.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
e2d::EGeometry::EGeometry()
|
||||
: m_nCategoryBitmask(0)
|
||||
|
|
@ -63,21 +62,20 @@ void e2d::EGeometry::_render()
|
|||
{
|
||||
if (m_pTransformedGeometry)
|
||||
{
|
||||
ID2D1SolidColorBrush * pBrush = ERenderer::getSolidColorBrush();
|
||||
// 눼쉔뺌岬
|
||||
GetRenderTarget()->CreateSolidColorBrush(
|
||||
ERenderer::getRenderTarget()->CreateSolidColorBrush(
|
||||
D2D1::ColorF(
|
||||
m_nColor,
|
||||
m_fOpacity),
|
||||
&GetSolidColorBrush()
|
||||
&pBrush
|
||||
);
|
||||
// 삥齡섯부近榴
|
||||
GetRenderTarget()->DrawGeometry(m_pTransformedGeometry, GetSolidColorBrush());
|
||||
// 释放临时资源
|
||||
SafeReleaseInterface(&GetSolidColorBrush());
|
||||
ERenderer::getRenderTarget()->DrawGeometry(m_pTransformedGeometry, pBrush);
|
||||
}
|
||||
}
|
||||
|
||||
e2d::EPhysicsMsg::INTERSECT_RELATION e2d::EGeometry::_intersectWith(EGeometry * pGeometry)
|
||||
e2d::EPhysicsEvent::INTERSECT_RELATION e2d::EGeometry::_intersectWith(EGeometry * pGeometry)
|
||||
{
|
||||
if (m_pTransformedGeometry && pGeometry->m_pTransformedGeometry)
|
||||
{
|
||||
|
|
@ -89,9 +87,9 @@ e2d::EPhysicsMsg::INTERSECT_RELATION e2d::EGeometry::_intersectWith(EGeometry *
|
|||
&relation
|
||||
);
|
||||
|
||||
return EPhysicsMsg::INTERSECT_RELATION(relation);
|
||||
return EPhysicsEvent::INTERSECT_RELATION(relation);
|
||||
}
|
||||
return EPhysicsMsg::UNKNOWN;
|
||||
return EPhysicsEvent::UNKNOWN;
|
||||
}
|
||||
|
||||
void e2d::EGeometry::_transform()
|
||||
|
|
@ -102,7 +100,7 @@ void e2d::EGeometry::_transform()
|
|||
SafeReleaseInterface(&m_pTransformedGeometry);
|
||||
|
||||
// 몽앴만쌘듐瘻뻣섯부暠近
|
||||
GetFactory()->CreateTransformedGeometry(
|
||||
ERenderer::getID2D1Factory()->CreateTransformedGeometry(
|
||||
_getD2dGeometry(),
|
||||
m_pParentNode->m_MatriFinal,
|
||||
&m_pTransformedGeometry
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
#include "..\egeometry.h"
|
||||
#include "..\enodes.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
e2d::ERectangle::ERectangle()
|
||||
: m_pD2dRectangle(nullptr)
|
||||
|
|
@ -33,7 +32,7 @@ void e2d::ERectangle::_setRect(float left, float top, float right, float bottom)
|
|||
{
|
||||
SafeReleaseInterface(&m_pD2dRectangle);
|
||||
|
||||
GetFactory()->CreateRectangleGeometry(
|
||||
ERenderer::getID2D1Factory()->CreateRectangleGeometry(
|
||||
D2D1::RectF(left, top, right, bottom),
|
||||
&m_pD2dRectangle
|
||||
);
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
#include "..\elisteners.h"
|
||||
#include "..\emanagers.h"
|
||||
|
||||
e2d::EListenerKeyboard::EListenerKeyboard()
|
||||
: EListener()
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerKeyboard::EListenerKeyboard(const EString & name)
|
||||
: EListener(name)
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerKeyboard::EListenerKeyboard(const KEY_LISTENER_CALLBACK & callback)
|
||||
: EListener()
|
||||
, m_Callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerKeyboard::EListenerKeyboard(const EString & name, const KEY_LISTENER_CALLBACK & callback)
|
||||
: EListener(name)
|
||||
, m_Callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::EListenerKeyboard::_callOn()
|
||||
{
|
||||
if (m_Callback)
|
||||
{
|
||||
m_Callback();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EListenerKeyboard::setCallback(const KEY_LISTENER_CALLBACK & callback)
|
||||
{
|
||||
m_Callback = callback;
|
||||
}
|
||||
|
||||
void e2d::EListenerKeyboard::bindWith(EScene * pParentScene)
|
||||
{
|
||||
WARN_IF(m_pParentNode != nullptr, "A listener cannot bind with two object.");
|
||||
|
||||
if (pParentScene)
|
||||
{
|
||||
EMsgManager::bindListener(this, pParentScene);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EListenerKeyboard::bindWith(ENode * pParentNode)
|
||||
{
|
||||
WARN_IF(m_pParentNode != nullptr, "A listener cannot bind with two object.");
|
||||
|
||||
if (pParentNode)
|
||||
{
|
||||
EMsgManager::bindListener(this, pParentNode);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
#include "..\elisteners.h"
|
||||
|
||||
e2d::EListenerKeyboardPress::EListenerKeyboardPress()
|
||||
: EListenerKeyboard()
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerKeyboardPress::EListenerKeyboardPress(const EString & name)
|
||||
: EListenerKeyboard(name)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerKeyboardPress::EListenerKeyboardPress(const KEY_LISTENER_CALLBACK & callback)
|
||||
: EListenerKeyboard(callback)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerKeyboardPress::EListenerKeyboardPress(const EString & name, const KEY_LISTENER_CALLBACK & callback)
|
||||
: EListenerKeyboard(name, callback)
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::EListenerKeyboardPress::_callOn()
|
||||
{
|
||||
if (EKeyboardMsg::getMsg() == EKeyboardMsg::KEY_DOWN)
|
||||
{
|
||||
if (m_Callback)
|
||||
{
|
||||
m_Callback();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
#include "..\elisteners.h"
|
||||
#include "..\emanagers.h"
|
||||
|
||||
e2d::EListenerMouse::EListenerMouse()
|
||||
: EListener()
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerMouse::EListenerMouse(const EString & name)
|
||||
: EListener(name)
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerMouse::EListenerMouse(const MOUSE_LISTENER_CALLBACK & callback)
|
||||
: EListener()
|
||||
, m_Callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerMouse::EListenerMouse(const EString & name, const MOUSE_LISTENER_CALLBACK & callback)
|
||||
: EListener(name)
|
||||
, m_Callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::EListenerMouse::_callOn()
|
||||
{
|
||||
if (m_Callback)
|
||||
{
|
||||
m_Callback();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EListenerMouse::setCallback(const MOUSE_LISTENER_CALLBACK & callback)
|
||||
{
|
||||
m_Callback = callback;
|
||||
}
|
||||
|
||||
void e2d::EListenerMouse::bindWith(EScene * pParentScene)
|
||||
{
|
||||
WARN_IF(m_pParentNode != nullptr, "A listener cannot bind with two object.");
|
||||
|
||||
if (pParentScene)
|
||||
{
|
||||
EMsgManager::bindListener(this, pParentScene);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EListenerMouse::bindWith(ENode * pParentNode)
|
||||
{
|
||||
WARN_IF(m_pParentNode != nullptr, "A listener cannot bind with two object.");
|
||||
|
||||
if (pParentNode != nullptr)
|
||||
{
|
||||
EMsgManager::bindListener(this, pParentNode);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
#include "..\elisteners.h"
|
||||
|
||||
e2d::EListenerMouseClick::EListenerMouseClick()
|
||||
: EListenerMouse()
|
||||
, m_bPressed(false)
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerMouseClick::EListenerMouseClick(const EString & name)
|
||||
: EListenerMouse(name)
|
||||
, m_bPressed(false)
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerMouseClick::EListenerMouseClick(const MOUSE_CLICK_LISTENER_CALLBACK & callback)
|
||||
: EListenerMouse()
|
||||
, m_Callback(callback)
|
||||
, m_bPressed(false)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerMouseClick::EListenerMouseClick(const EString & name, const MOUSE_CLICK_LISTENER_CALLBACK & callback)
|
||||
: EListenerMouse(name)
|
||||
, m_Callback(callback)
|
||||
, m_bPressed(false)
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::EListenerMouseClick::_callOn()
|
||||
{
|
||||
if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DOWN ||
|
||||
EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DBLCLK)
|
||||
{
|
||||
m_bPressed = true;
|
||||
}
|
||||
else if (m_bPressed && EMouseMsg::getMsg() == EMouseMsg::LBUTTON_UP)
|
||||
{
|
||||
if (m_Callback)
|
||||
{
|
||||
m_Callback(EMouseMsg::getPos());
|
||||
}
|
||||
m_bPressed = false;
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EListenerMouseClick::setCallback(const MOUSE_CLICK_LISTENER_CALLBACK & callback)
|
||||
{
|
||||
m_Callback = callback;
|
||||
}
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
#include "..\elisteners.h"
|
||||
|
||||
e2d::EListenerMouseDoubleClick::EListenerMouseDoubleClick()
|
||||
: EListenerMouse()
|
||||
, m_bPressed(false)
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerMouseDoubleClick::EListenerMouseDoubleClick(const EString & name)
|
||||
: EListenerMouse(name)
|
||||
, m_bPressed(false)
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerMouseDoubleClick::EListenerMouseDoubleClick(const MOUSE_DBLCLK_LISTENER_CALLBACK & callback)
|
||||
: EListenerMouse()
|
||||
, m_Callback(callback)
|
||||
, m_bPressed(false)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerMouseDoubleClick::EListenerMouseDoubleClick(const EString & name, const MOUSE_DBLCLK_LISTENER_CALLBACK & callback)
|
||||
: EListenerMouse(name)
|
||||
, m_Callback(callback)
|
||||
, m_bPressed(false)
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::EListenerMouseDoubleClick::_callOn()
|
||||
{
|
||||
if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DOWN)
|
||||
{
|
||||
m_bPressed = false;
|
||||
}
|
||||
else if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DBLCLK)
|
||||
{
|
||||
m_bPressed = true;
|
||||
}
|
||||
else if (m_bPressed && EMouseMsg::getMsg() == EMouseMsg::LBUTTON_UP)
|
||||
{
|
||||
if (m_Callback)
|
||||
{
|
||||
m_Callback(EMouseMsg::getPos());
|
||||
}
|
||||
m_bPressed = false;
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EListenerMouseDoubleClick::setCallback(const MOUSE_DBLCLK_LISTENER_CALLBACK & callback)
|
||||
{
|
||||
m_Callback = callback;
|
||||
}
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
#include "..\elisteners.h"
|
||||
|
||||
e2d::EListenerMouseDrag::EListenerMouseDrag()
|
||||
: EListenerMouse()
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerMouseDrag::EListenerMouseDrag(const EString & name)
|
||||
: EListenerMouse(name)
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerMouseDrag::EListenerMouseDrag(const MOUSE_DRAG_LISTENER_CALLBACK & callback)
|
||||
: EListenerMouse()
|
||||
, m_Callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerMouseDrag::EListenerMouseDrag(const EString & name, const MOUSE_DRAG_LISTENER_CALLBACK & callback)
|
||||
: EListenerMouse(name)
|
||||
, m_Callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::EListenerMouseDrag::_callOn()
|
||||
{
|
||||
if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DOWN ||
|
||||
EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DBLCLK)
|
||||
{
|
||||
m_Begin = EMouseMsg::getPos();
|
||||
}
|
||||
else if (EMouseMsg::isLButtonDown() && EMouseMsg::getMsg() == EMouseMsg::MOVE)
|
||||
{
|
||||
if (m_Callback)
|
||||
{
|
||||
m_Callback(m_Begin, EMouseMsg::getPos());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EListenerMouseDrag::setCallback(const MOUSE_DRAG_LISTENER_CALLBACK & callback)
|
||||
{
|
||||
m_Callback = callback;
|
||||
}
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
#include "..\elisteners.h"
|
||||
|
||||
e2d::EListenerMousePress::EListenerMousePress()
|
||||
: EListenerMouse()
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerMousePress::EListenerMousePress(const EString & name)
|
||||
: EListenerMouse(name)
|
||||
, m_Callback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerMousePress::EListenerMousePress(const MOUSE_PRESS_LISTENER_CALLBACK & callback)
|
||||
: EListenerMouse()
|
||||
, m_Callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerMousePress::EListenerMousePress(const EString & name, const MOUSE_PRESS_LISTENER_CALLBACK & callback)
|
||||
: EListenerMouse(name)
|
||||
, m_Callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::EListenerMousePress::_callOn()
|
||||
{
|
||||
if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DOWN ||
|
||||
EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DBLCLK)
|
||||
{
|
||||
if (m_Callback)
|
||||
{
|
||||
m_Callback(EMouseMsg::getPos());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EListenerMousePress::setCallback(const MOUSE_PRESS_LISTENER_CALLBACK & callback)
|
||||
{
|
||||
m_Callback = callback;
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
#include "..\elisteners.h"
|
||||
#include "..\emanagers.h"
|
||||
#include "..\enodes.h"
|
||||
|
||||
e2d::EListener::EListener()
|
||||
|
|
@ -62,9 +63,9 @@ bool e2d::EListener::_isReady() const
|
|||
{
|
||||
if (m_bRunning && m_pParentNode)
|
||||
{
|
||||
if (m_pParentNode->getParentScene() == EApp::getCurrentScene())
|
||||
if (m_pParentNode->getParentScene() == ESceneManager::getCurrentScene())
|
||||
{
|
||||
if (!EApp::isPaused() || m_bAlways)
|
||||
if (!EGame::isPaused() || m_bAlways)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -14,13 +14,13 @@ e2d::EListenerPhysics::EListenerPhysics(const EString & name)
|
|||
{
|
||||
}
|
||||
|
||||
e2d::EListenerPhysics::EListenerPhysics(const PHYSICS_LISTENER_CALLBACK & callback)
|
||||
e2d::EListenerPhysics::EListenerPhysics(const PhysLsnrCallback & callback)
|
||||
: EListener()
|
||||
, m_Callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerPhysics::EListenerPhysics(const EString & name, const PHYSICS_LISTENER_CALLBACK & callback)
|
||||
e2d::EListenerPhysics::EListenerPhysics(const EString & name, const PhysLsnrCallback & callback)
|
||||
: EListener(name)
|
||||
, m_Callback(callback)
|
||||
{
|
||||
|
|
@ -34,7 +34,7 @@ void e2d::EListenerPhysics::_callOn()
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::EListenerPhysics::setCallback(const PHYSICS_LISTENER_CALLBACK & callback)
|
||||
void e2d::EListenerPhysics::setCallback(const PhysLsnrCallback & callback)
|
||||
{
|
||||
m_Callback = callback;
|
||||
}
|
||||
|
|
@ -13,13 +13,13 @@ e2d::EListenerPhysicsCollision::EListenerPhysicsCollision(const EString & name)
|
|||
{
|
||||
}
|
||||
|
||||
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision(const COLLISION_LISTENER_CALLBACK & callback)
|
||||
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision(const ClsLsnrCallback & callback)
|
||||
: EListenerPhysics()
|
||||
, m_Callback(callback)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision(const EString & name, const COLLISION_LISTENER_CALLBACK & callback)
|
||||
e2d::EListenerPhysicsCollision::EListenerPhysicsCollision(const EString & name, const ClsLsnrCallback & callback)
|
||||
: EListenerPhysics(name)
|
||||
, m_Callback(callback)
|
||||
{
|
||||
|
|
@ -27,9 +27,9 @@ e2d::EListenerPhysicsCollision::EListenerPhysicsCollision(const EString & name,
|
|||
|
||||
void e2d::EListenerPhysicsCollision::_callOn()
|
||||
{
|
||||
if (EPhysicsMsg::getMsg() == EPhysicsMsg::OVERLAP ||
|
||||
EPhysicsMsg::getMsg() == EPhysicsMsg::CONTAINS ||
|
||||
EPhysicsMsg::getMsg() == EPhysicsMsg::IS_CONTAINED)
|
||||
if (EPhysicsEvent::getMsg() == EPhysicsEvent::OVERLAP ||
|
||||
EPhysicsEvent::getMsg() == EPhysicsEvent::CONTAINS ||
|
||||
EPhysicsEvent::getMsg() == EPhysicsEvent::IS_CONTAINED)
|
||||
{
|
||||
if (m_Callback)
|
||||
{
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
#include "..\emanagers.h"
|
||||
#include "..\eactions.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
static std::vector<e2d::EAction*> s_vActions;
|
||||
|
||||
|
|
@ -17,7 +16,7 @@ void e2d::EActionManager::addAction(EAction * action)
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::EActionManager::startAllActionsBindedWith(ENode * pTargetNode)
|
||||
void e2d::EActionManager::resumeAllActionsBindedWith(ENode * pTargetNode)
|
||||
{
|
||||
if (pTargetNode)
|
||||
{
|
||||
|
|
@ -30,7 +29,7 @@ void e2d::EActionManager::startAllActionsBindedWith(ENode * pTargetNode)
|
|||
}
|
||||
for (auto child = pTargetNode->getChildren().begin(); child != pTargetNode->getChildren().end(); child++)
|
||||
{
|
||||
EActionManager::startAllActionsBindedWith((*child));
|
||||
EActionManager::resumeAllActionsBindedWith((*child));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -71,7 +70,7 @@ void e2d::EActionManager::stopAllActionsBindedWith(ENode * pTargetNode)
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::EActionManager::_clearAllActionsBindedWith(ENode * pTargetNode)
|
||||
void e2d::EActionManager::__clearAllActionsBindedWith(ENode * pTargetNode)
|
||||
{
|
||||
if (pTargetNode)
|
||||
{
|
||||
|
|
@ -91,17 +90,17 @@ void e2d::EActionManager::_clearAllActionsBindedWith(ENode * pTargetNode)
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::EActionManager::startAllActions()
|
||||
void e2d::EActionManager::resumeAllActions()
|
||||
{
|
||||
for (auto child = EApp::getCurrentScene()->getChildren().begin(); child != EApp::getCurrentScene()->getChildren().end(); child++)
|
||||
for (auto child = ESceneManager::getCurrentScene()->getChildren().begin(); child != ESceneManager::getCurrentScene()->getChildren().end(); child++)
|
||||
{
|
||||
EActionManager::startAllActionsBindedWith((*child));
|
||||
EActionManager::resumeAllActionsBindedWith((*child));
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EActionManager::pauseAllActions()
|
||||
{
|
||||
for (auto child = EApp::getCurrentScene()->getChildren().begin(); child != EApp::getCurrentScene()->getChildren().end(); child++)
|
||||
for (auto child = ESceneManager::getCurrentScene()->getChildren().begin(); child != ESceneManager::getCurrentScene()->getChildren().end(); child++)
|
||||
{
|
||||
EActionManager::pauseAllActionsBindedWith((*child));
|
||||
}
|
||||
|
|
@ -109,18 +108,13 @@ void e2d::EActionManager::pauseAllActions()
|
|||
|
||||
void e2d::EActionManager::stopAllActions()
|
||||
{
|
||||
for (auto child = EApp::getCurrentScene()->getChildren().begin(); child != EApp::getCurrentScene()->getChildren().end(); child++)
|
||||
for (auto child = ESceneManager::getCurrentScene()->getChildren().begin(); child != ESceneManager::getCurrentScene()->getChildren().end(); child++)
|
||||
{
|
||||
EActionManager::stopAllActionsBindedWith((*child));
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EActionManager::_clearManager()
|
||||
{
|
||||
s_vActions.clear();
|
||||
}
|
||||
|
||||
void e2d::EActionManager::_resetAllActions()
|
||||
void e2d::EActionManager::__resetAllActions()
|
||||
{
|
||||
for (auto action = s_vActions.begin(); action != s_vActions.end(); action++)
|
||||
{
|
||||
|
|
@ -128,7 +122,7 @@ void e2d::EActionManager::_resetAllActions()
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::EActionManager::ActionProc()
|
||||
void e2d::EActionManager::__update()
|
||||
{
|
||||
if (s_vActions.empty())
|
||||
return;
|
||||
|
|
@ -139,7 +133,7 @@ void e2d::EActionManager::ActionProc()
|
|||
auto &action = s_vActions[i];
|
||||
// »ñÈ¡¶¯×÷ÔËÐÐ״̬
|
||||
if (action->isRunning() ||
|
||||
(action->getTarget() && action->getTarget()->getParentScene() == EApp::getCurrentScene()))
|
||||
(action->getTarget() && action->getTarget()->getParentScene() == ESceneManager::getCurrentScene()))
|
||||
{
|
||||
if (action->_isEnding())
|
||||
{
|
||||
|
|
@ -1,331 +0,0 @@
|
|||
#include "..\emanagers.h"
|
||||
#include "..\elisteners.h"
|
||||
#include "..\enodes.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
|
||||
// 鼠标消息监听器
|
||||
std::vector<e2d::EListenerMouse*> s_vMouseListeners;
|
||||
// 按键消息监听器
|
||||
std::vector<e2d::EListenerKeyboard*> s_vKeyboardListeners;
|
||||
|
||||
|
||||
void e2d::EMsgManager::MouseProc(UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
// 保存鼠标消息
|
||||
EMouseMsg::s_nMsg = message;
|
||||
EMouseMsg::s_wParam = wParam;
|
||||
EMouseMsg::s_lParam = lParam;
|
||||
|
||||
if (s_vMouseListeners.empty()) return;
|
||||
|
||||
// 执行鼠标消息监听函数
|
||||
size_t i = s_vMouseListeners.size();
|
||||
|
||||
do
|
||||
{
|
||||
auto mlistener = s_vMouseListeners[--i];
|
||||
|
||||
if (mlistener->_isReady())
|
||||
{
|
||||
mlistener->_callOn();
|
||||
if (mlistener->m_bSwallow)
|
||||
break;
|
||||
}
|
||||
} while (i != 0);
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::KeyboardProc(UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
// 保存按键消息
|
||||
EKeyboardMsg::s_nMsg = message;
|
||||
EKeyboardMsg::s_wParam = wParam;
|
||||
EKeyboardMsg::s_lParam = lParam;
|
||||
|
||||
if (s_vKeyboardListeners.empty()) return;
|
||||
|
||||
// 执行按键消息监听函数
|
||||
size_t i = s_vKeyboardListeners.size();
|
||||
|
||||
do
|
||||
{
|
||||
auto klistener = s_vKeyboardListeners[--i];
|
||||
|
||||
if (klistener->_isReady())
|
||||
{
|
||||
klistener->_callOn();
|
||||
if (klistener->m_bSwallow)
|
||||
break;
|
||||
}
|
||||
} while (i != 0);
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::bindListener(e2d::EListenerMouse * listener, EScene * pParentScene)
|
||||
{
|
||||
EMsgManager::bindListener(listener, pParentScene->getRoot());
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::bindListener(EListenerKeyboard * listener, EScene * pParentScene)
|
||||
{
|
||||
EMsgManager::bindListener(listener, pParentScene->getRoot());
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::bindListener(EListenerMouse * listener, ENode * pParentNode)
|
||||
{
|
||||
WARN_IF(listener == nullptr, "EListenerMouse NULL pointer exception!");
|
||||
WARN_IF(pParentNode == nullptr, "Bind EListenerMouse with a NULL ENode pointer!");
|
||||
|
||||
if (listener && pParentNode)
|
||||
{
|
||||
ASSERT(
|
||||
!listener->m_pParentNode,
|
||||
"The listener is already binded, it cannot bind again!"
|
||||
);
|
||||
|
||||
listener->start();
|
||||
listener->retain();
|
||||
listener->m_pParentNode = pParentNode;
|
||||
s_vMouseListeners.push_back(listener);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::bindListener(EListenerKeyboard * listener, ENode * pParentNode)
|
||||
{
|
||||
WARN_IF(listener == nullptr, "EListenerKeyboard NULL pointer exception!");
|
||||
WARN_IF(pParentNode == nullptr, "Bind EListenerKeyboard with a NULL ENode pointer!");
|
||||
|
||||
if (listener && pParentNode)
|
||||
{
|
||||
ASSERT(
|
||||
!listener->m_pParentNode,
|
||||
"The listener is already binded, it cannot bind again!"
|
||||
);
|
||||
|
||||
listener->start();
|
||||
listener->retain();
|
||||
listener->m_pParentNode = pParentNode;
|
||||
s_vKeyboardListeners.push_back(listener);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::startMouseListeners(const EString & name)
|
||||
{
|
||||
for (auto l = s_vMouseListeners.begin(); l != s_vMouseListeners.end(); l++)
|
||||
{
|
||||
if ((*l)->getName() == name)
|
||||
{
|
||||
(*l)->start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::stopMouseListeners(const EString & name)
|
||||
{
|
||||
for (auto l = s_vMouseListeners.begin(); l != s_vMouseListeners.end(); l++)
|
||||
{
|
||||
if ((*l)->getName() == name)
|
||||
{
|
||||
(*l)->stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::delMouseListeners(const EString & name)
|
||||
{
|
||||
// 删除鼠标消息监听器
|
||||
std::vector<EListenerMouse*>::iterator mIter;
|
||||
for (mIter = s_vMouseListeners.begin(); mIter != s_vMouseListeners.end();)
|
||||
{
|
||||
if ((*mIter)->getName() == name)
|
||||
{
|
||||
SafeRelease(&(*mIter));
|
||||
mIter = s_vMouseListeners.erase(mIter);
|
||||
}
|
||||
else
|
||||
{
|
||||
mIter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::startKeyboardListeners(const EString & name)
|
||||
{
|
||||
// 启动按键消息监听器
|
||||
for (auto l = s_vKeyboardListeners.begin(); l != s_vKeyboardListeners.end(); l++)
|
||||
{
|
||||
if ((*l)->getName() == name)
|
||||
{
|
||||
(*l)->start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::stopKeyboardListeners(const EString & name)
|
||||
{
|
||||
// 停止按键消息监听器
|
||||
for (auto l = s_vKeyboardListeners.begin(); l != s_vKeyboardListeners.end(); l++)
|
||||
{
|
||||
if ((*l)->getName() == name)
|
||||
{
|
||||
(*l)->stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::delKeyboardListeners(const EString & name)
|
||||
{
|
||||
// 删除按键消息监听器
|
||||
std::vector<EListenerKeyboard*>::iterator kIter;
|
||||
for (kIter = s_vKeyboardListeners.begin(); kIter != s_vKeyboardListeners.end();)
|
||||
{
|
||||
if ((*kIter)->getName() == name)
|
||||
{
|
||||
SafeRelease(&(*kIter));
|
||||
kIter = s_vKeyboardListeners.erase(kIter);
|
||||
}
|
||||
else
|
||||
{
|
||||
kIter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::startAllMouseListenersBindedWith(EScene * pParentScene)
|
||||
{
|
||||
EMsgManager::startAllMouseListenersBindedWith(pParentScene->getRoot());
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::stopAllMouseListenersBindedWith(EScene * pParentScene)
|
||||
{
|
||||
EMsgManager::stopAllMouseListenersBindedWith(pParentScene->getRoot());
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::startAllMouseListenersBindedWith(ENode * pParentNode)
|
||||
{
|
||||
for (auto l = s_vMouseListeners.begin(); l != s_vMouseListeners.end(); l++)
|
||||
{
|
||||
if ((*l)->getParentNode() == pParentNode)
|
||||
{
|
||||
(*l)->start();
|
||||
}
|
||||
}
|
||||
for (auto child = pParentNode->getChildren().begin(); child != pParentNode->getChildren().end(); child++)
|
||||
{
|
||||
EMsgManager::startAllMouseListenersBindedWith((*child));
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::stopAllMouseListenersBindedWith(ENode * pParentNode)
|
||||
{
|
||||
for (auto l = s_vMouseListeners.begin(); l != s_vMouseListeners.end(); l++)
|
||||
{
|
||||
if ((*l)->getParentNode() == pParentNode)
|
||||
{
|
||||
(*l)->stop();
|
||||
}
|
||||
}
|
||||
for (auto child = pParentNode->getChildren().begin(); child != pParentNode->getChildren().end(); child++)
|
||||
{
|
||||
EMsgManager::stopAllMouseListenersBindedWith((*child));
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::startAllKeyboardListenersBindedWith(EScene * pParentScene)
|
||||
{
|
||||
EMsgManager::startAllKeyboardListenersBindedWith(pParentScene->getRoot());
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::stopAllKeyboardListenersBindedWith(EScene * pParentScene)
|
||||
{
|
||||
EMsgManager::stopAllKeyboardListenersBindedWith(pParentScene->getRoot());
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::startAllKeyboardListenersBindedWith(ENode * pParentNode)
|
||||
{
|
||||
for (auto l = s_vKeyboardListeners.begin(); l != s_vKeyboardListeners.end(); l++)
|
||||
{
|
||||
if ((*l)->getParentNode() == pParentNode)
|
||||
{
|
||||
(*l)->start();
|
||||
}
|
||||
}
|
||||
for (auto child = pParentNode->getChildren().begin(); child != pParentNode->getChildren().end(); child++)
|
||||
{
|
||||
EMsgManager::startAllKeyboardListenersBindedWith((*child));
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::stopAllKeyboardListenersBindedWith(ENode * pParentNode)
|
||||
{
|
||||
for (auto l = s_vKeyboardListeners.begin(); l != s_vKeyboardListeners.end(); l++)
|
||||
{
|
||||
if ((*l)->getParentNode() == pParentNode)
|
||||
{
|
||||
(*l)->stop();
|
||||
}
|
||||
}
|
||||
for (auto child = pParentNode->getChildren().begin(); child != pParentNode->getChildren().end(); child++)
|
||||
{
|
||||
EMsgManager::stopAllKeyboardListenersBindedWith((*child));
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::_clearAllMouseListenersBindedWith(ENode * pParentNode)
|
||||
{
|
||||
for (size_t i = 0; i < s_vMouseListeners.size();)
|
||||
{
|
||||
auto t = s_vMouseListeners[i];
|
||||
if (t->getParentNode() == pParentNode)
|
||||
{
|
||||
SafeRelease(&t);
|
||||
s_vMouseListeners.erase(s_vMouseListeners.begin() + i);
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::_clearAllKeyboardListenersBindedWith(ENode * pParentNode)
|
||||
{
|
||||
for (size_t i = 0; i < s_vKeyboardListeners.size();)
|
||||
{
|
||||
auto t = s_vKeyboardListeners[i];
|
||||
if (t->getParentNode() == pParentNode)
|
||||
{
|
||||
SafeRelease(&t);
|
||||
s_vKeyboardListeners.erase(s_vKeyboardListeners.begin() + i);
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::_clearManager()
|
||||
{
|
||||
s_vMouseListeners.clear();
|
||||
s_vKeyboardListeners.clear();
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::startAllMouseListeners()
|
||||
{
|
||||
EMsgManager::startAllMouseListenersBindedWith(EApp::getCurrentScene());
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::stopAllMouseListeners()
|
||||
{
|
||||
EMsgManager::stopAllMouseListenersBindedWith(EApp::getCurrentScene());
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::startAllKeyboardListeners()
|
||||
{
|
||||
EMsgManager::startAllKeyboardListenersBindedWith(EApp::getCurrentScene());
|
||||
}
|
||||
|
||||
void e2d::EMsgManager::stopAllKeyboardListeners()
|
||||
{
|
||||
EMsgManager::stopAllKeyboardListenersBindedWith(EApp::getCurrentScene());
|
||||
}
|
||||
|
|
@ -11,18 +11,18 @@ std::vector<e2d::EGeometry*> s_vGeometries;
|
|||
|
||||
void e2d::EPhysicsManager::PhysicsGeometryProc(EGeometry * pActiveGeometry)
|
||||
{
|
||||
if (s_vListeners.empty() || s_vGeometries.empty() || EApp::isPaused())
|
||||
if (s_vListeners.empty() || s_vGeometries.empty() || EGame::isPaused())
|
||||
return;
|
||||
|
||||
// pActiveGeometry 为主动方
|
||||
EPhysicsMsg::s_pActiveGeometry = 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() != EApp::getCurrentScene()))
|
||||
(pPassiveGeometry->getParentNode()->getParentScene() != ESceneManager::getCurrentScene()))
|
||||
continue;
|
||||
|
||||
if (pActiveGeometry != pPassiveGeometry)
|
||||
|
|
@ -31,12 +31,12 @@ void e2d::EPhysicsManager::PhysicsGeometryProc(EGeometry * pActiveGeometry)
|
|||
if (pActiveGeometry->m_nCollisionBitmask & pPassiveGeometry->m_nCategoryBitmask)
|
||||
{
|
||||
// pPassiveGeometry 为被动方
|
||||
EPhysicsMsg::s_pPassiveGeometry = pPassiveGeometry;
|
||||
EPhysicsEvent::s_pPassiveGeometry = pPassiveGeometry;
|
||||
// 获取两方的关系
|
||||
EPhysicsMsg::s_nRelation = pActiveGeometry->_intersectWith(pPassiveGeometry);
|
||||
EPhysicsEvent::s_nRelation = pActiveGeometry->_intersectWith(pPassiveGeometry);
|
||||
// 如果关系不为未知或无交集,响应监听器
|
||||
if (EPhysicsMsg::s_nRelation != EPhysicsMsg::UNKNOWN &&
|
||||
EPhysicsMsg::s_nRelation != EPhysicsMsg::DISJOINT)
|
||||
if (EPhysicsEvent::s_nRelation != EPhysicsEvent::UNKNOWN &&
|
||||
EPhysicsEvent::s_nRelation != EPhysicsEvent::DISJOINT)
|
||||
{
|
||||
// 执行监听器
|
||||
PhysicsListenerProc();
|
||||
|
|
@ -194,12 +194,12 @@ void e2d::EPhysicsManager::stopAllListenersBindedWith(ENode * pParentNode)
|
|||
|
||||
void e2d::EPhysicsManager::startAllListeners()
|
||||
{
|
||||
EPhysicsManager::startAllListenersBindedWith(EApp::getCurrentScene());
|
||||
EPhysicsManager::startAllListenersBindedWith(ESceneManager::getCurrentScene());
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::stopAllListeners()
|
||||
{
|
||||
EPhysicsManager::stopAllListenersBindedWith(EApp::getCurrentScene());
|
||||
EPhysicsManager::stopAllListenersBindedWith(ESceneManager::getCurrentScene());
|
||||
}
|
||||
|
||||
void e2d::EPhysicsManager::_clearManager()
|
||||
|
|
@ -0,0 +1,148 @@
|
|||
#include "..\emanagers.h"
|
||||
#include "..\ebase.h"
|
||||
#include "..\etransitions.h"
|
||||
#include <stack>
|
||||
|
||||
static e2d::EScene * s_pCurrentScene = nullptr;
|
||||
static e2d::EScene * s_pNextScene = nullptr;
|
||||
static e2d::ETransition * s_pTransition = nullptr;
|
||||
static std::stack<e2d::EScene*> s_SceneStack;
|
||||
|
||||
void e2d::ESceneManager::enterScene(EScene * scene, ETransition * transition /* = nullptr */, bool saveCurrentScene /* = true */)
|
||||
{
|
||||
ASSERT(scene != nullptr, "Next scene NULL pointer exception!");
|
||||
scene->retain();
|
||||
|
||||
// 保存下一场景的指针
|
||||
s_pNextScene = scene;
|
||||
|
||||
// 设置切换场景动画
|
||||
if (transition)
|
||||
{
|
||||
s_pTransition = transition;
|
||||
transition->retain();
|
||||
transition->_setTarget(
|
||||
s_pCurrentScene,
|
||||
s_pNextScene
|
||||
);
|
||||
}
|
||||
|
||||
if (s_pCurrentScene)
|
||||
{
|
||||
s_pCurrentScene->m_bWillSave = saveCurrentScene;
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ESceneManager::backScene(ETransition * transition /* = nullptr */)
|
||||
{
|
||||
// 栈为空时,调用返回场景函数失败
|
||||
WARN_IF(s_SceneStack.size() == 0, "Scene stack now is empty!");
|
||||
if (s_SceneStack.size() == 0) return;
|
||||
|
||||
// 从栈顶取出场景指针,作为下一场景
|
||||
s_pNextScene = s_SceneStack.top();
|
||||
s_SceneStack.pop();
|
||||
|
||||
// 返回上一场景时,不保存当前场景
|
||||
if (s_pCurrentScene)
|
||||
{
|
||||
s_pCurrentScene->m_bWillSave = false;
|
||||
}
|
||||
|
||||
// 设置切换场景动画
|
||||
if (transition)
|
||||
{
|
||||
s_pTransition = transition;
|
||||
transition->retain();
|
||||
transition->_setTarget(
|
||||
s_pCurrentScene,
|
||||
s_pNextScene
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ESceneManager::clearScene()
|
||||
{
|
||||
// 清空场景栈
|
||||
while (s_SceneStack.size())
|
||||
{
|
||||
auto temp = s_SceneStack.top();
|
||||
SafeRelease(&temp);
|
||||
s_SceneStack.pop();
|
||||
}
|
||||
}
|
||||
|
||||
e2d::EScene * e2d::ESceneManager::getCurrentScene()
|
||||
{
|
||||
return s_pCurrentScene;
|
||||
}
|
||||
|
||||
void e2d::ESceneManager::__update()
|
||||
{
|
||||
// 正在切换场景时,执行场景切换动画
|
||||
if (s_pTransition)
|
||||
{
|
||||
s_pTransition->_update();
|
||||
if (s_pTransition->isEnding())
|
||||
{
|
||||
s_pTransition->release();
|
||||
s_pTransition = nullptr;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// 下一场景指针不为空时,切换场景
|
||||
if (s_pNextScene)
|
||||
{
|
||||
// 进入下一场景
|
||||
__enterNextScene();
|
||||
}
|
||||
|
||||
// 断言当前场景非空
|
||||
ASSERT(s_pCurrentScene != nullptr, "Current scene NULL pointer exception.");
|
||||
|
||||
// 更新场景内容
|
||||
s_pCurrentScene->_update();
|
||||
}
|
||||
|
||||
void e2d::ESceneManager::__render()
|
||||
{
|
||||
// 绘制当前场景
|
||||
if (s_pCurrentScene)
|
||||
{
|
||||
s_pCurrentScene->_render();
|
||||
}
|
||||
// 切换场景时,同时绘制两场景
|
||||
if (s_pTransition && s_pNextScene)
|
||||
{
|
||||
s_pNextScene->_render();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ESceneManager::__enterNextScene()
|
||||
{
|
||||
if (s_pNextScene == nullptr)
|
||||
return;
|
||||
|
||||
// 执行当前场景的 onCloseWindow 函数
|
||||
if (s_pCurrentScene)
|
||||
{
|
||||
s_pCurrentScene->onExit();
|
||||
|
||||
if (s_pCurrentScene->m_bWillSave)
|
||||
{
|
||||
// 若要保存当前场景,把它放入栈中
|
||||
s_SceneStack.push(s_pCurrentScene);
|
||||
}
|
||||
else
|
||||
{
|
||||
SafeRelease(&s_pCurrentScene);
|
||||
}
|
||||
}
|
||||
|
||||
// 执行下一场景的 onEnter 函数
|
||||
s_pNextScene->onEnter();
|
||||
|
||||
s_pCurrentScene = s_pNextScene; // 切换场景
|
||||
s_pNextScene = nullptr; // 下一场景置空
|
||||
}
|
||||
|
|
@ -1,12 +1,11 @@
|
|||
#include "..\emanagers.h"
|
||||
#include "..\etools.h"
|
||||
#include "..\enodes.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
static std::vector<e2d::ETimer*> s_vTimers;
|
||||
|
||||
|
||||
void e2d::ETimerManager::TimerProc()
|
||||
void e2d::ETimerManager::__update()
|
||||
{
|
||||
if (s_vTimers.empty())
|
||||
return;
|
||||
|
|
@ -124,7 +123,7 @@ void e2d::ETimerManager::stopAllTimersBindedWith(ENode * pParentNode)
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::ETimerManager::_clearAllTimersBindedWith(ENode * pParentNode)
|
||||
void e2d::ETimerManager::__clearAllTimersBindedWith(ENode * pParentNode)
|
||||
{
|
||||
for (size_t i = 0; i < s_vTimers.size();)
|
||||
{
|
||||
|
|
@ -141,25 +140,20 @@ void e2d::ETimerManager::_clearAllTimersBindedWith(ENode * pParentNode)
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::ETimerManager::_clearManager()
|
||||
{
|
||||
s_vTimers.clear();
|
||||
}
|
||||
|
||||
void e2d::ETimerManager::_resetAllTimers()
|
||||
void e2d::ETimerManager::__resetAllTimers()
|
||||
{
|
||||
for (auto timer = s_vTimers.begin(); timer != s_vTimers.end(); timer++)
|
||||
{
|
||||
(*timer)->m_tLast = GetNow();
|
||||
(*timer)->m_fLast = ETime::getTotalTime();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ETimerManager::startAllTimers()
|
||||
{
|
||||
ETimerManager::startAllTimersBindedWith(EApp::getCurrentScene());
|
||||
ETimerManager::startAllTimersBindedWith(ESceneManager::getCurrentScene());
|
||||
}
|
||||
|
||||
void e2d::ETimerManager::stopAllTimers()
|
||||
{
|
||||
ETimerManager::stopAllTimersBindedWith(EApp::getCurrentScene());
|
||||
ETimerManager::stopAllTimersBindedWith(ESceneManager::getCurrentScene());
|
||||
}
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
#include "..\ecommon.h"
|
||||
|
||||
UINT e2d::EKeyboardMsg::s_nMsg = 0;
|
||||
WPARAM e2d::EKeyboardMsg::s_wParam = 0;
|
||||
LPARAM e2d::EKeyboardMsg::s_lParam = 0;
|
||||
|
||||
e2d::EKeyboardMsg::KEYBOARD_MSG e2d::EKeyboardMsg::getMsg()
|
||||
{
|
||||
return KEYBOARD_MSG(EKeyboardMsg::s_nMsg);
|
||||
}
|
||||
|
||||
e2d::EKeyboardMsg::KEY e2d::EKeyboardMsg::getKeyValue()
|
||||
{
|
||||
return KEY(EKeyboardMsg::s_wParam);
|
||||
}
|
||||
|
||||
DWORD e2d::EKeyboardMsg::getCount()
|
||||
{
|
||||
return (((DWORD)EKeyboardMsg::s_lParam) & 0x0000FFFF);
|
||||
}
|
||||
|
||||
bool e2d::EKeyboardMsg::isKeyDown(KEY key)
|
||||
{
|
||||
if (::GetAsyncKeyState((int)key) & 0x8000)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::EKeyboardMsg::isCapitalLockOn()
|
||||
{
|
||||
if (::GetKeyState(VK_CAPITAL) & 0x0001)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::EKeyboardMsg::isNumpadLockOn()
|
||||
{
|
||||
if (::GetKeyState(VK_NUMLOCK) & 0x0001)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::EKeyboardMsg::isScrollLockOn()
|
||||
{
|
||||
if (::GetKeyState(VK_SCROLL) & 0x0001)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
#include "..\ecommon.h"
|
||||
|
||||
UINT e2d::EMouseMsg::s_nMsg = 0;
|
||||
WPARAM e2d::EMouseMsg::s_wParam = 0;
|
||||
LPARAM e2d::EMouseMsg::s_lParam = 0;
|
||||
|
||||
DWORD e2d::EMouseMsg::getPosX()
|
||||
{
|
||||
return LOWORD(EMouseMsg::s_lParam);
|
||||
}
|
||||
|
||||
DWORD e2d::EMouseMsg::getPosY()
|
||||
{
|
||||
return HIWORD(EMouseMsg::s_lParam);
|
||||
}
|
||||
|
||||
e2d::EPoint e2d::EMouseMsg::getPos()
|
||||
{
|
||||
return EPoint(LOWORD(EMouseMsg::s_lParam), HIWORD(EMouseMsg::s_lParam));
|
||||
}
|
||||
|
||||
bool e2d::EMouseMsg::isLButtonDown()
|
||||
{
|
||||
return GET_KEYSTATE_WPARAM(EMouseMsg::s_wParam) == MK_LBUTTON;
|
||||
}
|
||||
|
||||
bool e2d::EMouseMsg::isMButtonDown()
|
||||
{
|
||||
return GET_KEYSTATE_WPARAM(EMouseMsg::s_wParam) == MK_MBUTTON;
|
||||
}
|
||||
|
||||
bool e2d::EMouseMsg::isRButtonDown()
|
||||
{
|
||||
return GET_KEYSTATE_WPARAM(EMouseMsg::s_wParam) == MK_RBUTTON;
|
||||
}
|
||||
|
||||
bool e2d::EMouseMsg::isShiftDown()
|
||||
{
|
||||
return GET_KEYSTATE_WPARAM(EMouseMsg::s_wParam) == MK_SHIFT;
|
||||
}
|
||||
|
||||
bool e2d::EMouseMsg::isCtrlDown()
|
||||
{
|
||||
return GET_KEYSTATE_WPARAM(EMouseMsg::s_wParam) == MK_CONTROL;
|
||||
}
|
||||
|
||||
DWORD e2d::EMouseMsg::getWheelDelta()
|
||||
{
|
||||
return GET_WHEEL_DELTA_WPARAM(EMouseMsg::s_wParam);
|
||||
}
|
||||
|
||||
e2d::EMouseMsg::MOUSE_MSG e2d::EMouseMsg::getMsg()
|
||||
{
|
||||
return MOUSE_MSG(EMouseMsg::s_nMsg);
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
#include "..\ecommon.h"
|
||||
|
||||
e2d::EPhysicsMsg::INTERSECT_RELATION e2d::EPhysicsMsg::s_nRelation = e2d::EPhysicsMsg::UNKNOWN;
|
||||
e2d::EGeometry * e2d::EPhysicsMsg::s_pActiveGeometry = nullptr;
|
||||
e2d::EGeometry * e2d::EPhysicsMsg::s_pPassiveGeometry = nullptr;
|
||||
|
||||
e2d::EPhysicsMsg::INTERSECT_RELATION e2d::EPhysicsMsg::getMsg()
|
||||
{
|
||||
return EPhysicsMsg::s_nRelation;
|
||||
}
|
||||
|
||||
e2d::EGeometry * e2d::EPhysicsMsg::getActiveGeometry()
|
||||
{
|
||||
return EPhysicsMsg::s_pActiveGeometry;
|
||||
}
|
||||
|
||||
e2d::EGeometry * e2d::EPhysicsMsg::getPassiveGeometry()
|
||||
{
|
||||
return EPhysicsMsg::s_pPassiveGeometry;
|
||||
}
|
||||
|
|
@ -1,10 +1,9 @@
|
|||
#include "..\enodes.h"
|
||||
#include "..\elisteners.h"
|
||||
#include "..\emanagers.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
e2d::EButton::EButton()
|
||||
: m_Callback((const BUTTON_CLICK_CALLBACK &)nullptr)
|
||||
: m_Callback((const BtnClkCallback &)nullptr)
|
||||
, m_eStatus(EButton::NORMAL)
|
||||
, m_bEnable(true)
|
||||
, m_bIsSelected(false)
|
||||
|
|
@ -12,13 +11,11 @@ e2d::EButton::EButton()
|
|||
, m_pMouseover(nullptr)
|
||||
, m_pSelected(nullptr)
|
||||
, m_pDisabled(nullptr)
|
||||
, m_pListener(nullptr)
|
||||
{
|
||||
this->_init();
|
||||
}
|
||||
|
||||
e2d::EButton::EButton(ENode * normal, const BUTTON_CLICK_CALLBACK & callback)
|
||||
: m_Callback((const BUTTON_CLICK_CALLBACK &)nullptr)
|
||||
e2d::EButton::EButton(ENode * normal, const BtnClkCallback & callback)
|
||||
: m_Callback((const BtnClkCallback &)nullptr)
|
||||
, m_eStatus(EButton::NORMAL)
|
||||
, m_bEnable(true)
|
||||
, m_bIsSelected(false)
|
||||
|
|
@ -26,15 +23,13 @@ e2d::EButton::EButton(ENode * normal, const BUTTON_CLICK_CALLBACK & callback)
|
|||
, m_pMouseover(nullptr)
|
||||
, m_pSelected(nullptr)
|
||||
, m_pDisabled(nullptr)
|
||||
, m_pListener(nullptr)
|
||||
{
|
||||
this->_init();
|
||||
this->setNormal(normal);
|
||||
this->setCallback(callback);
|
||||
}
|
||||
|
||||
e2d::EButton::EButton(ENode * normal, ENode * selected, const BUTTON_CLICK_CALLBACK & callback)
|
||||
: m_Callback((const BUTTON_CLICK_CALLBACK &)nullptr)
|
||||
e2d::EButton::EButton(ENode * normal, ENode * selected, const BtnClkCallback & callback)
|
||||
: m_Callback((const BtnClkCallback &)nullptr)
|
||||
, m_eStatus(EButton::NORMAL)
|
||||
, m_bEnable(true)
|
||||
, m_bIsSelected(false)
|
||||
|
|
@ -42,16 +37,14 @@ e2d::EButton::EButton(ENode * normal, ENode * selected, const BUTTON_CLICK_CALLB
|
|||
, m_pMouseover(nullptr)
|
||||
, m_pSelected(nullptr)
|
||||
, m_pDisabled(nullptr)
|
||||
, m_pListener(nullptr)
|
||||
{
|
||||
this->_init();
|
||||
this->setNormal(normal);
|
||||
this->setSelected(selected);
|
||||
this->setCallback(callback);
|
||||
}
|
||||
|
||||
e2d::EButton::EButton(ENode * normal, ENode * mouseover, ENode * selected, const BUTTON_CLICK_CALLBACK & callback)
|
||||
: m_Callback((const BUTTON_CLICK_CALLBACK &)nullptr)
|
||||
e2d::EButton::EButton(ENode * normal, ENode * mouseover, ENode * selected, const BtnClkCallback & callback)
|
||||
: m_Callback((const BtnClkCallback &)nullptr)
|
||||
, m_eStatus(EButton::NORMAL)
|
||||
, m_bEnable(true)
|
||||
, m_bIsSelected(false)
|
||||
|
|
@ -59,17 +52,15 @@ e2d::EButton::EButton(ENode * normal, ENode * mouseover, ENode * selected, const
|
|||
, m_pMouseover(nullptr)
|
||||
, m_pSelected(nullptr)
|
||||
, m_pDisabled(nullptr)
|
||||
, m_pListener(nullptr)
|
||||
{
|
||||
this->_init();
|
||||
this->setNormal(normal);
|
||||
this->setMouseOver(mouseover);
|
||||
this->setSelected(selected);
|
||||
this->setCallback(callback);
|
||||
}
|
||||
|
||||
e2d::EButton::EButton(ENode * normal, ENode * mouseover, ENode * selected, ENode * disabled, const BUTTON_CLICK_CALLBACK & callback)
|
||||
: m_Callback((const BUTTON_CLICK_CALLBACK &)nullptr)
|
||||
e2d::EButton::EButton(ENode * normal, ENode * mouseover, ENode * selected, ENode * disabled, const BtnClkCallback & callback)
|
||||
: m_Callback((const BtnClkCallback &)nullptr)
|
||||
, m_eStatus(EButton::NORMAL)
|
||||
, m_bEnable(true)
|
||||
, m_bIsSelected(false)
|
||||
|
|
@ -77,9 +68,7 @@ e2d::EButton::EButton(ENode * normal, ENode * mouseover, ENode * selected, ENode
|
|||
, m_pMouseover(nullptr)
|
||||
, m_pSelected(nullptr)
|
||||
, m_pDisabled(nullptr)
|
||||
, m_pListener(nullptr)
|
||||
{
|
||||
this->_init();
|
||||
this->setNormal(normal);
|
||||
this->setMouseOver(mouseover);
|
||||
this->setSelected(selected);
|
||||
|
|
@ -179,13 +168,12 @@ void e2d::EButton::setEnable(bool bEnable)
|
|||
{
|
||||
m_bEnable = bEnable;
|
||||
_updateVisiable();
|
||||
_updateStatus();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EButton::setCallback(const BUTTON_CLICK_CALLBACK & callback)
|
||||
void e2d::EButton::setCallback(const BtnClkCallback & callback)
|
||||
{
|
||||
WARN_IF(m_pNormal == nullptr, "EButton cannot work without something to show. Please set its normal displayed.");
|
||||
WARN_IF(m_pNormal == nullptr, "EButton cannot work without anything to show. Please set its normal displayed.");
|
||||
|
||||
m_Callback = callback;
|
||||
}
|
||||
|
|
@ -217,11 +205,52 @@ void e2d::EButton::setPivot(float pivotX, float pivotY)
|
|||
if (m_pDisabled) m_pDisabled->setPivot(pivotX, pivotY);
|
||||
}
|
||||
|
||||
void e2d::EButton::_init()
|
||||
void e2d::EButton::onUpdate()
|
||||
{
|
||||
m_pListener = new EListenerMouse(std::bind(&EButton::_updateStatus, this));
|
||||
m_pListener->setAlwaysWorking(true);
|
||||
EMsgManager::bindListener(m_pListener, this);
|
||||
if (m_bEnable && m_pNormal)
|
||||
{
|
||||
ENode * pMouseover = m_pMouseover ? m_pMouseover : m_pNormal;
|
||||
ENode * pSelected = m_pSelected ? m_pSelected : m_pNormal;
|
||||
|
||||
if (EInput::isMouseLButtonRelease())
|
||||
{
|
||||
// 鼠标左键抬起时,判断鼠标坐标是否在按钮内部
|
||||
if (m_bIsSelected &&
|
||||
pSelected->isPointIn(EInput::getMousePos()))
|
||||
{
|
||||
_runCallback();
|
||||
}
|
||||
// 标记 m_bIsSelected 为 false
|
||||
m_bIsSelected = false;
|
||||
}
|
||||
|
||||
if (EInput::isMouseLButtonPress())
|
||||
{
|
||||
if (pMouseover->isPointIn(EInput::getMousePos()))
|
||||
{
|
||||
// 鼠标左键按下,且位于按钮内时,标记 m_bIsSelected 为 true
|
||||
m_bIsSelected = true;
|
||||
_setStatus(EButton::SELECTED);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_bIsSelected && EInput::isMouseLButtonDown())
|
||||
{
|
||||
if (pSelected->isPointIn(EInput::getMousePos()))
|
||||
{
|
||||
_setStatus(EButton::SELECTED);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (m_pNormal->isPointIn(EInput::getMousePos()))
|
||||
{
|
||||
_setStatus(EButton::MOUSEOVER);
|
||||
return;
|
||||
}
|
||||
|
||||
_setStatus(EButton::NORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EButton::_setStatus(STATUS status)
|
||||
|
|
@ -233,12 +262,6 @@ void e2d::EButton::_setStatus(STATUS status)
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::EButton::_updateTransform()
|
||||
{
|
||||
ENode::_updateTransform();
|
||||
_updateStatus();
|
||||
}
|
||||
|
||||
void e2d::EButton::_updateVisiable()
|
||||
{
|
||||
if (m_pNormal) m_pNormal->setVisiable(false);
|
||||
|
|
@ -274,54 +297,6 @@ void e2d::EButton::_updateVisiable()
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::EButton::_updateStatus()
|
||||
{
|
||||
if (m_bEnable && m_pNormal)
|
||||
{
|
||||
ENode * pMouseover = m_pMouseover ? m_pMouseover : m_pNormal;
|
||||
ENode * pSelected = m_pSelected ? m_pSelected : m_pNormal;
|
||||
|
||||
if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_UP)
|
||||
{
|
||||
// 鼠标左键抬起时,判断鼠标坐标是否在按钮内部
|
||||
if (m_bIsSelected &&
|
||||
pSelected->isPointIn(EMouseMsg::getPos()))
|
||||
{
|
||||
_runCallback();
|
||||
}
|
||||
// 标记 m_bIsSelected 为 false
|
||||
m_bIsSelected = false;
|
||||
}
|
||||
|
||||
if (EMouseMsg::getMsg() == EMouseMsg::LBUTTON_DOWN)
|
||||
{
|
||||
if (pMouseover->isPointIn(EMouseMsg::getPos()))
|
||||
{
|
||||
// 鼠标左键按下,且位于按钮内时,标记 m_bIsSelected 为 true
|
||||
m_bIsSelected = true;
|
||||
_setStatus(EButton::SELECTED);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_bIsSelected && EMouseMsg::isLButtonDown())
|
||||
{
|
||||
if (pSelected->isPointIn(EMouseMsg::getPos()))
|
||||
{
|
||||
_setStatus(EButton::SELECTED);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (m_pNormal->isPointIn(EMouseMsg::getPos()))
|
||||
{
|
||||
_setStatus(EButton::MOUSEOVER);
|
||||
return;
|
||||
}
|
||||
|
||||
_setStatus(EButton::NORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EButton::_runCallback()
|
||||
{
|
||||
if (m_Callback)
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
#include "..\enodes.h"
|
||||
#include "..\elisteners.h"
|
||||
#include "..\emanagers.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
e2d::EButtonToggle::EButtonToggle()
|
||||
: EButton()
|
||||
|
|
@ -17,7 +16,7 @@ e2d::EButtonToggle::EButtonToggle()
|
|||
{
|
||||
}
|
||||
|
||||
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, const BUTTON_CLICK_CALLBACK & callback)
|
||||
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, const BtnClkCallback & callback)
|
||||
: EButton()
|
||||
, m_bToggle(true)
|
||||
, m_pNormalOn(nullptr)
|
||||
|
|
@ -34,7 +33,7 @@ e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNorma
|
|||
this->setCallback(callback);
|
||||
}
|
||||
|
||||
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, ENode * toggleOnSelected, ENode * toggleOffSelected, const BUTTON_CLICK_CALLBACK & callback)
|
||||
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, ENode * toggleOnSelected, ENode * toggleOffSelected, const BtnClkCallback & callback)
|
||||
: EButton()
|
||||
, m_bToggle(true)
|
||||
, m_pNormalOn(nullptr)
|
||||
|
|
@ -53,7 +52,7 @@ e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNorma
|
|||
this->setCallback(callback);
|
||||
}
|
||||
|
||||
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, ENode * toggleOnMouseOver, ENode * toggleOffMouseOver, ENode * toggleOnSelected, ENode * toggleOffSelected, const BUTTON_CLICK_CALLBACK & callback)
|
||||
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, ENode * toggleOnMouseOver, ENode * toggleOffMouseOver, ENode * toggleOnSelected, ENode * toggleOffSelected, const BtnClkCallback & callback)
|
||||
: EButton()
|
||||
, m_bToggle(true)
|
||||
, m_pNormalOn(nullptr)
|
||||
|
|
@ -74,7 +73,7 @@ e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNorma
|
|||
this->setCallback(callback);
|
||||
}
|
||||
|
||||
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, ENode * toggleOnMouseOver, ENode * toggleOffMouseOver, ENode * toggleOnSelected, ENode * toggleOffSelected, ENode * toggleOnDisabled, ENode * toggleOffDisabled, const BUTTON_CLICK_CALLBACK & callback)
|
||||
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, ENode * toggleOnMouseOver, ENode * toggleOffMouseOver, ENode * toggleOnSelected, ENode * toggleOffSelected, ENode * toggleOnDisabled, ENode * toggleOffDisabled, const BtnClkCallback & callback)
|
||||
: EButton()
|
||||
, m_bToggle(true)
|
||||
, m_pNormalOn(nullptr)
|
||||
|
|
@ -1,132 +0,0 @@
|
|||
#include "..\enodes.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
|
||||
e2d::ESprite::ESprite()
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_pTexture(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::ESprite::ESprite(ETexture * texture)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_pTexture(nullptr)
|
||||
{
|
||||
loadFrom(texture);
|
||||
}
|
||||
|
||||
e2d::ESprite::ESprite(ESpriteFrame * spriteFrame)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_pTexture(nullptr)
|
||||
{
|
||||
loadFrom(spriteFrame);
|
||||
}
|
||||
|
||||
e2d::ESprite::ESprite(const EString & imageFileName)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_pTexture(nullptr)
|
||||
{
|
||||
loadFrom(imageFileName);
|
||||
}
|
||||
|
||||
e2d::ESprite::ESprite(const EString & imageFileName, float x, float y, float width, float height)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_pTexture(nullptr)
|
||||
{
|
||||
loadFrom(imageFileName);
|
||||
clip(x, y, width, height);
|
||||
}
|
||||
|
||||
e2d::ESprite::ESprite(LPCTSTR resourceName, LPCTSTR resourceType)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_pTexture(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_pTexture(nullptr)
|
||||
{
|
||||
loadFrom(resourceName, resourceType);
|
||||
clip(x, y, width, height);
|
||||
}
|
||||
|
||||
e2d::ESprite::~ESprite()
|
||||
{
|
||||
SafeRelease(&m_pTexture);
|
||||
}
|
||||
|
||||
void e2d::ESprite::loadFrom(ETexture * texture)
|
||||
{
|
||||
if (texture)
|
||||
{
|
||||
SafeRelease(&m_pTexture);
|
||||
m_pTexture = texture;
|
||||
m_pTexture->retain();
|
||||
|
||||
m_fSourceClipX = m_fSourceClipY = 0;
|
||||
ENode::_setWidth(m_pTexture->getSourceWidth());
|
||||
ENode::_setHeight(m_pTexture->getSourceHeight());
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ESprite::loadFrom(const EString & imageFileName)
|
||||
{
|
||||
loadFrom(new ETexture(imageFileName));
|
||||
}
|
||||
|
||||
void e2d::ESprite::loadFrom(LPCTSTR resourceName, LPCTSTR resourceType)
|
||||
{
|
||||
loadFrom(new ETexture(resourceName, resourceType));
|
||||
}
|
||||
|
||||
void e2d::ESprite::loadFrom(ETexture * texture, float x, float y, float width, float height)
|
||||
{
|
||||
loadFrom(texture);
|
||||
clip(x, y, width, height);
|
||||
}
|
||||
|
||||
void e2d::ESprite::loadFrom(ESpriteFrame * frame)
|
||||
{
|
||||
if (frame)
|
||||
{
|
||||
loadFrom(frame->m_pTexture);
|
||||
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_pTexture->getSourceWidth());
|
||||
m_fSourceClipY = min(max(y, 0), m_pTexture->getSourceHeight());
|
||||
ENode::_setWidth(min(max(width, 0), m_pTexture->getSourceWidth() - m_fSourceClipX));
|
||||
ENode::_setHeight(min(max(height, 0), m_pTexture->getSourceHeight() - m_fSourceClipY));
|
||||
}
|
||||
|
||||
void e2d::ESprite::_render()
|
||||
{
|
||||
if (m_pTexture && m_pTexture->_getBitmap())
|
||||
{
|
||||
// Draw bitmap
|
||||
GetRenderTarget()->DrawBitmap(
|
||||
m_pTexture->_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()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -37,14 +37,7 @@ void e2d::EMenu::setEnable(bool enable)
|
|||
|
||||
for (auto button = m_vButtons.begin(); button != m_vButtons.end(); button++)
|
||||
{
|
||||
if (enable)
|
||||
{
|
||||
(*button)->m_pListener->start();
|
||||
}
|
||||
else
|
||||
{
|
||||
(*button)->m_pListener->stop();
|
||||
}
|
||||
(*button)->setEnable(enable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -55,15 +48,7 @@ void e2d::EMenu::addButton(EButton * button)
|
|||
{
|
||||
this->addChild(button);
|
||||
m_vButtons.push_back(button);
|
||||
|
||||
if (m_bEnable)
|
||||
{
|
||||
button->m_pListener->start();
|
||||
}
|
||||
else
|
||||
{
|
||||
button->m_pListener->stop();
|
||||
}
|
||||
button->setEnable(m_bEnable);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -83,8 +68,8 @@ bool e2d::EMenu::removeButton(EButton * button)
|
|||
{
|
||||
if (m_vButtons[i] == button)
|
||||
{
|
||||
// 移除按钮前,将它的监听器启用
|
||||
button->m_pListener->start();
|
||||
// 移除按钮前,将它启用
|
||||
button->setEnable(true);
|
||||
m_vButtons.erase(m_vButtons.begin() + i);
|
||||
return true;
|
||||
}
|
||||
|
|
@ -3,7 +3,6 @@
|
|||
#include "..\etools.h"
|
||||
#include "..\eactions.h"
|
||||
#include "..\egeometry.h"
|
||||
#include "..\Win\winbase.h"
|
||||
#include <algorithm>
|
||||
|
||||
// 默认中心点位置
|
||||
|
|
@ -61,10 +60,8 @@ e2d::ENode::ENode(const EString & name)
|
|||
|
||||
e2d::ENode::~ENode()
|
||||
{
|
||||
ETimerManager::_clearAllTimersBindedWith(this);
|
||||
EMsgManager::_clearAllMouseListenersBindedWith(this);
|
||||
EMsgManager::_clearAllKeyboardListenersBindedWith(this);
|
||||
EActionManager::_clearAllActionsBindedWith(this);
|
||||
ETimerManager::__clearAllTimersBindedWith(this);
|
||||
EActionManager::__clearAllActionsBindedWith(this);
|
||||
EPhysicsManager::_clearAllListenersBindedWith(this);
|
||||
EPhysicsManager::_delGeometry(m_pGeometry);
|
||||
for (auto child = m_vChildren.begin(); child != m_vChildren.end(); child++)
|
||||
|
|
@ -73,14 +70,6 @@ e2d::ENode::~ENode()
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::ENode::onEnter()
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::ENode::onExit()
|
||||
{
|
||||
}
|
||||
|
||||
void e2d::ENode::_update()
|
||||
{
|
||||
if (!m_bVisiable)
|
||||
|
|
@ -113,9 +102,8 @@ void e2d::ENode::_update()
|
|||
}
|
||||
}
|
||||
|
||||
GetRenderTarget()->SetTransform(m_MatriFinal);
|
||||
// äÖȾ×ÔÉí
|
||||
this->_render();
|
||||
// 执行 onUpdate 函数
|
||||
this->onUpdate();
|
||||
|
||||
// 访问剩余节点
|
||||
for (; i < size; i++)
|
||||
|
|
@ -123,14 +111,52 @@ void e2d::ENode::_update()
|
|||
}
|
||||
else
|
||||
{
|
||||
GetRenderTarget()->SetTransform(m_MatriFinal);
|
||||
// äÖȾ×ÔÉí
|
||||
this->_render();
|
||||
// 执行 onUpdate 函数
|
||||
this->onUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ENode::_render()
|
||||
{
|
||||
if (!m_bVisiable)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!m_vChildren.empty())
|
||||
{
|
||||
size_t size = m_vChildren.size();
|
||||
size_t i;
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
auto child = m_vChildren[i];
|
||||
// 访问 Order 小于零的节点
|
||||
if (child->getOrder() < 0)
|
||||
{
|
||||
child->_render();
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 转换渲染器的二维矩阵
|
||||
ERenderer::getRenderTarget()->SetTransform(m_MatriFinal);
|
||||
// 渲染自身
|
||||
this->onRender();
|
||||
|
||||
// 访问剩余节点
|
||||
for (; i < size; i++)
|
||||
m_vChildren[i]->_render();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 转换渲染器的二维矩阵
|
||||
ERenderer::getRenderTarget()->SetTransform(m_MatriFinal);
|
||||
// 渲染自身
|
||||
this->onRender();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::ENode::_drawGeometry()
|
||||
|
|
@ -410,7 +436,7 @@ void e2d::ENode::movePos(float x, float y)
|
|||
this->setPos(m_Pos.x + x, m_Pos.y + y);
|
||||
}
|
||||
|
||||
void e2d::ENode::movePos(const EVec & v)
|
||||
void e2d::ENode::movePos(const EVector2 & v)
|
||||
{
|
||||
this->movePos(v.x, v.y);
|
||||
}
|
||||
|
|
@ -733,7 +759,7 @@ bool e2d::ENode::isPointIn(EPoint point)
|
|||
}
|
||||
// 为节点创建一个形状
|
||||
ID2D1RectangleGeometry * rect;
|
||||
GetFactory()->CreateRectangleGeometry(
|
||||
ERenderer::getID2D1Factory()->CreateRectangleGeometry(
|
||||
D2D1::RectF(0, 0, getRealWidth(), getRealHeight()),
|
||||
&rect
|
||||
);
|
||||
|
|
@ -773,9 +799,9 @@ void e2d::ENode::stopAction(EAction * action)
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::ENode::startAllActions()
|
||||
void e2d::ENode::resumeAllActions()
|
||||
{
|
||||
EActionManager::startAllActionsBindedWith(this);
|
||||
EActionManager::resumeAllActionsBindedWith(this);
|
||||
}
|
||||
|
||||
void e2d::ENode::pauseAllActions()
|
||||
|
|
@ -0,0 +1,131 @@
|
|||
#include "..\enodes.h"
|
||||
|
||||
|
||||
e2d::ESprite::ESprite()
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, m_pImage(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::ESprite::ESprite(EImage * image)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, 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)
|
||||
{
|
||||
loadFrom(imageFileName);
|
||||
}
|
||||
|
||||
e2d::ESprite::ESprite(LPCTSTR imageFileName, float x, float y, float width, float height)
|
||||
: m_fSourceClipX(0)
|
||||
, m_fSourceClipY(0)
|
||||
, 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);
|
||||
}
|
||||
|
||||
void e2d::ESprite::loadFrom(EImage * image)
|
||||
{
|
||||
if (image)
|
||||
{
|
||||
SafeRelease(&m_pImage);
|
||||
m_pImage = image;
|
||||
m_pImage->retain();
|
||||
|
||||
m_fSourceClipX = m_fSourceClipY = 0;
|
||||
ENode::_setWidth(m_pImage->getSourceWidth());
|
||||
ENode::_setHeight(m_pImage->getSourceHeight());
|
||||
}
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
void e2d::ESprite::onRender()
|
||||
{
|
||||
if (m_pImage && m_pImage->_getBitmap())
|
||||
{
|
||||
// Draw bitmap
|
||||
ERenderer::getRenderTarget()->DrawBitmap(
|
||||
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()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
#include "..\enodes.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
e2d::EText::EText()
|
||||
: m_bWordWrapping(false)
|
||||
|
|
@ -99,10 +98,10 @@ void e2d::EText::setWordWrappingWidth(float wordWrapWidth)
|
|||
_initTextLayout();
|
||||
}
|
||||
|
||||
void e2d::EText::_render()
|
||||
void e2d::EText::onRender()
|
||||
{
|
||||
GetSolidColorBrush()->SetColor(D2D1::ColorF(m_pFont->m_Color, m_fDisplayOpacity));
|
||||
GetRenderTarget()->DrawTextW(
|
||||
ERenderer::getSolidColorBrush()->SetColor(D2D1::ColorF(m_pFont->m_Color, m_fDisplayOpacity));
|
||||
ERenderer::getRenderTarget()->DrawTextW(
|
||||
m_sText,
|
||||
UINT32(m_sText.length()),
|
||||
m_pFont->_getTextFormat(),
|
||||
|
|
@ -112,7 +111,7 @@ void e2d::EText::_render()
|
|||
m_bWordWrapping ? m_fWordWrappingWidth : m_Size.width,
|
||||
getRealHeight()
|
||||
),
|
||||
GetSolidColorBrush()
|
||||
ERenderer::getSolidColorBrush()
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -139,7 +138,7 @@ void e2d::EText::_initTextLayout()
|
|||
// »ñÈ¡ TextLayout
|
||||
IDWriteTextLayout * pDWriteTextLayout = nullptr;
|
||||
|
||||
HRESULT hr = GetDirectWriteFactory()->CreateTextLayout(
|
||||
HRESULT hr = ERenderer::getIDWriteFactory()->CreateTextLayout(
|
||||
m_sText,
|
||||
UINT32(m_sText.length()),
|
||||
m_pFont->_getTextFormat(),
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
#include "..\etools.h"
|
||||
|
||||
|
||||
void e2d::EData::saveInt(const EString & key, int value)
|
||||
{
|
||||
::WritePrivateProfileString(L"Default", key, EString::parse(value), EFile::getDefaultSavePath());
|
||||
}
|
||||
|
||||
void e2d::EData::saveFloat(const EString & key, float value)
|
||||
{
|
||||
::WritePrivateProfileString(L"Default", key, EString::parse(value), EFile::getDefaultSavePath());
|
||||
}
|
||||
|
||||
void e2d::EData::saveString(const EString & key, const EString & value)
|
||||
{
|
||||
::WritePrivateProfileString(L"Default", key, value, EFile::getDefaultSavePath());
|
||||
}
|
||||
|
||||
int e2d::EData::getInt(const EString & key, int default)
|
||||
{
|
||||
return ::GetPrivateProfileInt(L"Default", key, default, EFile::getDefaultSavePath());
|
||||
}
|
||||
|
||||
float e2d::EData::getFloat(const EString & key, float default)
|
||||
{
|
||||
wchar_t temp[32] = { 0 };
|
||||
::GetPrivateProfileString(L"Default", key, EString::parse(default), temp, 31, EFile::getDefaultSavePath());
|
||||
return std::stof(temp);
|
||||
}
|
||||
|
||||
e2d::EString e2d::EData::getString(const EString & key, const EString & default)
|
||||
{
|
||||
wchar_t temp[256] = { 0 };
|
||||
::GetPrivateProfileString(L"Default", key, default, temp, 255, EFile::getDefaultSavePath());
|
||||
return temp;
|
||||
}
|
||||
|
|
@ -1,150 +0,0 @@
|
|||
#include "..\etools.h"
|
||||
#include <mmsystem.h>
|
||||
#include "..\Win\MciPlayer.h"
|
||||
#include <map>
|
||||
|
||||
typedef std::pair<UINT, MciPlayer *> Music;
|
||||
typedef std::map<UINT, MciPlayer *> MusicList;
|
||||
|
||||
static MusicList& getMciPlayerList()
|
||||
{
|
||||
static MusicList s_List;
|
||||
return s_List;
|
||||
}
|
||||
|
||||
|
||||
UINT e2d::EMusicUtils::playMusic(const EString & musicFilePath, int repeatTimes)
|
||||
{
|
||||
UINT nRet = preloadMusic(musicFilePath);
|
||||
|
||||
if (nRet)
|
||||
{
|
||||
getMciPlayerList()[nRet]->play(repeatTimes);
|
||||
}
|
||||
return nRet;
|
||||
}
|
||||
|
||||
UINT e2d::EMusicUtils::playMusic(const EString & musicResourceName, const EString & musicResourceType, const EString & musicExtension, int repeatTimes)
|
||||
{
|
||||
UINT nRet = preloadMusic(musicResourceName, musicResourceType, musicExtension);
|
||||
|
||||
if (nRet)
|
||||
{
|
||||
getMciPlayerList()[nRet]->play(repeatTimes);
|
||||
}
|
||||
return nRet;
|
||||
}
|
||||
|
||||
UINT e2d::EMusicUtils::preloadMusic(const EString & musicFilePath)
|
||||
{
|
||||
if (musicFilePath.isEmpty())
|
||||
return 0;
|
||||
|
||||
UINT nRet = musicFilePath.hash();
|
||||
|
||||
if (getMciPlayerList().end() != getMciPlayerList().find(nRet))
|
||||
return nRet;
|
||||
|
||||
getMciPlayerList().insert(Music(nRet, new MciPlayer()));
|
||||
MciPlayer * pPlayer = getMciPlayerList()[nRet];
|
||||
pPlayer->open(musicFilePath, nRet);
|
||||
|
||||
if (nRet == pPlayer->getMusicID()) return nRet;
|
||||
|
||||
delete pPlayer;
|
||||
getMciPlayerList().erase(nRet);
|
||||
return 0;
|
||||
}
|
||||
|
||||
UINT e2d::EMusicUtils::preloadMusic(const EString & musicResourceName, const EString & musicResourceType, const EString & musicExtension)
|
||||
{
|
||||
if (musicResourceName.isEmpty() || musicResourceType.isEmpty())
|
||||
return 0;
|
||||
|
||||
UINT nRet = musicResourceName.hash();
|
||||
|
||||
if (getMciPlayerList().end() != getMciPlayerList().find(nRet))
|
||||
return nRet;
|
||||
|
||||
getMciPlayerList().insert(Music(nRet, new MciPlayer()));
|
||||
MciPlayer * pPlayer = getMciPlayerList()[nRet];
|
||||
pPlayer->open(musicResourceName, musicResourceType, musicExtension, nRet);
|
||||
|
||||
if (nRet == pPlayer->getMusicID()) return nRet;
|
||||
|
||||
delete pPlayer;
|
||||
getMciPlayerList().erase(nRet);
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool e2d::EMusicUtils::resumeMusic(UINT musicId)
|
||||
{
|
||||
MusicList::iterator p = getMciPlayerList().find(musicId);
|
||||
if (p != getMciPlayerList().end())
|
||||
{
|
||||
p->second->resume();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::EMusicUtils::resumeMusic(const EString & musicName)
|
||||
{
|
||||
return resumeMusic(musicName.hash());;
|
||||
}
|
||||
|
||||
bool e2d::EMusicUtils::pauseMusic(UINT musicId)
|
||||
{
|
||||
MusicList::iterator p = getMciPlayerList().find(musicId);
|
||||
if (p != getMciPlayerList().end())
|
||||
{
|
||||
p->second->pause();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::EMusicUtils::pauseMusic(const EString & musicName)
|
||||
{
|
||||
return pauseMusic(musicName.hash());
|
||||
}
|
||||
|
||||
bool e2d::EMusicUtils::stopMusic(UINT musicId)
|
||||
{
|
||||
MusicList::iterator p = getMciPlayerList().find(musicId);
|
||||
if (p != getMciPlayerList().end())
|
||||
{
|
||||
p->second->stop();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::EMusicUtils::stopMusic(const EString & musicName)
|
||||
{
|
||||
return stopMusic(musicName.hash());;
|
||||
}
|
||||
|
||||
void e2d::EMusicUtils::pauseAllMusics()
|
||||
{
|
||||
for (auto iter = getMciPlayerList().begin(); iter != getMciPlayerList().end(); iter++)
|
||||
{
|
||||
(*iter).second->pause();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMusicUtils::resumeAllMusics()
|
||||
{
|
||||
for (auto iter = getMciPlayerList().begin(); iter != getMciPlayerList().end(); iter++)
|
||||
{
|
||||
(*iter).second->resume();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMusicUtils::stopAllMusics()
|
||||
{
|
||||
for (auto iter = getMciPlayerList().begin(); iter != getMciPlayerList().end(); iter++)
|
||||
{
|
||||
(*iter).second->stop();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
#include "..\etools.h"
|
||||
#include "..\Win\winbase.h"
|
||||
#include <algorithm>
|
||||
#include <commdlg.h>
|
||||
|
||||
|
|
@ -9,13 +8,9 @@
|
|||
|
||||
DEFINE_KNOWN_FOLDER(FOLDERID_LocalAppData, 0xF1B32785, 0x6FBA, 0x4FCF, 0x9D, 0x55, 0x7B, 0x8E, 0x7F, 0x15, 0x70, 0x91);
|
||||
|
||||
typedef HRESULT(WINAPI* pFunSHGetKnownFolderPath)(
|
||||
const GUID& rfid,
|
||||
DWORD dwFlags,
|
||||
HANDLE hToken,
|
||||
PWSTR *ppszPath);
|
||||
typedef HRESULT(WINAPI* pFunSHGetKnownFolderPath)(const GUID& rfid, DWORD dwFlags, HANDLE hToken, PWSTR *ppszPath);
|
||||
|
||||
e2d::EString e2d::EFileUtils::getLocalAppDataPath()
|
||||
e2d::EString e2d::EFile::getLocalAppDataPath()
|
||||
{
|
||||
// 获取 AppData\Local 文件夹的路径
|
||||
PWSTR pszPath = NULL;
|
||||
|
|
@ -32,14 +27,14 @@ e2d::EString e2d::EFileUtils::getLocalAppDataPath()
|
|||
return L"";
|
||||
}
|
||||
|
||||
e2d::EString e2d::EFileUtils::getTempPath()
|
||||
e2d::EString e2d::EFile::getTempPath()
|
||||
{
|
||||
// 获取临时文件目录
|
||||
wchar_t path[_MAX_PATH];
|
||||
::GetTempPath(_MAX_PATH, path);
|
||||
|
||||
// 创建临时文件目录
|
||||
e2d::EString tempFilePath = path + e2d::EApp::getAppName();
|
||||
e2d::EString tempFilePath = path + e2d::EGame::getAppName();
|
||||
if (_waccess(tempFilePath, 0) == -1)
|
||||
{
|
||||
_wmkdir(tempFilePath);
|
||||
|
|
@ -47,12 +42,12 @@ e2d::EString e2d::EFileUtils::getTempPath()
|
|||
return tempFilePath;
|
||||
}
|
||||
|
||||
e2d::EString e2d::EFileUtils::getDefaultSavePath()
|
||||
e2d::EString e2d::EFile::getDefaultSavePath()
|
||||
{
|
||||
EString path = EFileUtils::getLocalAppDataPath();
|
||||
EString path = EFile::getLocalAppDataPath();
|
||||
WARN_IF(path.isEmpty(), "Cannot get local AppData path!");
|
||||
|
||||
path += L"\\" + EApp::getAppName();
|
||||
path += L"\\" + EGame::getAppName();
|
||||
|
||||
if (_waccess(path, 0) == -1)
|
||||
{
|
||||
|
|
@ -64,45 +59,11 @@ e2d::EString e2d::EFileUtils::getDefaultSavePath()
|
|||
return path;
|
||||
}
|
||||
|
||||
void e2d::EFileUtils::saveInt(const EString & key, int value)
|
||||
{
|
||||
::WritePrivateProfileString(L"Default", key, EString::parse(value), getDefaultSavePath());
|
||||
}
|
||||
|
||||
void e2d::EFileUtils::saveFloat(const EString & key, float value)
|
||||
{
|
||||
::WritePrivateProfileString(L"Default", key, EString::parse(value), getDefaultSavePath());
|
||||
}
|
||||
|
||||
void e2d::EFileUtils::saveString(const EString & key, const EString & value)
|
||||
{
|
||||
::WritePrivateProfileString(L"Default", key, value, getDefaultSavePath());
|
||||
}
|
||||
|
||||
int e2d::EFileUtils::getInt(const EString & key, int default)
|
||||
{
|
||||
return ::GetPrivateProfileInt(L"Default", key, default, getDefaultSavePath());
|
||||
}
|
||||
|
||||
float e2d::EFileUtils::getFloat(const EString & key, float default)
|
||||
{
|
||||
wchar_t temp[32] = { 0 };
|
||||
::GetPrivateProfileString(L"Default", key, EString::parse(default), temp, 31, getDefaultSavePath());
|
||||
return std::stof(temp);
|
||||
}
|
||||
|
||||
e2d::EString e2d::EFileUtils::getString(const EString & key, const EString & default)
|
||||
{
|
||||
wchar_t temp[256] = { 0 };
|
||||
::GetPrivateProfileString(L"Default", key, default, temp, 255, getDefaultSavePath());
|
||||
return temp;
|
||||
}
|
||||
|
||||
e2d::EString e2d::EFileUtils::getFileExtension(const EString & filePath)
|
||||
e2d::EString e2d::EFile::getFileExtension(const EString & filePath)
|
||||
{
|
||||
EString fileExtension;
|
||||
// 找到文件名中的最后一个 '.' 的位置
|
||||
size_t pos = filePath.findLastOf(L'.');
|
||||
int pos = filePath.findLastOf(L'.');
|
||||
// 判断 pos 是否是个有效位置
|
||||
if (pos != -1)
|
||||
{
|
||||
|
|
@ -115,13 +76,13 @@ e2d::EString e2d::EFileUtils::getFileExtension(const EString & filePath)
|
|||
return fileExtension;
|
||||
}
|
||||
|
||||
e2d::EString e2d::EFileUtils::getSaveFilePath(const EString & title, const EString & defExt)
|
||||
e2d::EString e2d::EFile::getSaveFilePath(const EString & title, const EString & defExt)
|
||||
{
|
||||
// 弹出保存对话框
|
||||
OPENFILENAME ofn = { 0 };
|
||||
TCHAR strFilename[MAX_PATH] = { 0 }; // 用于接收文件名
|
||||
ofn.lStructSize = sizeof(OPENFILENAME); // 结构体大小
|
||||
ofn.hwndOwner = GetHWnd(); // ´°¿Ú¾ä±ú
|
||||
ofn.hwndOwner = EWindow::getHWnd(); // ´°¿Ú¾ä±ú
|
||||
ofn.lpstrFilter = L"所有文件\0*.*\0\0"; // 设置过滤
|
||||
ofn.nFilterIndex = 1; // 过滤器索引
|
||||
ofn.lpstrFile = strFilename; // 接收返回的文件路径和文件名
|
||||
|
|
@ -136,4 +97,4 @@ e2d::EString e2d::EFileUtils::getSaveFilePath(const EString & title, const EStri
|
|||
return strFilename;
|
||||
}
|
||||
return L"";
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
#include "..\etools.h"
|
||||
#include <map>
|
||||
#include <mmsystem.h>
|
||||
#include "winbase.h"
|
||||
#include "MciPlayer.h"
|
||||
#pragma comment(lib , "winmm.lib")
|
||||
|
||||
#define WIN_CLASS_NAME L"MciPlayerCallbackWnd"
|
||||
|
|
@ -11,8 +10,36 @@ static HINSTANCE s_hInstance = nullptr;
|
|||
LRESULT WINAPI _MciPlayerProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||||
static bool ExtractResource(LPCTSTR strDstFile, LPCTSTR strResType, LPCTSTR strResName);
|
||||
|
||||
class MciPlayer
|
||||
{
|
||||
public:
|
||||
MciPlayer();
|
||||
~MciPlayer();
|
||||
|
||||
MciPlayer::MciPlayer()
|
||||
void close();
|
||||
bool open(const e2d::EString & pFileName, UINT uId);
|
||||
bool open(const e2d::EString & pResouceName, const e2d::EString & pResouceType, const e2d::EString & musicExtension, UINT uId);
|
||||
void play(int repeatTimes);
|
||||
void pause();
|
||||
void resume();
|
||||
void stop();
|
||||
void rewind();
|
||||
bool isPlaying();
|
||||
UINT getMusicID();
|
||||
|
||||
private:
|
||||
friend LRESULT WINAPI _MciPlayerProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||||
void _sendCommand(int nCommand, DWORD_PTR param1 = 0, DWORD_PTR parma2 = 0);
|
||||
|
||||
MCIDEVICEID m_dev;
|
||||
HWND m_wnd;
|
||||
UINT m_nMusicID;
|
||||
bool m_bPlaying;
|
||||
int m_nRepeatTimes;
|
||||
};
|
||||
|
||||
|
||||
MciPlayer::MciPlayer()
|
||||
: m_wnd(NULL)
|
||||
, m_dev(0L)
|
||||
, m_nMusicID(0)
|
||||
|
|
@ -72,7 +99,7 @@ bool MciPlayer::open(const e2d::EString & pFileName, UINT uId)
|
|||
close();
|
||||
|
||||
MCI_OPEN_PARMS mciOpen = { 0 };
|
||||
mciOpen.lpstrDeviceType = (LPCTSTR)MCI_ALL_DEVICE_ID;
|
||||
mciOpen.lpstrDeviceType = 0;
|
||||
mciOpen.lpstrElementName = pFileName;
|
||||
|
||||
MCIERROR mciError;
|
||||
|
|
@ -99,7 +126,7 @@ bool MciPlayer::open(const e2d::EString & pResouceName, const e2d::EString & pRe
|
|||
if (pResouceName.isEmpty() || pResouceType.isEmpty() || musicExtension.isEmpty()) return false;
|
||||
|
||||
// 获取临时文件目录
|
||||
e2d::EString tempFileName = e2d::EFileUtils::getTempPath();
|
||||
e2d::EString tempFileName = e2d::EFile::getTempPath();
|
||||
|
||||
// 产生临时文件的文件名
|
||||
tempFileName = tempFileName + L"\\" + uId + L"." + musicExtension;
|
||||
|
|
@ -251,11 +278,11 @@ LRESULT WINAPI _MciPlayerProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
|||
|
||||
if (pPlayer->m_nRepeatTimes)
|
||||
{
|
||||
mciSendCommand(lParam, MCI_SEEK, MCI_SEEK_TO_START, 0);
|
||||
mciSendCommand(static_cast<MCIDEVICEID>(lParam), MCI_SEEK, MCI_SEEK_TO_START, 0);
|
||||
|
||||
MCI_PLAY_PARMS mciPlay = { 0 };
|
||||
mciPlay.dwCallback = reinterpret_cast<DWORD_PTR>(hWnd);
|
||||
mciSendCommand(lParam, MCI_PLAY, MCI_NOTIFY, reinterpret_cast<DWORD_PTR>(&mciPlay));
|
||||
mciSendCommand(static_cast<MCIDEVICEID>(lParam), MCI_PLAY, MCI_NOTIFY, reinterpret_cast<DWORD_PTR>(&mciPlay));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -264,4 +291,153 @@ LRESULT WINAPI _MciPlayerProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
|||
}
|
||||
}
|
||||
return DefWindowProc(hWnd, Msg, wParam, lParam);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
typedef std::pair<UINT, MciPlayer *> MusicPair;
|
||||
typedef std::map<UINT, MciPlayer *> MusicList;
|
||||
|
||||
static MusicList& getMciPlayerList()
|
||||
{
|
||||
static MusicList s_List;
|
||||
return s_List;
|
||||
}
|
||||
|
||||
|
||||
UINT e2d::EMusic::play(const EString & musicFilePath, int repeatTimes)
|
||||
{
|
||||
UINT nRet = preload(musicFilePath);
|
||||
|
||||
if (nRet)
|
||||
{
|
||||
getMciPlayerList()[nRet]->play(repeatTimes);
|
||||
}
|
||||
return nRet;
|
||||
}
|
||||
|
||||
UINT e2d::EMusic::play(const EString & musicResourceName, const EString & musicResourceType, const EString & musicExtension, int repeatTimes)
|
||||
{
|
||||
UINT nRet = preload(musicResourceName, musicResourceType, musicExtension);
|
||||
|
||||
if (nRet)
|
||||
{
|
||||
getMciPlayerList()[nRet]->play(repeatTimes);
|
||||
}
|
||||
return nRet;
|
||||
}
|
||||
|
||||
UINT e2d::EMusic::preload(const EString & musicFilePath)
|
||||
{
|
||||
if (musicFilePath.isEmpty())
|
||||
return 0;
|
||||
|
||||
UINT nRet = musicFilePath.hash();
|
||||
|
||||
if (getMciPlayerList().end() != getMciPlayerList().find(nRet))
|
||||
return nRet;
|
||||
|
||||
getMciPlayerList().insert(MusicPair(nRet, new MciPlayer()));
|
||||
MciPlayer * pPlayer = getMciPlayerList()[nRet];
|
||||
pPlayer->open(musicFilePath, nRet);
|
||||
|
||||
if (nRet == pPlayer->getMusicID()) return nRet;
|
||||
|
||||
delete pPlayer;
|
||||
getMciPlayerList().erase(nRet);
|
||||
return 0;
|
||||
}
|
||||
|
||||
UINT e2d::EMusic::preload(const EString & musicResourceName, const EString & musicResourceType, const EString & musicExtension)
|
||||
{
|
||||
if (musicResourceName.isEmpty() || musicResourceType.isEmpty())
|
||||
return 0;
|
||||
|
||||
UINT nRet = musicResourceName.hash();
|
||||
|
||||
if (getMciPlayerList().end() != getMciPlayerList().find(nRet))
|
||||
return nRet;
|
||||
|
||||
getMciPlayerList().insert(MusicPair(nRet, new MciPlayer()));
|
||||
MciPlayer * pPlayer = getMciPlayerList()[nRet];
|
||||
pPlayer->open(musicResourceName, musicResourceType, musicExtension, nRet);
|
||||
|
||||
if (nRet == pPlayer->getMusicID()) return nRet;
|
||||
|
||||
delete pPlayer;
|
||||
getMciPlayerList().erase(nRet);
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool e2d::EMusic::resume(UINT musicId)
|
||||
{
|
||||
MusicList::iterator p = getMciPlayerList().find(musicId);
|
||||
if (p != getMciPlayerList().end())
|
||||
{
|
||||
p->second->resume();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::EMusic::resume(const EString & musicName)
|
||||
{
|
||||
return resume(musicName.hash());;
|
||||
}
|
||||
|
||||
bool e2d::EMusic::pause(UINT musicId)
|
||||
{
|
||||
MusicList::iterator p = getMciPlayerList().find(musicId);
|
||||
if (p != getMciPlayerList().end())
|
||||
{
|
||||
p->second->pause();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::EMusic::pause(const EString & musicName)
|
||||
{
|
||||
return pause(musicName.hash());
|
||||
}
|
||||
|
||||
bool e2d::EMusic::stop(UINT musicId)
|
||||
{
|
||||
MusicList::iterator p = getMciPlayerList().find(musicId);
|
||||
if (p != getMciPlayerList().end())
|
||||
{
|
||||
p->second->stop();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool e2d::EMusic::stop(const EString & musicName)
|
||||
{
|
||||
return stop(musicName.hash());;
|
||||
}
|
||||
|
||||
void e2d::EMusic::pauseAllMusics()
|
||||
{
|
||||
for (auto iter = getMciPlayerList().begin(); iter != getMciPlayerList().end(); iter++)
|
||||
{
|
||||
(*iter).second->pause();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMusic::resumeAllMusics()
|
||||
{
|
||||
for (auto iter = getMciPlayerList().begin(); iter != getMciPlayerList().end(); iter++)
|
||||
{
|
||||
(*iter).second->resume();
|
||||
}
|
||||
}
|
||||
|
||||
void e2d::EMusic::stopAllMusics()
|
||||
{
|
||||
for (auto iter = getMciPlayerList().begin(); iter != getMciPlayerList().end(); iter++)
|
||||
{
|
||||
(*iter).second->stop();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,25 +1,26 @@
|
|||
#include "..\etools.h"
|
||||
#include "..\enodes.h"
|
||||
#include "..\emanagers.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
e2d::ETimer::ETimer()
|
||||
: m_bRunning(false)
|
||||
, m_nRunTimes(0)
|
||||
, m_pParentNode(nullptr)
|
||||
, m_Callback(nullptr)
|
||||
, m_nInterval()
|
||||
, m_fInterval(0)
|
||||
, m_fLast(0)
|
||||
, m_nRepeatTimes(-1)
|
||||
, m_bAtOnce(false)
|
||||
{
|
||||
}
|
||||
|
||||
e2d::ETimer::ETimer(const TIMER_CALLBACK & callback, int repeatTimes /* = -1 */, LONGLONG interval /* = 0 */, bool atOnce /* = false */)
|
||||
e2d::ETimer::ETimer(const TimerCallback & callback, int repeatTimes /* = -1 */, float interval /* = 0 */, bool atOnce /* = false */)
|
||||
: m_bRunning(false)
|
||||
, m_nRunTimes(0)
|
||||
, m_pParentNode(nullptr)
|
||||
, m_Callback(nullptr)
|
||||
, m_nInterval()
|
||||
, m_fInterval(0)
|
||||
, m_fLast(0)
|
||||
, m_nRepeatTimes(-1)
|
||||
, m_bAtOnce(false)
|
||||
{
|
||||
|
|
@ -29,12 +30,13 @@ e2d::ETimer::ETimer(const TIMER_CALLBACK & callback, int repeatTimes /* = -1 */,
|
|||
m_bAtOnce = atOnce;
|
||||
}
|
||||
|
||||
e2d::ETimer::ETimer(const EString & name, const TIMER_CALLBACK & callback, int repeatTimes /* = -1 */, LONGLONG interval /* = 0 */, bool atOnce /* = false */)
|
||||
e2d::ETimer::ETimer(const EString & name, const TimerCallback & callback, int repeatTimes /* = -1 */, float interval /* = 0 */, bool atOnce /* = false */)
|
||||
: m_bRunning(false)
|
||||
, m_nRunTimes(0)
|
||||
, m_pParentNode(nullptr)
|
||||
, m_Callback(nullptr)
|
||||
, m_nInterval()
|
||||
, m_fInterval(0)
|
||||
, m_fLast(0)
|
||||
, m_nRepeatTimes(-1)
|
||||
, m_bAtOnce(false)
|
||||
{
|
||||
|
|
@ -53,7 +55,7 @@ bool e2d::ETimer::isRunning() const
|
|||
void e2d::ETimer::start()
|
||||
{
|
||||
m_bRunning = true;
|
||||
m_tLast = GetNow();
|
||||
m_fLast = ETime::getTotalTime();
|
||||
}
|
||||
|
||||
void e2d::ETimer::stop()
|
||||
|
|
@ -76,12 +78,12 @@ void e2d::ETimer::setName(const EString & name)
|
|||
m_sName = name;
|
||||
}
|
||||
|
||||
void e2d::ETimer::setInterval(LONGLONG interval)
|
||||
void e2d::ETimer::setInterval(float interval)
|
||||
{
|
||||
SetInterval(m_nInterval, max(interval, 0));
|
||||
m_fInterval = max(interval, 0);
|
||||
}
|
||||
|
||||
void e2d::ETimer::setCallback(const TIMER_CALLBACK & callback)
|
||||
void e2d::ETimer::setCallback(const TimerCallback & callback)
|
||||
{
|
||||
m_Callback = callback;
|
||||
}
|
||||
|
|
@ -125,17 +127,17 @@ bool e2d::ETimer::_isReady()
|
|||
{
|
||||
if (m_bRunning &&
|
||||
m_pParentNode &&
|
||||
m_pParentNode->getParentScene() == EApp::getCurrentScene())
|
||||
m_pParentNode->getParentScene() == ESceneManager::getCurrentScene())
|
||||
{
|
||||
if (m_bAtOnce && m_nRunTimes == 0)
|
||||
return true;
|
||||
|
||||
if (m_nInterval.QuadPart == 0)
|
||||
if (m_fInterval == 0)
|
||||
return true;
|
||||
|
||||
if (IsIntervalFull(m_tLast, m_nInterval))
|
||||
if ((ETime::getTotalTime() - m_fLast) >= m_fInterval)
|
||||
{
|
||||
m_tLast.QuadPart += m_nInterval.QuadPart;
|
||||
m_fLast += m_fInterval;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,15 +1,14 @@
|
|||
#include "..\ebase.h"
|
||||
#include "..\etransitions.h"
|
||||
#include "..\Win\winbase.h"
|
||||
|
||||
e2d::ETransition::ETransition(float duration)
|
||||
: m_bEnd(false)
|
||||
, m_fTotalDuration(duration * 1000)
|
||||
, m_fDuration(0)
|
||||
, m_fLast(0)
|
||||
, m_fRateOfProgress(0)
|
||||
, m_pPrevScene(nullptr)
|
||||
, m_pNextScene(nullptr)
|
||||
{
|
||||
SetInterval(m_nAnimationInterval, 15LL);
|
||||
m_fDuration = max(duration, 0);
|
||||
}
|
||||
|
||||
bool e2d::ETransition::isEnding()
|
||||
|
|
@ -17,25 +16,17 @@ bool e2d::ETransition::isEnding()
|
|||
return m_bEnd;
|
||||
}
|
||||
|
||||
bool e2d::ETransition::_isDelayEnough()
|
||||
void e2d::ETransition::_calcRateOfProgress()
|
||||
{
|
||||
// 判断时间间隔是否足够
|
||||
if (m_fTotalDuration == 0)
|
||||
if (m_fDuration == 0)
|
||||
{
|
||||
m_fRateOfProgress = 1;
|
||||
return true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsIntervalFull(m_tLast, m_nAnimationInterval))
|
||||
{
|
||||
// 重新记录时间
|
||||
m_tLast.QuadPart += m_nAnimationInterval.QuadPart;
|
||||
m_fDuration += static_cast<float>(ToMilliseconds(m_nAnimationInterval.QuadPart));
|
||||
// 计算动画进度
|
||||
m_fRateOfProgress = m_fDuration / m_fTotalDuration;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
// 计算动画进度
|
||||
m_fRateOfProgress = min((ETime::getTotalTime() - m_fLast) / m_fDuration, 1);
|
||||
}
|
||||
|
||||
void e2d::ETransition::_stop()
|
||||
|
|
@ -46,7 +37,7 @@ void e2d::ETransition::_stop()
|
|||
|
||||
void e2d::ETransition::_setTarget(EScene * prev, EScene * next)
|
||||
{
|
||||
m_tLast = GetNow();
|
||||
m_fLast = ETime::getTotalTime();
|
||||
m_pPrevScene = prev;
|
||||
m_pNextScene = next;
|
||||
_init();
|
||||
|
|
|
|||
|
|
@ -8,15 +8,14 @@ e2d::ETransitionEmerge::ETransitionEmerge(float duration)
|
|||
|
||||
void e2d::ETransitionEmerge::_update()
|
||||
{
|
||||
if (_isDelayEnough())
|
||||
{
|
||||
if (m_pPrevScene) m_pPrevScene->getRoot()->setOpacity(1 - m_fRateOfProgress);
|
||||
m_pNextScene->getRoot()->setOpacity(m_fRateOfProgress);
|
||||
this->_calcRateOfProgress();
|
||||
|
||||
if (m_fDuration >= m_fTotalDuration)
|
||||
{
|
||||
this->_stop();
|
||||
}
|
||||
if (m_pPrevScene) m_pPrevScene->getRoot()->setOpacity(1 - m_fRateOfProgress);
|
||||
m_pNextScene->getRoot()->setOpacity(m_fRateOfProgress);
|
||||
|
||||
if (m_fRateOfProgress >= 1)
|
||||
{
|
||||
this->_stop();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,34 +3,33 @@
|
|||
|
||||
e2d::ETransitionFade::ETransitionFade(float fadeOutDuration, float fadeInDuration)
|
||||
: ETransition(0)
|
||||
, m_fFadeOutDuration(fadeOutDuration * 1000)
|
||||
, m_fFadeInDuration(fadeInDuration * 1000)
|
||||
, m_fFadeOutDuration(fadeOutDuration)
|
||||
, m_fFadeInDuration(fadeInDuration)
|
||||
, m_bFadeOutTransioning(true)
|
||||
{
|
||||
m_fTotalDuration = m_fFadeOutDuration;
|
||||
m_fDuration = max(m_fFadeOutDuration, 0);
|
||||
}
|
||||
|
||||
void e2d::ETransitionFade::_update()
|
||||
{
|
||||
if (_isDelayEnough())
|
||||
this->_calcRateOfProgress();
|
||||
|
||||
if (m_bFadeOutTransioning)
|
||||
{
|
||||
if (m_bFadeOutTransioning)
|
||||
m_pPrevScene->getRoot()->setOpacity(1 - m_fRateOfProgress);
|
||||
if (m_fRateOfProgress >= 1)
|
||||
{
|
||||
m_pPrevScene->getRoot()->setOpacity(1 - m_fRateOfProgress);
|
||||
if (m_fDuration >= m_fTotalDuration)
|
||||
{
|
||||
m_bFadeOutTransioning = false;
|
||||
m_fTotalDuration = m_fFadeInDuration;
|
||||
m_fDuration = 0;
|
||||
}
|
||||
m_bFadeOutTransioning = false;
|
||||
m_fDuration = max(m_fFadeInDuration, 0);
|
||||
m_fLast = ETime::getTotalTime();
|
||||
}
|
||||
else
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pNextScene->getRoot()->setOpacity(m_fRateOfProgress);
|
||||
if (m_fRateOfProgress >= 1)
|
||||
{
|
||||
m_pNextScene->getRoot()->setOpacity(m_fRateOfProgress);
|
||||
if (m_fDuration >= m_fTotalDuration)
|
||||
{
|
||||
this->_stop();
|
||||
}
|
||||
this->_stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -45,7 +44,7 @@ void e2d::ETransitionFade::_init()
|
|||
else
|
||||
{
|
||||
m_bFadeOutTransioning = false;
|
||||
m_fTotalDuration = m_fFadeInDuration;
|
||||
m_fDuration = m_fFadeInDuration;
|
||||
}
|
||||
m_pNextScene->getRoot()->setOpacity(0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,15 +9,14 @@ e2d::ETransitionMove::ETransitionMove(float duration, MOVE_DIRECT direct)
|
|||
|
||||
void e2d::ETransitionMove::_update()
|
||||
{
|
||||
if (_isDelayEnough())
|
||||
{
|
||||
if (m_pPrevScene) m_pPrevScene->getRoot()->setPos(m_Vec * m_fRateOfProgress);
|
||||
m_pNextScene->getRoot()->setPos(m_NextPos + m_Vec * m_fRateOfProgress);
|
||||
this->_calcRateOfProgress();
|
||||
|
||||
if (m_fDuration >= m_fTotalDuration)
|
||||
{
|
||||
this->_stop();
|
||||
}
|
||||
if (m_pPrevScene) m_pPrevScene->getRoot()->setPos(m_Vec * m_fRateOfProgress);
|
||||
m_pNextScene->getRoot()->setPos(m_NextPos + m_Vec * m_fRateOfProgress);
|
||||
|
||||
if (m_fRateOfProgress >= 1)
|
||||
{
|
||||
this->_stop();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -25,23 +24,23 @@ void e2d::ETransitionMove::_init()
|
|||
{
|
||||
if (m_Direct == ETransitionMove::UP)
|
||||
{
|
||||
m_Vec = EVec(0, -EApp::getHeight());
|
||||
m_NextPos = EPoint(0, EApp::getHeight());
|
||||
m_Vec = EVector2(0, -EWindow::getHeight());
|
||||
m_NextPos = EPoint(0, EWindow::getHeight());
|
||||
}
|
||||
else if (m_Direct == ETransitionMove::DOWN)
|
||||
{
|
||||
m_Vec = EVec(0, EApp::getHeight());
|
||||
m_NextPos = EPoint(0, -EApp::getHeight());
|
||||
m_Vec = EVector2(0, EWindow::getHeight());
|
||||
m_NextPos = EPoint(0, -EWindow::getHeight());
|
||||
}
|
||||
else if (m_Direct == ETransitionMove::LEFT)
|
||||
{
|
||||
m_Vec = EVec(-EApp::getWidth(), 0);
|
||||
m_NextPos = EPoint(EApp::getWidth(), 0);
|
||||
m_Vec = EVector2(-EWindow::getWidth(), 0);
|
||||
m_NextPos = EPoint(EWindow::getWidth(), 0);
|
||||
}
|
||||
else if (m_Direct == ETransitionMove::RIGHT)
|
||||
{
|
||||
m_Vec = EVec(EApp::getWidth(), 0);
|
||||
m_NextPos = EPoint(-EApp::getWidth(), 0);
|
||||
m_Vec = EVector2(EWindow::getWidth(), 0);
|
||||
m_NextPos = EPoint(-EWindow::getWidth(), 0);
|
||||
}
|
||||
|
||||
if (m_pPrevScene) m_pPrevScene->getRoot()->setPos(0, 0);
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
class MciPlayer
|
||||
{
|
||||
public:
|
||||
MciPlayer();
|
||||
~MciPlayer();
|
||||
|
||||
void close();
|
||||
bool open(const e2d::EString & pFileName, UINT uId);
|
||||
bool open(const e2d::EString & pResouceName, const e2d::EString & pResouceType, const e2d::EString & musicExtension, UINT uId);
|
||||
void play(int repeatTimes);
|
||||
void pause();
|
||||
void resume();
|
||||
void stop();
|
||||
void rewind();
|
||||
bool isPlaying();
|
||||
UINT getMusicID();
|
||||
|
||||
private:
|
||||
friend LRESULT WINAPI _MciPlayerProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||||
void _sendCommand(int nCommand, DWORD_PTR param1 = 0, DWORD_PTR parma2 = 0);
|
||||
|
||||
MCIDEVICEID m_dev;
|
||||
HWND m_wnd;
|
||||
UINT m_nMusicID;
|
||||
bool m_bPlaying;
|
||||
int m_nRepeatTimes;
|
||||
};
|
||||
|
|
@ -1,136 +0,0 @@
|
|||
#include "winbase.h"
|
||||
|
||||
|
||||
static HWND s_HWnd = nullptr;
|
||||
static ID2D1Factory * s_pDirect2dFactory = nullptr;
|
||||
static ID2D1HwndRenderTarget * s_pRenderTarget = nullptr;
|
||||
static ID2D1SolidColorBrush * s_pSolidBrush = nullptr;
|
||||
static IWICImagingFactory * s_pIWICFactory = nullptr;
|
||||
static IDWriteFactory * s_pDWriteFactory = nullptr;
|
||||
static LARGE_INTEGER s_tNow;
|
||||
static LARGE_INTEGER s_tFreq;
|
||||
|
||||
|
||||
HWND &GetHWnd()
|
||||
{
|
||||
return s_HWnd;
|
||||
}
|
||||
|
||||
ID2D1Factory * &GetFactory()
|
||||
{
|
||||
if (!s_pDirect2dFactory)
|
||||
{
|
||||
// 创建设备无关资源,它们的生命周期和程序的时长相同
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
// 创建一个 Direct2D 工厂
|
||||
hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &s_pDirect2dFactory);
|
||||
|
||||
ASSERT(SUCCEEDED(hr), "Create Device Independent Resources Failed!");
|
||||
}
|
||||
return s_pDirect2dFactory;
|
||||
}
|
||||
|
||||
ID2D1HwndRenderTarget * &GetRenderTarget()
|
||||
{
|
||||
if (!s_pRenderTarget)
|
||||
{
|
||||
// 创建设备相关资源。这些资源应在 Direct3D 设备消失时重建,
|
||||
// 比如当 isVisiable 被修改,等等
|
||||
RECT rc;
|
||||
GetClientRect(GetHWnd(), &rc);
|
||||
|
||||
D2D1_SIZE_U size = D2D1::SizeU(
|
||||
rc.right - rc.left,
|
||||
rc.bottom - rc.top
|
||||
);
|
||||
|
||||
// 创建一个 Direct2D 渲染目标
|
||||
HRESULT hr;
|
||||
hr = GetFactory()->CreateHwndRenderTarget(
|
||||
D2D1::RenderTargetProperties(),
|
||||
D2D1::HwndRenderTargetProperties(
|
||||
GetHWnd(),
|
||||
size),
|
||||
&s_pRenderTarget
|
||||
);
|
||||
|
||||
ASSERT(SUCCEEDED(hr), "Create Render Target Failed! Maybe you should initalize EApp first.");
|
||||
}
|
||||
return s_pRenderTarget;
|
||||
}
|
||||
|
||||
IWICImagingFactory * &GetImagingFactory()
|
||||
{
|
||||
if (!s_pIWICFactory)
|
||||
{
|
||||
// 创建 WIC 绘图工厂,用于统一处理各种格式的图片
|
||||
HRESULT hr = CoCreateInstance(
|
||||
CLSID_WICImagingFactory,
|
||||
NULL,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_IWICImagingFactory,
|
||||
reinterpret_cast<void**>(&s_pIWICFactory)
|
||||
);
|
||||
ASSERT(SUCCEEDED(hr), "Create WICImagingFactory Failed!");
|
||||
}
|
||||
return s_pIWICFactory;
|
||||
}
|
||||
|
||||
IDWriteFactory * &GetDirectWriteFactory()
|
||||
{
|
||||
if (!s_pDWriteFactory)
|
||||
{
|
||||
// 创建 DirectWrite 工厂
|
||||
HRESULT hr = DWriteCreateFactory(
|
||||
DWRITE_FACTORY_TYPE_SHARED,
|
||||
__uuidof(IDWriteFactory),
|
||||
reinterpret_cast<IUnknown**>(&s_pDWriteFactory)
|
||||
);
|
||||
ASSERT(SUCCEEDED(hr), "Create DirectWrite Factory Failed!");
|
||||
}
|
||||
return s_pDWriteFactory;
|
||||
}
|
||||
|
||||
ID2D1SolidColorBrush * &GetSolidColorBrush()
|
||||
{
|
||||
if (!s_pSolidBrush)
|
||||
{
|
||||
HRESULT hr;
|
||||
hr = GetRenderTarget()->CreateSolidColorBrush(
|
||||
D2D1::ColorF(D2D1::ColorF::White),
|
||||
&s_pSolidBrush
|
||||
);
|
||||
ASSERT(SUCCEEDED(hr), "Create Solid Color Brush Failed!");
|
||||
}
|
||||
return s_pSolidBrush;
|
||||
}
|
||||
|
||||
LARGE_INTEGER &GetFreq()
|
||||
{
|
||||
if (s_tFreq.QuadPart == 0)
|
||||
{
|
||||
QueryPerformanceFrequency(&s_tFreq); // 获取时钟频率
|
||||
}
|
||||
return s_tFreq;
|
||||
}
|
||||
|
||||
LARGE_INTEGER &GetNow()
|
||||
{
|
||||
return s_tNow;
|
||||
}
|
||||
|
||||
bool IsIntervalFull(const LARGE_INTEGER& tLast, const LARGE_INTEGER& tInterval)
|
||||
{
|
||||
return (s_tNow.QuadPart - tLast.QuadPart) >= tInterval.QuadPart;
|
||||
}
|
||||
|
||||
LONGLONG ToMilliseconds(LONGLONG tLast)
|
||||
{
|
||||
return tLast * 1000LL / GetFreq().QuadPart;
|
||||
}
|
||||
|
||||
void SetInterval(LARGE_INTEGER& nInterval, LONGLONG nIntervalMS)
|
||||
{
|
||||
nInterval.QuadPart = static_cast<LONGLONG>(GetFreq().QuadPart * nIntervalMS / 1000.0);
|
||||
}
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
#pragma once
|
||||
#include "..\emacros.h"
|
||||
|
||||
|
||||
#ifndef HINST_THISCOMPONENT
|
||||
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
|
||||
#define HINST_THISCOMPONENT ((HINSTANCE)&__ImageBase)
|
||||
#endif
|
||||
|
||||
|
||||
HWND &GetHWnd();
|
||||
|
||||
ID2D1Factory * &GetFactory();
|
||||
|
||||
ID2D1HwndRenderTarget * &GetRenderTarget();
|
||||
|
||||
ID2D1SolidColorBrush * &GetSolidColorBrush();
|
||||
|
||||
IWICImagingFactory * &GetImagingFactory();
|
||||
|
||||
IDWriteFactory * &GetDirectWriteFactory();
|
||||
|
||||
LARGE_INTEGER &GetFreq();
|
||||
|
||||
LARGE_INTEGER &GetNow();
|
||||
|
||||
bool IsIntervalFull(const LARGE_INTEGER& tLast, const LARGE_INTEGER& tInterval);
|
||||
|
||||
LONGLONG ToMilliseconds(LONGLONG tLast);
|
||||
|
||||
void SetInterval(LARGE_INTEGER& nInterval, LONGLONG nIntervalMS);
|
||||
|
||||
|
||||
template<class Interface>
|
||||
inline void SafeReleaseInterface(
|
||||
Interface **ppInterfaceToRelease
|
||||
)
|
||||
{
|
||||
if (*ppInterfaceToRelease != nullptr)
|
||||
{
|
||||
(*ppInterfaceToRelease)->Release();
|
||||
|
||||
(*ppInterfaceToRelease) = nullptr;
|
||||
}
|
||||
}
|
||||
|
|
@ -49,11 +49,6 @@ public:
|
|||
// 获取执行该动作的目标
|
||||
virtual ENode * getTarget();
|
||||
|
||||
// 设置动作每一帧的时间间隔
|
||||
virtual void setInterval(
|
||||
LONGLONG milliSeconds
|
||||
);
|
||||
|
||||
// 设置动作执行目标
|
||||
virtual void setTarget(
|
||||
ENode * node
|
||||
|
|
@ -76,13 +71,12 @@ protected:
|
|||
virtual void _resetTime();
|
||||
|
||||
protected:
|
||||
bool m_bRunning;
|
||||
bool m_bEnding;
|
||||
bool m_bInit;
|
||||
ENode * m_pTarget;
|
||||
EScene * m_pParentScene;
|
||||
LARGE_INTEGER m_nAnimationInterval;
|
||||
LARGE_INTEGER m_tLast;
|
||||
bool m_bRunning;
|
||||
bool m_bEnding;
|
||||
bool m_bInit;
|
||||
ENode * m_pTarget;
|
||||
EScene *m_pParentScene;
|
||||
float m_fLast;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -96,21 +90,17 @@ public:
|
|||
);
|
||||
|
||||
protected:
|
||||
// 判断动作是否结束
|
||||
bool _isEnd() const;
|
||||
|
||||
// 判断延时是否足够
|
||||
bool _isDelayEnough();
|
||||
|
||||
// 初始化动画
|
||||
virtual void _init() override;
|
||||
|
||||
// 更新动画
|
||||
virtual void _update() override;
|
||||
|
||||
// 重置动画
|
||||
virtual void _reset() override;
|
||||
|
||||
protected:
|
||||
float m_fDuration;
|
||||
float m_fTotalDuration;
|
||||
float m_fRateOfProgress;
|
||||
};
|
||||
|
||||
|
|
@ -122,7 +112,7 @@ public:
|
|||
// 创建相对位移动画
|
||||
EActionMoveBy(
|
||||
float duration, /* 动画持续时长 */
|
||||
EVec vector /* 位移向量 */
|
||||
EVector2 vector /* 位移向量 */
|
||||
);
|
||||
|
||||
// 获取该动画的拷贝对象
|
||||
|
|
@ -143,7 +133,7 @@ protected:
|
|||
|
||||
protected:
|
||||
EPoint m_BeginPos;
|
||||
EVec m_MoveVec;
|
||||
EVector2 m_MoveVec;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -490,6 +480,9 @@ protected:
|
|||
|
||||
// 重置动作
|
||||
virtual void _reset() override;
|
||||
|
||||
protected:
|
||||
float m_fDelayTime;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -576,14 +569,19 @@ public:
|
|||
|
||||
// 创建特定帧间隔的帧动画
|
||||
EAnimation(
|
||||
LONGLONG frameDelay /* 帧间隔(毫秒) */
|
||||
float interval /* 帧间隔(秒) */
|
||||
);
|
||||
|
||||
virtual ~EAnimation();
|
||||
|
||||
// 添加帧
|
||||
void addFrame(
|
||||
ESpriteFrame * frame /* 添加帧 */
|
||||
// 添加关键帧
|
||||
void addKeyframe(
|
||||
EKeyframe * frame /* 添加关键帧 */
|
||||
);
|
||||
|
||||
// 设置每一帧的时间间隔(秒)
|
||||
void setInterval(
|
||||
float interval
|
||||
);
|
||||
|
||||
// 获取该动画的拷贝对象
|
||||
|
|
@ -603,8 +601,9 @@ protected:
|
|||
virtual void _reset() override;
|
||||
|
||||
protected:
|
||||
UINT m_nFrameIndex;
|
||||
std::vector<ESpriteFrame*> m_vFrames;
|
||||
float m_fInterval;
|
||||
UINT m_nFrameIndex;
|
||||
std::vector<EKeyframe*> m_vFrames;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/******************************************************
|
||||
* Easy2D Game Framework
|
||||
* Easy2D Game Core
|
||||
*
|
||||
* Website: http://www.easy2d.cn
|
||||
* Website: https://www.easy2d.cn
|
||||
* Source Code: https://github.com/Nomango/Easy2D
|
||||
******************************************************/
|
||||
|
||||
|
|
@ -9,11 +9,11 @@
|
|||
#pragma once
|
||||
|
||||
#ifndef __cplusplus
|
||||
#error Easy2D is only for C++
|
||||
#error 仅能在 C++ 环境下使用 Easy2D
|
||||
#endif
|
||||
|
||||
#if _MSC_VER < 1600
|
||||
#error MSVC version is too low
|
||||
#error Easy2D 不支持 Visual Studio 2010 以下版本
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
|||
392
core/ebase.h
392
core/ebase.h
|
|
@ -8,29 +8,22 @@
|
|||
namespace e2d
|
||||
{
|
||||
|
||||
class EScene;
|
||||
class ENode;
|
||||
class EObjectManager;
|
||||
class EListenerMouse;
|
||||
class EListenerKeyboard;
|
||||
class EAction;
|
||||
class ETransition;
|
||||
|
||||
class EApp
|
||||
class EGame
|
||||
{
|
||||
public:
|
||||
// 获取程序实例
|
||||
static EApp * getInstance();
|
||||
|
||||
// 初始化游戏界面
|
||||
// 初始化游戏
|
||||
static bool init(
|
||||
const EString &title, /* 窗口标题 */
|
||||
UINT32 width, /* 窗口宽度 */
|
||||
UINT32 height, /* 窗口高度 */
|
||||
const EWindowStyle &wStyle = nullptr /* 窗口样式 */
|
||||
LPCTSTR sTitle, /* 窗口标题 */
|
||||
UINT32 nWidth, /* 窗口宽度 */
|
||||
UINT32 nHeight, /* 窗口高度 */
|
||||
LPCTSTR pIconID = nullptr, /* 窗口图标 */
|
||||
bool bNoClose = false, /* 禁用关闭按钮 */
|
||||
bool bNoMiniSize = false, /* 禁用最小化按钮 */
|
||||
bool bTopMost = false /* 窗口置顶 */
|
||||
);
|
||||
|
||||
// 启动程序
|
||||
// 启动游戏
|
||||
static int run();
|
||||
|
||||
// 暂停游戏
|
||||
|
|
@ -42,35 +35,32 @@ public:
|
|||
// 结束游戏
|
||||
static void quit();
|
||||
|
||||
// 切换场景
|
||||
static void enterScene(
|
||||
EScene * scene, /* 下一个场景的指针 */
|
||||
ETransition * transition = nullptr, /* 场景切换动画 */
|
||||
bool saveCurrentScene = true /* 是否保存当前场景 */
|
||||
);
|
||||
|
||||
// 返回上一场景
|
||||
static void backScene(
|
||||
ETransition * transition = nullptr /* 场景切换动画 */
|
||||
);
|
||||
|
||||
// 清空保存的所有场景
|
||||
static void clearScene();
|
||||
|
||||
// 隐藏窗口
|
||||
static void hideWindow();
|
||||
|
||||
// 显示窗口
|
||||
static void showWindow();
|
||||
|
||||
// 是否打开控制台
|
||||
static void showConsole(
|
||||
bool show = true
|
||||
);
|
||||
// 回收游戏资源
|
||||
static void uninit();
|
||||
|
||||
// 游戏是否暂停
|
||||
static bool isPaused();
|
||||
|
||||
// 获取 AppName
|
||||
static EString getAppName();
|
||||
|
||||
// 设置 AppName
|
||||
static void setAppName(
|
||||
const EString &appname
|
||||
);
|
||||
|
||||
private:
|
||||
// 更新游戏内容
|
||||
static void __update();
|
||||
};
|
||||
|
||||
|
||||
// 控制窗口属性
|
||||
class EWindow
|
||||
{
|
||||
friend EGame;
|
||||
|
||||
public:
|
||||
// 获取窗口标题
|
||||
static EString getTitle();
|
||||
|
||||
|
|
@ -83,175 +73,209 @@ public:
|
|||
// 获取窗口大小
|
||||
static ESize getSize();
|
||||
|
||||
// 获取当前场景
|
||||
static EScene * getCurrentScene();
|
||||
|
||||
// 获取窗口句柄
|
||||
static HWND getHWnd();
|
||||
|
||||
// 获取窗口样式
|
||||
static EWindowStyle getWindowStyle();
|
||||
|
||||
// 获取从游戏开始到当前经过的毫秒数
|
||||
static LONGLONG getTotalDurationFromStart();
|
||||
|
||||
// 获取 AppName
|
||||
static EString getAppName();
|
||||
|
||||
// 修改窗口大小
|
||||
static void setWindowSize(
|
||||
static void setSize(
|
||||
UINT32 width,
|
||||
UINT32 height
|
||||
);
|
||||
|
||||
// 设置窗口标题
|
||||
static void setWindowTitle(
|
||||
static void setTitle(
|
||||
const EString & title
|
||||
);
|
||||
|
||||
// 设置 AppName
|
||||
static void setAppName(
|
||||
const EString &appname
|
||||
// 打开/隐藏控制台
|
||||
static void showConsole(
|
||||
bool show = true
|
||||
);
|
||||
|
||||
// 修改窗口背景色
|
||||
static void setBkColor(
|
||||
// 隐藏主窗口
|
||||
static void hideWindow();
|
||||
|
||||
// 显示主窗口
|
||||
static void showWindow();
|
||||
|
||||
// 是否允许响应输入法
|
||||
static void setTypewritingEnable(
|
||||
bool bEnable
|
||||
);
|
||||
|
||||
private:
|
||||
// 初始化窗口
|
||||
static bool __init(
|
||||
LPCTSTR sTitle, /* 窗口标题 */
|
||||
UINT32 nWidth, /* 窗口宽度 */
|
||||
UINT32 nHeight, /* 窗口高度 */
|
||||
LPCTSTR pIconID, /* 窗口图标 */
|
||||
bool bNoClose, /* 禁用关闭按钮 */
|
||||
bool bNoMiniSize, /* 禁用最小化按钮 */
|
||||
bool bTopMost /* 窗口置顶 */
|
||||
);
|
||||
|
||||
// 重置窗口属性
|
||||
static void __uninit();
|
||||
|
||||
// 处理窗口消息
|
||||
static void __poll();
|
||||
|
||||
// Win32 窗口消息回调程序
|
||||
static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
};
|
||||
|
||||
|
||||
// 控制游戏时间
|
||||
class ETime
|
||||
{
|
||||
friend EGame;
|
||||
|
||||
public:
|
||||
// 获取上一帧与当前帧的时间间隔(毫秒)
|
||||
static int getDeltaTime();
|
||||
|
||||
// 获取游戏开始时长(秒)
|
||||
static float getTotalTime();
|
||||
|
||||
private:
|
||||
// 初始化计时操作
|
||||
static void __init();
|
||||
|
||||
// 重置计时操作
|
||||
static void __uninit();
|
||||
|
||||
// 更新当前时间
|
||||
static void __updateNow();
|
||||
|
||||
// 更新时间信息
|
||||
static void __updateLast();
|
||||
|
||||
// 挂起线程
|
||||
static void __sleep();
|
||||
};
|
||||
|
||||
|
||||
// 控制键盘和鼠标的输入
|
||||
class EInput
|
||||
{
|
||||
friend EGame;
|
||||
|
||||
public:
|
||||
// 检测键盘某按键是否正被按下
|
||||
static bool isKeyDown(
|
||||
int nKeyCode
|
||||
);
|
||||
|
||||
// 检测键盘某按键是否被点击
|
||||
static bool isKeyPress(
|
||||
int nKeyCode
|
||||
);
|
||||
|
||||
// 检测键盘某按键是否正在松开
|
||||
static bool isKeyRelease(
|
||||
int nKeyCode
|
||||
);
|
||||
|
||||
// 检测鼠标左键是否正被按下
|
||||
static bool isMouseLButtonDown();
|
||||
|
||||
// 检测鼠标右键是否正被按下
|
||||
static bool isMouseRButtonDown();
|
||||
|
||||
// 检测鼠标中键是否正被按下
|
||||
static bool isMouseMButtonDown();
|
||||
|
||||
// 检测鼠标左键是否被点击
|
||||
static bool isMouseLButtonPress();
|
||||
|
||||
// 检测鼠标右键是否被点击
|
||||
static bool isMouseRButtonPress();
|
||||
|
||||
// 检测鼠标中键是否被点击
|
||||
static bool isMouseMButtonPress();
|
||||
|
||||
// 检测鼠标左键是否正在松开
|
||||
static bool isMouseLButtonRelease();
|
||||
|
||||
// 检测鼠标右键是否正在松开
|
||||
static bool isMouseRButtonRelease();
|
||||
|
||||
// 检测鼠标中键是否正在松开
|
||||
static bool isMouseMButtonRelease();
|
||||
|
||||
// 获得鼠标X轴坐标值
|
||||
static float getMouseX();
|
||||
|
||||
// 获得鼠标Y轴坐标值
|
||||
static float getMouseY();
|
||||
|
||||
// 获得鼠标坐标值
|
||||
static EPoint getMousePos();
|
||||
|
||||
// 获得鼠标X轴坐标增量
|
||||
static float getMouseDeltaX();
|
||||
|
||||
// 获得鼠标Y轴坐标增量
|
||||
static float getMouseDeltaY();
|
||||
|
||||
// 获得鼠标Z轴(鼠标滚轮)坐标增量
|
||||
static float getMouseDeltaZ();
|
||||
|
||||
private:
|
||||
// 初始化 DirectInput 以及键盘鼠标设备
|
||||
static HRESULT __init();
|
||||
|
||||
// 获得输入信息
|
||||
static void __updateDeviceState();
|
||||
|
||||
// 卸载 DirectInput
|
||||
static void __uninit();
|
||||
};
|
||||
|
||||
|
||||
// 渲染器
|
||||
class ERenderer
|
||||
{
|
||||
friend EGame;
|
||||
friend EWindow;
|
||||
|
||||
public:
|
||||
// 修改背景色
|
||||
static void setBackgroundColor(
|
||||
UINT32 color
|
||||
);
|
||||
|
||||
// 设置程序是否响应输入法
|
||||
static void setKeyboardLayoutEnable(
|
||||
bool value
|
||||
);
|
||||
// 获取 ID2D1Factory 对象
|
||||
static ID2D1Factory * getID2D1Factory();
|
||||
|
||||
// 预设画面帧数
|
||||
static void setFPS(
|
||||
UINT32 fps
|
||||
);
|
||||
// 获取 ID2D1HwndRenderTarget 对象
|
||||
static ID2D1HwndRenderTarget * getRenderTarget();
|
||||
|
||||
public:
|
||||
// 重写这个函数,它将在窗口激活时执行
|
||||
virtual bool onActivate();
|
||||
// 获取 ID2D1SolidColorBrush 对象
|
||||
static ID2D1SolidColorBrush * getSolidColorBrush();
|
||||
|
||||
// 重写这个函数,它将在窗口非激活时执行
|
||||
virtual bool onInactive();
|
||||
// 获取 IWICImagingFactory 对象
|
||||
static IWICImagingFactory * getIWICImagingFactory();
|
||||
|
||||
// 重写这个函数,它将在关闭窗口时执行
|
||||
virtual bool onCloseWindow();
|
||||
// 获取 IDWriteFactory 对象
|
||||
static IDWriteFactory * getIDWriteFactory();
|
||||
|
||||
private:
|
||||
EApp();
|
||||
// 渲染游戏画面
|
||||
static void __render();
|
||||
|
||||
virtual ~EApp();
|
||||
// 创建设备无关资源
|
||||
static bool __createDeviceIndependentResources();
|
||||
|
||||
void _update();
|
||||
// 创建设备相关资源
|
||||
static bool __createDeviceResources();
|
||||
|
||||
void _render();
|
||||
// 删除设备相关资源
|
||||
static void __discardDeviceResources();
|
||||
|
||||
void _enterNextScene();
|
||||
|
||||
void _updateTime();
|
||||
|
||||
static LRESULT CALLBACK WndProc(
|
||||
HWND hWnd,
|
||||
UINT message,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam
|
||||
);
|
||||
|
||||
private:
|
||||
bool m_bEnd;
|
||||
bool m_bPaused;
|
||||
bool m_bManualPaused;
|
||||
bool m_bShowConsole;
|
||||
EString m_sTitle;
|
||||
EString m_sAppName;
|
||||
UINT32 m_ClearColor;
|
||||
LARGE_INTEGER m_nAnimationInterval;
|
||||
EScene * m_pCurrentScene;
|
||||
EScene * m_pNextScene;
|
||||
EWindowStyle m_WindowStyle;
|
||||
ETransition * m_pTransition;
|
||||
};
|
||||
|
||||
|
||||
class EScene :
|
||||
public EObject
|
||||
{
|
||||
friend EApp;
|
||||
|
||||
public:
|
||||
EScene();
|
||||
|
||||
virtual ~EScene();
|
||||
|
||||
// 重写这个函数,它将在进入这个场景时自动执行
|
||||
virtual void onEnter();
|
||||
|
||||
// 重写这个函数,它将在离开这个场景时自动执行
|
||||
virtual void onExit();
|
||||
|
||||
// 重写这个函数,它将在窗口激活时执行
|
||||
virtual bool onActivate();
|
||||
|
||||
// 重写这个函数,它将在窗口非激活时执行
|
||||
virtual bool onInactive();
|
||||
|
||||
// 重写这个函数,它将在关闭窗口时执行
|
||||
virtual bool onCloseWindow();
|
||||
|
||||
// 添加子节点到场景
|
||||
void add(
|
||||
ENode * child,
|
||||
int zOrder = 0
|
||||
);
|
||||
|
||||
// 删除子节点
|
||||
bool remove(
|
||||
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(
|
||||
bool visiable
|
||||
);
|
||||
|
||||
protected:
|
||||
// 渲染场景画面
|
||||
void _render();
|
||||
|
||||
protected:
|
||||
bool m_bSortNeeded;
|
||||
bool m_bWillSave;
|
||||
bool m_bGeometryVisiable;
|
||||
ENode * m_pRoot;
|
||||
// 删除所有渲染相关资源
|
||||
static void __discardResources();
|
||||
};
|
||||
|
||||
}
|
||||
502
core/ecommon.h
502
core/ecommon.h
|
|
@ -47,9 +47,6 @@ struct EPoint
|
|||
}
|
||||
};
|
||||
|
||||
// 表示二维向量的结构体
|
||||
typedef EPoint EVec;
|
||||
|
||||
// 表示大小的结构体
|
||||
struct ESize
|
||||
{
|
||||
|
|
@ -89,46 +86,6 @@ struct ESize
|
|||
}
|
||||
};
|
||||
|
||||
// 表示窗口样式的结构体
|
||||
struct EWindowStyle
|
||||
{
|
||||
LPCTSTR m_pIconID; /* 程序图标 ID */
|
||||
bool m_bNoClose; /* 禁用关闭按钮 */
|
||||
bool m_bNoMiniSize; /* 禁用最小化按钮 */
|
||||
bool m_bTopMost; /* 窗口置顶 */
|
||||
|
||||
EWindowStyle()
|
||||
{
|
||||
m_pIconID = 0;
|
||||
m_bNoClose = false;
|
||||
m_bNoMiniSize = false;
|
||||
m_bTopMost = false;
|
||||
}
|
||||
|
||||
EWindowStyle(
|
||||
LPCTSTR pIconID
|
||||
)
|
||||
{
|
||||
m_pIconID = pIconID;
|
||||
m_bNoClose = false;
|
||||
m_bNoMiniSize = false;
|
||||
m_bTopMost = false;
|
||||
}
|
||||
|
||||
EWindowStyle(
|
||||
LPCTSTR pIconID,
|
||||
bool bNoClose,
|
||||
bool bNoMiniSize,
|
||||
bool bTopMost
|
||||
)
|
||||
{
|
||||
m_pIconID = pIconID;
|
||||
m_bNoClose = bNoClose;
|
||||
m_bNoMiniSize = bNoMiniSize;
|
||||
m_bTopMost = bTopMost;
|
||||
}
|
||||
};
|
||||
|
||||
// 字符串
|
||||
class EString
|
||||
{
|
||||
|
|
@ -261,6 +218,32 @@ private:
|
|||
int _size;
|
||||
};
|
||||
|
||||
|
||||
// 二维向量
|
||||
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
|
||||
{
|
||||
|
|
@ -268,143 +251,65 @@ public:
|
|||
enum COMMON_VALUE
|
||||
{
|
||||
ALICE_BLUE = 0xF0F8FF,
|
||||
ANTIQUE_WHITE = 0xFAEBD7,
|
||||
AQUA = 0x00FFFF,
|
||||
AQUAMARINE = 0x7FFFD4,
|
||||
AZURE = 0xF0FFFF,
|
||||
BEIGE = 0xF5F5DC,
|
||||
BISQUE = 0xFFE4C4,
|
||||
BLACK = 0x000000,
|
||||
BLANCHED_ALMOND = 0xFFEBCD,
|
||||
BLUE = 0x0000FF,
|
||||
BLUE_VIOLET = 0x8A2BE2,
|
||||
BROWN = 0xA52A2A,
|
||||
BURLY_WOOD = 0xDEB887,
|
||||
CADET_BLUE = 0x5F9EA0,
|
||||
CHARTREUSE = 0x7FFF00,
|
||||
CHOCOLATE = 0xD2691E,
|
||||
CORAL = 0xFF7F50,
|
||||
CORNFLOWER_BLUE = 0x6495ED,
|
||||
CORNSILK = 0xFFF8DC,
|
||||
CRIMSON = 0xDC143C,
|
||||
CYAN = 0x00FFFF,
|
||||
DARK_BLUE = 0x00008B,
|
||||
DARK_CYAN = 0x008B8B,
|
||||
DARK_GOLDENROD = 0xB8860B,
|
||||
DARK_GRAY = 0xA9A9A9,
|
||||
DARK_GREEN = 0x006400,
|
||||
DARK_KHAKI = 0xBDB76B,
|
||||
DARK_MAGENTA = 0x8B008B,
|
||||
DARK_OLIVE_GREEN = 0x556B2F,
|
||||
DARK_ORANGE = 0xFF8C00,
|
||||
DARK_ORCHID = 0x9932CC,
|
||||
DARK_RED = 0x8B0000,
|
||||
DARK_SALMON = 0xE9967A,
|
||||
DARK_SEA_GREEN = 0x8FBC8F,
|
||||
DARK_SLATE_BLUE = 0x483D8B,
|
||||
DARK_SLATE_GRAY = 0x2F4F4F,
|
||||
DARK_TURQUOISE = 0x00CED1,
|
||||
DARK_VIOLET = 0x9400D3,
|
||||
DEEP_PINK = 0xFF1493,
|
||||
DEEP_SKY_BLUE = 0x00BFFF,
|
||||
DIM_GRAY = 0x696969,
|
||||
DODGER_BLUE = 0x1E90FF,
|
||||
FIREBRICK = 0xB22222,
|
||||
FLORAL_WHITE = 0xFFFAF0,
|
||||
FOREST_GREEN = 0x228B22,
|
||||
FUCHSIA = 0xFF00FF,
|
||||
GAINSCORO = 0xDCDCDC,
|
||||
GHOST_WHITE = 0xF8F8FF,
|
||||
GOLD = 0xFFD700,
|
||||
GOLDENROD = 0xDAA520,
|
||||
GRAY = 0x808080,
|
||||
GREEN = 0x008000,
|
||||
GREEN_YELLOW = 0xADFF2F,
|
||||
HONEYDEW = 0xF0FFF0,
|
||||
HOT_PINK = 0xFF69B4,
|
||||
INDIAN_RED = 0xCD5C5C,
|
||||
INDIGO = 0x4B0082,
|
||||
IVORY = 0xFFFFF0,
|
||||
KHAKI = 0xF0E68C,
|
||||
LAVENDER = 0xE6E6FA,
|
||||
LAVENDER_BLUSH = 0xFFF0F5,
|
||||
LAWN_GREEN = 0x7CFC00,
|
||||
LEMON_CHIFFON = 0xFFFACD,
|
||||
LIGHT_BLUE = 0xADD8E6,
|
||||
LIGHT_CORAL = 0xF08080,
|
||||
LIGHT_CYAN = 0xE0FFFF,
|
||||
LIGHT_GOLDENROD_YELLOW = 0xFAFAD2,
|
||||
LIGHT_GREEN = 0x90EE90,
|
||||
LIGHT_GRAY = 0xD3D3D3,
|
||||
LIGHT_PINK = 0xFFB6C1,
|
||||
LIGHT_SALMON = 0xFFA07A,
|
||||
LIGHT_SEA_GREEN = 0x20B2AA,
|
||||
LIGHT_SKY_BLUE = 0x87CEFA,
|
||||
LIGHT_SLATE_GRAY = 0x778899,
|
||||
LIGHT_STEEL_BLUE = 0xB0C4DE,
|
||||
LIGHT_YELLOW = 0xFFFFE0,
|
||||
LIME = 0x00FF00,
|
||||
LIME_GREEN = 0x32CD32,
|
||||
LINEN = 0xFAF0E6,
|
||||
MAGENTA = 0xFF00FF,
|
||||
MAROON = 0x800000,
|
||||
MEDIUM_AQUAMARINE = 0x66CDAA,
|
||||
MEDIUM_BLUE = 0x0000CD,
|
||||
MEDIUM_ORCHID = 0xBA55D3,
|
||||
MEDIUM_PURPLE = 0x9370DB,
|
||||
MEDIUM_SEA_GREEN = 0x3CB371,
|
||||
MEDIUM_SLATE_BLUE = 0x7B68EE,
|
||||
MEDIUM_SPRING_GREEN = 0x00FA9A,
|
||||
MEDIUM_TURQUOISE = 0x48D1CC,
|
||||
MEDUIM_VIOLET_RED = 0xC71585,
|
||||
MIDNIGHT_BLUE = 0x191970,
|
||||
MINT_CREAM = 0xF5FFFA,
|
||||
MISTY_ROSE = 0xFFE4E1,
|
||||
MOCCASIN = 0xFFE4B5,
|
||||
NAVAJO_WHITE = 0xFFDEAD,
|
||||
NAVY = 0x000080,
|
||||
OLD_LACE = 0xFDF5E6,
|
||||
OLIVE = 0x808000,
|
||||
OLIVE_DRAB = 0x6B8E23,
|
||||
ORANGE = 0xFFA500,
|
||||
ORANGE_RED = 0xFF4500,
|
||||
ORCHID = 0xDA70D6,
|
||||
PALE_GOLDENROD = 0xEEE8AA,
|
||||
PALE_GREEN = 0x98FB98,
|
||||
PALE_TURQUOISE = 0xAFEEEE,
|
||||
PALE_VIOLET_RED = 0xDB7093,
|
||||
PAPAYA_WHIP = 0xFFEFD5,
|
||||
PEACH_PUFF = 0xFFDAB9,
|
||||
PERU = 0xCD853F,
|
||||
PINK = 0xFFC0CB,
|
||||
PLUM = 0xDDA0DD,
|
||||
POWDER_BLUE = 0xB0E0E6,
|
||||
PURPLE = 0x800080,
|
||||
RED = 0xFF0000,
|
||||
ROSY_BROWN = 0xBC8F8F,
|
||||
ROYAL_BLUE = 0x4169E1,
|
||||
SADDLE_BROWN = 0x8B4513,
|
||||
SALMON = 0xFA8072,
|
||||
SANDY_BROWN = 0xF4A460,
|
||||
SEA_GREEN = 0x2E8B57,
|
||||
SEA_SHELL = 0xFFF5EE,
|
||||
SIENNA = 0xA0522D,
|
||||
SILVER = 0xC0C0C0,
|
||||
SKY_BLUE = 0x87CEEB,
|
||||
SLATE_BLUE = 0x6A5ACD,
|
||||
SLATE_GRAY = 0x708090,
|
||||
SNOW = 0xFFFAFA,
|
||||
SPRING_GREEN = 0x00FF7F,
|
||||
STEEL_BLUE = 0x4682B4,
|
||||
TAN = 0xD2B48C,
|
||||
TEAL = 0x008080,
|
||||
THISTLE = 0xD8BFD8,
|
||||
TOMATO = 0xFF6347,
|
||||
TURQUOISE = 0x40E0D0,
|
||||
VIOLET = 0xEE82EE,
|
||||
WHEAT = 0xF5DEB3,
|
||||
WHITE = 0xFFFFFF,
|
||||
WHITE_SMOKE = 0xF5F5F5,
|
||||
WOOD = 0xDEB887,
|
||||
YELLOW = 0xFFFF00,
|
||||
YELLOW_GREEN = 0x9ACD32
|
||||
};
|
||||
|
|
@ -437,136 +342,86 @@ public:
|
|||
};
|
||||
|
||||
|
||||
// 鼠标消息
|
||||
class EMouseMsg
|
||||
// 键值集合
|
||||
class EKeyCode
|
||||
{
|
||||
public:
|
||||
// 鼠标消息集合
|
||||
enum MOUSE_MSG
|
||||
enum VALUE
|
||||
{
|
||||
MOVE = 0x0200, // 鼠标移动
|
||||
LBUTTON_DOWN, // 鼠标左键按下
|
||||
LBUTTON_UP, // 鼠标左键抬起
|
||||
LBUTTON_DBLCLK, // 鼠标左键双击
|
||||
RBUTTON_DOWN, // 鼠标右键按下
|
||||
RBUTTON_UP, // 鼠标右键抬起
|
||||
RBUTTON_DBLCLK, // 鼠标右键双击
|
||||
MBUTTON_DOWN, // 鼠标中键按下
|
||||
MBUTTON_UP, // 鼠标中键抬起
|
||||
MBUTTON_DBLCLK, // 鼠标中键双击
|
||||
WHEEL // 滑动滚轮
|
||||
UP = 0xC8,
|
||||
LEFT = 0xCB,
|
||||
RIGHT = 0xCD,
|
||||
DOWN = 0xD0,
|
||||
ENTER = 0x1C,
|
||||
SPACE = 0x39,
|
||||
ESC = 0x01,
|
||||
BACK = 0x0E,
|
||||
TAB = 0x0F,
|
||||
PAUSE = 0xC5,
|
||||
Q = 0x10,
|
||||
W = 0x11,
|
||||
E = 0x12,
|
||||
R = 0x13,
|
||||
T = 0x14,
|
||||
Y = 0x15,
|
||||
U = 0x16,
|
||||
I = 0x17,
|
||||
O = 0x18,
|
||||
P = 0x19,
|
||||
A = 0x1E,
|
||||
S = 0x1F,
|
||||
D = 0x20,
|
||||
F = 0x21,
|
||||
G = 0x22,
|
||||
H = 0x23,
|
||||
J = 0x24,
|
||||
K = 0x25,
|
||||
L = 0x26,
|
||||
Z = 0x2C,
|
||||
X = 0x2D,
|
||||
C = 0x2E,
|
||||
V = 0x2F,
|
||||
B = 0x30,
|
||||
N = 0x31,
|
||||
M = 0x32,
|
||||
NUM1 = 0x02,
|
||||
NUM2 = 0x03,
|
||||
NUM3 = 0x04,
|
||||
NUM4 = 0x05,
|
||||
NUM5 = 0x06,
|
||||
NUM6 = 0x07,
|
||||
NUM7 = 0x08,
|
||||
NUM8 = 0x09,
|
||||
NUM9 = 0x0A,
|
||||
NUM0 = 0x0B,
|
||||
NUMPAD7 = 0x47,
|
||||
NUMPAD8 = 0x48,
|
||||
NUMPAD9 = 0x49,
|
||||
NUMPAD4 = 0x4B,
|
||||
NUMPAD5 = 0x4C,
|
||||
NUMPAD6 = 0x4D,
|
||||
NUMPAD1 = 0x4F,
|
||||
NUMPAD2 = 0x50,
|
||||
NUMPAD3 = 0x51,
|
||||
NUMPAD0 = 0x52,
|
||||
F1 = 0x3B,
|
||||
F2 = 0x3C,
|
||||
F3 = 0x3D,
|
||||
F4 = 0x3E,
|
||||
F5 = 0x3F,
|
||||
F6 = 0x40,
|
||||
F7 = 0x41,
|
||||
F8 = 0x42,
|
||||
F9 = 0x43,
|
||||
F10 = 0x44
|
||||
};
|
||||
|
||||
// 获取鼠标横坐标
|
||||
static DWORD getPosX();
|
||||
|
||||
// 获取鼠标纵坐标
|
||||
static DWORD getPosY();
|
||||
|
||||
// 获取鼠标坐标
|
||||
static EPoint getPos();
|
||||
|
||||
// 获取鼠标左键按下状态
|
||||
static bool isLButtonDown();
|
||||
|
||||
// 获取鼠标中键按下状态
|
||||
static bool isMButtonDown();
|
||||
|
||||
// 获取鼠标右键按下状态
|
||||
static bool isRButtonDown();
|
||||
|
||||
// 获取 Shift 按键状态
|
||||
static bool isShiftDown();
|
||||
|
||||
// 获取 Ctrl 按键状态
|
||||
static bool isCtrlDown();
|
||||
|
||||
// 获取鼠标滚轮值
|
||||
static DWORD getWheelDelta();
|
||||
|
||||
// 获取当前鼠标消息类型
|
||||
static MOUSE_MSG getMsg();
|
||||
|
||||
public:
|
||||
static UINT s_nMsg;
|
||||
static WPARAM s_wParam;
|
||||
static LPARAM s_lParam;
|
||||
};
|
||||
|
||||
|
||||
// 按键消息
|
||||
class EKeyboardMsg
|
||||
{
|
||||
public:
|
||||
// 按键消息类型集合
|
||||
enum KEYBOARD_MSG
|
||||
{
|
||||
KEY_DOWN = 0x0100, // 按下
|
||||
KEY_UP // 抬起
|
||||
};
|
||||
|
||||
// 按键键值集合
|
||||
enum KEY
|
||||
{
|
||||
A = 'A', B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, // 字母键值
|
||||
NUM0 = '0', NUM1, NUM2, NUM3, NUM4, NUM5, NUM6, NUM7, NUM8, NUM9, // 数字键值
|
||||
NUMPAD0 = 0x60, NUMPAD1, NUMPAD2, NUMPAD3, NUMPAD4, NUMPAD5, NUMPAD6, NUMPAD7, NUMPAD8, NUMPAD9, // 数字小键盘键值
|
||||
F1 = 0x70, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, // F键键值
|
||||
MULTIPLY, // 乘号键键值
|
||||
ADD, // 加号键键值
|
||||
SEPARATOR, // 分割键键值
|
||||
SUBTRACT, // 减号键键值
|
||||
DECIMAL, // 小数点键键值
|
||||
DIVIDE, // 除号键键值
|
||||
TAB = 0x09, // TAB 键键值
|
||||
ENTER = 0x0D, // 回车键键值
|
||||
SHIFT, CTRL, // SHIFT 键键值
|
||||
ESC = 0x1B, // ESCAPE 键键值
|
||||
SPACE = 0x20, // 空格键键值
|
||||
PAGE_UP, // PageUp 键键值
|
||||
PAGE_DOWN, // PageDown 键键值
|
||||
END, // End 键键值
|
||||
HOME, // Home 键键值
|
||||
LEFT, // 左键键值
|
||||
UP, // 上键键值
|
||||
RIGHT, // 右键键值
|
||||
DOWN // 下键键值
|
||||
};
|
||||
|
||||
// 获取按键消息类型
|
||||
static KEYBOARD_MSG getMsg();
|
||||
|
||||
// 获取键值
|
||||
static KEY getKeyValue();
|
||||
|
||||
// 获取按键消息的计数
|
||||
static DWORD getCount();
|
||||
|
||||
// 获取特定按键的状态
|
||||
static bool isKeyDown(
|
||||
KEY key
|
||||
);
|
||||
|
||||
// 获取大小写锁定状态
|
||||
static bool isCapitalLockOn();
|
||||
|
||||
// 获取数字小键盘锁定状态
|
||||
static bool isNumpadLockOn();
|
||||
|
||||
// 获取滑动锁定状态
|
||||
static bool isScrollLockOn();
|
||||
|
||||
public:
|
||||
static UINT s_nMsg;
|
||||
static WPARAM s_wParam;
|
||||
static LPARAM s_lParam;
|
||||
};
|
||||
|
||||
|
||||
class EGeometry;
|
||||
|
||||
// 物理消息
|
||||
class EPhysicsMsg
|
||||
class EPhysicsEvent
|
||||
{
|
||||
public:
|
||||
enum INTERSECT_RELATION
|
||||
|
|
@ -694,27 +549,27 @@ protected:
|
|||
|
||||
class ESprite;
|
||||
|
||||
class ETexture :
|
||||
class EImage :
|
||||
public EObject
|
||||
{
|
||||
friend ESprite;
|
||||
|
||||
public:
|
||||
// 创建一个空的纹理
|
||||
ETexture();
|
||||
// 创建一个空的图片
|
||||
EImage();
|
||||
|
||||
// 从本地文件中读取资源
|
||||
ETexture(
|
||||
const EString & fileName
|
||||
EImage(
|
||||
LPCTSTR fileName
|
||||
);
|
||||
|
||||
// 读取程序资源
|
||||
ETexture(
|
||||
EImage(
|
||||
LPCTSTR resourceName,
|
||||
LPCTSTR resourceType
|
||||
);
|
||||
|
||||
virtual ~ETexture();
|
||||
virtual ~EImage();
|
||||
|
||||
// 从本地文件中读取资源
|
||||
void loadFromFile(
|
||||
|
|
@ -758,42 +613,42 @@ protected:
|
|||
};
|
||||
|
||||
|
||||
class ESpriteFrame :
|
||||
class EKeyframe :
|
||||
public EObject
|
||||
{
|
||||
friend ESprite;
|
||||
|
||||
public:
|
||||
// 创建空的精灵帧
|
||||
ESpriteFrame();
|
||||
// 创建空的关键帧
|
||||
EKeyframe();
|
||||
|
||||
// 创建空的精灵帧
|
||||
ESpriteFrame(
|
||||
ETexture * texture
|
||||
// 创建空的关键帧
|
||||
EKeyframe(
|
||||
EImage * texture
|
||||
);
|
||||
|
||||
// 创建空的精灵帧
|
||||
ESpriteFrame(
|
||||
// 创建空的关键帧
|
||||
EKeyframe(
|
||||
const EString & imageFileName
|
||||
);
|
||||
|
||||
// 创建空的精灵帧
|
||||
ESpriteFrame(
|
||||
// 创建空的关键帧
|
||||
EKeyframe(
|
||||
LPCTSTR resourceName,
|
||||
LPCTSTR resourceType
|
||||
);
|
||||
|
||||
// 创建空的精灵帧
|
||||
ESpriteFrame(
|
||||
ETexture * texture,
|
||||
// 创建空的关键帧
|
||||
EKeyframe(
|
||||
EImage * texture,
|
||||
float x,
|
||||
float y,
|
||||
float width,
|
||||
float height
|
||||
);
|
||||
|
||||
// 创建空的精灵帧
|
||||
ESpriteFrame(
|
||||
// 创建空的关键帧
|
||||
EKeyframe(
|
||||
const EString & imageFileName,
|
||||
float x,
|
||||
float y,
|
||||
|
|
@ -801,8 +656,8 @@ public:
|
|||
float height
|
||||
);
|
||||
|
||||
// 创建空的精灵帧
|
||||
ESpriteFrame(
|
||||
// 创建空的关键帧
|
||||
EKeyframe(
|
||||
LPCTSTR resourceName,
|
||||
LPCTSTR resourceType,
|
||||
float x,
|
||||
|
|
@ -811,7 +666,7 @@ public:
|
|||
float height
|
||||
);
|
||||
|
||||
virtual ~ESpriteFrame();
|
||||
virtual ~EKeyframe();
|
||||
|
||||
// 获取宽度
|
||||
float getWidth() const;
|
||||
|
|
@ -819,16 +674,16 @@ public:
|
|||
// 获取高度
|
||||
float getHeight() const;
|
||||
|
||||
// 获取纹理
|
||||
ETexture * getTexture() const;
|
||||
// 获取图片
|
||||
EImage * getImage() const;
|
||||
|
||||
protected:
|
||||
// 获取纹理
|
||||
void _setTexture(
|
||||
ETexture * texture
|
||||
// 修改图片
|
||||
void _setImage(
|
||||
EImage * texture
|
||||
);
|
||||
|
||||
// 裁剪纹理
|
||||
// 裁剪图片
|
||||
void _clipTexture(
|
||||
float x,
|
||||
float y,
|
||||
|
|
@ -841,39 +696,98 @@ protected:
|
|||
float m_fSourceClipY;
|
||||
float m_fSourceClipWidth;
|
||||
float m_fSourceClipHeight;
|
||||
ETexture * m_pTexture;
|
||||
EImage * m_pImage;
|
||||
};
|
||||
|
||||
|
||||
class ESceneManager;
|
||||
class ENode;
|
||||
class EAction;
|
||||
|
||||
// 定时器回调函数(参数为该定时器被调用的次数,从 0 开始)
|
||||
typedef std::function<void(int)> TIMER_CALLBACK;
|
||||
// 场景
|
||||
class EScene :
|
||||
public EObject
|
||||
{
|
||||
friend ESceneManager;
|
||||
|
||||
// 按钮点击回调函数
|
||||
typedef std::function<void()> BUTTON_CLICK_CALLBACK;
|
||||
public:
|
||||
EScene();
|
||||
|
||||
// 按键消息监听回调函数
|
||||
typedef std::function<void()> KEY_LISTENER_CALLBACK;
|
||||
virtual ~EScene();
|
||||
|
||||
// 鼠标消息监听回调函数
|
||||
typedef std::function<void()> MOUSE_LISTENER_CALLBACK;
|
||||
// 重写这个函数,它将在进入这个场景时自动执行
|
||||
virtual void onEnter() {}
|
||||
|
||||
// 鼠标点击消息监听回调函数(参数为点击位置)
|
||||
typedef std::function<void(EPoint mousePos)> MOUSE_CLICK_LISTENER_CALLBACK;
|
||||
// 重写这个函数,它将在离开这个场景时自动执行
|
||||
virtual void onExit() {}
|
||||
|
||||
// 鼠标按下消息监听回调函数(参数为按下位置)
|
||||
typedef MOUSE_CLICK_LISTENER_CALLBACK MOUSE_PRESS_LISTENER_CALLBACK;
|
||||
// 重写这个函数,它将在窗口激活时执行
|
||||
virtual bool onActivate() { return false; }
|
||||
|
||||
// 鼠标双击消息监听回调函数(参数为双击位置)
|
||||
typedef MOUSE_CLICK_LISTENER_CALLBACK MOUSE_DBLCLK_LISTENER_CALLBACK;
|
||||
// 重写这个函数,它将在窗口非激活时执行
|
||||
virtual bool onInactive() { return false; }
|
||||
|
||||
// 鼠标拖动消息监听回调函数(参数为拖动前位置和拖动后位置)
|
||||
typedef std::function<void(EPoint begin, EPoint end)> MOUSE_DRAG_LISTENER_CALLBACK;
|
||||
// 重写这个函数,它将在关闭窗口时执行
|
||||
virtual bool onCloseWindow() { return true; }
|
||||
|
||||
// 物理世界消息监听器回调函数
|
||||
typedef std::function<void()> PHYSICS_LISTENER_CALLBACK;
|
||||
// 重写这个函数,它将在每一帧画面刷新时执行
|
||||
virtual void onUpdate() {}
|
||||
|
||||
// 碰撞消息监听器回调函数
|
||||
typedef PHYSICS_LISTENER_CALLBACK COLLISION_LISTENER_CALLBACK;
|
||||
// 添加子节点到场景
|
||||
void add(
|
||||
ENode * child,
|
||||
int zOrder = 0
|
||||
);
|
||||
|
||||
// 删除子节点
|
||||
bool remove(
|
||||
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(
|
||||
bool visiable
|
||||
);
|
||||
|
||||
protected:
|
||||
// 渲染场景画面
|
||||
void _render();
|
||||
|
||||
// 更新场景内容
|
||||
void _update();
|
||||
|
||||
protected:
|
||||
bool m_bSortNeeded;
|
||||
bool m_bWillSave;
|
||||
bool m_bGeometryVisiable;
|
||||
ENode * m_pRoot;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -56,7 +56,7 @@ public:
|
|||
|
||||
protected:
|
||||
// 判断两形状的交集关系
|
||||
virtual EPhysicsMsg::INTERSECT_RELATION _intersectWith(
|
||||
virtual EPhysicsEvent::INTERSECT_RELATION _intersectWith(
|
||||
EGeometry * pGeometry
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -6,15 +6,12 @@ namespace e2d
|
|||
{
|
||||
|
||||
class ENode;
|
||||
class EMsgManager;
|
||||
class EPhysicsManager;
|
||||
|
||||
// 监听器
|
||||
class EListener :
|
||||
public EObject
|
||||
{
|
||||
friend EMsgManager;
|
||||
|
||||
public:
|
||||
EListener();
|
||||
|
||||
|
|
@ -78,265 +75,6 @@ protected:
|
|||
};
|
||||
|
||||
|
||||
// 鼠标消息监听器
|
||||
class EListenerMouse :
|
||||
public EListener
|
||||
{
|
||||
friend EMsgManager;
|
||||
|
||||
public:
|
||||
EListenerMouse();
|
||||
|
||||
EListenerMouse(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
EListenerMouse(
|
||||
const MOUSE_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EListenerMouse(
|
||||
const EString &name,
|
||||
const MOUSE_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 设置监听器回调函数
|
||||
void setCallback(
|
||||
const MOUSE_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 绑定监听器到场景
|
||||
virtual void bindWith(
|
||||
EScene * pParentScene
|
||||
) override;
|
||||
|
||||
// 绑定监听器到节点
|
||||
virtual void bindWith(
|
||||
ENode * pParentNode
|
||||
) override;
|
||||
|
||||
protected:
|
||||
// 执行监听器回调函数
|
||||
virtual void _callOn() override;
|
||||
|
||||
protected:
|
||||
MOUSE_LISTENER_CALLBACK m_Callback;
|
||||
};
|
||||
|
||||
|
||||
// 鼠标按下消息监听器
|
||||
class EListenerMousePress :
|
||||
public EListenerMouse
|
||||
{
|
||||
public:
|
||||
EListenerMousePress();
|
||||
|
||||
EListenerMousePress(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
EListenerMousePress(
|
||||
const MOUSE_PRESS_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EListenerMousePress(
|
||||
const EString &name,
|
||||
const MOUSE_PRESS_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 设置监听器回调函数
|
||||
void setCallback(
|
||||
const MOUSE_PRESS_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
protected:
|
||||
// 执行监听器回调函数
|
||||
virtual void _callOn() override;
|
||||
|
||||
protected:
|
||||
MOUSE_PRESS_LISTENER_CALLBACK m_Callback;
|
||||
};
|
||||
|
||||
|
||||
// 鼠标点击消息监听器
|
||||
class EListenerMouseClick :
|
||||
public EListenerMouse
|
||||
{
|
||||
public:
|
||||
EListenerMouseClick();
|
||||
|
||||
EListenerMouseClick(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
EListenerMouseClick(
|
||||
const MOUSE_CLICK_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EListenerMouseClick(
|
||||
const EString &name,
|
||||
const MOUSE_CLICK_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 设置监听器回调函数
|
||||
void setCallback(
|
||||
const MOUSE_CLICK_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
protected:
|
||||
// 执行监听器回调函数
|
||||
virtual void _callOn() override;
|
||||
|
||||
protected:
|
||||
bool m_bPressed;
|
||||
MOUSE_CLICK_LISTENER_CALLBACK m_Callback;
|
||||
};
|
||||
|
||||
|
||||
// 鼠标点击消息监听器
|
||||
class EListenerMouseDoubleClick :
|
||||
public EListenerMouse
|
||||
{
|
||||
public:
|
||||
EListenerMouseDoubleClick();
|
||||
|
||||
EListenerMouseDoubleClick(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
EListenerMouseDoubleClick(
|
||||
const MOUSE_DBLCLK_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EListenerMouseDoubleClick(
|
||||
const EString &name,
|
||||
const MOUSE_DBLCLK_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 设置监听器回调函数
|
||||
void setCallback(
|
||||
const MOUSE_DBLCLK_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
protected:
|
||||
// 执行监听器回调函数
|
||||
virtual void _callOn() override;
|
||||
|
||||
protected:
|
||||
bool m_bPressed;
|
||||
MOUSE_DBLCLK_LISTENER_CALLBACK m_Callback;
|
||||
};
|
||||
|
||||
|
||||
// 鼠标拖动消息监听器
|
||||
class EListenerMouseDrag :
|
||||
public EListenerMouse
|
||||
{
|
||||
public:
|
||||
EListenerMouseDrag();
|
||||
|
||||
EListenerMouseDrag(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
EListenerMouseDrag(
|
||||
const MOUSE_DRAG_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EListenerMouseDrag(
|
||||
const EString &name,
|
||||
const MOUSE_DRAG_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 设置监听器回调函数
|
||||
void setCallback(
|
||||
const MOUSE_DRAG_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
protected:
|
||||
// 执行监听器回调函数
|
||||
virtual void _callOn() override;
|
||||
|
||||
protected:
|
||||
EPoint m_Begin;
|
||||
MOUSE_DRAG_LISTENER_CALLBACK m_Callback;
|
||||
};
|
||||
|
||||
|
||||
// 按键消息监听器
|
||||
class EListenerKeyboard :
|
||||
public EListener
|
||||
{
|
||||
friend EMsgManager;
|
||||
|
||||
public:
|
||||
EListenerKeyboard();
|
||||
|
||||
EListenerKeyboard(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
EListenerKeyboard(
|
||||
const KEY_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EListenerKeyboard(
|
||||
const EString &name,
|
||||
const KEY_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 设置监听器回调函数
|
||||
void setCallback(
|
||||
const KEY_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
// 绑定监听器到场景
|
||||
virtual void bindWith(
|
||||
EScene * pParentScene
|
||||
) override;
|
||||
|
||||
// 绑定监听器到节点
|
||||
virtual void bindWith(
|
||||
ENode * pParentNode
|
||||
) override;
|
||||
|
||||
protected:
|
||||
// 执行监听器回调函数
|
||||
virtual void _callOn() override;
|
||||
|
||||
protected:
|
||||
KEY_LISTENER_CALLBACK m_Callback;
|
||||
};
|
||||
|
||||
|
||||
// 按键按下消息监听
|
||||
class EListenerKeyboardPress :
|
||||
public EListenerKeyboard
|
||||
{
|
||||
friend EMsgManager;
|
||||
|
||||
public:
|
||||
EListenerKeyboardPress();
|
||||
|
||||
EListenerKeyboardPress(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
EListenerKeyboardPress(
|
||||
const KEY_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
EListenerKeyboardPress(
|
||||
const EString &name,
|
||||
const KEY_LISTENER_CALLBACK &callback
|
||||
);
|
||||
|
||||
protected:
|
||||
// 执行监听器回调函数
|
||||
virtual void _callOn() override;
|
||||
};
|
||||
|
||||
|
||||
// 物理世界消息监听器
|
||||
class EListenerPhysics :
|
||||
public EListener
|
||||
|
|
@ -351,17 +89,17 @@ public:
|
|||
);
|
||||
|
||||
EListenerPhysics(
|
||||
const PHYSICS_LISTENER_CALLBACK &callback
|
||||
const PhysLsnrCallback &callback
|
||||
);
|
||||
|
||||
EListenerPhysics(
|
||||
const EString &name,
|
||||
const PHYSICS_LISTENER_CALLBACK &callback
|
||||
const PhysLsnrCallback &callback
|
||||
);
|
||||
|
||||
// 设置监听器回调函数
|
||||
void setCallback(
|
||||
const PHYSICS_LISTENER_CALLBACK &callback
|
||||
const PhysLsnrCallback &callback
|
||||
);
|
||||
|
||||
// 将监听器与场景绑定
|
||||
|
|
@ -379,7 +117,7 @@ protected:
|
|||
virtual void _callOn() override;
|
||||
|
||||
protected:
|
||||
PHYSICS_LISTENER_CALLBACK m_Callback;
|
||||
PhysLsnrCallback m_Callback;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -395,12 +133,12 @@ public:
|
|||
);
|
||||
|
||||
EListenerPhysicsCollision(
|
||||
const COLLISION_LISTENER_CALLBACK &callback
|
||||
const ClsLsnrCallback &callback
|
||||
);
|
||||
|
||||
EListenerPhysicsCollision(
|
||||
const EString &name,
|
||||
const COLLISION_LISTENER_CALLBACK &callback
|
||||
const ClsLsnrCallback &callback
|
||||
);
|
||||
|
||||
protected:
|
||||
|
|
@ -408,7 +146,7 @@ protected:
|
|||
virtual void _callOn() override;
|
||||
|
||||
protected:
|
||||
COLLISION_LISTENER_CALLBACK m_Callback;
|
||||
ClsLsnrCallback m_Callback;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -24,6 +24,10 @@
|
|||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
|
||||
#ifndef DIRECTINPUT_VERSION
|
||||
#define DIRECTINPUT_VERSION 0x0800
|
||||
#endif
|
||||
|
||||
// Windows Header Files:
|
||||
#include <windows.h>
|
||||
#include <assert.h>
|
||||
|
|
@ -34,15 +38,22 @@
|
|||
#include <d2d1.h>
|
||||
#include <d2d1helper.h>
|
||||
#include <dwrite.h>
|
||||
#include <dinput.h>
|
||||
#include <wincodec.h>
|
||||
#pragma comment(lib, "d2d1.lib")
|
||||
#pragma comment(lib, "dwrite.lib")
|
||||
#pragma comment(lib, "windowscodecs.lib")
|
||||
|
||||
|
||||
#ifndef HINST_THISCOMPONENT
|
||||
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
|
||||
#define HINST_THISCOMPONENT ((HINSTANCE)&__ImageBase)
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef ASSERT_IF
|
||||
#if defined( DEBUG ) || defined( _DEBUG )
|
||||
#define ASSERT(b, m) do {if (!(b)) { fprintf(stderr, "Assert: " #m "\n"); assert(b); }} while(0)
|
||||
#define ASSERT(b, m) do {if (!(b)) { fprintf(stderr, "Assert: " #m "\n"); assert(b); }} while(0)
|
||||
#else
|
||||
#define ASSERT(b, m) ((void)0)
|
||||
#endif //DEBUG || _DEBUG
|
||||
|
|
@ -50,18 +61,8 @@
|
|||
|
||||
#ifndef WARN_IF
|
||||
#if defined( DEBUG ) || defined( _DEBUG )
|
||||
#define WARN_IF(b, m) do {if (b) { fprintf(stderr, "Warning: " #m "\n"); }} while(0)
|
||||
#define WARN_IF(b, m) do {if (b) { fprintf(stderr, "Warning: " #m "\n"); }} while(0)
|
||||
#else
|
||||
#define WARN_IF(b, m) ((void)0)
|
||||
#define WARN_IF(b, m) ((void)0)
|
||||
#endif //DEBUG || _DEBUG
|
||||
#endif
|
||||
|
||||
|
||||
#define DEPRECATED_ATTRIBUTE __declspec(deprecated)
|
||||
|
||||
|
||||
template<typename T>
|
||||
inline void SafeDelete(T** p) { if (*p) { delete *p; *p = nullptr; } }
|
||||
|
||||
template<typename T>
|
||||
inline void SafeRelease(T** p) { if (*p) { (*p)->release(); *p = nullptr; } }
|
||||
#endif
|
||||
191
core/emanagers.h
191
core/emanagers.h
|
|
@ -5,21 +5,21 @@
|
|||
namespace e2d
|
||||
{
|
||||
|
||||
class EApp;
|
||||
class EGame;
|
||||
class ERenderer;
|
||||
class EObject;
|
||||
class EScene;
|
||||
class ENode;
|
||||
class ETimer;
|
||||
class EAction;
|
||||
class EListenerMouse;
|
||||
class EListenerKeyboard;
|
||||
class EGeometry;
|
||||
class ETransition;
|
||||
class EListenerPhysics;
|
||||
|
||||
// 对象管理器
|
||||
class EObjectManager
|
||||
{
|
||||
friend EApp;
|
||||
friend EGame;
|
||||
|
||||
public:
|
||||
// 将一个节点放入内存池
|
||||
|
|
@ -36,154 +36,47 @@ private:
|
|||
};
|
||||
|
||||
|
||||
// 消息管理器
|
||||
class EMsgManager
|
||||
// 场景管理器
|
||||
class ESceneManager
|
||||
{
|
||||
friend EApp;
|
||||
friend EScene;
|
||||
friend ENode;
|
||||
friend EGame;
|
||||
friend ERenderer;
|
||||
|
||||
public:
|
||||
// 绑定鼠标消息监听器到场景
|
||||
static void bindListener(
|
||||
EListenerMouse * listener,
|
||||
EScene * pParentScene
|
||||
// 切换场景
|
||||
static void enterScene(
|
||||
EScene * scene, /* 下一个场景的指针 */
|
||||
ETransition * transition = nullptr, /* 场景切换动画 */
|
||||
bool saveCurrentScene = true /* 是否保存当前场景 */
|
||||
);
|
||||
|
||||
// 绑定鼠标消息监听器到节点
|
||||
static void bindListener(
|
||||
EListenerMouse * listener,
|
||||
ENode * pParentNode
|
||||
// 返回上一场景
|
||||
static void backScene(
|
||||
ETransition * transition = nullptr /* 场景切换动画 */
|
||||
);
|
||||
|
||||
// 启动具有相同名称的鼠标消息监听器
|
||||
static void startMouseListeners(
|
||||
const EString &name
|
||||
);
|
||||
// 清空保存的所有场景
|
||||
static void clearScene();
|
||||
|
||||
// 停止具有相同名称的鼠标消息监听器
|
||||
static void stopMouseListeners(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
// 删除具有相同名称的鼠标消息监听器
|
||||
static void delMouseListeners(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
// 启动绑定在场景及其子节点上的所有鼠标消息监听器
|
||||
static void startAllMouseListenersBindedWith(
|
||||
EScene * pParentScene
|
||||
);
|
||||
|
||||
// 停止绑定在场景及其子节点上的所有鼠标消息监听器
|
||||
static void stopAllMouseListenersBindedWith(
|
||||
EScene * pParentScene
|
||||
);
|
||||
|
||||
// 启动绑定在节点上的所有鼠标消息监听器
|
||||
static void startAllMouseListenersBindedWith(
|
||||
ENode * pParentNode
|
||||
);
|
||||
|
||||
// 停止绑定在节点上的所有鼠标消息监听器
|
||||
static void stopAllMouseListenersBindedWith(
|
||||
ENode * pParentNode
|
||||
);
|
||||
|
||||
// 启动所有鼠标消息监听器
|
||||
static void startAllMouseListeners();
|
||||
|
||||
// 停止所有鼠标消息监听器
|
||||
static void stopAllMouseListeners();
|
||||
|
||||
// 绑定按键消息监听器到场景
|
||||
static void bindListener(
|
||||
EListenerKeyboard * listener,
|
||||
EScene * pParentScene
|
||||
);
|
||||
|
||||
// 绑定按键消息监听器到节点
|
||||
static void bindListener(
|
||||
EListenerKeyboard * listener,
|
||||
ENode * pParentNode
|
||||
);
|
||||
|
||||
// 启动名称相同的按键消息监听器
|
||||
static void startKeyboardListeners(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
// 停止名称相同的按键消息监听器
|
||||
static void stopKeyboardListeners(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
// 删除名称相同的按键消息监听器
|
||||
static void delKeyboardListeners(
|
||||
const EString &name
|
||||
);
|
||||
|
||||
// 启动绑定在场景及其子节点上的所有按键消息监听器
|
||||
static void startAllKeyboardListenersBindedWith(
|
||||
EScene * pParentScene
|
||||
);
|
||||
|
||||
// 停止绑定在场景及其子节点上的所有按键消息监听器
|
||||
static void stopAllKeyboardListenersBindedWith(
|
||||
EScene * pParentScene
|
||||
);
|
||||
|
||||
// 启动绑定在节点上的所有按键消息监听器
|
||||
static void startAllKeyboardListenersBindedWith(
|
||||
ENode * pParentNode
|
||||
);
|
||||
|
||||
// 停止绑定在节点上的所有按键消息监听器
|
||||
static void stopAllKeyboardListenersBindedWith(
|
||||
ENode * pParentNode
|
||||
);
|
||||
|
||||
// 启动所有按键消息监听器
|
||||
static void startAllKeyboardListeners();
|
||||
|
||||
// 停止所有按键消息监听器
|
||||
static void stopAllKeyboardListeners();
|
||||
// 获取当前场景
|
||||
static EScene * getCurrentScene();
|
||||
|
||||
private:
|
||||
// 清除所有监听器
|
||||
static void _clearManager();
|
||||
// 更新场景内容
|
||||
static void __update();
|
||||
|
||||
// 清除绑定在节点上的所有鼠标消息监听器
|
||||
static void _clearAllMouseListenersBindedWith(
|
||||
ENode * pParentNode
|
||||
);
|
||||
// 渲染场景画面
|
||||
static void __render();
|
||||
|
||||
// 清除绑定在节点上的所有按键消息监听器
|
||||
static void _clearAllKeyboardListenersBindedWith(
|
||||
ENode * pParentNode
|
||||
);
|
||||
|
||||
// 鼠标消息程序
|
||||
static void MouseProc(
|
||||
UINT message,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam
|
||||
);
|
||||
|
||||
// 按键消息程序
|
||||
static void KeyboardProc(
|
||||
UINT message,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam
|
||||
);
|
||||
// 进入下一场景
|
||||
static void __enterNextScene();
|
||||
};
|
||||
|
||||
|
||||
// 定时器管理器
|
||||
class ETimerManager
|
||||
{
|
||||
friend EApp;
|
||||
friend EGame;
|
||||
friend EScene;
|
||||
friend ENode;
|
||||
|
||||
|
|
@ -242,26 +135,23 @@ public:
|
|||
static void stopAllTimers();
|
||||
|
||||
private:
|
||||
// 清空定时器管理器
|
||||
static void _clearManager();
|
||||
// 更新定时器
|
||||
static void __update();
|
||||
|
||||
// 清空绑定在节点上的所有定时器
|
||||
static void _clearAllTimersBindedWith(
|
||||
static void __clearAllTimersBindedWith(
|
||||
ENode * pParentNode
|
||||
);
|
||||
|
||||
// 重置定时器状态
|
||||
static void _resetAllTimers();
|
||||
|
||||
// 定时器执行程序
|
||||
static void TimerProc();
|
||||
static void __resetAllTimers();
|
||||
};
|
||||
|
||||
|
||||
// 动作管理器
|
||||
class EActionManager
|
||||
{
|
||||
friend EApp;
|
||||
friend EGame;
|
||||
friend EScene;
|
||||
friend ENode;
|
||||
|
||||
|
|
@ -272,7 +162,7 @@ public:
|
|||
);
|
||||
|
||||
// 继续绑定在节点上的所有动作
|
||||
static void startAllActionsBindedWith(
|
||||
static void resumeAllActionsBindedWith(
|
||||
ENode * pTargetNode
|
||||
);
|
||||
|
||||
|
|
@ -287,7 +177,7 @@ public:
|
|||
);
|
||||
|
||||
// 继续所有动作
|
||||
static void startAllActions();
|
||||
static void resumeAllActions();
|
||||
|
||||
// 暂停所有动作
|
||||
static void pauseAllActions();
|
||||
|
|
@ -296,25 +186,22 @@ public:
|
|||
static void stopAllActions();
|
||||
|
||||
private:
|
||||
// 清空动画管理器
|
||||
static void _clearManager();
|
||||
// 更新动画状态
|
||||
static void __update();
|
||||
|
||||
// 清空绑定在节点上的所有动作
|
||||
static void _clearAllActionsBindedWith(
|
||||
static void __clearAllActionsBindedWith(
|
||||
ENode * pTargetNode
|
||||
);
|
||||
|
||||
// 重置所有动作状态
|
||||
static void _resetAllActions();
|
||||
|
||||
// 动作执行程序
|
||||
static void ActionProc();
|
||||
static void __resetAllActions();
|
||||
};
|
||||
|
||||
|
||||
class EPhysicsManager
|
||||
{
|
||||
friend EApp;
|
||||
friend EGame;
|
||||
friend EScene;
|
||||
friend ENode;
|
||||
friend EGeometry;
|
||||
|
|
|
|||
|
|
@ -31,11 +31,17 @@ public:
|
|||
|
||||
virtual ~ENode();
|
||||
|
||||
// 重写这个函数,它将在节点进入场景时自动执行
|
||||
virtual void onEnter();
|
||||
// 节点进入场景时,这个函数将自动运行
|
||||
virtual void onEnter() {}
|
||||
|
||||
// 重写这个函数,它将在节点离开场景时自动执行
|
||||
virtual void onExit();
|
||||
// 节点离开场景时,这个函数将自动运行
|
||||
virtual void onExit() {}
|
||||
|
||||
// 每一帧画面刷新时,这个函数将自动运行
|
||||
virtual void onUpdate() {}
|
||||
|
||||
// 渲染节点时,这个函数将自动运行
|
||||
virtual void onRender() {}
|
||||
|
||||
// 获取节点显示状态
|
||||
virtual bool isVisiable() const;
|
||||
|
|
@ -163,7 +169,7 @@ public:
|
|||
|
||||
// 移动节点
|
||||
virtual void movePos(
|
||||
const EVec & v
|
||||
const EVector2 & v
|
||||
);
|
||||
|
||||
// 设置节点绘图顺序
|
||||
|
|
@ -295,7 +301,7 @@ public:
|
|||
);
|
||||
|
||||
// 继续所有暂停动画
|
||||
virtual void startAllActions();
|
||||
virtual void resumeAllActions();
|
||||
|
||||
// 暂停所有动画
|
||||
virtual void pauseAllActions();
|
||||
|
|
@ -411,22 +417,22 @@ public:
|
|||
|
||||
// 从文理资源创建精灵
|
||||
ESprite(
|
||||
ETexture * texture
|
||||
EImage * image
|
||||
);
|
||||
|
||||
// 从精灵帧创建精灵
|
||||
// 从关键帧创建精灵
|
||||
ESprite(
|
||||
ESpriteFrame * spriteFrame
|
||||
EKeyframe * spriteFrame
|
||||
);
|
||||
|
||||
// 从文件图片创建精灵
|
||||
ESprite(
|
||||
const EString & imageFileName
|
||||
LPCTSTR imageFileName
|
||||
);
|
||||
|
||||
// 从文件图片创建精灵并裁剪
|
||||
ESprite(
|
||||
const EString & imageFileName,
|
||||
LPCTSTR imageFileName,
|
||||
float x,
|
||||
float y,
|
||||
float width,
|
||||
|
|
@ -451,37 +457,37 @@ public:
|
|||
|
||||
virtual ~ESprite();
|
||||
|
||||
// 加载精灵纹理
|
||||
// 加载精灵图片
|
||||
void loadFrom(
|
||||
ETexture * texture
|
||||
EImage * texture
|
||||
);
|
||||
|
||||
// 从本地文件加载纹理
|
||||
// 从本地文件加载图片
|
||||
void loadFrom(
|
||||
const EString & imageFileName
|
||||
LPCTSTR imageFileName
|
||||
);
|
||||
|
||||
// 从资源加载纹理
|
||||
// 从资源加载图片
|
||||
void loadFrom(
|
||||
LPCTSTR resourceName,
|
||||
LPCTSTR resourceType
|
||||
);
|
||||
|
||||
// 加载纹理并裁剪
|
||||
// 加载图片并裁剪
|
||||
void loadFrom(
|
||||
ETexture * texture,
|
||||
EImage * image,
|
||||
float x,
|
||||
float y,
|
||||
float width,
|
||||
float height
|
||||
);
|
||||
|
||||
// 从精灵帧加载资源
|
||||
// 从关键帧加载资源
|
||||
void loadFrom(
|
||||
ESpriteFrame * frame
|
||||
EKeyframe * frame
|
||||
);
|
||||
|
||||
// 裁剪纹理
|
||||
// 裁剪图片
|
||||
void clip(
|
||||
float x,
|
||||
float y,
|
||||
|
|
@ -489,14 +495,13 @@ public:
|
|||
float height
|
||||
);
|
||||
|
||||
protected:
|
||||
// 渲染精灵
|
||||
virtual void _render() override;
|
||||
virtual void onRender() override;
|
||||
|
||||
protected:
|
||||
float m_fSourceClipX;
|
||||
float m_fSourceClipY;
|
||||
ETexture * m_pTexture;
|
||||
EImage * m_pImage;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -562,10 +567,10 @@ public:
|
|||
float wordWrapWidth
|
||||
);
|
||||
|
||||
protected:
|
||||
// 渲染文字
|
||||
virtual void _render() override;
|
||||
virtual void onRender() override;
|
||||
|
||||
protected:
|
||||
// 创建文字布局
|
||||
void _initTextLayout();
|
||||
|
||||
|
|
@ -589,14 +594,14 @@ public:
|
|||
// 创建按钮
|
||||
EButton(
|
||||
ENode * normal, /* 普通状态 */
|
||||
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||
const BtnClkCallback & callback = nullptr
|
||||
);
|
||||
|
||||
// 创建按钮
|
||||
EButton(
|
||||
ENode * normal, /* 普通状态 */
|
||||
ENode * selected, /* 鼠标按下状态 */
|
||||
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||
const BtnClkCallback & callback = nullptr
|
||||
);
|
||||
|
||||
// 创建按钮
|
||||
|
|
@ -604,7 +609,7 @@ public:
|
|||
ENode * normal, /* 普通状态 */
|
||||
ENode * mouseover, /* 鼠标移入状态 */
|
||||
ENode * selected, /* 鼠标按下状态 */
|
||||
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||
const BtnClkCallback & callback = nullptr
|
||||
);
|
||||
|
||||
// 创建按钮
|
||||
|
|
@ -613,7 +618,7 @@ public:
|
|||
ENode * mouseover, /* 鼠标移入状态 */
|
||||
ENode * selected, /* 鼠标移入状态 */
|
||||
ENode * disabled, /* 按钮禁用状态 */
|
||||
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||
const BtnClkCallback & callback = nullptr
|
||||
);
|
||||
|
||||
// 获取按钮状态是启用还是禁用
|
||||
|
|
@ -646,7 +651,7 @@ public:
|
|||
|
||||
// 设置回调函数
|
||||
void setCallback(
|
||||
const BUTTON_CLICK_CALLBACK & callback
|
||||
const BtnClkCallback & callback
|
||||
);
|
||||
|
||||
// 设置中心点的横向位置
|
||||
|
|
@ -668,24 +673,18 @@ public:
|
|||
float pivotY
|
||||
) override;
|
||||
|
||||
// 更新按钮状态
|
||||
virtual void onUpdate();
|
||||
|
||||
protected:
|
||||
enum STATUS { NORMAL, MOUSEOVER, SELECTED };
|
||||
|
||||
// 初始化按钮
|
||||
virtual void _init();
|
||||
|
||||
// 设置按钮状态
|
||||
virtual void _setStatus(STATUS status);
|
||||
|
||||
// 对自身进行二维矩阵变换
|
||||
virtual void _updateTransform() override;
|
||||
|
||||
// 刷新按钮显示
|
||||
virtual void _updateVisiable();
|
||||
|
||||
// 刷新按钮状态
|
||||
virtual void _updateStatus();
|
||||
|
||||
// 执行按钮回调函数
|
||||
virtual void _runCallback();
|
||||
|
||||
|
|
@ -697,8 +696,7 @@ protected:
|
|||
ENode * m_pDisabled;
|
||||
bool m_bEnable;
|
||||
bool m_bIsSelected;
|
||||
EListenerMouse * m_pListener;
|
||||
BUTTON_CLICK_CALLBACK m_Callback;
|
||||
BtnClkCallback m_Callback;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -713,7 +711,7 @@ public:
|
|||
EButtonToggle(
|
||||
ENode * toggleOnNormal,
|
||||
ENode * toggleOffNormal,
|
||||
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||
const BtnClkCallback & callback = nullptr
|
||||
);
|
||||
|
||||
// 创建开关按钮
|
||||
|
|
@ -722,7 +720,7 @@ public:
|
|||
ENode * toggleOffNormal,
|
||||
ENode * toggleOnSelected,
|
||||
ENode * toggleOffSelected,
|
||||
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||
const BtnClkCallback & callback = nullptr
|
||||
);
|
||||
|
||||
// 创建开关按钮
|
||||
|
|
@ -733,7 +731,7 @@ public:
|
|||
ENode * toggleOffMouseOver,
|
||||
ENode * toggleOnSelected,
|
||||
ENode * toggleOffSelected,
|
||||
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||
const BtnClkCallback & callback = nullptr
|
||||
);
|
||||
|
||||
// 创建开关按钮
|
||||
|
|
@ -746,7 +744,7 @@ public:
|
|||
ENode * toggleOffSelected,
|
||||
ENode * toggleOnDisabled,
|
||||
ENode * toggleOffDisabled,
|
||||
const BUTTON_CLICK_CALLBACK & callback = nullptr
|
||||
const BtnClkCallback & callback = nullptr
|
||||
);
|
||||
|
||||
// 切换开关状态,并执行回调函数
|
||||
|
|
|
|||
220
core/etools.h
220
core/etools.h
|
|
@ -8,6 +8,47 @@ namespace e2d
|
|||
class ETimerManager;
|
||||
class EAction;
|
||||
|
||||
// 随机数产生器
|
||||
class ERandom
|
||||
{
|
||||
public:
|
||||
// 取得整型范围内的一个随机数
|
||||
template<typename T>
|
||||
static inline T range(T min, T max) { return e2d::ERandom::randomInt(min, max); }
|
||||
|
||||
// 取得浮点数范围内的一个随机数
|
||||
static inline float range(float min, float max) { return e2d::ERandom::randomReal(min, max); }
|
||||
|
||||
// 取得浮点数范围内的一个随机数
|
||||
static inline double range(double min, double max) { return e2d::ERandom::randomReal(min, max); }
|
||||
|
||||
// 取得浮点数范围内的一个随机数
|
||||
static inline long double range(long double min, long double max) { return e2d::ERandom::randomReal(min, max); }
|
||||
|
||||
// 取得整型范围内的一个随机数
|
||||
template<typename T>
|
||||
static T randomInt(
|
||||
T min,
|
||||
T max)
|
||||
{
|
||||
std::uniform_int_distribution<T> dist(min, max);
|
||||
return dist(getEngine());
|
||||
}
|
||||
|
||||
// 取得浮点数类型范围内的一个随机数
|
||||
template<typename T>
|
||||
static T randomReal(
|
||||
T min,
|
||||
T max)
|
||||
{
|
||||
std::uniform_real_distribution<T> dist(min, max);
|
||||
return dist(getEngine());
|
||||
}
|
||||
|
||||
// 获取随机数产生器
|
||||
static std::default_random_engine &getEngine();
|
||||
};
|
||||
|
||||
|
||||
// 定时器
|
||||
class ETimer :
|
||||
|
|
@ -19,17 +60,17 @@ public:
|
|||
ETimer();
|
||||
|
||||
ETimer(
|
||||
const TIMER_CALLBACK &callback, /* 定时器回调函数 */
|
||||
const TimerCallback &callback, /* 定时器回调函数 */
|
||||
int repeatTimes = -1, /* 定时器执行次数 */
|
||||
LONGLONG interval = 0LL, /* 时间间隔(毫秒) */
|
||||
float interval = 0LL, /* 时间间隔(秒) */
|
||||
bool atOnce = false /* 是否立即执行 */
|
||||
);
|
||||
|
||||
ETimer(
|
||||
const EString &name, /* 定时器名称 */
|
||||
const TIMER_CALLBACK &callback, /* 定时器回调函数 */
|
||||
const TimerCallback &callback, /* 定时器回调函数 */
|
||||
int repeatTimes = -1, /* 定时器执行次数 */
|
||||
LONGLONG interval = 0LL, /* 时间间隔(毫秒) */
|
||||
float interval = 0, /* 时间间隔(秒) */
|
||||
bool atOnce = false /* 是否立即执行 */
|
||||
);
|
||||
|
||||
|
|
@ -53,14 +94,14 @@ public:
|
|||
const EString &name
|
||||
);
|
||||
|
||||
// 设置定时器执行间隔
|
||||
// 设置定时器执行间隔(秒)
|
||||
void setInterval(
|
||||
LONGLONG interval
|
||||
float interval
|
||||
);
|
||||
|
||||
// 设置定时器回调函数
|
||||
void setCallback(
|
||||
const TIMER_CALLBACK & callback
|
||||
const TimerCallback & callback
|
||||
);
|
||||
|
||||
// 设置定时器重复执行次数
|
||||
|
|
@ -96,14 +137,60 @@ protected:
|
|||
bool m_bAtOnce;
|
||||
int m_nRunTimes;
|
||||
int m_nRepeatTimes;
|
||||
float m_fInterval;
|
||||
float m_fLast;
|
||||
ENode * m_pParentNode;
|
||||
TIMER_CALLBACK m_Callback;
|
||||
LARGE_INTEGER m_nInterval;
|
||||
LARGE_INTEGER m_tLast;
|
||||
TimerCallback m_Callback;
|
||||
};
|
||||
|
||||
|
||||
class EFileUtils
|
||||
// 数据管理工具
|
||||
class EData
|
||||
{
|
||||
public:
|
||||
// 保存 int 类型的值
|
||||
static void saveInt(
|
||||
const EString & key,
|
||||
int value
|
||||
);
|
||||
|
||||
// 保存 float 类型的值
|
||||
static void saveFloat(
|
||||
const EString & key,
|
||||
float value
|
||||
);
|
||||
|
||||
// 保存 字符串 类型的值
|
||||
static void saveString(
|
||||
const EString & key,
|
||||
const EString & value
|
||||
);
|
||||
|
||||
// 获取 int 类型的值
|
||||
// (若不存在则返回 defaultValue 参数的值)
|
||||
static int getInt(
|
||||
const EString & key,
|
||||
int defaultValue
|
||||
);
|
||||
|
||||
// 获取 float 类型的值
|
||||
// (若不存在则返回 defaultValue 参数的值)
|
||||
static float getFloat(
|
||||
const EString & key,
|
||||
float defaultValue
|
||||
);
|
||||
|
||||
// 获取 字符串 类型的值
|
||||
// (若不存在则返回 defaultValue 参数的值)
|
||||
static EString getString(
|
||||
const EString & key,
|
||||
const EString & defaultValue
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
// 文件管理工具
|
||||
class EFile
|
||||
{
|
||||
public:
|
||||
// 获取系统的 AppData Local 路径
|
||||
|
|
@ -115,110 +202,31 @@ public:
|
|||
// 获取默认的保存路径
|
||||
static EString getDefaultSavePath();
|
||||
|
||||
// 保存 int 型的值
|
||||
static void saveInt(
|
||||
const EString & key,
|
||||
int value
|
||||
);
|
||||
|
||||
// 保存 float 型的值
|
||||
static void saveFloat(
|
||||
const EString & key,
|
||||
float value
|
||||
);
|
||||
|
||||
// 保存 字符串 型的值(不要在 Unicode 字符集下保存中文字符)
|
||||
static void saveString(
|
||||
const EString & key,
|
||||
const EString & value
|
||||
);
|
||||
|
||||
// 获取 int 型的值(若不存在则返回 default 参数的值)
|
||||
static int getInt(
|
||||
const EString & key,
|
||||
int default
|
||||
);
|
||||
|
||||
// 获取 float 型的值(若不存在则返回 default 参数的值)
|
||||
static float getFloat(
|
||||
const EString & key,
|
||||
float default
|
||||
);
|
||||
|
||||
// 获取 字符串 型的值(若不存在则返回 default 参数的值)
|
||||
static EString getString(
|
||||
const EString & key,
|
||||
const EString & default
|
||||
);
|
||||
|
||||
// 得到文件扩展名(小写)
|
||||
// 获取文件扩展名
|
||||
static EString getFileExtension(
|
||||
const EString & filePath
|
||||
);
|
||||
|
||||
/**
|
||||
* 打开保存文件对话框,得到有效保存路径返回 true
|
||||
* 参数:窗口标题,默认扩展名
|
||||
*/
|
||||
// 打开保存文件对话框
|
||||
static EString getSaveFilePath(
|
||||
const EString & title = L"保存到",
|
||||
const EString & defExt = L""
|
||||
const EString & title = L"保存到", /* 对话框标题 */
|
||||
const EString & defExt = L"" /* 默认扩展名 */
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
class ERandom
|
||||
{
|
||||
public:
|
||||
// 取得整型范围内的一个随机数
|
||||
template<typename T>
|
||||
static inline T between(T min, T max) { return e2d::ERandom::randomInt(min, max); }
|
||||
|
||||
// 取得浮点数范围内的一个随机数
|
||||
static inline float between(float min, float max) { return e2d::ERandom::randomReal(min, max); }
|
||||
|
||||
// 取得浮点数范围内的一个随机数
|
||||
static inline double between(double min, double max) { return e2d::ERandom::randomReal(min, max); }
|
||||
|
||||
// 取得浮点数范围内的一个随机数
|
||||
static inline long double between(long double min, long double max) { return e2d::ERandom::randomReal(min, max); }
|
||||
|
||||
// 取得整型范围内的一个随机数
|
||||
template<typename T>
|
||||
static T randomInt(
|
||||
T min,
|
||||
T max)
|
||||
{
|
||||
std::uniform_int_distribution<T> dist(min, max);
|
||||
return dist(getEngine());
|
||||
}
|
||||
|
||||
// 取得浮点数类型范围内的一个随机数
|
||||
template<typename T>
|
||||
static T randomReal(
|
||||
T min,
|
||||
T max)
|
||||
{
|
||||
std::uniform_real_distribution<T> dist(min, max);
|
||||
return dist(getEngine());
|
||||
}
|
||||
|
||||
// 获取随机数产生器
|
||||
static std::default_random_engine &getEngine();
|
||||
};
|
||||
|
||||
|
||||
class EMusicUtils
|
||||
// 音乐管理工具
|
||||
class EMusic
|
||||
{
|
||||
public:
|
||||
// 播放音乐
|
||||
static UINT playMusic(
|
||||
static UINT play(
|
||||
const EString & musicFilePath, /* 音乐文件路径 */
|
||||
int repeatTimes = 1
|
||||
);
|
||||
|
||||
// 播放音乐
|
||||
static UINT playMusic(
|
||||
static UINT play(
|
||||
const EString & musicResourceName, /* 资源名称 */
|
||||
const EString & musicResourceType, /* 资源类别 */
|
||||
const EString & musicExtension, /* 指定资源的扩展名 */
|
||||
|
|
@ -226,42 +234,42 @@ public:
|
|||
);
|
||||
|
||||
// 暂停音乐
|
||||
static bool pauseMusic(
|
||||
static bool pause(
|
||||
UINT musicId
|
||||
);
|
||||
|
||||
// 暂停音乐
|
||||
static bool pauseMusic(
|
||||
static bool pause(
|
||||
const EString& musicName
|
||||
);
|
||||
|
||||
// 继续播放音乐
|
||||
static bool resumeMusic(
|
||||
static bool resume(
|
||||
UINT musicId
|
||||
);
|
||||
|
||||
// 继续播放音乐
|
||||
static bool resumeMusic(
|
||||
static bool resume(
|
||||
const EString& musicName
|
||||
);
|
||||
|
||||
// 停止音乐
|
||||
static bool stopMusic(
|
||||
static bool stop(
|
||||
UINT musicId
|
||||
);
|
||||
|
||||
// 停止音乐
|
||||
static bool stopMusic(
|
||||
static bool stop(
|
||||
const EString& musicName
|
||||
);
|
||||
|
||||
// 预加载音乐
|
||||
static UINT preloadMusic(
|
||||
static UINT preload(
|
||||
const EString & musicFilePath
|
||||
);
|
||||
|
||||
// 预加载音乐
|
||||
static UINT preloadMusic(
|
||||
static UINT preload(
|
||||
const EString & musicResourceName, /* 资源名称 */
|
||||
const EString & musicResourceType, /* 资源类别 */
|
||||
const EString & musicExtension /* 指定资源的扩展名 */
|
||||
|
|
|
|||
|
|
@ -1,13 +1,16 @@
|
|||
#pragma once
|
||||
#include "ebase.h"
|
||||
#include "ecommon.h"
|
||||
|
||||
namespace e2d
|
||||
{
|
||||
|
||||
|
||||
class ESceneManager;
|
||||
|
||||
class ETransition :
|
||||
public EObject
|
||||
{
|
||||
friend EApp;
|
||||
friend ESceneManager;
|
||||
|
||||
public:
|
||||
ETransition(float duration);
|
||||
|
|
@ -16,17 +19,21 @@ public:
|
|||
bool isEnding();
|
||||
|
||||
protected:
|
||||
// 更新动画
|
||||
// 更新场景动画
|
||||
virtual void _update() = 0;
|
||||
|
||||
// 初始化场景动画
|
||||
virtual void _init() = 0;
|
||||
|
||||
// 重置场景动画
|
||||
virtual void _reset() = 0;
|
||||
|
||||
virtual bool _isDelayEnough();
|
||||
|
||||
// 停止场景动画
|
||||
virtual void _stop();
|
||||
|
||||
// 计算场景动画进度
|
||||
void _calcRateOfProgress();
|
||||
|
||||
// 保存当前场景和下一场景的指针
|
||||
void _setTarget(
|
||||
EScene * prev,
|
||||
|
|
@ -35,13 +42,11 @@ protected:
|
|||
|
||||
protected:
|
||||
bool m_bEnd;
|
||||
float m_fTotalDuration;
|
||||
float m_fLast;
|
||||
float m_fDuration;
|
||||
float m_fRateOfProgress;
|
||||
EScene * m_pPrevScene;
|
||||
EScene * m_pNextScene;
|
||||
LARGE_INTEGER m_tLast;
|
||||
LARGE_INTEGER m_nAnimationInterval;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -117,7 +122,7 @@ protected:
|
|||
|
||||
protected:
|
||||
MOVE_DIRECT m_Direct;
|
||||
EVec m_Vec;
|
||||
EVector2 m_Vec;
|
||||
EPoint m_NextPos;
|
||||
};
|
||||
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -94,72 +94,63 @@
|
|||
<ClInclude Include="..\..\core\enodes.h" />
|
||||
<ClInclude Include="..\..\core\etools.h" />
|
||||
<ClInclude Include="..\..\core\etransitions.h" />
|
||||
<ClInclude Include="..\..\core\Win\MciPlayer.h" />
|
||||
<ClInclude Include="..\..\core\Win\winbase.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\core\Action\EAction.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EActionCallback.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EActionDelay.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EActionGradual.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EActionLoop.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EActionMoveBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EActionMoveTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EActionOpacityBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EActionOpacityTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EActionRotateBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EActionRotateTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EActionScaleBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EActionScaleTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EActionSequence.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EActionTwo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EActionTwoAtSameTime.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\EAnimation.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\EApp.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\EScene.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\EFont.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\EObject.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\ESpriteFrame.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\EString.cpp" />
|
||||
<ClCompile Include="..\..\core\Common\ETexture.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\ECircle.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\EEllipse.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\EGeometry.cpp" />
|
||||
<ClCompile Include="..\..\core\Geometry\ERectangle.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\EListener.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\EListenerKeyboard.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\EListenerKeyboardPress.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\EListenerMouse.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\EListenerMouseClick.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\EListenerMouseDoubleClick.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\EListenerMouseDrag.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\EListenerMousePress.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\EListenerPhysics.cpp" />
|
||||
<ClCompile Include="..\..\core\Listener\EListenerPhysicsCollision.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\EActionManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\EMsgManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\EObjectManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\EPhysicsManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\ETimerManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Msg\EKeyboardMsg.cpp" />
|
||||
<ClCompile Include="..\..\core\Msg\EMouseMsg.cpp" />
|
||||
<ClCompile Include="..\..\core\Msg\EPhysicsMsg.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\EButton.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\EButtonToggle.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\EMenu.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\ENode.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\ESprite.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\EText.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\EFileUtils.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\EMusicUtils.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\ERandom.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\ETimer.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\Action.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionCallback.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionDelay.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionGradual.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionLoop.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionMoveBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionMoveTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionOpacityBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionOpacityTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionRotateBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionRotateTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionScaleBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionScaleTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionSequence.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionTwo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionTwoAtSameTime.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\Animation.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Game.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Input.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Renderer.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Time.cpp" />
|
||||
<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\ObjectManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\PhysicsManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\SceneManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\TimerManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Button.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\ButtonToggle.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Menu.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Node.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Sprite.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Text.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Data.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Music.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Random.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Timer.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\ETransition.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionEmerge.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionFade.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionMove.cpp" />
|
||||
<ClCompile Include="..\..\core\Win\MciPlayer.cpp" />
|
||||
<ClCompile Include="..\..\core\Win\winbase.cpp" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
|
|
|
|||
|
|
@ -1,275 +1,215 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="源文件">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="头文件">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="源文件\Base">
|
||||
<UniqueIdentifier>{d4a509dd-1bc0-4456-9554-d414de91b50c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="源文件\Msg">
|
||||
<UniqueIdentifier>{3ff66c81-6040-4f84-a39a-d21b4bb54819}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="源文件\Action">
|
||||
<Filter Include="Action">
|
||||
<UniqueIdentifier>{5be538cb-a432-4f84-9678-bbf408eca288}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="源文件\Transition">
|
||||
<UniqueIdentifier>{6c760a81-9bc8-4fb0-a145-8e119b783365}</UniqueIdentifier>
|
||||
<Filter Include="Base">
|
||||
<UniqueIdentifier>{d4a509dd-1bc0-4456-9554-d414de91b50c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="源文件\Manager">
|
||||
<UniqueIdentifier>{7b102f67-5905-4c0e-8400-51c128da026a}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="源文件\Node">
|
||||
<UniqueIdentifier>{c536c42c-283d-4a10-b19b-0699b4f1e051}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="源文件\Tool">
|
||||
<UniqueIdentifier>{17bdc67b-1801-4b69-b79b-ffcbbee8dae0}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="源文件\Win">
|
||||
<UniqueIdentifier>{7454d212-5d2e-4b0b-865c-30fb02d2878c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="源文件\Listener">
|
||||
<UniqueIdentifier>{c5f168c6-1403-486a-9cae-ab29495a723c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="源文件\Common">
|
||||
<Filter Include="Common">
|
||||
<UniqueIdentifier>{c907d829-e510-472c-bd47-cf4eab6f9266}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="源文件\Geometry">
|
||||
<Filter Include="Event">
|
||||
<UniqueIdentifier>{62d6a1d4-f1ec-458a-aee0-377b16012bed}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Geometry">
|
||||
<UniqueIdentifier>{508b39c8-a430-45c3-9405-364fbc281220}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Listener">
|
||||
<UniqueIdentifier>{c5f168c6-1403-486a-9cae-ab29495a723c}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Manager">
|
||||
<UniqueIdentifier>{7b102f67-5905-4c0e-8400-51c128da026a}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Node">
|
||||
<UniqueIdentifier>{c536c42c-283d-4a10-b19b-0699b4f1e051}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Tool">
|
||||
<UniqueIdentifier>{17bdc67b-1801-4b69-b79b-ffcbbee8dae0}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Transition">
|
||||
<UniqueIdentifier>{6c760a81-9bc8-4fb0-a145-8e119b783365}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\core\eactions.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\core\easy2d.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\core\ebase.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\core\ecommon.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\core\egeometry.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\core\elisteners.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\core\emacros.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\core\emanagers.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\core\enodes.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\core\etools.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\core\etransitions.h">
|
||||
<Filter>头文件</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\core\Win\MciPlayer.h">
|
||||
<Filter>源文件\Win</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\core\Win\winbase.h">
|
||||
<Filter>源文件\Win</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\core\eactions.h" />
|
||||
<ClInclude Include="..\..\core\etransitions.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" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\core\Base\EApp.cpp">
|
||||
<Filter>源文件\Base</Filter>
|
||||
<ClCompile Include="..\..\core\Action\Action.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Base\EScene.cpp">
|
||||
<Filter>源文件\Base</Filter>
|
||||
<ClCompile Include="..\..\core\Action\ActionCallback.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Msg\EKeyboardMsg.cpp">
|
||||
<Filter>源文件\Msg</Filter>
|
||||
<ClCompile Include="..\..\core\Action\ActionDelay.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Msg\EMouseMsg.cpp">
|
||||
<Filter>源文件\Msg</Filter>
|
||||
<ClCompile Include="..\..\core\Action\ActionGradual.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Msg\EPhysicsMsg.cpp">
|
||||
<Filter>源文件\Msg</Filter>
|
||||
<ClCompile Include="..\..\core\Action\ActionLoop.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EAction.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Action\ActionMoveBy.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EActionCallback.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Action\ActionMoveTo.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EActionDelay.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Action\ActionOpacityBy.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EActionGradual.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Action\ActionOpacityTo.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EActionLoop.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Action\ActionRotateBy.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EActionMoveBy.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Action\ActionRotateTo.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EActionMoveTo.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Action\ActionScaleBy.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EActionOpacityBy.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Action\ActionScaleTo.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EActionOpacityTo.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Action\ActionSequence.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EActionRotateBy.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Action\ActionTwo.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EActionRotateTo.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Action\ActionTwoAtSameTime.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EActionScaleBy.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Action\Animation.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EActionScaleTo.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Base\Game.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EActionSequence.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Base\Input.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EActionTwo.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Base\Renderer.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EActionTwoAtSameTime.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Base\Time.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\EAnimation.cpp">
|
||||
<Filter>源文件\Action</Filter>
|
||||
<ClCompile Include="..\..\core\Base\Window.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\EActionManager.cpp">
|
||||
<Filter>源文件\Manager</Filter>
|
||||
<ClCompile Include="..\..\core\Common\Font.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\EMsgManager.cpp">
|
||||
<Filter>源文件\Manager</Filter>
|
||||
<ClCompile Include="..\..\core\Common\Image.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\EObjectManager.cpp">
|
||||
<Filter>源文件\Manager</Filter>
|
||||
<ClCompile Include="..\..\core\Common\Keyframe.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\EPhysicsManager.cpp">
|
||||
<Filter>源文件\Manager</Filter>
|
||||
<ClCompile Include="..\..\core\Common\Object.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Manager\ETimerManager.cpp">
|
||||
<Filter>源文件\Manager</Filter>
|
||||
<ClCompile Include="..\..\core\Common\Scene.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\EListener.cpp">
|
||||
<Filter>源文件\Listener</Filter>
|
||||
<ClCompile Include="..\..\core\Common\String.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\EListenerKeyboard.cpp">
|
||||
<Filter>源文件\Listener</Filter>
|
||||
<ClCompile Include="..\..\core\Geometry\Circle.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\EListenerKeyboardPress.cpp">
|
||||
<Filter>源文件\Listener</Filter>
|
||||
<ClCompile Include="..\..\core\Geometry\Ellipse.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\EListenerMouse.cpp">
|
||||
<Filter>源文件\Listener</Filter>
|
||||
<ClCompile Include="..\..\core\Geometry\Geometry.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\EListenerMouseClick.cpp">
|
||||
<Filter>源文件\Listener</Filter>
|
||||
<ClCompile Include="..\..\core\Geometry\Rectangle.cpp">
|
||||
<Filter>Geometry</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\EListenerMouseDoubleClick.cpp">
|
||||
<Filter>源文件\Listener</Filter>
|
||||
<ClCompile Include="..\..\core\Event\PhysicsEvent.cpp">
|
||||
<Filter>Event</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\EListenerMouseDrag.cpp">
|
||||
<Filter>源文件\Listener</Filter>
|
||||
<ClCompile Include="..\..\core\Listener\Listener.cpp">
|
||||
<Filter>Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\EListenerMousePress.cpp">
|
||||
<Filter>源文件\Listener</Filter>
|
||||
<ClCompile Include="..\..\core\Listener\ListenerPhysics.cpp">
|
||||
<Filter>Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\EListenerPhysics.cpp">
|
||||
<Filter>源文件\Listener</Filter>
|
||||
<ClCompile Include="..\..\core\Listener\ListenerPhysicsCollision.cpp">
|
||||
<Filter>Listener</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Listener\EListenerPhysicsCollision.cpp">
|
||||
<Filter>源文件\Listener</Filter>
|
||||
<ClCompile Include="..\..\core\Manager\ActionManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Common\EFont.cpp">
|
||||
<Filter>源文件\Common</Filter>
|
||||
<ClCompile Include="..\..\core\Manager\ObjectManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Common\EObject.cpp">
|
||||
<Filter>源文件\Common</Filter>
|
||||
<ClCompile Include="..\..\core\Manager\PhysicsManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Common\ESpriteFrame.cpp">
|
||||
<Filter>源文件\Common</Filter>
|
||||
<ClCompile Include="..\..\core\Manager\SceneManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Common\EString.cpp">
|
||||
<Filter>源文件\Common</Filter>
|
||||
<ClCompile Include="..\..\core\Manager\TimerManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Common\ETexture.cpp">
|
||||
<Filter>源文件\Common</Filter>
|
||||
<ClCompile Include="..\..\core\Node\Button.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\ECircle.cpp">
|
||||
<Filter>源文件\Geometry</Filter>
|
||||
<ClCompile Include="..\..\core\Node\ButtonToggle.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\EEllipse.cpp">
|
||||
<Filter>源文件\Geometry</Filter>
|
||||
<ClCompile Include="..\..\core\Node\Menu.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\EGeometry.cpp">
|
||||
<Filter>源文件\Geometry</Filter>
|
||||
<ClCompile Include="..\..\core\Node\Node.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Geometry\ERectangle.cpp">
|
||||
<Filter>源文件\Geometry</Filter>
|
||||
<ClCompile Include="..\..\core\Node\Sprite.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Win\MciPlayer.cpp">
|
||||
<Filter>源文件\Win</Filter>
|
||||
<ClCompile Include="..\..\core\Node\Text.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Win\winbase.cpp">
|
||||
<Filter>源文件\Win</Filter>
|
||||
<ClCompile Include="..\..\core\Tool\Data.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\EFileUtils.cpp">
|
||||
<Filter>源文件\Tool</Filter>
|
||||
<ClCompile Include="..\..\core\Tool\Music.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\EMusicUtils.cpp">
|
||||
<Filter>源文件\Tool</Filter>
|
||||
<ClCompile Include="..\..\core\Tool\Random.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\ERandom.cpp">
|
||||
<Filter>源文件\Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\ETimer.cpp">
|
||||
<Filter>源文件\Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\EButton.cpp">
|
||||
<Filter>源文件\Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\EButtonToggle.cpp">
|
||||
<Filter>源文件\Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\EMenu.cpp">
|
||||
<Filter>源文件\Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\ENode.cpp">
|
||||
<Filter>源文件\Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\ESprite.cpp">
|
||||
<Filter>源文件\Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\EText.cpp">
|
||||
<Filter>源文件\Node</Filter>
|
||||
<ClCompile Include="..\..\core\Tool\Timer.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Transition\ETransition.cpp">
|
||||
<Filter>源文件\Transition</Filter>
|
||||
<Filter>Transition</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionEmerge.cpp">
|
||||
<Filter>源文件\Transition</Filter>
|
||||
<Filter>Transition</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionFade.cpp">
|
||||
<Filter>源文件\Transition</Filter>
|
||||
<Filter>Transition</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionMove.cpp">
|
||||
<Filter>源文件\Transition</Filter>
|
||||
<Filter>Transition</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2012
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Easy2D", "Easy2D.vcxproj", "{722EA245-ADD5-4296-8C85-8FF42C0335D3}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{722EA245-ADD5-4296-8C85-8FF42C0335D3}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{722EA245-ADD5-4296-8C85-8FF42C0335D3}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{722EA245-ADD5-4296-8C85-8FF42C0335D3}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{722EA245-ADD5-4296-8C85-8FF42C0335D3}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
@ -0,0 +1,160 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</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" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\core\Action\Action.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionCallback.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionDelay.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionGradual.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionLoop.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionMoveBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionMoveTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionOpacityBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionOpacityTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionRotateBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionRotateTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionScaleBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionScaleTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionSequence.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionTwo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionTwoAtSameTime.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\Animation.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Game.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Input.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Renderer.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Time.cpp" />
|
||||
<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\ObjectManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\PhysicsManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\SceneManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\TimerManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Button.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\ButtonToggle.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Menu.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Node.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Sprite.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Text.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Data.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Music.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Random.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Timer.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\ETransition.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionEmerge.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionFade.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionMove.cpp" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{722EA245-ADD5-4296-8C85-8FF42C0335D3}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>Easy2D</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v110</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v110</PlatformToolset>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<OutDir>$(SolutionDir)$(Platform)\</OutDir>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
<TargetName>Easy2Ddw</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<OutDir>$(SolutionDir)$(Platform)\</OutDir>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
<TargetName>Easy2Dw</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>
|
||||
</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,215 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Action">
|
||||
<UniqueIdentifier>{01311827-b639-4313-a5b6-61cd22fe8920}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Base">
|
||||
<UniqueIdentifier>{e5c42dd3-2d56-4a95-8f88-45d059d58c21}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<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>
|
||||
<Filter Include="Tool">
|
||||
<UniqueIdentifier>{dacd05f1-3496-488b-af4d-b3ea7bce9515}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Transition">
|
||||
<UniqueIdentifier>{337d5a0f-60fd-473a-83da-b2a3515affd9}</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" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\core\Action\Action.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionCallback.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionDelay.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionGradual.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionLoop.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionMoveBy.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionMoveTo.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionOpacityBy.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionOpacityTo.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionRotateBy.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionRotateTo.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionScaleBy.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionScaleTo.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionSequence.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionTwo.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionTwoAtSameTime.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\Animation.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Base\Game.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Base\Input.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Base\Renderer.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Base\Time.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Base\Window.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Common\Font.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<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>
|
||||
<ClCompile Include="..\..\core\Common\Scene.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<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>
|
||||
<ClCompile Include="..\..\core\Tool\Music.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\Random.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\Timer.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Transition\ETransition.cpp">
|
||||
<Filter>Transition</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionEmerge.cpp">
|
||||
<Filter>Transition</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionFade.cpp">
|
||||
<Filter>Transition</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionMove.cpp">
|
||||
<Filter>Transition</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\Button.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\ButtonToggle.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\Menu.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\Node.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\Sprite.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\Text.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2013
|
||||
VisualStudioVersion = 12.0.21005.1
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Easy2D", "Easy2D.vcxproj", "{91DBDFCC-4083-427C-AAAD-55715118DB26}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{91DBDFCC-4083-427C-AAAD-55715118DB26}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{91DBDFCC-4083-427C-AAAD-55715118DB26}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{91DBDFCC-4083-427C-AAAD-55715118DB26}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{91DBDFCC-4083-427C-AAAD-55715118DB26}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
@ -0,0 +1,160 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{91DBDFCC-4083-427C-AAAD-55715118DB26}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>Win32Project1</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<OutDir>$(SolutionDir)$(Platform)\</OutDir>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
<TargetName>Easy2Ddw</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<OutDir>$(SolutionDir)$(Platform)\</OutDir>
|
||||
<IntDir>$(Configuration)\$(Platform)\</IntDir>
|
||||
<TargetName>Easy2Dw</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>
|
||||
</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<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" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\core\Action\Action.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionCallback.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionDelay.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionGradual.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionLoop.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionMoveBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionMoveTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionOpacityBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionOpacityTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionRotateBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionRotateTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionScaleBy.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionScaleTo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionSequence.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionTwo.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\ActionTwoAtSameTime.cpp" />
|
||||
<ClCompile Include="..\..\core\Action\Animation.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Game.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Input.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Renderer.cpp" />
|
||||
<ClCompile Include="..\..\core\Base\Time.cpp" />
|
||||
<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\ObjectManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\PhysicsManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\SceneManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Manager\TimerManager.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Button.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\ButtonToggle.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Menu.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Node.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Sprite.cpp" />
|
||||
<ClCompile Include="..\..\core\Node\Text.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Data.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Music.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Random.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Timer.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\ETransition.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionEmerge.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionFade.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionMove.cpp" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,215 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Action">
|
||||
<UniqueIdentifier>{01311827-b639-4313-a5b6-61cd22fe8920}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Base">
|
||||
<UniqueIdentifier>{e5c42dd3-2d56-4a95-8f88-45d059d58c21}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<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>
|
||||
<Filter Include="Tool">
|
||||
<UniqueIdentifier>{dacd05f1-3496-488b-af4d-b3ea7bce9515}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Transition">
|
||||
<UniqueIdentifier>{337d5a0f-60fd-473a-83da-b2a3515affd9}</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" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\core\Action\Action.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionCallback.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionDelay.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionGradual.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionLoop.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionMoveBy.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionMoveTo.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionOpacityBy.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionOpacityTo.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionRotateBy.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionRotateTo.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionScaleBy.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionScaleTo.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionSequence.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionTwo.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\ActionTwoAtSameTime.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Action\Animation.cpp">
|
||||
<Filter>Action</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Base\Game.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Base\Input.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Base\Renderer.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Base\Time.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Base\Window.cpp">
|
||||
<Filter>Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Common\Font.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<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>
|
||||
<ClCompile Include="..\..\core\Common\Scene.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<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>
|
||||
<ClCompile Include="..\..\core\Tool\Music.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\Random.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\Timer.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Transition\ETransition.cpp">
|
||||
<Filter>Transition</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionEmerge.cpp">
|
||||
<Filter>Transition</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionFade.cpp">
|
||||
<Filter>Transition</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Transition\ETransitionMove.cpp">
|
||||
<Filter>Transition</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\Button.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\ButtonToggle.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\Menu.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\Node.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\Sprite.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Node\Text.cpp">
|
||||
<Filter>Node</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -7,13 +7,20 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Easy2D", "Easy2D.vcxproj",
|
|||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|x64.Build.0 = Debug|x64
|
||||
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|x64.Deploy.0 = Debug|x64
|
||||
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|x86.Build.0 = Debug|Win32
|
||||
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|x86.Deploy.0 = Debug|Win32
|
||||
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Release|x64.ActiveCfg = Release|x64
|
||||
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Release|x64.Build.0 = Release|x64
|
||||
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Release|x86.ActiveCfg = Release|Win32
|
||||
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue