2017-10-12 23:34:13 +08:00
|
|
|
|
#pragma once
|
|
|
|
|
|
#include "emacros.h"
|
|
|
|
|
|
#include "ecommon.h"
|
|
|
|
|
|
|
2017-10-13 11:42:36 +08:00
|
|
|
|
|
2017-10-12 23:34:13 +08:00
|
|
|
|
// Base Classes
|
|
|
|
|
|
|
|
|
|
|
|
namespace e2d
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
class EScene;
|
|
|
|
|
|
class ENode;
|
|
|
|
|
|
class EObjectManager;
|
2017-10-14 01:07:34 +08:00
|
|
|
|
class EMouseListener;
|
|
|
|
|
|
class EKeyboardListener;
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
|
|
|
|
|
class EApp
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
EApp();
|
|
|
|
|
|
|
|
|
|
|
|
~EApp();
|
|
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
2017-10-12 23:34:13 +08:00
|
|
|
|
bool init(
|
2017-10-17 21:22:25 +08:00
|
|
|
|
const EString &title, /* <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD> */
|
|
|
|
|
|
UINT32 width, /* <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> */
|
|
|
|
|
|
UINT32 height, /* <20><><EFBFBD>ڸ߶<DAB8> */
|
|
|
|
|
|
bool showConsole = false/* <20>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>̨ */
|
2017-10-12 23:34:13 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
2017-10-12 23:34:13 +08:00
|
|
|
|
bool init(
|
2017-10-17 21:22:25 +08:00
|
|
|
|
const EString &title, /* <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD> */
|
|
|
|
|
|
UINT32 width, /* <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> */
|
|
|
|
|
|
UINT32 height, /* <20><><EFBFBD>ڸ߶<DAB8> */
|
|
|
|
|
|
int windowStyle, /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ */
|
|
|
|
|
|
bool showConsole = false/* <20>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>̨ */
|
2017-10-12 23:34:13 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void run();
|
|
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// Ԥ<>軭<EFBFBD><E8BBAD>֡<EFBFBD><D6A1>
|
|
|
|
|
|
void setFPS(
|
|
|
|
|
|
UINT32 fps
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ִ<EFBFBD>г<EFBFBD><D0B3><EFBFBD>
|
|
|
|
|
|
virtual bool onExit();
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>Դ
|
|
|
|
|
|
void free();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
|
|
|
|
|
|
static EApp * get();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>̨<EFBFBD><CCA8>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>
|
|
|
|
|
|
static void showConsole(
|
|
|
|
|
|
bool show
|
2017-10-12 23:34:13 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ĵ<DEB8><C4B4>ڴ<EFBFBD>С
|
2017-10-14 01:07:34 +08:00
|
|
|
|
static void setWindowSize(
|
2017-10-17 21:22:25 +08:00
|
|
|
|
UINT32 width,
|
|
|
|
|
|
UINT32 height
|
2017-10-12 23:34:13 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ô<EFBFBD><C3B4>ڱ<EFBFBD><DAB1><EFBFBD>
|
2017-10-14 01:07:34 +08:00
|
|
|
|
static void setWindowTitle(
|
2017-10-17 21:22:25 +08:00
|
|
|
|
const EString &title
|
2017-10-12 23:34:13 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>
|
2017-10-17 21:22:25 +08:00
|
|
|
|
static EString getTitle();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>
|
2017-10-14 01:07:34 +08:00
|
|
|
|
static UINT32 getWidth();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڸ߶<DAB8>
|
2017-10-14 01:07:34 +08:00
|
|
|
|
static UINT32 getHeight();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
|
|
|
|
|
// <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
|
2017-10-14 01:07:34 +08:00
|
|
|
|
static void enterScene(
|
2017-10-12 23:34:13 +08:00
|
|
|
|
EScene * scene,
|
2017-10-17 21:22:25 +08:00
|
|
|
|
bool saveCurrentScene = true
|
2017-10-12 23:34:13 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
2017-10-14 01:07:34 +08:00
|
|
|
|
static void backScene();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ձ<EFBFBD><D5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
|
2017-10-14 01:07:34 +08:00
|
|
|
|
static void clearScene();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
|
2017-10-14 01:07:34 +08:00
|
|
|
|
static EScene * getCurrentScene();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ AppName
|
2017-10-17 21:22:25 +08:00
|
|
|
|
static EString getAppName();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> AppName
|
2017-10-14 01:07:34 +08:00
|
|
|
|
static void setAppName(
|
2017-10-17 21:22:25 +08:00
|
|
|
|
const EString &appname
|
2017-10-12 23:34:13 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ĵ<DEB8><C4B4>ڱ<EFBFBD><DAB1><EFBFBD>ɫ
|
2017-10-14 01:07:34 +08:00
|
|
|
|
static void setBkColor(
|
2017-10-17 21:22:25 +08:00
|
|
|
|
EColor color
|
2017-10-12 23:34:13 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// <20><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>뷨
|
|
|
|
|
|
static void setKeyboardLayoutEnable(
|
|
|
|
|
|
bool value
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
|
|
|
|
|
|
static HWND getHWnd();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>
|
|
|
|
|
|
static void closeWindow();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
2017-10-17 21:22:25 +08:00
|
|
|
|
static void showWindow();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
2017-10-14 01:07:34 +08:00
|
|
|
|
static void quit();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
2017-10-14 01:07:34 +08:00
|
|
|
|
static void end();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
|
|
|
|
|
protected:
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD><DEB9><EFBFBD>Դ
|
2017-10-12 23:34:13 +08:00
|
|
|
|
HRESULT _createDeviceIndependentResources();
|
|
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
2017-10-12 23:34:13 +08:00
|
|
|
|
HRESULT _createDeviceResources();
|
|
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// <20>ͷ<EFBFBD><CDB7>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
2017-10-12 23:34:13 +08:00
|
|
|
|
void _discardDeviceResources();
|
|
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// <20><>Ϸ<EFBFBD><CFB7>ѭ<EFBFBD><D1AD>
|
2017-10-12 23:34:13 +08:00
|
|
|
|
void _mainLoop();
|
|
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// <20><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2017-10-12 23:34:13 +08:00
|
|
|
|
void _onControl();
|
|
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool _onRender();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
2017-10-12 23:34:13 +08:00
|
|
|
|
void _enterNextScene();
|
|
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// <20>ض<EFBFBD> render target <20><>С
|
2017-10-12 23:34:13 +08:00
|
|
|
|
void _onResize(
|
2017-10-17 21:22:25 +08:00
|
|
|
|
UINT32 width,
|
|
|
|
|
|
UINT32 height
|
2017-10-12 23:34:13 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// <20><><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD>
|
2017-10-12 23:34:13 +08:00
|
|
|
|
static LRESULT CALLBACK WndProc(
|
|
|
|
|
|
HWND hWnd,
|
|
|
|
|
|
UINT message,
|
|
|
|
|
|
WPARAM wParam,
|
|
|
|
|
|
LPARAM lParam
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
bool m_bRunning;
|
|
|
|
|
|
EString m_sTitle;
|
|
|
|
|
|
EString m_sAppName;
|
2017-10-17 21:22:25 +08:00
|
|
|
|
EColor m_ClearColor;
|
|
|
|
|
|
LONGLONG nAnimationInterval;
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
EScene * m_pCurrentScene;
|
|
|
|
|
|
EScene * m_pNextScene;
|
2017-10-12 23:34:13 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EScene
|
|
|
|
|
|
{
|
2017-10-13 14:34:33 +08:00
|
|
|
|
friend EApp;
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2017-10-13 14:34:33 +08:00
|
|
|
|
public:
|
2017-10-14 18:43:32 +08:00
|
|
|
|
EScene();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
|
|
|
|
|
~EScene();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Զ<EFBFBD>ִ<EFBFBD><D6B4>
|
|
|
|
|
|
virtual void onEnter();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뿪<EFBFBD><EBBFAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Զ<EFBFBD>ִ<EFBFBD><D6B4>
|
|
|
|
|
|
virtual void onExit();
|
|
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ӽڵ㵽<DAB5><E3B5BD><EFBFBD><EFBFBD>
|
2017-10-12 23:34:13 +08:00
|
|
|
|
void add(
|
2017-10-17 21:22:25 +08:00
|
|
|
|
ENode * child,
|
2017-10-12 23:34:13 +08:00
|
|
|
|
int zOrder = 0
|
|
|
|
|
|
);
|
|
|
|
|
|
|
2017-10-17 21:22:25 +08:00
|
|
|
|
// ɾ<><C9BE><EFBFBD>ӽڵ<D3BD>
|
2017-10-14 18:43:32 +08:00
|
|
|
|
bool remove(
|
2017-10-17 21:22:25 +08:00
|
|
|
|
ENode * child,
|
|
|
|
|
|
bool release = false
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>ӽڵ<D3BD>
|
|
|
|
|
|
void remove(
|
|
|
|
|
|
const EString &childName,
|
|
|
|
|
|
bool release = false
|
2017-10-12 23:34:13 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD>
|
2017-10-17 21:22:25 +08:00
|
|
|
|
EVector<e2d::ENode*> &getChildren();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2017-10-14 18:43:32 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
size_t getChildrenCount() const;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD>ӽڵ<D3BD>
|
|
|
|
|
|
ENode * getChild(
|
2017-10-17 21:22:25 +08:00
|
|
|
|
const EString &childName
|
|
|
|
|
|
);
|
2017-10-14 18:43:32 +08:00
|
|
|
|
|
2017-10-12 23:34:13 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ա
|
|
|
|
|
|
void clearAllChildren();
|
|
|
|
|
|
|
2017-10-14 01:07:34 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void bindListener(EMouseListener * listener);
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2017-10-14 01:07:34 +08:00
|
|
|
|
// <20><EFBFBD><F3B6A8B0><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void bindListener(EKeyboardListener * listener);
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2017-10-14 01:07:34 +08:00
|
|
|
|
protected:
|
|
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2017-10-13 11:42:36 +08:00
|
|
|
|
void _onRender();
|
2017-10-14 01:07:34 +08:00
|
|
|
|
|
2017-10-15 23:58:39 +08:00
|
|
|
|
// <20><><EFBFBD>볡<EFBFBD><EBB3A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>øú<C3B8><C3BA><EFBFBD>
|
|
|
|
|
|
virtual void _onEnter();
|
|
|
|
|
|
|
|
|
|
|
|
// <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>øú<C3B8><C3BA><EFBFBD>
|
|
|
|
|
|
virtual void _onExit();
|
|
|
|
|
|
|
2017-10-14 01:07:34 +08:00
|
|
|
|
protected:
|
2017-10-14 18:43:32 +08:00
|
|
|
|
bool m_bSortNeeded;
|
|
|
|
|
|
bool m_bWillSave;
|
2017-10-17 21:22:25 +08:00
|
|
|
|
ENode * const m_Root;
|
2017-10-12 23:34:13 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EObject
|
|
|
|
|
|
{
|
2017-10-13 14:34:33 +08:00
|
|
|
|
friend EObjectManager;
|
|
|
|
|
|
|
2017-10-12 23:34:13 +08:00
|
|
|
|
public:
|
|
|
|
|
|
EObject();
|
|
|
|
|
|
|
|
|
|
|
|
virtual ~EObject();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
|
|
|
|
|
|
void retain();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
|
|
|
|
|
|
void release();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void autoRelease();
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
int m_nRefCount;
|
|
|
|
|
|
bool m_bManaged;
|
|
|
|
|
|
bool m_bAutoRelease;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
}
|