Yosin_Game/GameState.cpp

192 lines
5.4 KiB
C++
Raw Permalink Normal View History

2024-05-04 18:30:32 +08:00
#include "GameState.h"
#include "SquirrelActor.h"
extern SquirrelClassEx* TObject;
extern NPK_M* npk;
std::map<std::string, Sound*>SoundRecObject;
std::unordered_map<std::string, std::map<int,TexturePtr>>ImageRecObject;
std::map<std::string, FontPtr>FontRecObject;
WThreadPool threadPool;
Cursor* Mouse_Object = new Cursor();
void InitSound(const TCHAR* directory)
{
WIN32_FIND_DATA fileInfo;
TCHAR buffer[MAX_PATH];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
_tcscpy_s(buffer, directory);
_tcscat_s(buffer, _T("\\*.*"));
// <20><><EFBFBD>ҵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD>/Ŀ¼
HANDLE hFind = FindFirstFile(buffer, &fileInfo);
if (hFind != INVALID_HANDLE_VALUE)
{
do
{
// <20>ų<EFBFBD> "." <20><> ".."
if (_tcscmp(fileInfo.cFileName, _T(".")) != 0 && _tcscmp(fileInfo.cFileName, _T("..")) != 0)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
if (fileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
_tcscpy_s(buffer, directory);
_tcscat_s(buffer, _T("\\"));
_tcscat_s(buffer, fileInfo.cFileName);
InitSound(buffer);
}
else {
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
//_tprintf(_T("%s\\%s\n"), directory, fileInfo.cFileName);
char output[1024];
sprintf(output, "%ws\\%ws", directory,fileInfo.cFileName);
std::string path = output;
std::replace(path.begin(), path.end(), '\\', '/');
Sound* sou = new Sound(path);
//sou->Preload(path);
SoundRecObject[path] = sou;
//std::cout << "<22><>Ƶ<EFBFBD><C6B5>Դ___" << path << "____<5F>Ѽ<EFBFBD><D1BC><EFBFBD>" << std::endl;
}
}
} while (FindNextFile(hFind, &fileInfo));
FindClose(hFind);
}
}
void InitFont(const TCHAR* directory)
{
WIN32_FIND_DATA fileInfo;
TCHAR buffer[MAX_PATH];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
_tcscpy_s(buffer, directory);
_tcscat_s(buffer, _T("\\*.*"));
// <20><><EFBFBD>ҵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD>/Ŀ¼
HANDLE hFind = FindFirstFile(buffer, &fileInfo);
if (hFind != INVALID_HANDLE_VALUE)
{
do
{
// <20>ų<EFBFBD> "." <20><> ".."
if (_tcscmp(fileInfo.cFileName, _T(".")) != 0 && _tcscmp(fileInfo.cFileName, _T("..")) != 0)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
if (fileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
_tcscpy_s(buffer, directory);
_tcscat_s(buffer, _T("\\"));
_tcscat_s(buffer, fileInfo.cFileName);
InitFont(buffer);
}
else {
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
//_tprintf(_T("%s\\%s\n"), directory, fileInfo.cFileName);
char output[1024];
sprintf(output, "%ws\\%ws", directory, fileInfo.cFileName);
std::string path = output;
std::replace(path.begin(), path.end(), '\\', '/');
FontPtr FontBuf = new Font();
FontBuf->Preload(path);
FontRecObject[path] = FontBuf;
}
}
} while (FindNextFile(hFind, &fileInfo));
FindClose(hFind);
}
}
void LoadingScene_Success()
{
KGE_DEBUG_LOG("<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Stage* P_Stage = Director::GetInstance().GetCurrentStage().Get();
SquirrelStage* Push_Stage = (SquirrelStage*)P_Stage;
TObject->RunSceneScript("LoadingGame_Stage_Func", Push_Stage);
}
void InitGameRecFunc() {
//<2F><><EFBFBD><EFBFBD>List
SquirrelClassEx::LoadingListScript();
//Sleep(4000);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>Դ
InitSound(L"SoundPacks2/music");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
InitFont(L"Font");
//Ԥ<><D4A4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ɫ<EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD>е
for (size_t i = 0; i < 17; i++)
{
SquirrelClassEx::GetTexturePtrByImg("sprite/selectcharacter/background.img", i);
}
IMG* img = npk->ReadNpkTable("sprite/selectcharacter/background.img");
npk->ReleaseNpkTable(img);
Application::GetInstance().PerformInMainThread(LoadingScene_Success);
}
//#include <irrKlang.h>
//KGE_DECLARE_SMART_PTR(ISound);
void Setup()
{
//<2F>̳߳س<CCB3>ʼ<EFBFBD><CABC>
threadPool.setMaxThreadNum(10);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WindowPtr window = Application::GetInstance().GetWindow();
window->SetImmEnabled(true);
//Newһ<77><D2BB><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
threadPool.concurrentRun(InitGameRecFunc);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦģʽ
Director::GetInstance().SetRenderBorderEnabled(true);
//irrklang::ISoundEngine* engine = irrklang::createIrrKlangDevice();
/*SoundPtr SP = new Sound();
SP*/
/*loader.Load(fileData.get(), "ogg", memory.buffer);*/
//Renderer::GetInstance().GetContext().SetTextAntialiasMode(TextAntialiasMode::None);
}
void GameState::Run()
{
// <20><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
Settings s;
s.window.title = "Yosin - DOF"; // <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>
s.window.width = 1600; // <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>
s.window.height = 900; // <20><><EFBFBD>ڸ߶<DAB8>
// ȡ<><C8A1><EFBFBD><EFBFBD>ֱͬ<D6B1><CDAC>
s.vsync_enabled = false;
// <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
s.frame_interval = 1_sec / 10000;
s.debug_mode = true;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ϵͳ
//Logger::GetInstance().Enable();
//Application::GetInstance().Use(ImGuiModule::GetInstance());
Application::GetInstance().Use(AudioModule::GetInstance());
// <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
Application::GetInstance().Run(s, Setup);
}