Magic_Game/core/e2dbase.h

294 lines
4.7 KiB
C
Raw Normal View History

#pragma once
2018-04-21 21:24:46 +08:00
#include "e2dmacros.h"
#include "e2dcommon.h"
2017-10-13 11:42:36 +08:00
// Base Classes
namespace e2d
{
2018-01-30 16:45:38 +08:00
class Game
{
public:
2018-01-30 16:45:38 +08:00
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϸ
2017-12-08 19:50:59 +08:00
static bool init(
2018-04-26 21:47:56 +08:00
String sGameName = L"" /* <20><>ϷӢ<CFB7><D3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
);
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
static int start(
bool bAutoRelease = true
);
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();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>Դ
2018-04-19 17:18:44 +08:00
static void destroy();
2018-01-30 16:45:38 +08:00
// <20><>Ϸ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͣ
static bool isPaused();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̻<EFBFBD><CCBB><EFBFBD><EFBFBD><EFBFBD>
static bool createMutex(
2018-04-17 01:11:56 +08:00
String sMutexName, /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
String sWindowTitle = L"" /* <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD> */
);
// <20><>ȡ<EFBFBD><C8A1>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
static String getName();
2018-01-30 16:45:38 +08:00
};
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class Window
2018-01-30 16:45:38 +08:00
{
friend Game;
2018-01-30 16:45:38 +08:00
public:
// <20>޸Ĵ<DEB8><C4B4>ڴ<EFBFBD>С
static void setSize(
UINT32 nWidth, /* <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> */
UINT32 nHeight /* <20><><EFBFBD>ڸ߶<DAB8> */
);
// <20><><EFBFBD>ô<EFBFBD><C3B4>ڱ<EFBFBD><DAB1><EFBFBD>
static void setTitle(
String sTitle /* <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD> */
);
// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>ͼ<EFBFBD><CDBC>
static void setIcon(
LPCTSTR pIconID
);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>
static String getTitle();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>
2018-02-27 21:07:43 +08:00
static double getWidth();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڸ߶<DAB8>
2018-02-27 21:07:43 +08:00
static double getHeight();
2017-11-03 12:51:01 +08:00
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڴ<EFBFBD>С
static Size getSize();
2017-11-03 12:51:01 +08:00
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
static HWND getHWnd();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>̨
static void showConsole(
2018-02-01 09:38:25 +08:00
bool bShow = true
);
2018-01-30 16:45:38 +08:00
// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>
static void setTypewritingEnable(
bool bEnable
2017-10-17 21:22:25 +08:00
);
2018-01-30 16:45:38 +08:00
private:
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static bool __init();
2018-03-01 00:19:09 +08:00
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void __uninit();
2017-12-08 19:50:59 +08:00
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
static void __poll();
2017-12-08 19:50:59 +08:00
2018-01-30 16:45:38 +08:00
// Win32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
};
2017-12-08 19:50:59 +08:00
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸʱ<CFB7><CAB1>
class Time
2018-01-30 16:45:38 +08:00
{
friend Game;
2018-01-30 16:45:38 +08:00
public:
2018-04-24 13:28:21 +08:00
// <20><>ȡ<EFBFBD><C8A1>һ֡<D2BB>뵱ǰ֡<C7B0><D6A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static double getDeltaTime();
2018-01-30 16:45:38 +08:00
// <20><>ȡ<EFBFBD><C8A1>һ֡<D2BB>뵱ǰ֡<C7B0><D6A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2018-04-24 13:28:21 +08:00
static unsigned int getDeltaTimeMilliseconds();
2017-12-08 19:50:59 +08:00
2018-04-24 13:28:21 +08:00
// <20><>ȡ<EFBFBD><C8A1>Ϸ<EFBFBD><CFB7>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>
2018-02-27 21:07:43 +08:00
static double getTotalTime();
2018-04-24 13:28:21 +08:00
// <20><>ȡ<EFBFBD><C8A1>Ϸ<EFBFBD><CFB7>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static unsigned int getTotalTimeMilliseconds();
2018-01-30 16:45:38 +08:00
private:
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
2018-02-01 22:07:44 +08:00
static bool __init();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD>ü<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
static void __uninit();
2018-02-04 21:24:27 +08:00
// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFB5BD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
static bool __isReady();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD>µ<EFBFBD>ǰʱ<C7B0><CAB1>
static void __updateNow();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
static void __updateLast();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
static void __sleep();
};
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD>Ƽ<EFBFBD><C6BC>̺<EFBFBD><CCBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class Input
{
friend Game;
2017-10-13 14:34:33 +08:00
public:
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static bool isKeyDown(
KeyCode key
2018-01-30 16:45:38 +08:00
);
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>Ƿ񱻵<C7B7><F1B1BBB5><EFBFBD>
static bool isKeyPress(
KeyCode key
2018-01-30 16:45:38 +08:00
);
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
static bool isKeyRelease(
KeyCode key
2018-01-30 16:45:38 +08:00
);
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static bool isMouseLButtonDown();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD><D2BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static bool isMouseRButtonDown();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static bool isMouseMButtonDown();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ񱻵<C7B7><F1B1BBB5><EFBFBD>
static bool isMouseLButtonPress();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD><D2BC>Ƿ񱻵<C7B7><F1B1BBB5><EFBFBD>
static bool isMouseRButtonPress();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC>Ƿ񱻵<C7B7><F1B1BBB5><EFBFBD>
static bool isMouseMButtonPress();
2017-10-17 21:22:25 +08:00
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
static bool isMouseLButtonRelease();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD><D2BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
static bool isMouseRButtonRelease();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
static bool isMouseMButtonRelease();
2017-10-14 18:43:32 +08:00
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
2018-02-27 21:07:43 +08:00
static double getMouseX();
2017-10-14 18:43:32 +08:00
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
2018-02-27 21:07:43 +08:00
static double getMouseY();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
static Point getMousePos();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2018-02-27 21:07:43 +08:00
static double getMouseDeltaX();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2018-02-27 21:07:43 +08:00
static double getMouseDeltaY();
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD><EFBFBD><E1A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2018-02-27 21:07:43 +08:00
static double getMouseDeltaZ();
2018-01-30 16:45:38 +08:00
private:
// <20><>ʼ<EFBFBD><CABC> DirectInput <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2018-02-01 22:07:44 +08:00
static bool __init();
2018-01-30 16:45:38 +08:00
// ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
static void __update();
// ˢ<><CBA2><EFBFBD>豸״̬
2018-01-30 16:45:38 +08:00
static void __updateDeviceState();
// ж<><D0B6> DirectInput
static void __uninit();
};
// <20><>Ⱦ<EFBFBD><C8BE>
class Renderer
2018-01-30 16:45:38 +08:00
{
friend Game;
friend Window;
2018-01-30 16:45:38 +08:00
public:
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ɫ
static Color getBackgroundColor();
2018-01-30 16:45:38 +08:00
// <20>޸ı<DEB8><C4B1><EFBFBD>ɫ
static void setBackgroundColor(
Color color
2017-10-29 23:48:32 +08:00
);
2018-04-17 11:41:33 +08:00
// <20><>ʾ FPS
static void showFps(
bool show = true
);
// <20><>ȡϵͳ DPI <20><><EFBFBD><EFBFBD>
static float getDpiScaleX();
// <20><>ȡϵͳ DPI <20><><EFBFBD><EFBFBD>
static float getDpiScaleY();
2018-01-30 16:45:38 +08:00
// <20><>ȡ ID2D1Factory <20><><EFBFBD><EFBFBD>
static ID2D1Factory * getID2D1Factory();
// <20><>ȡ ID2D1HwndRenderTarget <20><><EFBFBD><EFBFBD>
static ID2D1HwndRenderTarget * getRenderTarget();
// <20><>ȡ ID2D1SolidColorBrush <20><><EFBFBD><EFBFBD>
static ID2D1SolidColorBrush * getSolidColorBrush();
// <20><>ȡ IWICImagingFactory <20><><EFBFBD><EFBFBD>
static IWICImagingFactory * getIWICImagingFactory();
// <20><>ȡ IDWriteFactory <20><><EFBFBD><EFBFBD>
static IDWriteFactory * getIDWriteFactory();
// <20><>ȡ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE>
static CustomTextRenderer * getCustomTextRenderer();
2018-01-30 16:45:38 +08:00
private:
// <20><>Ⱦ<EFBFBD><C8BE>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
static void __render();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD><DEB9><EFBFBD>Դ
static bool __createDeviceIndependentResources();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
static bool __createDeviceResources();
// ɾ<><C9BE><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
static void __discardDeviceResources();
2017-10-14 01:07:34 +08:00
2018-01-30 16:45:38 +08:00
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
static void __discardResources();
};
}