forked from Mirrorlandia_minetest/minetest
ObjectRef: Add add_velocity() (#3208)
Allow changing the velocity of objects relatively to their current velocity
This commit is contained in:
parent
0a8ca59891
commit
93eb0794d6
@ -39,7 +39,7 @@ core.register_entity(":__builtin:falling_node", {
|
|||||||
|
|
||||||
on_activate = function(self, staticdata)
|
on_activate = function(self, staticdata)
|
||||||
self.object:set_armor_groups({immortal = 1})
|
self.object:set_armor_groups({immortal = 1})
|
||||||
|
|
||||||
local ds = core.deserialize(staticdata)
|
local ds = core.deserialize(staticdata)
|
||||||
if ds and ds.node then
|
if ds and ds.node then
|
||||||
self:set_node(ds.node, ds.meta)
|
self:set_node(ds.node, ds.meta)
|
||||||
|
@ -4029,6 +4029,10 @@ This is basically a reference to a C++ `ServerActiveObject`
|
|||||||
##### LuaEntitySAO-only (no-op for other objects)
|
##### LuaEntitySAO-only (no-op for other objects)
|
||||||
* `set_velocity(vel)`
|
* `set_velocity(vel)`
|
||||||
* `vel` is a vector, e.g. `{x=0.0, y=2.3, z=1.0}`
|
* `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
|
* `get_velocity()`: returns the velocity, a vector
|
||||||
* `set_acceleration(acc)`
|
* `set_acceleration(acc)`
|
||||||
* `acc` is a vector
|
* `acc` is a vector
|
||||||
|
@ -121,6 +121,10 @@ public:
|
|||||||
s16 getHP() const;
|
s16 getHP() const;
|
||||||
/* LuaEntitySAO-specific */
|
/* LuaEntitySAO-specific */
|
||||||
void setVelocity(v3f velocity);
|
void setVelocity(v3f velocity);
|
||||||
|
void addVelocity(v3f velocity)
|
||||||
|
{
|
||||||
|
m_velocity += velocity;
|
||||||
|
}
|
||||||
v3f getVelocity();
|
v3f getVelocity();
|
||||||
void setAcceleration(v3f acceleration);
|
void setAcceleration(v3f acceleration);
|
||||||
v3f getAcceleration();
|
v3f getAcceleration();
|
||||||
|
@ -850,6 +850,20 @@ int ObjectRef::l_set_velocity(lua_State *L)
|
|||||||
return 0;
|
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)
|
// get_velocity(self)
|
||||||
int ObjectRef::l_get_velocity(lua_State *L)
|
int ObjectRef::l_get_velocity(lua_State *L)
|
||||||
{
|
{
|
||||||
@ -1840,6 +1854,7 @@ const luaL_Reg ObjectRef::methods[] = {
|
|||||||
luamethod(ObjectRef, get_nametag_attributes),
|
luamethod(ObjectRef, get_nametag_attributes),
|
||||||
// LuaEntitySAO-only
|
// LuaEntitySAO-only
|
||||||
luamethod_aliased(ObjectRef, set_velocity, setvelocity),
|
luamethod_aliased(ObjectRef, set_velocity, setvelocity),
|
||||||
|
luamethod(ObjectRef, add_velocity),
|
||||||
luamethod_aliased(ObjectRef, get_velocity, getvelocity),
|
luamethod_aliased(ObjectRef, get_velocity, getvelocity),
|
||||||
luamethod_aliased(ObjectRef, set_acceleration, setacceleration),
|
luamethod_aliased(ObjectRef, set_acceleration, setacceleration),
|
||||||
luamethod_aliased(ObjectRef, get_acceleration, getacceleration),
|
luamethod_aliased(ObjectRef, get_acceleration, getacceleration),
|
||||||
|
@ -161,6 +161,9 @@ private:
|
|||||||
// set_velocity(self, {x=num, y=num, z=num})
|
// set_velocity(self, {x=num, y=num, z=num})
|
||||||
static int l_set_velocity(lua_State *L);
|
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)
|
// get_velocity(self)
|
||||||
static int l_get_velocity(lua_State *L);
|
static int l_get_velocity(lua_State *L);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user