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 EAction;
class ETransition;
class EApp
{
public:
EApp();
2017-10-19 00:50:04 +08:00
virtual ~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> */
2017-10-31 17:19:13 +08:00
UINT32 height /* <20><><EFBFBD>ڸ߶<DAB8> */
);
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> */
2017-10-31 17:19:13 +08:00
EWindowStyle wStyle /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ */
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void run();
// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ڼ<EFBFBD><DABC><EFBFBD>ʱִ<CAB1><D6B4>
virtual bool 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 bool 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><C8A1><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
static EApp * get();
// <20><>ͣ<EFBFBD><CDA3>Ϸ
static void pause();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
static void resume();
2017-10-31 17:19:13 +08:00
// <20><>Ϸ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͣ
static bool isPaused();
// <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
static void enterScene(
EScene * scene, /* <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
bool saveCurrentScene = true /* <20>Ƿ񱣴浱ǰ<E6B5B1><C7B0><EFBFBD><EFBFBD> */
);
// <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
2017-10-14 01:07:34 +08:00
static void enterScene(
2017-10-19 13:06:14 +08:00
EScene * scene, /* <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
ETransition * transition, /* <20><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD> */
2017-10-19 13:06:14 +08:00
bool saveCurrentScene = true /* <20>Ƿ񱣴浱ǰ<E6B5B1><C7B0><EFBFBD><EFBFBD> */
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
static void backScene(
2017-10-31 17:19:13 +08:00
ETransition * transition = nullptr /* <20><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD> */
);
// <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>ش<EFBFBD><D8B4><EFBFBD>
static void hideWindow();
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
static void showWindow();
// <20>Ƿ<EFBFBD><C7B7>򿪿<EFBFBD><F2BFAABF><EFBFBD>̨
static void showConsole(
2017-10-31 17:19:13 +08:00
bool show = true
);
// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
static void quit();
// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
static void end();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>
static EString getTitle();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>
2017-10-21 19:09:31 +08:00
static float getWidth();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڸ߶<DAB8>
2017-10-21 19:09:31 +08:00
static float getHeight();
// <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>޸Ĵ<DEB8><C4B4>ڴ<EFBFBD>С
static void setWindowSize(
UINT32 width,
UINT32 height
);
// <20><><EFBFBD>ô<EFBFBD><C3B4>ڱ<EFBFBD><DAB1><EFBFBD>
static void setWindowTitle(
const EString & title
);
// <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(
UINT32 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
);
// Ԥ<><EFBFBD><E8BBAD>֡<EFBFBD><D6A1>
static void setFPS(
UINT32 fps
);
protected:
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>
void _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>ڳ<EFBFBD><DAB3><EFBFBD>
static LRESULT CALLBACK WndProc(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam
);
protected:
bool m_bEnd;
bool m_bPaused;
bool m_bManualPaused;
bool m_bTransitional;
bool m_bTopMost;
2017-10-31 17:19:13 +08:00
bool m_bShowConsole;
EString m_sTitle;
EString m_sAppName;
UINT32 m_ClearColor;
2017-10-17 21:22:25 +08:00
LONGLONG nAnimationInterval;
EScene * m_pCurrentScene;
EScene * m_pNextScene;
};
class EObject
{
friend EObjectManager;
public:
EObject();
virtual ~EObject();
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
void retain();
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
void release();
private:
int m_nRefCount;
bool m_bManaged;
};
class EScene :
public EObject
{
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();
2017-10-19 00:50:04 +08:00
virtual ~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 bool 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 bool 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-31 17:19:13 +08:00
ENode * child
2017-10-17 21:22:25 +08:00
);
2017-10-31 17:19:13 +08:00
// ɾ<><C9BE><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>Ƶ<EFBFBD><C6B5>ӽڵ<D3BD>
2017-10-17 21:22:25 +08:00
void remove(
2017-10-31 17:19:13 +08:00
const EString &childName
);
// <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><C8A1><EFBFBD>ڵ<EFBFBD>
ENode * getRoot() const;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ա
void clearAllChildren();
// ִ<>ж<EFBFBD><D0B6><EFBFBD>
void runAction(
EAction * action
);
2017-10-29 23:48:32 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD>Ⱦ
void setGeometryVisiable(
bool visiable
);
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
protected:
2017-10-14 18:43:32 +08:00
bool m_bSortNeeded;
bool m_bWillSave;
2017-10-29 23:48:32 +08:00
bool m_bGeometryVisiable;
2017-10-19 13:06:14 +08:00
ENode * m_pRoot;
};
}