Made loop and polygonal private so that setting them would trip the dirty flag.

This commit is contained in:
Kyzentun
2015-01-03 05:56:52 -07:00
parent dd72b368ce
commit 6c722df0c6
4 changed files with 48 additions and 41 deletions
-13
View File
@@ -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<float>(_spline.size()-1) / static_cast<float>(num_verts-1);
if(_spline.loop)
{
conversion= static_cast<float>(_spline.size()) / static_cast<float>(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);
-2
View File
@@ -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();
+39 -23
View File
@@ -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<float>& 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<CubicSplineN>
@@ -780,7 +799,7 @@ struct LunaCubicSplineN : Luna<CubicSplineN>
}
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<CubicSplineN>
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<CubicSplineN>
ADD_METHOD(get_loop);
ADD_METHOD(set_polygonal);
ADD_METHOD(get_polygonal);
ADD_METHOD(set_dirty);
ADD_METHOD(get_dirty);
ADD_METHOD(destroy);
}
};
+9 -3
View File
@@ -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<float>& v) const;
@@ -58,12 +58,18 @@ struct CubicSplineN
size_t dimension() const;
bool empty() const;
typedef vector<CubicSpline> 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;
};