Add ObjectRef:getvelocity(), ObjectRef:setyaw() and ObjectRef:getyaw()
authorPerttu Ahola <celeron55@gmail.com>
Mon, 2 Jan 2012 14:19:52 +0000 (16:19 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Mon, 2 Jan 2012 14:19:52 +0000 (16:19 +0200)
data/mods/default/init.lua
src/content_sao.cpp
src/content_sao.h
src/scriptapi.cpp

index c0df7c514945b1ee6823b76e3ec06dd713caac13..ac3ef1b8f666f89a6136a7e26a332303664cf5fa 100644 (file)
 -- - 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)
index e9e6543d905241311e5535dbeddf3440730e33c7..f195b16bd41e79385dc7832a4a20f8e2d66c1c8a 100644 (file)
@@ -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);
index d56fdb7095dcac710a2858b727d74a02f10ad8bd..c2bb9c3f5148abcc9824a8d5071918f715542b6e 100644 (file)
@@ -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);
index 9803470c3fcaa3b0e91efc22e147c6e5821f9e7a..401de8adeb477f25b0323d7e07b0a213adef0111 100644 (file)
@@ -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),