int luacon_partread(lua_State* l) { int tempinteger, i = cIndex; float tempfloat; ByteString key = luaL_optstring(l, 2, ""); CommandInterface::FormatType format; int offset = luacon_ci->GetPropertyOffset(key, format); if (i < 0 || i >= NPART) return luaL_error(l, "Out of range"); if (offset == -1) { if (!key.compare("id")) { lua_pushnumber(l, i); return 1; } return luaL_error(l, "Invalid property"); } switch(format) { case CommandInterface::FormatInt: case CommandInterface::FormatElement: tempinteger = *((int*)(((unsigned char*)&luacon_sim->parts[i])+offset)); lua_pushnumber(l, tempinteger); break; case CommandInterface::FormatFloat: tempfloat = *((float*)(((unsigned char*)&luacon_sim->parts[i])+offset)); lua_pushnumber(l, tempfloat); break; default: break; } return 1; }
int luatpt_get_property(lua_State* l) { ByteString prop = luaL_optstring(l, 1, ""); int i = luaL_optint(l, 2, 0); //x coord or particle index, depending on arguments int y = luaL_optint(l, 3, -1); if (y!=-1 && y<YRES && y>=0 && i < XRES && i>=0) { int r = luacon_sim->pmap[y][i]; if (!r) { r = luacon_sim->photons[y][i]; if (!r) { if (!prop.compare("type")) { lua_pushinteger(l, 0); return 1; } return luaL_error(l, "Particle does not exist"); } } i = ID(r); } else if (y != -1) return luaL_error(l, "Coordinates out of range (%d,%d)", i, y); if (i < 0 || i >= NPART) return luaL_error(l, "Invalid particle ID '%d'", i); if (luacon_sim->parts[i].type) { int tempinteger; float tempfloat; CommandInterface::FormatType format; int offset = luacon_ci->GetPropertyOffset(prop, format); if (offset == -1) { if (!prop.compare("id")) { lua_pushnumber(l, i); return 1; } else return luaL_error(l, "Invalid property"); } switch(format) { case CommandInterface::FormatInt: case CommandInterface::FormatElement: tempinteger = *((int*)(((unsigned char*)&luacon_sim->parts[i])+offset)); lua_pushnumber(l, tempinteger); break; case CommandInterface::FormatFloat: tempfloat = *((float*)(((unsigned char*)&luacon_sim->parts[i])+offset)); lua_pushnumber(l, tempfloat); break; default: break; } return 1; } else if (!prop.compare("type")) { lua_pushinteger(l, 0); return 1; } return luaL_error(l, "Particle does not exist"); }