=== next
Get the next object in the object chain.
+When called without an object, returns the first object in the object chain.
+When called with an object, an optional boolean parameter can be given. When
+it is true, and the object is on the map, the next object at the same location
+is returned. Otherwise the normal object chain is followed.
Example:
- local o = obj.at(x, y);
- local o2 = o:next();
+ local first = obj.next();
+ local second = first:next();
+ local o_at_xy = obj.at(x, y);
+ local next_at_xy = o_at_xy:next(true);
=== totable
/* Get the next object in the object chain */
/* local o = obj.at(x, y);
- local o2 = o:next();
+ local o2 = o:next(true);
+ local firstobj = obj.next();
*/
static int
l_obj_nextobj(lua_State *L)
{
- struct _lua_obj *lo = l_obj_check(L, 1);
+ int argc = lua_gettop(L);
+
+ if (argc == 0) {
+ (void) l_obj_push(L, fobj);
+ } else {
+ struct _lua_obj *lo = l_obj_check(L, 1);
+ boolean use_nexthere = FALSE;
- if (lo && lo->obj)
- (void) l_obj_push(L, lo->obj->where == OBJ_FLOOR ? lo->obj->nexthere : lo->obj->nobj);
+ if (argc == 2)
+ use_nexthere = lua_toboolean(L, 2);
+
+ if (lo && lo->obj)
+ (void) l_obj_push(L, (use_nexthere && lo->obj->where == OBJ_FLOOR)
+ ? lo->obj->nexthere
+ : lo->obj->nobj);
+ }
return 1;
}