Compare commits

..

1 Commits

Author SHA1 Message Date
Tristan 'Natrist' Cormier
e9c1ff86a8
Merge e985629f09 into 74bc963a1c 2026-03-15 13:06:00 -07:00
26 changed files with 273 additions and 239 deletions

View File

@ -1,6 +1,6 @@
name: PR name: PR
on: [pull_request] on: [pull_request_target]
jobs: jobs:
build: build:
@ -45,10 +45,14 @@ jobs:
if: matrix.build.os == 'ubuntu-latest' if: matrix.build.os == 'ubuntu-latest'
- name: Download Fixtures - name: Download Fixtures
run: curl -o test/fixture/whoa-fixture.tgz https://whoa.reliquaryhq.com/whoa-fixture.tgz run: aws s3 cp --endpoint-url ${{ env.AWS_ENDPOINT_URL }} s3://reliquaryhq-whoa/fixture.tgz test/fixture/
env:
AWS_ACCESS_KEY_ID: ${{ secrets.STORAGE_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.STORAGE_AWS_SECRET_ACCESS_KEY }}
AWS_ENDPOINT_URL: ${{ vars.STORAGE_AWS_ENDPOINT_URL }}
- name: Unpack Fixtures - name: Unpack Fixtures
run: tar -xvzf whoa-fixture.tgz run: tar -xvzf fixture.tgz
working-directory: test/fixture working-directory: test/fixture
- name: Prepare - name: Prepare

View File

@ -44,10 +44,14 @@ jobs:
submodules: recursive submodules: recursive
- name: Download Fixtures - name: Download Fixtures
run: curl -o test/fixture/whoa-fixture.tgz https://whoa.reliquaryhq.com/whoa-fixture.tgz run: aws s3 cp --endpoint-url ${{ env.AWS_ENDPOINT_URL }} s3://reliquaryhq-whoa/fixture.tgz test/fixture/
env:
AWS_ACCESS_KEY_ID: ${{ secrets.STORAGE_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.STORAGE_AWS_SECRET_ACCESS_KEY }}
AWS_ENDPOINT_URL: ${{ vars.STORAGE_AWS_ENDPOINT_URL }}
- name: Unpack Fixtures - name: Unpack Fixtures
run: tar -xvzf whoa-fixture.tgz run: tar -xvzf fixture.tgz
working-directory: test/fixture working-directory: test/fixture
- name: Prepare - name: Prepare

View File

@ -3,9 +3,9 @@
#include "db/Db.hpp" #include "db/Db.hpp"
#include "glue/CGlueMgr.hpp" #include "glue/CGlueMgr.hpp"
#include "glue/CRealmList.hpp" #include "glue/CRealmList.hpp"
#include "util/StringTo.hpp"
#include "ui/FrameScript.hpp" #include "ui/FrameScript.hpp"
#include "ui/Types.hpp" #include "ui/Types.hpp"
#include "ui/Util.hpp"
#include "util/Lua.hpp" #include "util/Lua.hpp"
#include "util/Unimplemented.hpp" #include "util/Unimplemented.hpp"
#include <cstdint> #include <cstdint>

View File

@ -33,11 +33,11 @@ void Blit_uint16_uint16(const C2iVector& size, const void* in, uint32_t inStride
return; return;
} }
auto in_ = static_cast<const char*>(in); const char* in_ = reinterpret_cast<const char*>(in);
auto out_ = static_cast<char*>(out); char* out_ = reinterpret_cast<char*>(out);
for (int32_t i = 0; i < size.y; i++) { for (int32_t i = 0; i < size.y; i++) {
memcpy(out_, in_, 2 * size.x); memcpy(out, in, 2 * size.x);
in_ += inStride; in_ += inStride;
out_ += outStride; out_ += outStride;
} }
@ -49,11 +49,11 @@ void Blit_uint32_uint32(const C2iVector& size, const void* in, uint32_t inStride
return; return;
} }
auto in_ = static_cast<const char*>(in); const char* in_ = reinterpret_cast<const char*>(in);
auto out_ = static_cast<char*>(out); char* out_ = reinterpret_cast<char*>(out);
for (int32_t i = 0; i < size.y; i++) { for (int32_t i = 0; i < size.y; i++) {
memcpy(out_, in_, 4 * size.x); memcpy(out, in, 4 * size.x);
in_ += inStride; in_ += inStride;
out_ += outStride; out_ += outStride;
} }
@ -180,10 +180,13 @@ void Blit_Dxt1_Rgb565(const C2iVector& size, const void* in, uint32_t inStride,
} }
void Blit_Dxt1_Dxt1(const C2iVector& size, const void* in, uint32_t inStride, void* out, uint32_t outStride) { void Blit_Dxt1_Dxt1(const C2iVector& size, const void* in, uint32_t inStride, void* out, uint32_t outStride) {
const char* in_ = static_cast<const char*>(in);
char* out_ = static_cast<char*>(out);
int32_t v6 = std::max(size.x, 4); int32_t v6 = std::max(size.x, 4);
int32_t v7 = std::max(size.y, 4); int32_t v7 = std::max(size.y, 4);
memcpy(out, in, (4 * v6 * v7) >> 3); memcpy(out_, in_, (4 * v6 * v7) >> 3);
} }
void Blit_Dxt3_Argb8888(const C2iVector& size, const void* in, uint32_t inStride, void* out, uint32_t outStride) { void Blit_Dxt3_Argb8888(const C2iVector& size, const void* in, uint32_t inStride, void* out, uint32_t outStride) {
@ -198,14 +201,14 @@ void Blit_Dxt35_Dxt35(const C2iVector& size, const void* in, uint32_t inStride,
int32_t v5 = std::max(size.x, 4); int32_t v5 = std::max(size.x, 4);
int32_t v6 = std::max(size.y / 4, 1); int32_t v6 = std::max(size.y / 4, 1);
const char* in_ = static_cast<const char*>(in);
char* out_ = static_cast<char*>(out);
if (inStride == v5 * 4 && outStride == v5 * 4) { if (inStride == v5 * 4 && outStride == v5 * 4) {
memcpy(out, in, v5 * v6 * 4); memcpy(out_, in_, v5 * v6 * 4);
return; return;
} }
auto in_ = static_cast<const char*>(in);
auto out_ = static_cast<char*>(out);
for (int32_t i = v6; i > 0; i--) { for (int32_t i = v6; i > 0; i--) {
memcpy(out_, in_, v5 * 4); memcpy(out_, in_, v5 * 4);
in_ += inStride; in_ += inStride;

View File

@ -4,6 +4,7 @@
#include "ui/LoadXML.hpp" #include "ui/LoadXML.hpp"
#include "ui/Util.hpp" #include "ui/Util.hpp"
#include "util/CStatus.hpp" #include "util/CStatus.hpp"
#include "util/StringTo.hpp"
#include <common/XML.hpp> #include <common/XML.hpp>
#include <storm/Error.hpp> #include <storm/Error.hpp>

View File

@ -2,11 +2,11 @@
#include "gx/Coordinate.hpp" #include "gx/Coordinate.hpp"
#include "ui/CScriptRegion.hpp" #include "ui/CScriptRegion.hpp"
#include "ui/FrameScript_Object.hpp" #include "ui/FrameScript_Object.hpp"
#include "ui/Util.hpp"
#include "ui/simple/CSimpleFontString.hpp" #include "ui/simple/CSimpleFontString.hpp"
#include "ui/simple/CSimpleTexture.hpp" #include "ui/simple/CSimpleTexture.hpp"
#include "ui/simple/CSimpleTop.hpp" #include "ui/simple/CSimpleTop.hpp"
#include "util/Lua.hpp" #include "util/Lua.hpp"
#include "util/StringTo.hpp"
#include "util/Unimplemented.hpp" #include "util/Unimplemented.hpp"
#include <cstdint> #include <cstdint>
#include <tempest/Rect.hpp> #include <tempest/Rect.hpp>

View File

@ -1,5 +1,5 @@
#include "ui/Util.hpp" #include "ui/Util.hpp"
#include "util/Lua.hpp" #include <type_traits>
#include <storm/String.hpp> #include <storm/String.hpp>
const char* LanguageProcess(const char* string) { const char* LanguageProcess(const char* string) {
@ -9,248 +9,101 @@ const char* LanguageProcess(const char* string) {
int32_t StringToBlendMode(const char* string, EGxBlend& blend) { int32_t StringToBlendMode(const char* string, EGxBlend& blend) {
struct BlendEntry { struct BlendEntry {
const char* string;
EGxBlend value; EGxBlend value;
const char* string;
}; };
static BlendEntry blendMap[] = { static BlendEntry blendMap[] = {
{ "DISABLE", GxBlend_Opaque }, { GxBlend_Opaque, "DISABLE" },
{ "BLEND", GxBlend_Alpha }, { GxBlend_Alpha, "BLEND" },
{ "ALPHAKEY", GxBlend_AlphaKey }, { GxBlend_AlphaKey, "ALPHAKEY" },
{ "ADD", GxBlend_Add }, { GxBlend_Add, "ADD" },
{ "MOD", GxBlend_Mod }, { GxBlend_Mod, "MOD" }
}; };
for (const auto& entry : blendMap) { for (int32_t i = 0; i < std::extent<decltype(blendMap)>::value; i++) {
if (!SStrCmpI(entry.string, string)) { if (!SStrCmpI(blendMap[i].string, string, 0x7FFFFFFFu)) {
blend = entry.value; blend = blendMap[i].value;
return true; return 1;
} }
} }
return false;
}
int32_t StringToBOOL(const char* string) {
return StringToBOOL(string, false);
}
bool StringToBOOL(const char* string, int32_t def) {
if (!string) {
return def;
}
switch (*string) {
case '0':
case 'F':
case 'N':
case 'f':
case 'n':
return false;
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case 'T':
case 'Y':
case 't':
case 'y':
return true;
default:
if (!SStrCmpI(string, "off") || !SStrCmpI(string, "disabled")) {
return false;
}
if (!SStrCmpI(string, "on") || !SStrCmpI(string, "enabled")) {
return true;
}
return def;
}
}
bool StringToBOOL(lua_State* L, int32_t idx, int32_t def) {
switch (lua_type(L, idx)) {
case LUA_TNIL:
return false;
case LUA_TBOOLEAN:
return lua_toboolean(L, idx);
case LUA_TNUMBER:
return lua_tonumber(L, idx) != 0;
case LUA_TSTRING:
return StringToBOOL(lua_tostring(L, idx), def);
default:
return def;
}
}
uint64_t StringToClickAction(const char* string) {
if (!string || !*string) {
return 0;
}
if (!SStrCmpI(string, "LeftButtonDown")) {
return 1;
}
if (!SStrCmpI(string, "LeftButtonUp")) {
return 0x80000000;
}
if (!SStrCmpI(string, "MiddleButtonDown")) {
return 2;
}
if (!SStrCmpI(string, "MiddleButtonUp")) {
return 0;
}
if (!SStrCmpI(string, "RightButtonDown")) {
return 4;
}
if (!SStrCmpI(string, "RightButtonUp")) {
return 0;
}
// TODO remaining buttons
return 0; return 0;
} }
int32_t StringToDrawLayer(const char* string, int32_t& layer) {
struct LayerEntry {
const char* string;
int32_t layer;
};
static LayerEntry layerMap[] = {
{ "BACKGROUND", DRAWLAYER_BACKGROUND },
{ "BORDER", DRAWLAYER_BACKGROUND_BORDER },
{ "ARTWORK", DRAWLAYER_ARTWORK },
{ "OVERLAY", DRAWLAYER_ARTWORK_OVERLAY },
{ "HIGHLIGHT", DRAWLAYER_HIGHLIGHT },
};
for (const auto& entry : layerMap) {
if (!SStrCmpI(string, entry.string)) {
layer = entry.layer;
return true;
}
}
return false;
}
int32_t StringToFramePoint(const char* string, FRAMEPOINT& point) { int32_t StringToFramePoint(const char* string, FRAMEPOINT& point) {
struct FramePointEntry { struct FramePointEntry {
const char* string;
FRAMEPOINT value; FRAMEPOINT value;
const char* string;
}; };
static FramePointEntry framePointMap[] = { static FramePointEntry framePointMap[] = {
{ "BOTTOM", FRAMEPOINT_BOTTOM }, { FRAMEPOINT_BOTTOM, "BOTTOM" },
{ "BOTTOMLEFT", FRAMEPOINT_BOTTOMLEFT }, { FRAMEPOINT_BOTTOMLEFT, "BOTTOMLEFT" },
{ "BOTTOMRIGHT", FRAMEPOINT_BOTTOMRIGHT }, { FRAMEPOINT_BOTTOMRIGHT, "BOTTOMRIGHT" },
{ "CENTER", FRAMEPOINT_CENTER }, { FRAMEPOINT_CENTER, "CENTER" },
{ "TOP", FRAMEPOINT_TOP }, { FRAMEPOINT_TOP, "TOP" },
{ "TOPRIGHT", FRAMEPOINT_TOPRIGHT }, { FRAMEPOINT_TOPRIGHT, "TOPRIGHT" },
{ "TOPLEFT", FRAMEPOINT_TOPLEFT }, { FRAMEPOINT_TOPLEFT, "TOPLEFT" },
{ "LEFT", FRAMEPOINT_LEFT }, { FRAMEPOINT_LEFT, "LEFT" },
{ "RIGHT", FRAMEPOINT_RIGHT }, { FRAMEPOINT_RIGHT, "RIGHT" }
}; };
for (const auto& entry : framePointMap) { for (int32_t i = 0; i < std::extent<decltype(framePointMap)>::value; i++) {
if (!SStrCmpI(entry.string, string)) { if (!SStrCmpI(framePointMap[i].string, string, 0x7FFFFFFFu)) {
point = entry.value; point = framePointMap[i].value;
return true; return 1;
} }
} }
return false; return 0;
} }
int32_t StringToFrameStrata(const char* string, FRAME_STRATA& strata) { int32_t StringToFrameStrata(const char* string, FRAME_STRATA& strata) {
struct FrameStrataEntry { struct FrameStrataEntry {
const char* string;
FRAME_STRATA value; FRAME_STRATA value;
const char* string;
}; };
// FRAME_STRATA_WORLD is hardcoded // FRAME_STRATA_WORLD is hardcoded
static FrameStrataEntry frameStrataMap[] = { static FrameStrataEntry frameStrataMap[] = {
{ "BACKGROUND", FRAME_STRATA_BACKGROUND }, { FRAME_STRATA_BACKGROUND, "BACKGROUND" },
{ "LOW", FRAME_STRATA_LOW }, { FRAME_STRATA_LOW, "LOW" },
{ "MEDIUM", FRAME_STRATA_MEDIUM }, { FRAME_STRATA_MEDIUM, "MEDIUM" },
{ "HIGH", FRAME_STRATA_HIGH }, { FRAME_STRATA_HIGH, "HIGH" },
{ "DIALOG", FRAME_STRATA_DIALOG }, { FRAME_STRATA_DIALOG, "DIALOG" },
{ "FULLSCREEN", FRAME_STRATA_FULLSCREEN }, { FRAME_STRATA_FULLSCREEN, "FULLSCREEN" },
{ "FULLSCREEN_DIALOG", FRAME_STRATA_FULLSCREEN_DIALOG }, { FRAME_STRATA_FULLSCREEN_DIALOG, "FULLSCREEN_DIALOG" },
{ "TOOLTIP", FRAME_STRATA_TOOLTIP }, { FRAME_STRATA_TOOLTIP, "TOOLTIP" }
}; };
for (const auto& entry : frameStrataMap) { for (int32_t i = 0; i < std::extent<decltype(frameStrataMap)>::value; i++) {
if (!SStrCmpI(entry.string, string)) { if (!SStrCmpI(frameStrataMap[i].string, string, 0x7FFFFFFFu)) {
strata = entry.value; strata = frameStrataMap[i].value;
return true; return 1;
} }
} }
return false; return 0;
}
int32_t StringToJustify(const char* string, uint32_t& justify) {
struct JustifyEntry {
const char* string;
uint32_t value;
};
static JustifyEntry justifyMap[] = {
{ "LEFT", 0x1 },
{ "CENTER", 0x2 },
{ "RIGHT", 0x4 },
{ "TOP", 0x8 },
{ "MIDDLE", 0x10 },
{ "BOTTOM", 0x20 },
};
for (const auto& entry : justifyMap) {
if (!SStrCmpI(entry.string, string)) {
justify = entry.value;
return true;
}
}
return false;
} }
int32_t StringToOrientation(const char* string, ORIENTATION& orientation) { int32_t StringToOrientation(const char* string, ORIENTATION& orientation) {
struct OrientationEntry { struct OrientationEntry {
const char* string;
ORIENTATION value; ORIENTATION value;
const char* string;
}; };
static OrientationEntry orientationMap[] = { static OrientationEntry orientationMap[] = {
{ "HORIZONTAL", ORIENTATION_HORIZONTAL }, { ORIENTATION_HORIZONTAL, "HORIZONTAL" },
{ "VERTICAL", ORIENTATION_VERTICAL }, { ORIENTATION_VERTICAL, "VERTICAL" },
}; };
for (const auto& entry : orientationMap) { for (auto& entry : orientationMap) {
if (!SStrCmpI(entry.string, string)) { if (!SStrCmpI(entry.string, string)) {
orientation = entry.value; orientation = entry.value;
return true; return 1;
} }
} }
return false; return 0;
} }

View File

@ -5,28 +5,14 @@
#include "ui/Types.hpp" #include "ui/Types.hpp"
#include <cstdint> #include <cstdint>
struct lua_State;
const char* LanguageProcess(const char* string); const char* LanguageProcess(const char* string);
int32_t StringToBlendMode(const char* string, EGxBlend& blend); int32_t StringToBlendMode(const char* string, EGxBlend& blend);
int32_t StringToBOOL(const char* string);
bool StringToBOOL(const char* string, int32_t def);
bool StringToBOOL(lua_State* L, int32_t idx, int32_t def);
uint64_t StringToClickAction(const char* string);
int32_t StringToDrawLayer(const char* string, int32_t& layer);
int32_t StringToFramePoint(const char* string, FRAMEPOINT& point); int32_t StringToFramePoint(const char* string, FRAMEPOINT& point);
int32_t StringToFrameStrata(const char* string, FRAME_STRATA& strata); int32_t StringToFrameStrata(const char* string, FRAME_STRATA& strata);
int32_t StringToJustify(const char* string, uint32_t& justify);
int32_t StringToOrientation(const char* string, ORIENTATION& orientation); int32_t StringToOrientation(const char* string, ORIENTATION& orientation);
#endif #endif

View File

@ -3,10 +3,10 @@
#include "gx/Coordinate.hpp" #include "gx/Coordinate.hpp"
#include "ui/FrameScript.hpp" #include "ui/FrameScript.hpp"
#include "ui/ScriptFunctionsShared.hpp" #include "ui/ScriptFunctionsShared.hpp"
#include "ui/Util.hpp"
#include "ui/game/CGGameUI.hpp" #include "ui/game/CGGameUI.hpp"
#include "ui/game/Types.hpp" #include "ui/game/Types.hpp"
#include "ui/simple/CSimpleTop.hpp" #include "ui/simple/CSimpleTop.hpp"
#include "util/StringTo.hpp"
#include "util/Unimplemented.hpp" #include "util/Unimplemented.hpp"
namespace { namespace {

View File

@ -3,12 +3,12 @@
#include "object/Client.hpp" #include "object/Client.hpp"
#include "ui/FrameScript.hpp" #include "ui/FrameScript.hpp"
#include "ui/ScriptFunctionsSystem.hpp" #include "ui/ScriptFunctionsSystem.hpp"
#include "ui/Util.hpp"
#include "ui/game/CGGameUI.hpp" #include "ui/game/CGGameUI.hpp"
#include "ui/game/ScriptUtil.hpp" #include "ui/game/ScriptUtil.hpp"
#include "ui/game/Types.hpp" #include "ui/game/Types.hpp"
#include "util/GUID.hpp" #include "util/GUID.hpp"
#include "util/Lua.hpp" #include "util/Lua.hpp"
#include "util/StringTo.hpp"
#include "util/Unimplemented.hpp" #include "util/Unimplemented.hpp"
#define NUM_SCRIPT_EVENTS 722 #define NUM_SCRIPT_EVENTS 722

View File

@ -1,11 +1,11 @@
#include "ui/simple/CSimpleButtonScript.hpp" #include "ui/simple/CSimpleButtonScript.hpp"
#include "gx/Coordinate.hpp" #include "gx/Coordinate.hpp"
#include "ui/Util.hpp"
#include "ui/simple/CSimpleButton.hpp" #include "ui/simple/CSimpleButton.hpp"
#include "ui/simple/CSimpleFont.hpp" #include "ui/simple/CSimpleFont.hpp"
#include "ui/simple/CSimpleFontString.hpp" #include "ui/simple/CSimpleFontString.hpp"
#include "ui/simple/CSimpleTexture.hpp" #include "ui/simple/CSimpleTexture.hpp"
#include "util/Lua.hpp" #include "util/Lua.hpp"
#include "util/StringTo.hpp"
#include "util/Unimplemented.hpp" #include "util/Unimplemented.hpp"
#include <cstdint> #include <cstdint>

View File

@ -1,8 +1,8 @@
#include "ui/simple/CSimpleCheckbox.hpp" #include "ui/simple/CSimpleCheckbox.hpp"
#include "ui/LoadXML.hpp" #include "ui/LoadXML.hpp"
#include "ui/Util.hpp"
#include "ui/simple/CSimpleCheckboxScript.hpp" #include "ui/simple/CSimpleCheckboxScript.hpp"
#include "ui/simple/CSimpleTexture.hpp" #include "ui/simple/CSimpleTexture.hpp"
#include "util/StringTo.hpp"
#include <common/XML.hpp> #include <common/XML.hpp>
int32_t CSimpleCheckbox::s_metatable; int32_t CSimpleCheckbox::s_metatable;

View File

@ -1,7 +1,7 @@
#include "ui/simple/CSimpleCheckboxScript.hpp" #include "ui/simple/CSimpleCheckboxScript.hpp"
#include "ui/Util.hpp"
#include "ui/simple/CSimpleCheckbox.hpp" #include "ui/simple/CSimpleCheckbox.hpp"
#include "util/Lua.hpp" #include "util/Lua.hpp"
#include "util/StringTo.hpp"
#include "util/Unimplemented.hpp" #include "util/Unimplemented.hpp"
#include <cstdint> #include <cstdint>

View File

@ -2,7 +2,6 @@
#include "gx/Coordinate.hpp" #include "gx/Coordinate.hpp"
#include "gx/Gx.hpp" #include "gx/Gx.hpp"
#include "ui/LoadXML.hpp" #include "ui/LoadXML.hpp"
#include "ui/Util.hpp"
#include "ui/simple/CSimpleEditBoxScript.hpp" #include "ui/simple/CSimpleEditBoxScript.hpp"
#include "ui/simple/CSimpleFontString.hpp" #include "ui/simple/CSimpleFontString.hpp"
#include "ui/simple/CSimpleFontedFrameFont.hpp" #include "ui/simple/CSimpleFontedFrameFont.hpp"
@ -11,6 +10,7 @@
#include "util/Byte.hpp" #include "util/Byte.hpp"
#include "util/CStatus.hpp" #include "util/CStatus.hpp"
#include "util/Lua.hpp" #include "util/Lua.hpp"
#include "util/StringTo.hpp"
#include <common/XML.hpp> #include <common/XML.hpp>
#include <storm/String.hpp> #include <storm/String.hpp>
#include <storm/Unicode.hpp> #include <storm/Unicode.hpp>

View File

@ -4,9 +4,9 @@
#include "ui/FrameXML.hpp" #include "ui/FrameXML.hpp"
#include "ui/LoadXML.hpp" #include "ui/LoadXML.hpp"
#include "ui/Types.hpp" #include "ui/Types.hpp"
#include "ui/Util.hpp"
#include "ui/simple/CSimpleFontScript.hpp" #include "ui/simple/CSimpleFontScript.hpp"
#include "util/CStatus.hpp" #include "util/CStatus.hpp"
#include "util/StringTo.hpp"
#include <common/XML.hpp> #include <common/XML.hpp>
#include <storm/String.hpp> #include <storm/String.hpp>

View File

@ -12,6 +12,7 @@
#include "ui/simple/CSimpleFrame.hpp" #include "ui/simple/CSimpleFrame.hpp"
#include "ui/simple/CSimpleTop.hpp" #include "ui/simple/CSimpleTop.hpp"
#include "util/CStatus.hpp" #include "util/CStatus.hpp"
#include "util/StringTo.hpp"
#include <common/XML.hpp> #include <common/XML.hpp>
#include <storm/String.hpp> #include <storm/String.hpp>

View File

@ -1,8 +1,8 @@
#include "ui/simple/CSimpleFontStringScript.hpp" #include "ui/simple/CSimpleFontStringScript.hpp"
#include "ui/Util.hpp"
#include "ui/simple/CSimpleFont.hpp" #include "ui/simple/CSimpleFont.hpp"
#include "ui/simple/CSimpleFontString.hpp" #include "ui/simple/CSimpleFontString.hpp"
#include "util/Lua.hpp" #include "util/Lua.hpp"
#include "util/StringTo.hpp"
#include "util/Unimplemented.hpp" #include "util/Unimplemented.hpp"
#include <cstdint> #include <cstdint>

View File

@ -8,7 +8,6 @@
#include "ui/FrameScript_Object.hpp" #include "ui/FrameScript_Object.hpp"
#include "ui/FrameXML.hpp" #include "ui/FrameXML.hpp"
#include "ui/LoadXML.hpp" #include "ui/LoadXML.hpp"
#include "ui/Util.hpp"
#include "ui/simple/CSimpleFontString.hpp" #include "ui/simple/CSimpleFontString.hpp"
#include "ui/simple/CSimpleFrameScript.hpp" #include "ui/simple/CSimpleFrameScript.hpp"
#include "ui/simple/CSimpleRender.hpp" #include "ui/simple/CSimpleRender.hpp"
@ -17,6 +16,7 @@
#include "ui/simple/CSimpleTitleRegion.hpp" #include "ui/simple/CSimpleTitleRegion.hpp"
#include "ui/simple/CSimpleTop.hpp" #include "ui/simple/CSimpleTop.hpp"
#include "util/Lua.hpp" #include "util/Lua.hpp"
#include "util/StringTo.hpp"
#include <common/XML.hpp> #include <common/XML.hpp>
#include <storm/Error.hpp> #include <storm/Error.hpp>
#include <storm/String.hpp> #include <storm/String.hpp>

View File

@ -3,12 +3,12 @@
#include "ui/CBackdropGenerator.hpp" #include "ui/CBackdropGenerator.hpp"
#include "ui/FrameScript.hpp" #include "ui/FrameScript.hpp"
#include "ui/FrameXML.hpp" #include "ui/FrameXML.hpp"
#include "ui/Util.hpp"
#include "ui/simple/CSimpleFont.hpp" #include "ui/simple/CSimpleFont.hpp"
#include "ui/simple/CSimpleFontString.hpp" #include "ui/simple/CSimpleFontString.hpp"
#include "ui/simple/CSimpleFrame.hpp" #include "ui/simple/CSimpleFrame.hpp"
#include "ui/simple/CSimpleTexture.hpp" #include "ui/simple/CSimpleTexture.hpp"
#include "util/Lua.hpp" #include "util/Lua.hpp"
#include "util/StringTo.hpp"
#include "util/Unimplemented.hpp" #include "util/Unimplemented.hpp"
#include <storm/Memory.hpp> #include <storm/Memory.hpp>
#include <algorithm> #include <algorithm>

View File

@ -1,11 +1,11 @@
#include "ui/simple/CSimpleHTML.hpp" #include "ui/simple/CSimpleHTML.hpp"
#include "ui/Util.hpp"
#include "ui/simple/CSimpleFontString.hpp" #include "ui/simple/CSimpleFontString.hpp"
#include "ui/simple/CSimpleFontedFrameFont.hpp" #include "ui/simple/CSimpleFontedFrameFont.hpp"
#include "ui/simple/CSimpleHTMLScript.hpp" #include "ui/simple/CSimpleHTMLScript.hpp"
#include "ui/simple/CSimpleTop.hpp" #include "ui/simple/CSimpleTop.hpp"
#include "util/CStatus.hpp" #include "util/CStatus.hpp"
#include "util/SFile.hpp" #include "util/SFile.hpp"
#include "util/StringTo.hpp"
#include <common/XML.hpp> #include <common/XML.hpp>
int32_t CSimpleHTML::s_metatable; int32_t CSimpleHTML::s_metatable;

View File

@ -1,10 +1,10 @@
#include "ui/simple/CSimpleSlider.hpp" #include "ui/simple/CSimpleSlider.hpp"
#include "math/Utils.hpp" #include "math/Utils.hpp"
#include "ui/LoadXML.hpp" #include "ui/LoadXML.hpp"
#include "ui/Util.hpp"
#include "ui/simple/CSimpleSliderScript.hpp" #include "ui/simple/CSimpleSliderScript.hpp"
#include "ui/simple/CSimpleTexture.hpp" #include "ui/simple/CSimpleTexture.hpp"
#include "util/Lua.hpp" #include "util/Lua.hpp"
#include "util/StringTo.hpp"
#include <common/XML.hpp> #include <common/XML.hpp>
#include <tempest/Math.hpp> #include <tempest/Math.hpp>

View File

@ -1,10 +1,10 @@
#include "ui/simple/CSimpleStatusBar.hpp" #include "ui/simple/CSimpleStatusBar.hpp"
#include "ui/LoadXML.hpp" #include "ui/LoadXML.hpp"
#include "ui/Util.hpp"
#include "ui/simple/CSimpleStatusBarScript.hpp" #include "ui/simple/CSimpleStatusBarScript.hpp"
#include "ui/simple/CSimpleTexture.hpp" #include "ui/simple/CSimpleTexture.hpp"
#include "util/CStatus.hpp" #include "util/CStatus.hpp"
#include "util/Lua.hpp" #include "util/Lua.hpp"
#include "util/StringTo.hpp"
#include <common/XML.hpp> #include <common/XML.hpp>
int32_t CSimpleStatusBar::s_metatable; int32_t CSimpleStatusBar::s_metatable;

View File

@ -9,6 +9,7 @@
#include "ui/Util.hpp" #include "ui/Util.hpp"
#include "ui/simple/CSimpleFrame.hpp" #include "ui/simple/CSimpleFrame.hpp"
#include "ui/simple/CSimpleTextureScript.hpp" #include "ui/simple/CSimpleTextureScript.hpp"
#include "util/StringTo.hpp"
#include <algorithm> #include <algorithm>
#include <climits> #include <climits>
#include <common/XML.hpp> #include <common/XML.hpp>

View File

@ -1,8 +1,8 @@
#include "ui/simple/CSimpleTextureScript.hpp" #include "ui/simple/CSimpleTextureScript.hpp"
#include "ui/Types.hpp" #include "ui/Types.hpp"
#include "ui/Util.hpp"
#include "ui/simple/CSimpleTexture.hpp" #include "ui/simple/CSimpleTexture.hpp"
#include "util/Lua.hpp" #include "util/Lua.hpp"
#include "util/StringTo.hpp"
#include "util/Unimplemented.hpp" #include "util/Unimplemented.hpp"
#include <cstdint> #include <cstdint>

161
src/util/StringTo.cpp Normal file
View File

@ -0,0 +1,161 @@
#include "util/StringTo.hpp"
#include "util/Lua.hpp"
#include <storm/String.hpp>
uint64_t StringToClickAction(const char* actionStr) {
if (!actionStr || !*actionStr) {
return 0;
}
if (!SStrCmpI(actionStr, "LeftButtonDown", STORM_MAX_STR)) {
return 1;
}
if (!SStrCmpI(actionStr, "LeftButtonUp", STORM_MAX_STR)) {
return 0x80000000;
}
if (!SStrCmpI(actionStr, "MiddleButtonDown", STORM_MAX_STR)) {
return 2;
}
if (!SStrCmpI(actionStr, "MiddleButtonUp", STORM_MAX_STR)) {
return 0;
}
if (!SStrCmpI(actionStr, "RightButtonDown", STORM_MAX_STR)) {
return 4;
}
if (!SStrCmpI(actionStr, "RightButtonUp", STORM_MAX_STR)) {
return 0;
}
// TODO remaining buttons
return 0;
}
int32_t StringToBOOL(const char* str) {
return StringToBOOL(str, 0);
}
bool StringToBOOL(const char* str, int32_t def) {
if (!str) {
return def;
}
switch (*str) {
case '0':
case 'F':
case 'N':
case 'f':
case 'n':
return false;
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case 'T':
case 'Y':
case 't':
case 'y':
return true;
default:
if (!SStrCmpI(str, "off", 0x7FFFFFFFu) || !SStrCmpI(str, "disabled", 0x7FFFFFFFu)) {
return false;
}
if (!SStrCmpI(str, "on", 0x7FFFFFFFu) || !SStrCmpI(str, "enabled", 0x7FFFFFFFu)) {
return true;
}
return def;
}
}
bool StringToBOOL(lua_State* L, int32_t idx, int32_t def) {
bool result;
const char* str;
switch (lua_type(L, idx)) {
case LUA_TNIL:
result = false;
break;
case LUA_TBOOLEAN:
result = lua_toboolean(L, idx);
break;
case LUA_TNUMBER:
result = lua_tonumber(L, idx) != 0;
break;
case LUA_TSTRING:
str = lua_tostring(L, idx);
result = StringToBOOL(str, def);
break;
default:
result = def;
break;
}
return result;
}
int32_t StringToDrawLayer(const char* string, int32_t& layer) {
struct drawlayer {
int32_t layer;
const char* string;
};
static drawlayer array_drawlayer[5] = {
{ 0, "BACKGROUND" },
{ 1, "BORDER" },
{ 2, "ARTWORK" },
{ 3, "OVERLAY" },
{ 4, "HIGHLIGHT" }
};
for (int32_t i = 0; i < 5; i++) {
if (!SStrCmpI(array_drawlayer[i].string, string, 0x7FFFFFFFu)) {
layer = array_drawlayer[i].layer;
return 1;
}
}
return 0;
}
int32_t StringToJustify(const char* string, uint32_t& justify) {
struct JustifyEntry {
uint32_t value;
const char* string;
};
static JustifyEntry justifyMap[6] = {
{ 0x1, "LEFT" },
{ 0x2, "CENTER" },
{ 0x4, "RIGHT" },
{ 0x8, "TOP" },
{ 0x10, "MIDDLE" },
{ 0x20, "BOTTOM" }
};
for (int32_t i = 0; i < 5; i++) {
if (!SStrCmpI(justifyMap[i].string, string, 0x7FFFFFFFu)) {
justify = justifyMap[i].value;
return 1;
}
}
return 0;
}

20
src/util/StringTo.hpp Normal file
View File

@ -0,0 +1,20 @@
#ifndef UTIL_STRING_TO_HPP
#define UTIL_STRING_TO_HPP
#include <cstdint>
struct lua_State;
uint64_t StringToClickAction(const char* actionStr);
int32_t StringToBOOL(const char*);
bool StringToBOOL(const char*, int32_t);
bool StringToBOOL(lua_State*, int32_t, int32_t);
int32_t StringToDrawLayer(const char*, int32_t&);
int32_t StringToJustify(const char*, uint32_t&);
#endif