| 1145 | } |
| 1146 | |
| 1147 | int GameObjectPool::SetAttr(lua_State* L)LNOEXCEPT |
| 1148 | { |
| 1149 | lua_rawgeti(L, 1, 2); // t(object) s(key) any(v) i(id) |
| 1150 | size_t id = static_cast<size_t>(lua_tonumber(L, -1)); |
| 1151 | lua_pop(L, 1); // t(object) s(key) any(v) |
| 1152 | |
| 1153 | GameObject* p = m_ObjectPool.Data(id); |
| 1154 | if (!p) |
| 1155 | return luaL_error(L, "invalid lstg object for '__newindex' meta operation."); |
| 1156 | |
| 1157 | // ��ѯ���� |
| 1158 | const char* key = luaL_checkstring(L, 2); |
| 1159 | |
| 1160 | // ��x,y���ػ����� |
| 1161 | if (key[0] == 'x' && key[1] == '\0') |
| 1162 | { |
| 1163 | p->x = luaL_checknumber(L, 3); |
| 1164 | return 0; |
| 1165 | } |
| 1166 | else if (key[0] == 'y' && key[1] == '\0') |
| 1167 | { |
| 1168 | p->y = luaL_checknumber(L, 3); |
| 1169 | return 0; |
| 1170 | } |
| 1171 | |
| 1172 | // һ������ |
| 1173 | switch (GameObjectPropertyHash(key)) |
| 1174 | { |
| 1175 | case GameObjectProperty::DX: |
| 1176 | return luaL_error(L, "property 'dx' is readonly."); |
| 1177 | case GameObjectProperty::DY: |
| 1178 | return luaL_error(L, "property 'dy' is readonly."); |
| 1179 | case GameObjectProperty::ROT: |
| 1180 | p->rot = luaL_checknumber(L, 3) * LDEGREE2RAD; |
| 1181 | break; |
| 1182 | case GameObjectProperty::OMIGA: |
| 1183 | p->omiga = luaL_checknumber(L, 3) * LDEGREE2RAD; |
| 1184 | break; |
| 1185 | case GameObjectProperty::TIMER: |
| 1186 | p->timer = luaL_checkinteger(L, 3); |
| 1187 | break; |
| 1188 | case GameObjectProperty::VX: |
| 1189 | p->vx = luaL_checknumber(L, 3); |
| 1190 | break; |
| 1191 | case GameObjectProperty::VY: |
| 1192 | p->vy = luaL_checknumber(L, 3); |
| 1193 | break; |
| 1194 | case GameObjectProperty::AX: |
| 1195 | p->ax = luaL_checknumber(L, 3); |
| 1196 | break; |
| 1197 | case GameObjectProperty::AY: |
| 1198 | p->ay = luaL_checknumber(L, 3); |
| 1199 | break; |
| 1200 | case GameObjectProperty::LAYER: |
| 1201 | p->layer = luaL_checknumber(L, 3); |
| 1202 | LIST_INSERT_SORT(p, Render, RenderListSortFunc); // ˢ��p����Ⱦ�㼶 |
| 1203 | LASSERT(m_pRenderListHeader.pRenderNext != nullptr); |
| 1204 | LASSERT(m_pRenderListTail.pRenderPrev != nullptr); |
no test coverage detected