iw4x-client/src/Components/Modules/ModList.cpp

105 lines
2.3 KiB
C++
Raw Normal View History

2022-02-27 07:53:44 -05:00
#include <STDInclude.hpp>
2017-01-19 16:23:59 -05:00
namespace Components
{
std::vector<std::string> ModList::Mods;
unsigned int ModList::CurrentMod;
2018-12-17 08:29:18 -05:00
bool ModList::HasMod(const std::string& modName)
2017-01-19 16:23:59 -05:00
{
auto list = FileSystem::GetSysFileList(Dvar::Var("fs_basepath").get<std::string>() + "\\mods", "", true);
for (auto mod : list)
{
if (mod == modName)
{
return true;
}
}
return false;
}
unsigned int ModList::GetItemCount()
{
return ModList::Mods.size();
}
const char* ModList::GetItemText(unsigned int index, int /*column*/)
{
if (index < ModList::Mods.size())
{
return ModList::Mods[index].data();
}
return "...";
}
void ModList::Select(unsigned int index)
{
ModList::CurrentMod = index;
}
void ModList::UIScript_LoadMods(UIScript::Token)
{
auto folder = Dvar::Var("fs_basepath").get<std::string>() + "\\mods";
Logger::Debug("Searching for mods in {}...", folder);
2017-01-19 16:23:59 -05:00
ModList::Mods = FileSystem::GetSysFileList(folder, "", true);
Logger::Debug("Found {} mods!", ModList::Mods.size());
2017-01-19 16:23:59 -05:00
}
void ModList::UIScript_RunMod(UIScript::Token)
{
if (ModList::CurrentMod < ModList::Mods.size())
{
ModList::RunMod(ModList::Mods[ModList::CurrentMod]);
}
}
void ModList::UIScript_ClearMods(UIScript::Token)
{
auto fsGame = Dvar::Var("fs_game");
fsGame.set("");
fsGame.get<Game::dvar_t*>()->modified = true;
if (Dvar::Var("cl_modVidRestart").get<bool>())
{
Game::Cmd_ExecuteSingleCommand(0, 0, "vid_restart");
}
else
{
Game::Cmd_ExecuteSingleCommand(0, 0, "closemenu mods_menu");
}
}
2018-12-17 08:29:18 -05:00
void ModList::RunMod(const std::string& mod)
2017-01-19 16:23:59 -05:00
{
auto fsGame = Dvar::Var("fs_game");
fsGame.set(Utils::String::VA("mods/%s", mod.data()));
fsGame.get<Game::dvar_t*>()->modified = true;
if (Dvar::Var("cl_modVidRestart").get<bool>())
{
Command::Execute("vid_restart", false);
}
else
{
Command::Execute("closemenu mods_menu", false);
}
}
ModList::ModList()
{
if (Dedicated::IsEnabled()) return;
2017-01-19 16:23:59 -05:00
ModList::CurrentMod = 0;
Dvar::Register("cl_modVidRestart", true, Game::dvar_flag::DVAR_ARCHIVE, "Perform a vid_restart when loading a mod.");
2017-01-19 16:23:59 -05:00
UIScript::Add("LoadMods", ModList::UIScript_LoadMods);
UIScript::Add("RunMod", ModList::UIScript_RunMod);
UIScript::Add("ClearMods", ModList::UIScript_ClearMods);
UIFeeder::Add(9.0f, ModList::GetItemCount, ModList::GetItemText, ModList::Select);
}
}