Loading...
Searching...
No Matches
8#ifndef OptionsBinding_H
9#define OptionsBinding_H
16#define OPTIONAL_RETURN_SELF(option_index) \
17 if (lua_isboolean(L, option_index) && lua_toboolean(L, option_index)) { \
21#define FLOAT_INTERFACE(func_name, member, valid) \
22 static int func_name(T* p, lua_State* L) \
24 int original_top = lua_gettop(L); \
25 lua_pushnumber(L, p->m_f##member); \
26 lua_pushnumber(L, p->m_Speedf##member); \
27 if (lua_isnumber(L, 1) && original_top >= 1) { \
30 luaL_error(L, "Invalid value %f", v); \
34 if (original_top >= 2 && lua_isnumber(L, 2)) { \
35 p->m_Speedf##member = FArgGTEZero(L, 2); \
37 OPTIONAL_RETURN_SELF(original_top); \
40#define SECFLOAT_INTERFACE(func_name, member, valid) \
41 static int func_name(T* p, lua_State* L) \
43 int original_top = lua_gettop(L); \
44 lua_pushnumber(L, p->m_f##member); \
45 lua_pushnumber(L, p->m_Speedf##member); \
46 if (lua_isnumber(L, 1) && original_top >= 1) { \
47 if (DLMAN->InGameplay()) { \
48 Locator::getLogger()->warn( \
49 "Attempted to set mod illegally - {}", #member); \
50 OPTIONAL_RETURN_SELF(original_top); \
55 luaL_error(L, "Invalid value %f", v); \
59 if (original_top >= 2 && lua_isnumber(L, 2)) { \
60 if (DLMAN->InGameplay()) { \
61 Locator::getLogger()->warn( \
62 "Attempted to set mod illegally - {}", #member); \
63 OPTIONAL_RETURN_SELF(original_top); \
66 p->m_Speedf##member = FArgGTEZero(L, 2); \
68 OPTIONAL_RETURN_SELF(original_top); \
71#define FLOAT_NO_SPEED_INTERFACE(func_name, member, valid) \
72 static int func_name(T* p, lua_State* L) \
74 int original_top = lua_gettop(L); \
75 lua_pushnumber(L, p->m_f##member); \
76 if (lua_isnumber(L, 1) && original_top >= 1) { \
79 luaL_error(L, "Invalid value %f", v); \
83 OPTIONAL_RETURN_SELF(original_top); \
86#define INT_INTERFACE(func_name, member) \
87 static int func_name(T* p, lua_State* L) \
89 int original_top = lua_gettop(L); \
90 lua_pushnumber(L, p->m_##member); \
91 if (lua_isnumber(L, 1) && original_top >= 1) { \
92 p->m_##member = IArg(1); \
94 OPTIONAL_RETURN_SELF(original_top); \
99#define BOOL_INTERFACE(func_name, member) \
100 static int func_name(T* p, lua_State* L) \
102 int original_top = lua_gettop(L); \
103 lua_pushboolean(L, p->m_b##member); \
104 if (lua_isboolean(L, 1) && original_top >= 1) { \
105 p->m_b##member = BArg(1); \
107 if (original_top >= 2 && lua_isboolean(L, 2)) { \
113#define SECBOOL_INTERFACE(func_name, member) \
114 static int func_name(T* p, lua_State* L) \
116 int original_top = lua_gettop(L); \
117 lua_pushboolean(L, p->m_b##member); \
118 if (lua_isboolean(L, 1) && original_top >= 1) { \
119 if (DLMAN->InGameplay()) { \
120 Locator::getLogger()->warn( \
121 "Attempted to set mod illegally - {}", #member); \
125 p->m_b##member = BArg(1); \
127 if (original_top >= 2 && lua_isboolean(L, 2)) { \
133#define ENUM_INTERFACE(func_name, member, enum_name) \
134 static int func_name(T* p, lua_State* L) \
136 int original_top = lua_gettop(L); \
137 Enum::Push(L, p->m_##member); \
138 if (!lua_isnil(L, 1) && original_top >= 1) { \
139 p->m_##member = Enum::Check<enum_name>(L, 1); \
141 OPTIONAL_RETURN_SELF(original_top); \
144#define SECENUM_INTERFACE(func_name, member, enum_name) \
145 static int func_name(T* p, lua_State* L) \
147 int original_top = lua_gettop(L); \
148 Enum::Push(L, p->m_##member); \
149 if (!lua_isnil(L, 1) && original_top >= 1) { \
150 if (DLMAN->InGameplay()) { \
151 Locator::getLogger()->warn( \
152 "Attempted to set mod illegally - {}", #enum_name); \
153 OPTIONAL_RETURN_SELF(original_top); \
156 p->m_##member = Enum::Check<enum_name>(L, 1); \
158 OPTIONAL_RETURN_SELF(original_top); \
162#define FLOAT_TABLE_INTERFACE(func_name, member, valid) \
163 static int func_name(T* p, lua_State* L) \
165 int original_top = lua_gettop(L); \
166 lua_createtable(L, p->m_##member.size(), 0); \
167 for (size_t n = 0; n < p->m_##member.size(); ++n) { \
168 lua_pushnumber(L, p->m_##member[n]); \
169 lua_rawseti(L, -2, n + 1); \
171 if (lua_istable(L, 1) && original_top >= 1) { \
172 size_t size = lua_objlen(L, 1); \
174 p->m_##member.clear(); \
175 p->m_##member.reserve(size); \
176 for (size_t n = 1; n <= size; ++n) { \
177 lua_pushnumber(L, n); \
178 lua_gettable(L, 1); \
179 float v = FArg(-1); \
180 p->m_##member.push_back(v); \
185 OPTIONAL_RETURN_SELF(original_top); \