139 lines
3.7 KiB
C++
139 lines
3.7 KiB
C++
#include "Global_Game.h"
|
|
#include "Asset/Squirrel/SquirrelManager.h"
|
|
|
|
Global_Game::Global_Game()
|
|
{
|
|
}
|
|
|
|
void Global_Game::InitFont()
|
|
{
|
|
HSQUIRRELVM v = SquirrelEx::GetInstance().GetSquirrelVM();
|
|
SQInteger top = sq_gettop(v);
|
|
|
|
sq_pushroottable(v);
|
|
sq_pushstring(v, _SC("_InitFont_"), -1);
|
|
if (SQ_SUCCEEDED(sq_get(v, -2)))
|
|
{
|
|
sq_pushroottable(v);
|
|
if (SQ_SUCCEEDED(sq_call(v, 1, SQTrue, SQTrue)))
|
|
{
|
|
sq_pushnull(v);
|
|
while (SQ_SUCCEEDED(sq_next(v, -2)))
|
|
{
|
|
const SQChar *path = nullptr;
|
|
SQInteger size = 0;
|
|
|
|
if (sq_gettype(v, -1) == OT_TABLE)
|
|
{
|
|
// 获取path
|
|
sq_pushstring(v, _SC("path"), -1);
|
|
if (SQ_SUCCEEDED(sq_get(v, -2)))
|
|
{
|
|
sq_getstring(v, -1, &path);
|
|
sq_pop(v, 1);
|
|
}
|
|
|
|
// 获取size
|
|
sq_pushstring(v, _SC("size"), -1);
|
|
if (SQ_SUCCEEDED(sq_get(v, -2)))
|
|
{
|
|
sq_getinteger(v, -1, &size);
|
|
sq_pop(v, 1);
|
|
}
|
|
|
|
// 初始化ttf字体资源
|
|
TTF_Font *FontBuf = TTF_OpenFont(path, size);
|
|
if (!FontBuf)
|
|
{
|
|
SDL_LogError(0, "字体加载失败: %s", TTF_GetError());
|
|
continue;
|
|
}
|
|
Fonts.push_back(FontBuf);
|
|
}
|
|
|
|
sq_pop(v, 2);
|
|
}
|
|
sq_pop(v, 1);
|
|
}
|
|
}
|
|
sq_settop(v, top);
|
|
}
|
|
|
|
void Global_Game::Init()
|
|
{
|
|
InitFont();
|
|
}
|
|
|
|
void Global_Game::InitGame()
|
|
{
|
|
// 读取角色配置文件
|
|
CharacterConfigs = GlobalCharacterScript::InitCharacterLst();
|
|
// 读取装备配置文件
|
|
EquipmentPathMap = GlobalEquipmentScript::InitEquipmentLst();
|
|
// 读取怪物配置文件
|
|
MonsterPathMap = GlobalMonsterScript::InitMonsterLst();
|
|
// 读取城镇配置文件
|
|
TownPathMap = GlobalTownScript::InitTownLst();
|
|
|
|
// 初始化松鼠脚本管理器
|
|
SquirrelManager::GetInstance()
|
|
.Init();
|
|
// 读取存档
|
|
SavaManager::GetInstance().Init();
|
|
|
|
//创建摄像机
|
|
_GameCamera = new GameCamera();
|
|
// 游戏初始化完成标志
|
|
InitFlag = true;
|
|
}
|
|
|
|
GlobalMonsterScript::MonsterConfig Global_Game::GetMonsterInfo(int id)
|
|
{
|
|
if (!InitFlag)
|
|
{
|
|
SDL_LogError(0, "游戏未初始化");
|
|
return GlobalMonsterScript::MonsterConfig();
|
|
}
|
|
if (MonsterInfoMap.count(id))
|
|
return MonsterInfoMap[id];
|
|
if (!MonsterPathMap.count(id))
|
|
{
|
|
SDL_LogError(0, "怪物ID不存在");
|
|
return GlobalMonsterScript::MonsterConfig();
|
|
}
|
|
std::string path = MonsterPathMap[id];
|
|
GlobalMonsterScript::MonsterConfig MonsterConfig = GlobalMonsterScript::ReadMonsterConfig(path);
|
|
MonsterConfig.id = id;
|
|
MonsterInfoMap[id] = MonsterConfig;
|
|
return MonsterConfig;
|
|
}
|
|
|
|
const std::map<int, std::string> &Global_Game::GetTownMap() const
|
|
{
|
|
return TownPathMap;
|
|
}
|
|
|
|
GlobalTownScript::TownConfig *Global_Game::GetTownInfo(int id)
|
|
{
|
|
if (TownInfoMap.count(id))
|
|
return TownInfoMap[id];
|
|
if (!TownPathMap.count(id))
|
|
{
|
|
SDL_LogError(0, "城镇ID不存在");
|
|
return nullptr;
|
|
}
|
|
std::string path = TownPathMap[id];
|
|
GlobalTownScript::TownConfig *TownConfig = GlobalTownScript::GetTownConfig(path);
|
|
if (TownConfig)
|
|
{
|
|
TownInfoMap[id] = TownConfig;
|
|
return TownConfig;
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
RefPtr<GameCamera> Global_Game::GetCamera()
|
|
{
|
|
return _GameCamera;
|
|
}
|