17std::string extensionOf(
const std::string &path) {
18 const auto pos = path.find_last_of(
'.');
19 if (
pos == std::string::npos)
return {};
20 std::string ext = path.substr(
pos);
21 for (
char &
c : ext)
c = static_cast<char>(std::tolower(static_cast<unsigned char>(
c)));
25bool isImagePath(
const std::string &path) {
26 const std::string ext = extensionOf(path);
27 return ext ==
".png" || ext ==
".jpg" || ext ==
".jpeg" || ext ==
".bmp" || ext ==
".tga" ||
28 ext ==
".gif" || ext ==
".webp" || ext ==
".exr" || ext ==
".hdr";
33 const char *reloadKind()
const override {
return "texture"; }
35 bool handlesPath(
const std::string &normPath)
const override {
return isImagePath(normPath); }
37 bool reload(
const std::string &normPath)
override {
38 auto *gfx = eve::ModuleManager::getInstance<Graphics>(
"Graphics");
39 if (!gfx)
return false;
40 return gfx->reloadTextureFromFile(normPath);
46 static TextureReloader reloader;
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...