Magic_Game/Easy2D/ebase.h

234 lines
3.3 KiB
C
Raw Normal View History

#pragma once
#include "emacros.h"
#include "ecommon.h"
#include <vector>
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();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
static EApp * get();
// Register the window class and call methods for instantiating drawing resources
bool init(
e2d::EString title,
e2d::ESize size,
bool bShowConsole = false
);
// Register the window class and call methods for instantiating drawing resources
bool init(
e2d::EString title,
UINT32 width,
UINT32 height,
bool bShowConsole = false
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void run();
// <20>޸Ĵ<DEB8><C4B4>ڴ<EFBFBD>С
2017-10-14 01:07:34 +08:00
static void setWindowSize(
int width,
int height
);
// <20>޸Ĵ<DEB8><C4B4>ڴ<EFBFBD>С
2017-10-14 01:07:34 +08:00
static void setWindowSize(
e2d::ESize size
);
// <20><><EFBFBD>ô<EFBFBD><C3B4>ڱ<EFBFBD><DAB1><EFBFBD>
2017-10-14 01:07:34 +08:00
static void setWindowTitle(
e2d::EString title
);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>
2017-10-14 01:07:34 +08:00
static e2d::EString getTitle();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڴ<EFBFBD>С
2017-10-14 01:07:34 +08:00
static e2d::ESize getSize();
// <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,
bool save = 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><>ȡ AppName
2017-10-14 01:07:34 +08:00
static e2d::EString getAppName();
// <20><><EFBFBD><EFBFBD> AppName
2017-10-14 01:07:34 +08:00
static void setAppName(
e2d::EString appname
);
// <20>޸Ĵ<DEB8><C4B4>ڱ<EFBFBD><DAB1><EFBFBD>ɫ
2017-10-14 01:07:34 +08:00
static void setBkColor(
EColor::Enum color
);
// <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>Դ
2017-10-14 01:07:34 +08:00
static void free();
// <20>رմ<D8B1><D5B4><EFBFBD>
2017-10-14 01:07:34 +08:00
static void close();
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
2017-10-14 01:07:34 +08:00
static void show();
// <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:
// Initialize device-independent resources.
HRESULT _createDeviceIndependentResources();
// Initialize device-dependent resources.
HRESULT _createDeviceResources();
// Release device-dependent resource.
void _discardDeviceResources();
void _mainLoop();
void _onControl();
// Draw content.
2017-10-14 01:07:34 +08:00
void _onRender();
void _enterNextScene();
// ReSize the render target.
void _onResize(
UINT width,
UINT height
);
// The windows procedure.
static LRESULT CALLBACK WndProc(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam
);
protected:
bool m_bRunning;
bool m_bSaveScene;
EString m_sTitle;
EString m_sAppName;
EColor::Enum m_ClearColor;
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 01:07:34 +08:00
EScene() = default;
~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><EFBFBD><EFBFBD>ӳ<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void add(
e2d::ENode * child,
int zOrder = 0
);
// ɾ<><C9BE><EFBFBD>ӳ<EFBFBD>Ա
bool del(
2017-10-13 11:42:36 +08:00
e2d::ENode * child,
bool autoRelease = true
);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD>
std::vector<e2d::ENode*> &getChildren();
// <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
protected:
std::vector<e2d::ENode*> m_vChildren;
};
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;
};
}