From 6c722df0c6f8bb1d92cdf9d831932510cb51a282 Mon Sep 17 00:00:00 2001 From: Kyzentun Date: Sat, 3 Jan 2015 05:56:52 -0700 Subject: [PATCH] Made loop and polygonal private so that setting them would trip the dirty flag. --- src/ActorMultiVertex.cpp | 13 --------- src/ActorMultiVertex.h | 2 -- src/CubicSpline.cpp | 62 +++++++++++++++++++++++++--------------- src/CubicSpline.h | 12 ++++++-- 4 files changed, 48 insertions(+), 41 deletions(-) diff --git a/src/ActorMultiVertex.cpp b/src/ActorMultiVertex.cpp index 5d3c75b00b..e93ba2a21e 100644 --- a/src/ActorMultiVertex.cpp +++ b/src/ActorMultiVertex.cpp @@ -65,7 +65,6 @@ ActorMultiVertex::ActorMultiVertex() _TextureMode = TextureMode_Modulate; _using_spline= false; _spline.redimension(3); - _spline.loop= false; _spline.m_owned_by_actor= true; } @@ -252,10 +251,6 @@ void ActorMultiVertex::SplineSolve() case DrawMode_LineStrip: { float conversion= static_cast(_spline.size()-1) / static_cast(num_verts-1); - if(_spline.loop) - { - conversion= static_cast(_spline.size()) / static_cast(num_verts-1); - } for(size_t i= 0; i < num_verts; ++i) { float t= i * conversion; @@ -735,12 +730,6 @@ public: return 1; } DEFINE_METHOD(GetUseSpline, GetUseSpline()); - DEFINE_METHOD(SplineGetLoop, SplineGetLoop()); - static int SplineSetLoop(T* p, lua_State* L) - { - p->SplineSetLoop(lua_toboolean(L, 1)); - COMMON_RETURN_SELF; - } static int SplineSize(T* p, lua_State* L) { lua_pushnumber(L, p->SplineSize()); @@ -799,8 +788,6 @@ public: ADD_METHOD(GetUseSpline); ADD_METHOD(SetUseSpline); - ADD_METHOD(SplineGetLoop); - ADD_METHOD(SplineSetLoop); ADD_METHOD(SplineSize); ADD_METHOD(SplineResize); ADD_METHOD(SplineSetPoint); diff --git a/src/ActorMultiVertex.h b/src/ActorMultiVertex.h index 60a322f811..3742bee269 100644 --- a/src/ActorMultiVertex.h +++ b/src/ActorMultiVertex.h @@ -106,8 +106,6 @@ public: bool GetUseSpline(); void SetUseSpline(bool use); - bool SplineGetLoop() { return _spline.loop; } - void SplineSetLoop(bool loop) { _spline.loop= loop; } void SplineSetPoint(size_t i, float x , float y , float z); void SplineResize(size_t s); size_t SplineSize(); diff --git a/src/CubicSpline.cpp b/src/CubicSpline.cpp index c500060ec8..2badfe4646 100644 --- a/src/CubicSpline.cpp +++ b/src/CubicSpline.cpp @@ -526,13 +526,13 @@ void CubicSplineN::solve() { \ spline->solvent(); \ } - if(polygonal) + if(m_polygonal) { SOLVE_LOOP(solve_polygonal); } else { - if(loop) + if(m_loop) { SOLVE_LOOP(solve_looped); } @@ -551,7 +551,7 @@ void CubicSplineN::something(float t, vector& v) const \ for(spline_cont_t::const_iterator spline= m_splines.begin(); \ spline != m_splines.end(); ++spline) \ { \ - v.push_back(spline->something(t, loop)); \ + v.push_back(spline->something(t, m_loop)); \ } \ } @@ -647,6 +647,25 @@ size_t CubicSplineN::dimension() const return m_splines.size(); } +// m_dirty is set before the member so that the set_dirty that is created +// can actually be used to set the dirty flag. -Kyz +#define SET_GET_MEM(member, name) \ +void CubicSplineN::set_##name(bool b) \ +{ \ + m_dirty= true; \ + member= b; \ +} \ +bool CubicSplineN::get_##name() \ +{ \ + return member; \ +} + +SET_GET_MEM(m_loop, loop); +SET_GET_MEM(m_polygonal, polygonal); +SET_GET_MEM(m_dirty, dirty); + +#undef SET_GET_MEM + #include "LuaBinding.h" struct LunaCubicSplineN : Luna @@ -780,7 +799,7 @@ struct LunaCubicSplineN : Luna } static int get_max_t(T* p, lua_State* L) { - lua_pushnumber(L, p->size() - 1 + p->loop); + lua_pushnumber(L, p->size() - 1 + p->get_loop()); return 1; } static int resize(T* p, lua_State* L) @@ -823,26 +842,21 @@ struct LunaCubicSplineN : Luna lua_pushboolean(L, p->empty()); return 1; } - static int set_loop(T* p, lua_State* L) - { - p->loop= lua_toboolean(L, 1); - COMMON_RETURN_SELF; - } - static int get_loop(T* p, lua_State* L) - { - lua_pushboolean(L, p->loop); - return 1; - } - static int set_polygonal(T* p, lua_State* L) - { - p->polygonal= lua_toboolean(L, 1); - COMMON_RETURN_SELF; - } - static int get_polygonal(T* p, lua_State* L) - { - lua_pushboolean(L, p->polygonal); - return 1; +#define SET_GET_LUA(name) \ + static int set_##name(T* p, lua_State* L) \ + { \ + p->set_##name(lua_toboolean(L, 1)); \ + COMMON_RETURN_SELF; \ + } \ + static int get_##name(T* p, lua_State* L) \ + { \ + lua_pushboolean(L, p->get_##name()); \ + return 1; \ } + SET_GET_LUA(loop); + SET_GET_LUA(polygonal); + SET_GET_LUA(dirty); +#undef SET_GET_LUA static int destroy(T* p, lua_State* L) { if(p->m_owned_by_actor) @@ -875,6 +889,8 @@ struct LunaCubicSplineN : Luna ADD_METHOD(get_loop); ADD_METHOD(set_polygonal); ADD_METHOD(get_polygonal); + ADD_METHOD(set_dirty); + ADD_METHOD(get_dirty); ADD_METHOD(destroy); } }; diff --git a/src/CubicSpline.h b/src/CubicSpline.h index e09bd8a756..3cfdaec58d 100644 --- a/src/CubicSpline.h +++ b/src/CubicSpline.h @@ -38,7 +38,7 @@ private: struct CubicSplineN { CubicSplineN() - :loop(false), polygonal(false), m_owned_by_actor(false), m_dirty(true) + :m_owned_by_actor(false), m_loop(false), m_polygonal(false), m_dirty(true) {} void solve(); void evaluate(float t, vector& v) const; @@ -58,12 +58,18 @@ struct CubicSplineN size_t dimension() const; bool empty() const; typedef vector spline_cont_t; - bool loop; - bool polygonal; + void set_loop(bool l); + bool get_loop(); + void set_polygonal(bool p); + bool get_polygonal(); + void set_dirty(bool d); + bool get_dirty(); bool m_owned_by_actor; void PushSelf(lua_State* L); private: + bool m_loop; + bool m_polygonal; bool m_dirty; spline_cont_t m_splines; };