Magic_Game/Easy2D/ebase.h

265 lines
4.0 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-11-03 12:51:01 +08:00
class EListenerMouse;
class EListenerKeyboard;
class EAction;
class ETransition;
class EApp
{
public:
2017-12-08 19:50:59 +08:00
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
static EApp * getInstance();
2017-10-17 21:22:25 +08:00
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
2017-12-08 19:50:59 +08:00
static 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> */
const EWindowStyle &wStyle = nullptr /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ */
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2017-12-08 19:50:59 +08:00
static int run();
2017-10-17 21:22:25 +08:00
// <20><>ͣ<EFBFBD><CDA3>Ϸ
static void pause();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
static void resume();
2017-12-08 19:50:59 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
static void quit();
// <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
2017-10-14 01:07:34 +08:00
static void enterScene(
2017-12-08 19:50:59 +08:00
EScene * scene, /* <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
ETransition * transition = nullptr, /* <20><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD> */
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
);
2017-12-08 19:50:59 +08:00
// <20><>Ϸ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͣ
static bool isPaused();
// <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();
2017-11-03 12:51:01 +08:00
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڴ<EFBFBD>С
static ESize getSize();
// <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><EFBFBD>ʽ
static EWindowStyle getWindowStyle();
// <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
);
2017-12-08 19:50:59 +08:00
public:
// <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();
private:
EApp();
virtual ~EApp();
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 _update();
2017-10-17 21:22:25 +08:00
// <20><>Ⱦ<EFBFBD><C8BE>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
void _render();
2017-10-17 21:22:25 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
void _enterNextScene();
// ˢ<><CBA2><EFBFBD><EFBFBD>Ϸʱ<CFB7><CAB1>
2017-12-08 19:50:59 +08:00
void _updateTime();
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
);
2017-12-08 19:50:59 +08:00
private:
bool m_bEnd;
bool m_bPaused;
bool m_bManualPaused;
2017-10-31 17:19:13 +08:00
bool m_bShowConsole;
EString m_sTitle;
EString m_sAppName;
UINT32 m_ClearColor;
2017-11-03 12:51:01 +08:00
LONGLONG m_nAnimationInterval;
2017-10-17 21:22:25 +08:00
EScene * m_pCurrentScene;
EScene * m_pNextScene;
EWindowStyle m_WindowStyle;
ETransition * m_pTransition;
};
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-12-11 18:17:24 +08:00
std::vector<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>
void _render();
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;
};
}