diff --git a/data/mods/default/init.lua b/data/mods/default/init.lua index c0df7c514..ac3ef1b8f 100644 --- a/data/mods/default/init.lua +++ b/data/mods/default/init.lua @@ -200,8 +200,11 @@ -- - set_hp(hp): set number of hitpoints (2 * number of hearts) -- LuaEntitySAO-only: (no-op for other objects) -- - setvelocity({x=num, y=num, z=num}) +-- - getvelocity() -> {x=num, y=num, z=num} -- - setacceleration({x=num, y=num, z=num}) -- - getacceleration() -> {x=num, y=num, z=num} +-- - setyaw(radians) +-- - getyaw() -> radians -- - settexturemod(mod) -- - setsprite(p={x=0,y=0}, num_frames=1, framelength=0.2, -- - select_horiz_by_yawpitch=false) diff --git a/src/content_sao.cpp b/src/content_sao.cpp index e9e6543d9..f195b16bd 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -1698,6 +1698,11 @@ void LuaEntitySAO::setVelocity(v3f velocity) m_velocity = velocity; } +v3f LuaEntitySAO::getVelocity() +{ + return m_velocity; +} + void LuaEntitySAO::setAcceleration(v3f acceleration) { m_acceleration = acceleration; @@ -1708,6 +1713,16 @@ v3f LuaEntitySAO::getAcceleration() return m_acceleration; } +void LuaEntitySAO::setYaw(float yaw) +{ + m_yaw = yaw; +} + +float LuaEntitySAO::getYaw() +{ + return m_yaw; +} + void LuaEntitySAO::setTextureMod(const std::string &mod) { std::ostringstream os(std::ios::binary); diff --git a/src/content_sao.h b/src/content_sao.h index d56fdb709..c2bb9c3f5 100644 --- a/src/content_sao.h +++ b/src/content_sao.h @@ -213,8 +213,11 @@ public: float getMinimumSavedMovement(); /* LuaEntitySAO-specific */ void setVelocity(v3f velocity); + v3f getVelocity(); void setAcceleration(v3f acceleration); v3f getAcceleration(); + void setYaw(float yaw); + float getYaw(); void setTextureMod(const std::string &mod); void setSprite(v2s16 p, int num_frames, float framelength, bool select_horiz_by_yawpitch); diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp index 9803470c3..401de8ade 100644 --- a/src/scriptapi.cpp +++ b/src/scriptapi.cpp @@ -1928,6 +1928,18 @@ private: return 0; } + // getvelocity(self) + static int l_getvelocity(lua_State *L) + { + ObjectRef *ref = checkobject(L, 1); + LuaEntitySAO *co = getluaobject(ref); + if(co == NULL) return 0; + // Do it + v3f v = co->getVelocity(); + pushFloatPos(L, v); + return 1; + } + // setacceleration(self, {x=num, y=num, z=num}) static int l_setacceleration(lua_State *L) { @@ -1953,6 +1965,31 @@ private: return 1; } + // setyaw(self, radians) + static int l_setyaw(lua_State *L) + { + ObjectRef *ref = checkobject(L, 1); + LuaEntitySAO *co = getluaobject(ref); + if(co == NULL) return 0; + // pos + float yaw = luaL_checknumber(L, 2) * core::RADTODEG; + // Do it + co->setYaw(yaw); + return 0; + } + + // getyaw(self) + static int l_getyaw(lua_State *L) + { + ObjectRef *ref = checkobject(L, 1); + LuaEntitySAO *co = getluaobject(ref); + if(co == NULL) return 0; + // Do it + float yaw = co->getYaw() * core::DEGTORAD; + lua_pushnumber(L, yaw); + return 1; + } + // settexturemod(self, mod) static int l_settexturemod(lua_State *L) { @@ -2209,8 +2246,11 @@ const luaL_reg ObjectRef::methods[] = { method(ObjectRef, get_hp), // LuaEntitySAO-only method(ObjectRef, setvelocity), + method(ObjectRef, getvelocity), method(ObjectRef, setacceleration), method(ObjectRef, getacceleration), + method(ObjectRef, setyaw), + method(ObjectRef, getyaw), method(ObjectRef, settexturemod), method(ObjectRef, setsprite), method(ObjectRef, get_entity_name),