Magic_Game/Easy2D/ebase.h

234 lines
3.2 KiB
C
Raw Normal View History

#pragma once
#include "emacros.h"
#include "ecommon.h"
#include <vector>
// Base Classes
namespace e2d
{
class EScene;
class ENode;
class EObjectManager;
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>С
void setWindowSize(
int width,
int height
);
// <20>޸Ĵ<DEB8><C4B4>ڴ<EFBFBD>С
void setWindowSize(
e2d::ESize size
);
// <20><><EFBFBD>ô<EFBFBD><C3B4>ڱ<EFBFBD><DAB1><EFBFBD>
void setWindowTitle(
e2d::EString title
);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>
e2d::EString getTitle();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڴ<EFBFBD>С
e2d::ESize getSize();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>
UINT32 getWidth();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڸ߶<DAB8>
UINT32 getHeight();
// <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
void enterScene(
EScene * scene,
bool save = true
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
void backScene();
// <20><><EFBFBD>ձ<EFBFBD><D5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
void clearScene();
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
EScene * getCurrentScene();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD>еij<D0B5><C4B3><EFBFBD>
EScene * getLoadingScene();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD>еij<D0B5><C4B3><EFBFBD>
void setLoadingScene(EScene * scene);
// <20><>ȡ AppName
e2d::EString getAppName();
// <20><><EFBFBD><EFBFBD> AppName
void setAppName(
e2d::EString appname
);
// <20>޸Ĵ<DEB8><C4B4>ڱ<EFBFBD><DAB1><EFBFBD>ɫ
void setBkColor(
EColor::Enum color
);
// <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>Դ
void free();
// <20>رմ<D8B1><D5B4><EFBFBD>
void close();
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void show();
// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
void quit();
// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
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.
bool _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;
EScene * m_pLoadingScene;
};
class EScene
{
public:
EScene();
~EScene();
// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void init();
// <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(
e2d::ENode * child
);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD>
std::vector<e2d::ENode*> &getChildren();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ա
void clearAllChildren();
protected:
friend EApp;
std::vector<e2d::ENode*> m_vChildren;
protected:
void _exec();
void _onDraw();
};
class EObject
{
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:
friend EObjectManager;
int m_nRefCount;
bool m_bManaged;
bool m_bAutoRelease;
};
}