Skip to content

Commit

Permalink
ObjectRef: Add add_velocity() (#3208)
Browse files Browse the repository at this point in the history
Allow changing the velocity of objects relatively to their current velocity
  • Loading branch information
HybridDog authored and SmallJoker committed Mar 31, 2018
1 parent 0a8ca59 commit 93eb079
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 1 deletion.
2 changes: 1 addition & 1 deletion builtin/game/falling.lua
Expand Up @@ -39,7 +39,7 @@ core.register_entity(":__builtin:falling_node", {

on_activate = function(self, staticdata)
self.object:set_armor_groups({immortal = 1})

local ds = core.deserialize(staticdata)
if ds and ds.node then
self:set_node(ds.node, ds.meta)
Expand Down
4 changes: 4 additions & 0 deletions doc/lua_api.txt
Expand Up @@ -4029,6 +4029,10 @@ This is basically a reference to a C++ `ServerActiveObject`
##### LuaEntitySAO-only (no-op for other objects)
* `set_velocity(vel)`
* `vel` is a vector, e.g. `{x=0.0, y=2.3, z=1.0}`
* `add_velocity(vel)`
* `vel` is a vector, e.g. `{x=0.0, y=2.3, z=1.0}`
* In comparison to using get_velocity, adding the velocity and then using
set_velocity, add_velocity is supposed to avoid synchronization problems.
* `get_velocity()`: returns the velocity, a vector
* `set_acceleration(acc)`
* `acc` is a vector
Expand Down
4 changes: 4 additions & 0 deletions src/content_sao.h
Expand Up @@ -121,6 +121,10 @@ class LuaEntitySAO : public UnitSAO
s16 getHP() const;
/* LuaEntitySAO-specific */
void setVelocity(v3f velocity);
void addVelocity(v3f velocity)
{
m_velocity += velocity;
}
v3f getVelocity();
void setAcceleration(v3f acceleration);
v3f getAcceleration();
Expand Down
15 changes: 15 additions & 0 deletions src/script/lua_api/l_object.cpp
Expand Up @@ -850,6 +850,20 @@ int ObjectRef::l_set_velocity(lua_State *L)
return 0;
}

// add_velocity(self, {x=num, y=num, z=num})
int ObjectRef::l_add_velocity(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
LuaEntitySAO *co = getluaobject(ref);
if (!co)
return 0;
v3f pos = checkFloatPos(L, 2);
// Do it
co->addVelocity(pos);
return 0;
}

// get_velocity(self)
int ObjectRef::l_get_velocity(lua_State *L)
{
Expand Down Expand Up @@ -1840,6 +1854,7 @@ const luaL_Reg ObjectRef::methods[] = {
luamethod(ObjectRef, get_nametag_attributes),
// LuaEntitySAO-only
luamethod_aliased(ObjectRef, set_velocity, setvelocity),
luamethod(ObjectRef, add_velocity),
luamethod_aliased(ObjectRef, get_velocity, getvelocity),
luamethod_aliased(ObjectRef, set_acceleration, setacceleration),
luamethod_aliased(ObjectRef, get_acceleration, getacceleration),
Expand Down
3 changes: 3 additions & 0 deletions src/script/lua_api/l_object.h
Expand Up @@ -161,6 +161,9 @@ class ObjectRef : public ModApiBase {
// set_velocity(self, {x=num, y=num, z=num})
static int l_set_velocity(lua_State *L);

// add_velocity(self, {x=num, y=num, z=num})
static int l_add_velocity(lua_State *L);

// get_velocity(self)
static int l_get_velocity(lua_State *L);

Expand Down

0 comments on commit 93eb079

Please sign in to comment.