Magic_Game/samples/Samples/main.cpp

115 lines
2.1 KiB
C++
Raw Normal View History

2019-02-03 21:45:56 +08:00
// Copyright (C) 2019 Nomango
2019-03-20 23:24:57 +08:00
#include "Demo1.h"
#include "Demo2.h"
#include "Demo3.h"
#include "Demo4.h"
#include "Demo5.h"
2019-02-03 21:45:56 +08:00
namespace
{
struct Demo
{
String title;
ScenePtr(*Create)();
2019-02-03 21:45:56 +08:00
};
Demo s_Demos[] = {
{ L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>", Demo1::Create },
{ L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>", Demo2::Create },
{ L"<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>", Demo3::Create },
2019-03-18 15:00:58 +08:00
{ L"֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>", Demo4::Create },
{ L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>", Demo5::Create },
2019-02-03 21:45:56 +08:00
};
int s_CurrIndex = -1;
2019-02-03 21:45:56 +08:00
int s_DemoNum = sizeof(s_Demos) / sizeof(Demo);
}
// <20><>Դ<EFBFBD><D4B4><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>
ResLoader g_Loader;
2019-02-03 21:45:56 +08:00
class DemoApp
: public Application
{
public:
DemoApp()
{
2019-03-11 17:24:11 +08:00
// ʹ<><CAB9> Audio <20><><EFBFBD><EFBFBD>
2019-07-30 15:27:01 +08:00
Use(Audio::Instance());
2019-02-03 21:45:56 +08:00
// ʹ<><CAB9> HttpClient <20><><EFBFBD><EFBFBD>
2019-07-30 15:27:01 +08:00
Use(HttpClient::Instance());
2019-04-11 14:40:54 +08:00
Options options(L"Kiwanoʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", WINDOW_WIDTH, WINDOW_HEIGHT);
2019-02-03 21:45:56 +08:00
Init(options);
}
void OnStart() override
{
// <20><> JSON <20>ļ<EFBFBD><C4BC>ж<EFBFBD>ȡ<EFBFBD><C8A1>Դ<EFBFBD><D4B4>Ϣ
//g_Loader.LoadFromJsonFile(L"res/index.json");
// <20><> XML <20>ļ<EFBFBD><C4BC>ж<EFBFBD>ȡ<EFBFBD><C8A1>Դ<EFBFBD><D4B4>Ϣ
g_Loader.LoadFromXmlFile(L"res/index.xml");
// <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ChangeDemoScene(0);
2019-02-03 21:45:56 +08:00
}
void OnDestroy() override
{
// <20>˳<EFBFBD><CBB3><EFBFBD>Ϸʱ<CFB7><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
g_Loader.Destroy();
}
void ChangeDemoScene(int index)
2019-02-03 21:45:56 +08:00
{
if (s_CurrIndex != index)
{
s_CurrIndex = index;
2019-02-03 21:45:56 +08:00
String title = s_Demos[index].title;
2019-07-30 15:27:01 +08:00
Window::Instance()->SetTitle(L"Kiwanoʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - " + title);
2019-02-03 21:45:56 +08:00
ScenePtr scene = s_Demos[index].Create();
EnterScene(scene);
2019-02-03 21:45:56 +08:00
// <20><><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
scene->AddListener(Event::KeyUp, MakeClosure(this, &DemoApp::KeyPressed));
// <20><>ʾ<EFBFBD><CABE>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
String intro_str = String::format(L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1~%d <20><><EFBFBD>л<EFBFBD>ʾ<EFBFBD><CABE>\n", s_DemoNum);
TextPtr intro = new Text(intro_str + title);
intro->SetFontSize(16.f);
intro->SetPosition(10, 10);
scene->AddChild(intro);
}
2019-02-03 21:45:56 +08:00
}
void KeyPressed(Event const& evt)
{
2019-04-11 14:40:54 +08:00
KGE_ASSERT(evt.type == Event::KeyUp);
2019-02-03 21:45:56 +08:00
if (evt.key.code > KeyCode::Num0 &&
evt.key.code <= (KeyCode::Num0 + s_DemoNum))
{
int index = evt.key.code - KeyCode::Num1;
ChangeDemoScene(index);
2019-02-03 21:45:56 +08:00
}
}
};
int WINAPI wWinMain(HINSTANCE, HINSTANCE, PWSTR, int)
2019-02-03 21:45:56 +08:00
{
try
{
DemoApp app;
app.Run();
}
catch (std::exception& e)
{
2019-03-10 13:44:02 +08:00
::MessageBoxA(nullptr, e.what(), "An exception has occurred!", MB_ICONERROR | MB_OK);
2019-02-03 21:45:56 +08:00
}
return 0;
}