From eb73749f697f9e3cd24babec0e4f8a79e3b1990d Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 19 Dec 2010 00:11:37 -0500 Subject: [PATCH] added Engine::Quad::setColor() and ag::quad::setColor() --- Engine.cc | 5 +++++ Engine.h | 9 +++++++++ ag.cc | 23 +++++++++++++++++++++++ ag.h | 1 + tests/managed_objects.lua | 4 +++- 5 files changed, 41 insertions(+), 1 deletion(-) diff --git a/Engine.cc b/Engine.cc index f049ee0..b13b478 100644 --- a/Engine.cc +++ b/Engine.cc @@ -1345,6 +1345,7 @@ Engine::Quad::Quad(float cx, float cy, float cz, m_offset = 0.0f; m_texture = 0; m_enable_blending = false; + m_color[0] = m_color[1] = m_color[2] = m_color[3] = 1.0f; dCROSS(m_normal, =, m_v1, m_v2); render(); } @@ -1375,6 +1376,10 @@ int Engine::Quad::render() { glBindTexture(GL_TEXTURE_2D, m_texture); } + else + { + glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, &m_color[0]); + } if (m_enable_blending) { glEnable(GL_BLEND); diff --git a/Engine.h b/Engine.h index 4f001ca..c21e36a 100644 --- a/Engine.h +++ b/Engine.h @@ -183,6 +183,14 @@ class Engine m_enable_blending = b; render(); } + void setColor(float r, float g, float b, float a) + { + m_color[0] = r; + m_color[1] = g; + m_color[2] = b; + m_color[3] = a; + render(); + } protected: dVector3 m_center; dVector3 m_v1, m_v2, m_normal; @@ -191,6 +199,7 @@ class Engine float m_offset; int m_texture; bool m_enable_blending; + float m_color[4]; }; Engine(const std::string & path, AV & av); diff --git a/ag.cc b/ag.cc index b0535dc..52d19aa 100644 --- a/ag.cc +++ b/ag.cc @@ -736,6 +736,8 @@ fail: lua_setfield(L, -2, "id"); lua_pushcfunction(L, quad::setBlending); lua_setfield(L, -2, "setBlending"); + lua_pushcfunction(L, quad::setColor); + lua_setfield(L, -2, "setColor"); lua_pushcfunction(L, quad::setOffset); lua_setfield(L, -2, "setOffset"); lua_pushcfunction(L, quad::setTexture); @@ -1660,6 +1662,27 @@ fail: return 0; } + int setColor(lua_State * L) + { + int argc = lua_gettop(L); + if (argc == 5 && lua_istable(L, 1) + && lua_isnumber(L, 2) + && lua_isnumber(L, 3) + && lua_isnumber(L, 4) + && lua_isnumber(L, 5)) + { + Engine::Quad * q = getQuad(L, 1); + if (q != NULL) + { + q->setColor(lua_tonumber(L, 2), + lua_tonumber(L, 3), + lua_tonumber(L, 4), + lua_tonumber(L, 5)); + } + } + return 0; + } + int setOffset(lua_State * L) { int argc = lua_gettop(L); diff --git a/ag.h b/ag.h index 9ef0884..4fe88c3 100644 --- a/ag.h +++ b/ag.h @@ -102,6 +102,7 @@ namespace ag Engine::Quad * getQuad(lua_State * L, int index); int setBlending(lua_State * L); + int setColor(lua_State * L); int setOffset(lua_State * L); int setTexture(lua_State * L); int setVisible(lua_State * L); diff --git a/tests/managed_objects.lua b/tests/managed_objects.lua index b7effa6..48c9eab 100644 --- a/tests/managed_objects.lua +++ b/tests/managed_objects.lua @@ -58,8 +58,10 @@ function key_down_event(key) elseif (key == "minus") then ag.setCursorVisible(not ag.getCursorVisible()) elseif (key == "d") then - q = ag.createQuad(3, 3, 0, 1, 0, 0, 0, 1, 0) + q = ag.createQuad(0.5, 3, 0, 1, 0, 0, 0, 1, 0) + q:setColor(0, 0, 1, 0.6) q:setOffset(1) + q:setBlending(true) end end