Magic_Game/Easy2D/ebase.h

292 lines
4.3 KiB
C
Raw Normal View History

#pragma once
#include "emacros.h"
#include "ecommon.h"
2017-10-13 11:42:36 +08:00
// Base Classes
namespace e2d
{
class EScene;
class ENode;
class EObjectManager;
2017-10-14 01:07:34 +08:00
class EMouseListener;
class EKeyboardListener;
class EApp
{
public:
EApp();
~EApp();
2017-10-17 21:22:25 +08:00
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
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-17 21:22:25 +08:00
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
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>̨ */
);
// <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><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ڼ<EFBFBD><DABC><EFBFBD>ʱִ<CAB1><D6B4>
virtual void onActivate();
// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ڷǼ<DAB7><C7BC><EFBFBD>ʱִ<CAB1><D6B4>
virtual void onInactive();
// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹرմ<D8B1><D5B4><EFBFBD>ʱִ<CAB1><D6B4>
virtual bool onCloseWindow();
2017-10-17 21:22:25 +08:00
// <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
);
// <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
);
// <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
);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>
2017-10-17 21:22:25 +08:00
static EString getTitle();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>
2017-10-14 01:07:34 +08:00
static UINT32 getWidth();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڸ߶<DAB8>
2017-10-14 01:07:34 +08:00
static UINT32 getHeight();
// <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
2017-10-14 01:07:34 +08:00
static void enterScene(
EScene * scene,
2017-10-17 21:22:25 +08:00
bool saveCurrentScene = true
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
2017-10-14 01:07:34 +08:00
static void backScene();
// <20><><EFBFBD>ձ<EFBFBD><D5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
2017-10-14 01:07:34 +08:00
static void clearScene();
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
2017-10-14 01:07:34 +08:00
static EScene * getCurrentScene();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
static HWND getHWnd();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD>
static LONGLONG getTotalDurationFromStart();
// <20><>ȡ AppName
2017-10-17 21:22:25 +08:00
static EString getAppName();
// <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
);
// <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-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>ش<EFBFBD><D8B4><EFBFBD>
static void hideWindow();
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
2017-10-17 21:22:25 +08:00
static void showWindow();
// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
2017-10-14 01:07:34 +08:00
static void quit();
// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
2017-10-14 01:07:34 +08:00
static void end();
protected:
2017-10-17 21:22:25 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD><DEB9><EFBFBD>Դ
HRESULT _createDeviceIndependentResources();
2017-10-17 21:22:25 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
HRESULT _createDeviceResources();
2017-10-17 21:22:25 +08:00
// <20>ͷ<EFBFBD><CDB7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
void _discardDeviceResources();
2017-10-17 21:22:25 +08:00
// <20><>Ϸ<EFBFBD><CFB7>ѭ<EFBFBD><D1AD>
void _mainLoop();
2017-10-17 21:22:25 +08:00
// <20><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void _onControl();
2017-10-17 21:22:25 +08:00
// <20><>Ⱦ<EFBFBD><C8BE>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
bool _onRender();
2017-10-17 21:22:25 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
void _enterNextScene();
2017-10-17 21:22:25 +08:00
// <20>ض<EFBFBD> render target <20><>С
void _onResize(
2017-10-17 21:22:25 +08:00
UINT32 width,
UINT32 height
);
2017-10-17 21:22:25 +08:00
// <20><><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD>
static LRESULT CALLBACK WndProc(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam
);
protected:
bool m_bRunning;
bool m_bPaused;
EString m_sTitle;
EString m_sAppName;
2017-10-17 21:22:25 +08:00
EColor m_ClearColor;
LONGLONG nAnimationInterval;
2017-10-17 21:22:25 +08:00
EScene * m_pCurrentScene;
EScene * m_pNextScene;
};
class EScene
{
2017-10-13 14:34:33 +08:00
friend EApp;
2017-10-13 14:34:33 +08:00
public:
2017-10-14 18:43:32 +08:00
EScene();
~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();
// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ڼ<EFBFBD><DABC><EFBFBD>ʱִ<CAB1><D6B4>
virtual void onActivate();
// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ڷǼ<DAB7><C7BC><EFBFBD>ʱִ<CAB1><D6B4>
virtual void onInactive();
// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹرմ<D8B1><D5B4><EFBFBD>ʱִ<CAB1><D6B4>
virtual bool onCloseWindow();
2017-10-17 21:22:25 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD>ӽڵ㵽<DAB5><E3B5BD><EFBFBD><EFBFBD>
void add(
2017-10-17 21:22:25 +08:00
ENode * child,
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
);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD>
2017-10-17 21:22:25 +08:00
EVector<e2d::ENode*> &getChildren();
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
// <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-14 01:07:34 +08:00
// <20>󶨰<EFBFBD><F3B6A8B0><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void bindListener(EKeyboardListener * listener);
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
// <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;
};
class EObject
{
2017-10-13 14:34:33 +08:00
friend EObjectManager;
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;
};
}