2017-10-12 23:34:13 +08:00
|
|
|
|
#pragma once
|
2018-04-21 21:24:46 +08:00
|
|
|
|
#include "e2dmacros.h"
|
|
|
|
|
|
#include "e2dcommon.h"
|
2018-05-22 11:58:45 +08:00
|
|
|
|
#include "e2dcustom.h"
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2017-10-13 11:42:36 +08:00
|
|
|
|
|
2017-10-12 23:34:13 +08:00
|
|
|
|
// Base Classes
|
|
|
|
|
|
|
|
|
|
|
|
namespace e2d
|
|
|
|
|
|
{
|
|
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
2018-05-19 01:30:07 +08:00
|
|
|
|
// <20><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
class Game
|
2017-10-12 23:34:13 +08:00
|
|
|
|
{
|
|
|
|
|
|
public:
|
2018-07-03 18:16:26 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>Ϸʵ<CFB7><CAB5>
|
2018-07-03 01:49:20 +08:00
|
|
|
|
static Game * getInstance();
|
|
|
|
|
|
|
2018-07-03 18:16:26 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
|
|
|
|
|
|
static void destroyInstance();
|
|
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
|
2018-07-03 01:49:20 +08:00
|
|
|
|
void start(
|
2018-07-04 15:33:09 +08:00
|
|
|
|
bool cleanup = true /* <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ */
|
2018-04-21 00:46:26 +08:00
|
|
|
|
);
|
2017-10-17 21:22:25 +08:00
|
|
|
|
|
2017-10-20 00:59:26 +08:00
|
|
|
|
// <20><>ͣ<EFBFBD><CDA3>Ϸ
|
2018-07-03 01:49:20 +08:00
|
|
|
|
void pause();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2017-10-20 00:59:26 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
|
2018-07-03 01:49:20 +08:00
|
|
|
|
void resume();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2017-12-08 19:50:59 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
|
2018-07-03 01:49:20 +08:00
|
|
|
|
void quit();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
|
|
|
|
|
void cleanup();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20><>Ϸ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͣ
|
2018-07-03 01:49:20 +08:00
|
|
|
|
bool isPaused();
|
|
|
|
|
|
|
2018-07-04 17:00:21 +08:00
|
|
|
|
// <20><EFBFBD><DEB8><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
|
|
|
|
|
void setConfig(
|
2018-07-07 11:00:41 +08:00
|
|
|
|
Config* config
|
2018-07-04 17:00:21 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
2018-07-07 11:00:41 +08:00
|
|
|
|
Config* getConfig();
|
2018-07-04 17:00:21 +08:00
|
|
|
|
|
2018-07-03 01:49:20 +08:00
|
|
|
|
private:
|
|
|
|
|
|
Game();
|
|
|
|
|
|
|
2018-07-03 18:16:26 +08:00
|
|
|
|
~Game();
|
|
|
|
|
|
|
2018-07-03 01:49:20 +08:00
|
|
|
|
E2D_DISABLE_COPY(Game);
|
2017-10-20 00:59:26 +08:00
|
|
|
|
|
2018-07-03 01:49:20 +08:00
|
|
|
|
private:
|
|
|
|
|
|
bool _ended;
|
|
|
|
|
|
bool _paused;
|
2018-07-07 11:00:41 +08:00
|
|
|
|
Config* _config;
|
2018-07-04 17:00:21 +08:00
|
|
|
|
|
2018-07-03 01:49:20 +08:00
|
|
|
|
static Game * _instance;
|
2018-01-30 16:45:38 +08:00
|
|
|
|
};
|
2017-10-20 00:59:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
2018-05-19 01:30:07 +08:00
|
|
|
|
// <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
class Window
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-05-17 15:22:14 +08:00
|
|
|
|
public:
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʽ
|
|
|
|
|
|
enum class Cursor : int
|
|
|
|
|
|
{
|
2018-05-24 20:37:34 +08:00
|
|
|
|
Normal, /* Ĭ<><C4AC>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʽ */
|
|
|
|
|
|
Hand, /* <20><>״ָ<D7B4><D6B8> */
|
|
|
|
|
|
No, /* <20><>ָֹ<D6B9><D6B8> */
|
|
|
|
|
|
Wait, /* ɳ©ָ<C2A9><D6B8> */
|
|
|
|
|
|
ArrowWait /* Ĭ<><C4AC>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Сɳ© */
|
2018-05-17 15:22:14 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
public:
|
2018-07-03 18:16:26 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
|
|
|
|
|
|
static Window * getInstance();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ٴ<EFBFBD><D9B4><EFBFBD>ʵ<EFBFBD><CAB5>
|
|
|
|
|
|
static void destroyInstance();
|
|
|
|
|
|
|
2018-07-04 00:27:14 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool createMutex(
|
|
|
|
|
|
const String& mutex = L"" /* <20><><EFBFBD>̻<EFBFBD><CCBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
);
|
|
|
|
|
|
|
2018-04-13 00:39:27 +08:00
|
|
|
|
// <20>Ĵ<DEB8><C4B4>ڴ<EFBFBD>С
|
2018-07-03 18:16:26 +08:00
|
|
|
|
void setSize(
|
2018-05-07 15:48:06 +08:00
|
|
|
|
int width, /* <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> */
|
|
|
|
|
|
int height /* <20><><EFBFBD>ڸ߶<DAB8> */
|
2018-04-13 00:39:27 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ô<EFBFBD><C3B4>ڱ<EFBFBD><DAB1><EFBFBD>
|
2018-07-03 18:16:26 +08:00
|
|
|
|
void setTitle(
|
2018-05-07 15:48:06 +08:00
|
|
|
|
const String& title /* <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD> */
|
2018-04-13 00:39:27 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>ͼ<EFBFBD><CDBC>
|
2018-07-03 18:16:26 +08:00
|
|
|
|
void setIcon(
|
2018-05-07 15:48:06 +08:00
|
|
|
|
int iconID
|
2018-04-13 00:39:27 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2018-05-07 17:03:59 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʽ
|
2018-07-03 18:16:26 +08:00
|
|
|
|
void setCursor(
|
2018-05-07 17:03:59 +08:00
|
|
|
|
Cursor cursor
|
|
|
|
|
|
);
|
|
|
|
|
|
|
2017-10-20 00:59:26 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>
|
2018-07-03 18:16:26 +08:00
|
|
|
|
String getTitle();
|
2017-10-20 00:59:26 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>
|
2018-07-03 18:16:26 +08:00
|
|
|
|
double getWidth();
|
2017-10-20 00:59:26 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڸ߶<DAB8>
|
2018-07-03 18:16:26 +08:00
|
|
|
|
double getHeight();
|
2017-10-20 00:59:26 +08:00
|
|
|
|
|
2017-11-03 12:51:01 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڴ<EFBFBD>С
|
2018-07-03 18:16:26 +08:00
|
|
|
|
Size getSize();
|
2017-11-03 12:51:01 +08:00
|
|
|
|
|
2017-10-17 23:50:02 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
|
2018-07-03 18:16:26 +08:00
|
|
|
|
HWND getHWnd();
|
2017-10-17 23:50:02 +08:00
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>̨
|
2018-07-03 18:16:26 +08:00
|
|
|
|
void showConsole(
|
2018-05-24 20:37:34 +08:00
|
|
|
|
bool show = true
|
2017-10-12 23:34:13 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>뷨
|
2018-07-04 17:00:21 +08:00
|
|
|
|
void setTypewritingEnabled(
|
|
|
|
|
|
bool enabled
|
2017-10-17 21:22:25 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2018-05-10 18:18:02 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
2018-07-03 18:16:26 +08:00
|
|
|
|
void info(
|
2018-05-10 18:18:02 +08:00
|
|
|
|
const String& text, /* <20><><EFBFBD><EFBFBD> */
|
2018-05-21 23:04:58 +08:00
|
|
|
|
const String& title = L"Infomation" /* <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD> */
|
2018-05-10 18:18:02 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洰<EFBFBD><E6B4B0>
|
2018-07-03 18:16:26 +08:00
|
|
|
|
void warning(
|
2018-05-10 18:18:02 +08:00
|
|
|
|
const String& text, /* <20><><EFBFBD><EFBFBD> */
|
|
|
|
|
|
const String& title = L"Warning" /* <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD> */
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2018-07-03 18:16:26 +08:00
|
|
|
|
void error(
|
2018-05-10 18:18:02 +08:00
|
|
|
|
const String& text, /* <20><><EFBFBD><EFBFBD> */
|
|
|
|
|
|
const String& title = L"Error" /* <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD> */
|
|
|
|
|
|
);
|
|
|
|
|
|
|
2018-07-05 22:05:23 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
|
void poll();
|
|
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
private:
|
2018-07-03 18:16:26 +08:00
|
|
|
|
Window();
|
2018-03-01 00:19:09 +08:00
|
|
|
|
|
2018-07-03 18:16:26 +08:00
|
|
|
|
~Window();
|
|
|
|
|
|
|
|
|
|
|
|
E2D_DISABLE_COPY(Window);
|
2017-12-08 19:50:59 +08:00
|
|
|
|
|
2018-07-03 23:39:00 +08:00
|
|
|
|
// ע<>ᴰ<EFBFBD><E1B4B0>
|
|
|
|
|
|
HWND __create();
|
|
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// Win32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
2018-07-03 18:42:00 +08:00
|
|
|
|
static LRESULT CALLBACK WndProc(
|
|
|
|
|
|
HWND hWnd,
|
|
|
|
|
|
UINT message,
|
|
|
|
|
|
WPARAM wParam,
|
|
|
|
|
|
LPARAM lParam
|
|
|
|
|
|
);
|
2018-07-03 18:16:26 +08:00
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
HWND _hWnd;
|
2018-07-05 22:05:23 +08:00
|
|
|
|
MSG _msg;
|
2018-07-03 18:16:26 +08:00
|
|
|
|
Size _size;
|
|
|
|
|
|
String _title;
|
2018-07-03 23:39:00 +08:00
|
|
|
|
int _iconID;
|
2018-07-03 18:42:00 +08:00
|
|
|
|
|
2018-07-03 18:16:26 +08:00
|
|
|
|
static Window * _instance;
|
2018-01-30 16:45:38 +08:00
|
|
|
|
};
|
2017-12-08 19:50:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
2018-05-19 01:30:07 +08:00
|
|
|
|
// ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
class Time
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-05-24 00:58:16 +08:00
|
|
|
|
friend class Game;
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
|
|
|
|
|
public:
|
2018-07-03 18:42:00 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>һ֡<D2BB><D6A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룩
|
2018-04-24 13:28:21 +08:00
|
|
|
|
static double getDeltaTime();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>Ϸ<EFBFBD><CFB7>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>룩
|
2018-02-27 21:07:43 +08:00
|
|
|
|
static double getTotalTime();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
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();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
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();
|
2017-12-08 15:37:52 +08:00
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
|
static void __updateLast();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2018-05-10 18:18:02 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
|
static void __reset();
|
|
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
|
|
|
|
|
|
static void __sleep();
|
2018-07-03 18:42:00 +08:00
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
static std::chrono::steady_clock::time_point _start;
|
|
|
|
|
|
static std::chrono::steady_clock::time_point _now;
|
|
|
|
|
|
static std::chrono::steady_clock::time_point _last;
|
|
|
|
|
|
static std::chrono::steady_clock::time_point _fixedLast;
|
|
|
|
|
|
static std::chrono::milliseconds _interval;
|
2017-10-12 23:34:13 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-07-04 15:33:09 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>豸
|
2018-02-07 16:37:12 +08:00
|
|
|
|
class Input
|
2017-10-12 23:34:13 +08:00
|
|
|
|
{
|
2018-05-17 15:22:14 +08:00
|
|
|
|
public:
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
2018-05-18 23:56:36 +08:00
|
|
|
|
enum class Mouse : int
|
2018-05-17 15:22:14 +08:00
|
|
|
|
{
|
2018-05-24 20:37:34 +08:00
|
|
|
|
Left, /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
Right, /* <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD> */
|
|
|
|
|
|
Middle /* <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD> */
|
2018-05-17 15:22:14 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>̼<EFBFBD>ֵ
|
2018-05-18 23:56:36 +08:00
|
|
|
|
enum class Key : int
|
2018-05-17 15:22:14 +08:00
|
|
|
|
{
|
2018-05-24 20:37:34 +08:00
|
|
|
|
Up = 0xC8,
|
|
|
|
|
|
Left = 0xCB,
|
|
|
|
|
|
Right = 0xCD,
|
|
|
|
|
|
Down = 0xD0,
|
|
|
|
|
|
Enter = 0x1C,
|
|
|
|
|
|
Space = 0x39,
|
|
|
|
|
|
Esc = 0x01,
|
2018-05-17 15:22:14 +08:00
|
|
|
|
Q = 0x10,
|
|
|
|
|
|
W = 0x11,
|
|
|
|
|
|
E = 0x12,
|
|
|
|
|
|
R = 0x13,
|
|
|
|
|
|
T = 0x14,
|
|
|
|
|
|
Y = 0x15,
|
|
|
|
|
|
U = 0x16,
|
|
|
|
|
|
I = 0x17,
|
|
|
|
|
|
O = 0x18,
|
|
|
|
|
|
P = 0x19,
|
|
|
|
|
|
A = 0x1E,
|
|
|
|
|
|
S = 0x1F,
|
|
|
|
|
|
D = 0x20,
|
|
|
|
|
|
F = 0x21,
|
|
|
|
|
|
G = 0x22,
|
|
|
|
|
|
H = 0x23,
|
|
|
|
|
|
J = 0x24,
|
|
|
|
|
|
K = 0x25,
|
|
|
|
|
|
L = 0x26,
|
|
|
|
|
|
Z = 0x2C,
|
|
|
|
|
|
X = 0x2D,
|
|
|
|
|
|
C = 0x2E,
|
|
|
|
|
|
V = 0x2F,
|
|
|
|
|
|
B = 0x30,
|
|
|
|
|
|
N = 0x31,
|
|
|
|
|
|
M = 0x32,
|
2018-05-24 20:37:34 +08:00
|
|
|
|
Num1 = 0x02,
|
|
|
|
|
|
Num2 = 0x03,
|
|
|
|
|
|
Num3 = 0x04,
|
|
|
|
|
|
Num4 = 0x05,
|
|
|
|
|
|
Num5 = 0x06,
|
|
|
|
|
|
Num6 = 0x07,
|
|
|
|
|
|
Num7 = 0x08,
|
|
|
|
|
|
Num8 = 0x09,
|
|
|
|
|
|
Num9 = 0x0A,
|
|
|
|
|
|
Num0 = 0x0B,
|
|
|
|
|
|
Numpad7 = 0x47,
|
|
|
|
|
|
Numpad8 = 0x48,
|
|
|
|
|
|
Numpad9 = 0x49,
|
|
|
|
|
|
Numpad4 = 0x4B,
|
|
|
|
|
|
Numpad5 = 0x4C,
|
|
|
|
|
|
Numpad6 = 0x4D,
|
|
|
|
|
|
Numpad1 = 0x4F,
|
|
|
|
|
|
Numpad2 = 0x50,
|
|
|
|
|
|
Numpad3 = 0x51,
|
|
|
|
|
|
Numpad0 = 0x52
|
2018-05-17 15:22:14 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2017-10-13 14:34:33 +08:00
|
|
|
|
public:
|
2018-07-04 15:33:09 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>豸ʵ<E8B1B8><CAB5>
|
|
|
|
|
|
static Input * getInstance();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸ʵ<E8B1B8><CAB5>
|
|
|
|
|
|
static void destroyInstance();
|
|
|
|
|
|
|
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>
|
2018-07-04 15:33:09 +08:00
|
|
|
|
bool isDown(
|
2018-05-18 23:56:36 +08:00
|
|
|
|
Key key
|
2018-01-30 16:45:38 +08:00
|
|
|
|
);
|
2017-10-12 23:34:13 +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>
|
2018-07-04 15:33:09 +08:00
|
|
|
|
bool isPress(
|
2018-05-18 23:56:36 +08:00
|
|
|
|
Key key
|
2018-01-30 16:45:38 +08:00
|
|
|
|
);
|
2017-10-12 23:34:13 +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>
|
2018-07-04 15:33:09 +08:00
|
|
|
|
bool isRelease(
|
2018-05-18 23:56:36 +08:00
|
|
|
|
Key key
|
2018-01-30 16:45:38 +08:00
|
|
|
|
);
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2018-05-17 15:22:14 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>갴<EFBFBD><EAB0B4><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2018-07-04 15:33:09 +08:00
|
|
|
|
bool isDown(
|
2018-05-18 23:56:36 +08:00
|
|
|
|
Mouse code
|
2018-05-17 15:22:14 +08:00
|
|
|
|
);
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2018-05-17 15:22:14 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>갴<EFBFBD><EAB0B4><EFBFBD>Ƿ<C7B7><F1B1BBB5><EFBFBD>
|
2018-07-04 15:33:09 +08:00
|
|
|
|
bool isPress(
|
2018-05-18 23:56:36 +08:00
|
|
|
|
Mouse code
|
2018-05-17 15:22:14 +08:00
|
|
|
|
);
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2018-05-17 15:22:14 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>갴<EFBFBD><EAB0B4><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
|
2018-07-04 15:33:09 +08:00
|
|
|
|
bool isRelease(
|
2018-05-18 23:56:36 +08:00
|
|
|
|
Mouse code
|
2018-05-17 15:22:14 +08:00
|
|
|
|
);
|
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-07-04 15:33:09 +08:00
|
|
|
|
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-07-04 15:33:09 +08:00
|
|
|
|
double getMouseY();
|
2017-10-20 00:59:26 +08:00
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
2018-07-04 15:33:09 +08:00
|
|
|
|
Point getMousePos();
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
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-07-04 15:33:09 +08:00
|
|
|
|
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-07-04 15:33:09 +08:00
|
|
|
|
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-07-04 15:33:09 +08:00
|
|
|
|
double getMouseDeltaZ();
|
2017-10-26 17:17:30 +08:00
|
|
|
|
|
2018-07-05 22:05:23 +08:00
|
|
|
|
// ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸״̬
|
|
|
|
|
|
void update();
|
|
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
private:
|
2018-07-04 15:33:09 +08:00
|
|
|
|
Input();
|
|
|
|
|
|
|
|
|
|
|
|
~Input();
|
|
|
|
|
|
|
|
|
|
|
|
E2D_DISABLE_COPY(Input);
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
2018-07-04 15:33:09 +08:00
|
|
|
|
private:
|
|
|
|
|
|
IDirectInput8* _directInput;
|
|
|
|
|
|
IDirectInputDevice8* _keyboardDevice;
|
|
|
|
|
|
IDirectInputDevice8* _mouseDevice;
|
|
|
|
|
|
DIMOUSESTATE _mouseState;
|
|
|
|
|
|
DIMOUSESTATE _mouseStateRecord;
|
|
|
|
|
|
POINT _mousePos;
|
|
|
|
|
|
|
|
|
|
|
|
static Input * _instance;
|
2018-01-30 16:45:38 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
class Renderer
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
public:
|
2018-07-03 18:16:26 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>Ⱦ<EFBFBD><C8BE>ʵ<EFBFBD><CAB5>
|
|
|
|
|
|
static Renderer * getInstance();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
|
|
|
|
|
|
static void destroyInstance();
|
|
|
|
|
|
|
2018-04-22 13:15:57 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ɫ
|
2018-07-03 18:16:26 +08:00
|
|
|
|
Color getBackgroundColor();
|
2018-04-22 13:15:57 +08:00
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20>ı<DEB8><C4B1><EFBFBD>ɫ
|
2018-07-03 18:16:26 +08:00
|
|
|
|
void setBackgroundColor(
|
2018-04-22 13:15:57 +08:00
|
|
|
|
Color color
|
2017-10-29 23:48:32 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
2018-04-17 11:41:33 +08:00
|
|
|
|
// <20><>ʾ FPS
|
2018-07-03 18:16:26 +08:00
|
|
|
|
void showFps(
|
2018-04-17 11:41:33 +08:00
|
|
|
|
bool show = true
|
|
|
|
|
|
);
|
|
|
|
|
|
|
2018-07-05 22:05:23 +08:00
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
|
|
|
|
|
void render();
|
|
|
|
|
|
|
2018-07-03 18:16:26 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE>
|
|
|
|
|
|
TextRenderer * getTextRenderer();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ ID2D1HwndRenderTarget <20><><EFBFBD><EFBFBD>
|
2018-07-03 18:16:26 +08:00
|
|
|
|
ID2D1HwndRenderTarget * getRenderTarget();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ ID2D1SolidColorBrush <20><><EFBFBD><EFBFBD>
|
2018-07-03 18:16:26 +08:00
|
|
|
|
ID2D1SolidColorBrush * getSolidColorBrush();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ ID2D1Factory <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
static ID2D1Factory * getFactory();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ IWICImagingFactory <20><><EFBFBD><EFBFBD>
|
2018-07-03 18:16:26 +08:00
|
|
|
|
static IWICImagingFactory * getImagingFactory();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ IDWriteFactory <20><><EFBFBD><EFBFBD>
|
2018-07-03 18:16:26 +08:00
|
|
|
|
static IDWriteFactory * getWriteFactory();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
2018-07-03 18:16:26 +08:00
|
|
|
|
// <20><>ȡ FPS <20>ı<EFBFBD><C4B1><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
static IDWriteTextFormat * getFpsTextFormat();
|
2018-04-21 23:09:59 +08:00
|
|
|
|
|
2018-05-24 17:19:54 +08:00
|
|
|
|
// <20><>ȡ Miter <20><>ʽ<EFBFBD><CABD> ID2D1StrokeStyle
|
2018-07-03 18:16:26 +08:00
|
|
|
|
static ID2D1StrokeStyle * getMiterStrokeStyle();
|
2018-05-24 17:19:54 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ Bevel <20><>ʽ<EFBFBD><CABD> ID2D1StrokeStyle
|
2018-07-03 18:16:26 +08:00
|
|
|
|
static ID2D1StrokeStyle * getBevelStrokeStyle();
|
2018-05-24 17:19:54 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ Round <20><>ʽ<EFBFBD><CABD> ID2D1StrokeStyle
|
2018-07-03 18:16:26 +08:00
|
|
|
|
static ID2D1StrokeStyle * getRoundStrokeStyle();
|
2018-05-24 17:19:54 +08:00
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
private:
|
2018-07-03 18:16:26 +08:00
|
|
|
|
Renderer();
|
|
|
|
|
|
|
|
|
|
|
|
~Renderer();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
2018-07-03 18:16:26 +08:00
|
|
|
|
E2D_DISABLE_COPY(Renderer);
|
|
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
2018-07-03 18:16:26 +08:00
|
|
|
|
bool __createDeviceResources();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
|
|
|
|
|
// ɾ<><C9BE><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
2018-07-03 18:16:26 +08:00
|
|
|
|
void __discardDeviceResources();
|
2017-10-14 01:07:34 +08:00
|
|
|
|
|
2018-07-03 18:16:26 +08:00
|
|
|
|
private:
|
|
|
|
|
|
bool _showFps;
|
|
|
|
|
|
D2D1_COLOR_F _clearColor;
|
|
|
|
|
|
ID2D1HwndRenderTarget* _renderTarget;
|
|
|
|
|
|
ID2D1SolidColorBrush* _solidBrush;
|
|
|
|
|
|
TextRenderer* _textRenderer;
|
|
|
|
|
|
|
|
|
|
|
|
static ID2D1Factory* _d2dFactory;
|
|
|
|
|
|
static IWICImagingFactory* _imagingFactory;
|
|
|
|
|
|
static IDWriteFactory* _writeFactory;
|
|
|
|
|
|
static IDWriteTextFormat* _textFormat;
|
|
|
|
|
|
static ID2D1StrokeStyle* _miterStrokeStyle;
|
|
|
|
|
|
static ID2D1StrokeStyle* _bevelStrokeStyle;
|
|
|
|
|
|
static ID2D1StrokeStyle* _roundStrokeStyle;
|
|
|
|
|
|
static Renderer * _instance;
|
2017-10-12 23:34:13 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2018-05-19 01:10:37 +08:00
|
|
|
|
|
2018-07-05 22:05:23 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2018-05-19 01:10:37 +08:00
|
|
|
|
class GC
|
|
|
|
|
|
{
|
2018-05-24 00:58:16 +08:00
|
|
|
|
friend class Game;
|
2018-05-19 01:10:37 +08:00
|
|
|
|
|
|
|
|
|
|
public:
|
2018-07-07 01:43:41 +08:00
|
|
|
|
// <20>Զ<EFBFBD><D4B6>ͷ<EFBFBD>
|
|
|
|
|
|
static void autorelease(
|
|
|
|
|
|
Ref* ref
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Զ<EFBFBD><D4B6>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
static void autoreleaseArray(
|
|
|
|
|
|
Ref* ref
|
|
|
|
|
|
);
|
2018-07-03 18:16:26 +08:00
|
|
|
|
|
2018-07-07 01:43:41 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
static void retain(
|
|
|
|
|
|
Ref* ref
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ͷ<EFBFBD>
|
|
|
|
|
|
static void release(
|
|
|
|
|
|
Ref* ref
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȫ<EFBFBD><C8AB><EFBFBD>ͷŶ<CDB7><C5B6><EFBFBD>
|
2018-05-19 01:10:37 +08:00
|
|
|
|
template <typename Type>
|
2018-07-06 00:47:50 +08:00
|
|
|
|
static inline void safeRelease(Type*& p)
|
2018-05-19 01:10:37 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (p != nullptr)
|
|
|
|
|
|
{
|
2018-07-07 01:43:41 +08:00
|
|
|
|
GC::release(p);
|
2018-05-19 01:10:37 +08:00
|
|
|
|
p = nullptr;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-07-07 11:03:03 +08:00
|
|
|
|
// ˢ<><CBA2><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
|
|
|
|
|
static void flush();
|
2018-07-05 22:05:23 +08:00
|
|
|
|
|
2018-07-07 11:03:03 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
2018-07-07 01:43:41 +08:00
|
|
|
|
static void clear();
|
2018-07-03 18:16:26 +08:00
|
|
|
|
|
|
|
|
|
|
private:
|
2018-07-06 00:47:50 +08:00
|
|
|
|
GC();
|
2018-07-03 18:16:26 +08:00
|
|
|
|
|
|
|
|
|
|
~GC();
|
|
|
|
|
|
|
|
|
|
|
|
E2D_DISABLE_COPY(GC);
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
2018-07-07 01:43:41 +08:00
|
|
|
|
bool _notifyed;
|
|
|
|
|
|
std::map<Ref*, bool> _pool;
|
2018-07-03 18:16:26 +08:00
|
|
|
|
|
|
|
|
|
|
static GC _instance;
|
2018-05-19 01:10:37 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2017-10-12 23:34:13 +08:00
|
|
|
|
}
|