lugre_spritelist_L.cpp

Go to the documentation of this file.
00001 #include "lugre_prefix.h"
00002 #include "lugre_scripting.h"
00003 #include "lugre_luabind.h"
00004 #include "lugre_spritelist.h"
00005 #include "lugre_ogrewrapper.h"
00006 
00007 extern "C" {
00008     #include "lua.h"
00009     #include "lauxlib.h"
00010     #include "lualib.h"
00011 }
00012 
00013 namespace Lugre {
00014 
00015     
00016 
00017 
00018 class cRenderGroup2D_L : public cLuaBind<cRenderGroup2D> { public:
00020         virtual void RegisterMethods    (lua_State *L) { PROFILE
00021             lua_register(L,"CreateRenderGroup2D",   &cRenderGroup2D_L::CreateRenderGroup2D);
00022 
00023             #define REGISTER_METHOD(methodname) mlMethod.push_back(make_luaL_reg(#methodname,&cRenderGroup2D_L::methodname));
00024 
00025             REGISTER_METHOD(Destroy);
00026             REGISTER_METHOD(SetParent);
00027             REGISTER_METHOD(BringToFront);
00028             REGISTER_METHOD(SendToBack);
00029             REGISTER_METHOD(InsertBefore);
00030             REGISTER_METHOD(InsertAfter);
00031             REGISTER_METHOD(GetHandle);
00032             REGISTER_METHOD(GetChildListHandles);
00033             REGISTER_METHOD(GetChildListRevision);
00034             REGISTER_METHOD(GetDerivedPos);
00035             REGISTER_METHOD(GetPos);
00036             REGISTER_METHOD(SetPos);
00037             REGISTER_METHOD(GetVisible);
00038             REGISTER_METHOD(SetVisible);
00039             REGISTER_METHOD(SetClip);
00040             REGISTER_METHOD(SetForcedMinSize);
00041             REGISTER_METHOD(GetEffectiveClipAbs);
00042             REGISTER_METHOD(GetEffectiveClipRel);
00043             REGISTER_METHOD(ClearClip);
00044             REGISTER_METHOD(GetRelBounds);
00045             REGISTER_METHOD(CalcAbsBounds);
00046             
00047             #undef REGISTER_METHOD
00048         }
00049 
00050     // static methods exported to lua
00051 
00054         static int                      CreateRenderGroup2D     (lua_State *L) { PROFILE
00055             cRenderGroup2D* pParent = (lua_gettop(L) >= 1 && !lua_isnil(L,1)) ? checkudata_alive(L) : 0;
00056             cRenderGroup2D* pNew = new cRenderGroup2D();
00057             if (pParent) pNew->SetParent(pParent);
00058             return CreateUData(L,pNew);
00059         }
00060     
00061     // object methods exported to lua
00062         
00064         static int          Destroy     (lua_State *L) { PROFILE
00065             delete checkudata_alive(L);
00066             return 0;
00067         }
00068         
00070         static int          SetParent       (lua_State *L) { PROFILE 
00071             cRenderGroup2D* pParent = (lua_gettop(L) >= 2 && !lua_isnil(L,2)) ? checkudata_alive(L,2) : 0;
00072             checkudata_alive(L)->SetParent(pParent); 
00073             return 0;
00074         }
00075         
00077         static int          BringToFront    (lua_State *L) { PROFILE checkudata_alive(L)->BringToFront(); return 0; }
00078         
00080         static int          SendToBack      (lua_State *L) { PROFILE checkudata_alive(L)->SendToBack(); return 0; }
00081         
00083         static int          InsertBefore    (lua_State *L) { PROFILE checkudata_alive(L)->InsertBefore(*checkudata_alive(L,2)); return 0; }
00084         
00086         static int          InsertAfter     (lua_State *L) { PROFILE checkudata_alive(L)->InsertAfter(*checkudata_alive(L,2)); return 0; }
00087     
00088         
00090         static int              GetHandle   (lua_State *L) { PROFILE lua_pushlightuserdata(L,checkudata_alive(L)); return 1; }
00091         
00094         static int              GetChildListHandles     (lua_State *L) { PROFILE 
00095             cRenderGroup2D& self = *checkudata_alive(L);
00096             lua_newtable( L );
00097             int i=1;
00098             for (cRenderGroup2D::tChildListItor itor=self.ChildListBegin();itor!=self.ChildListEnd();++itor,++i) { // for all children
00099                 lua_pushlightuserdata( L, (*itor) );
00100                 lua_rawseti( L, -2, i );
00101             }
00102             return 1;
00103         }
00104         
00107         static int              GetChildListRevision    (lua_State *L) { PROFILE lua_pushnumber(L,checkudata_alive(L)->GetChildListRevision()); return 1; }
00108         
00110         static int              GetDerivedPos   (lua_State *L) { PROFILE 
00111             Ogre::Vector3 p = checkudata_alive(L)->GetDerivedPos(); 
00112             lua_pushnumber(L,p.x);
00113             lua_pushnumber(L,p.y);
00114             lua_pushnumber(L,p.z);
00115             return 3;
00116         }
00117         
00119         static int          GetPos  (lua_State *L) { PROFILE 
00120             Ogre::Vector3 p = checkudata_alive(L)->GetPos(); 
00121             lua_pushnumber(L,p.x);
00122             lua_pushnumber(L,p.y);
00123             lua_pushnumber(L,p.z);
00124             return 3;
00125         }
00126         
00128         static int          SetPos  (lua_State *L) { PROFILE 
00129             checkudata_alive(L)->SetPos(Ogre::Vector3(luaL_checknumber(L,2),luaL_checknumber(L,3),luaL_checknumber(L,4))); 
00130             return 0; 
00131         }
00132         
00134         static int          GetVisible  (lua_State *L) { PROFILE 
00135             lua_pushboolean(L,checkudata_alive(L)->GetVisible());
00136             return 1;
00137         }
00138         
00140         static int          SetVisible  (lua_State *L) { PROFILE 
00141             bool bVisible = (lua_gettop(L) >= 2 && !lua_isnil(L,2)) ? lua_toboolean(L,2) : false;
00142             checkudata_alive(L)->SetVisible(bVisible); 
00143             return 0; 
00144         }
00145         
00148         static int          SetClip     (lua_State *L) { PROFILE 
00149             Ogre::Rectangle r;
00150             r.left      = luaL_checknumber(L,2);
00151             r.top       = luaL_checknumber(L,3);
00152             r.right     = luaL_checknumber(L,4);
00153             r.bottom    = luaL_checknumber(L,5);
00154             checkudata_alive(L)->SetClip(r); 
00155             return 0; 
00156         }
00157         
00159         static int          SetForcedMinSize        (lua_State *L) { PROFILE 
00160             checkudata_alive(L)->SetForcedMinSize(luaL_checknumber(L,2),luaL_checknumber(L,3)); 
00161             return 0; 
00162         }
00163         
00164         
00167         static int              GetEffectiveClipAbs     (lua_State *L) { PROFILE 
00168             cRenderGroup2D& p = *checkudata_alive(L);
00169             if (!p.GetEffectiveClipActive()) return 0;
00170             const Ogre::Rectangle& r = p.GetEffectiveClipAbs();
00171             lua_pushnumber(L,r.left     );
00172             lua_pushnumber(L,r.top      );
00173             lua_pushnumber(L,r.right    );
00174             lua_pushnumber(L,r.bottom   );
00175             return 4;
00176         }
00177         
00180         static int              GetEffectiveClipRel     (lua_State *L) { PROFILE 
00181             cRenderGroup2D& p = *checkudata_alive(L);
00182             if (!p.GetEffectiveClipActive()) return 0;
00183             const Ogre::Rectangle& r = p.GetEffectiveClipRel();
00184             lua_pushnumber(L,r.left     );
00185             lua_pushnumber(L,r.top      );
00186             lua_pushnumber(L,r.right    );
00187             lua_pushnumber(L,r.bottom   );
00188             return 4;
00189         }
00190         
00192         static int          ClearClip   (lua_State *L) { PROFILE 
00193             checkudata_alive(L)->ClearClip(); 
00194             return 0; 
00195         }
00196         
00197         
00200         static int              GetRelBounds    (lua_State *L) { PROFILE 
00201             Ogre::Rectangle& r = checkudata_alive(L)->GetRelBounds(); 
00202             lua_pushnumber(L,r.left);
00203             lua_pushnumber(L,r.top);
00204             lua_pushnumber(L,r.right);
00205             lua_pushnumber(L,r.bottom);
00206             return 4;
00207         }
00208         
00211         static int              CalcAbsBounds   (lua_State *L) { PROFILE 
00212             Ogre::Rectangle r;
00213             checkudata_alive(L)->CalcAbsBounds(r); 
00214             lua_pushnumber(L,r.left);
00215             lua_pushnumber(L,r.top);
00216             lua_pushnumber(L,r.right);
00217             lua_pushnumber(L,r.bottom);
00218             return 4;
00219         }
00220 
00221 
00222         virtual const char* GetLuaTypeName () { return "lugre.rendergroup2d"; }
00223 };
00224 
00225 class cRenderManager2D_L : public cLuaBind<cRenderManager2D> { public:
00227         virtual void RegisterMethods    (lua_State *L) { PROFILE
00228             lua_register(L,"CreateRenderManager2D", &cRenderManager2D_L::CreateRenderManager2D);
00229 
00230             #define REGISTER_METHOD(methodname) mlMethod.push_back(make_luaL_reg(#methodname,&cRenderManager2D_L::methodname));
00231             
00232             REGISTER_METHOD(Destroy);
00233             REGISTER_METHOD(CastToRenderGroup2D);
00234             REGISTER_METHOD(SetRenderEvenIfOverlaysDisabled);
00235             
00236             #undef REGISTER_METHOD
00237         }
00238 
00239     // static methods exported to lua
00240         
00244         static int                  CreateRenderManager2D       (lua_State *L) { PROFILE
00245             std::string sSceneMgrName   = (lua_gettop(L) >= 1 && !lua_isnil(L,1)) ? luaL_checkstring(L,1) : "main";
00246             int         iQueueGroupID   = (lua_gettop(L) >= 2 && !lua_isnil(L,2)) ? luaL_checkint(L,2) : Ogre::RENDER_QUEUE_OVERLAY;
00247             Ogre::SceneManager* pSceneMgr = cOgreWrapper::GetSingleton().GetSceneManager(sSceneMgrName.c_str());
00248             return CreateUData(L,new cRenderManager2D(pSceneMgr,iQueueGroupID));
00249         }
00250         
00251     // object methods exported to lua
00252         
00254         static int          Destroy     (lua_State *L) { PROFILE
00255             delete checkudata_alive(L);
00256             return 0;
00257         }
00258 
00259         
00262         static int              SetRenderEvenIfOverlaysDisabled (lua_State *L) { PROFILE 
00263             checkudata_alive(L)->SetRenderEvenIfOverlaysDisabled(luaL_checkbool(L,2)); 
00264             return 0;
00265         }
00266         
00270         static int                  CastToRenderGroup2D (lua_State *L) { PROFILE
00271             return cLuaBind<cRenderGroup2D>::CreateUData(L,checkudata_alive(L));
00272         }
00273         
00274         
00275         virtual const char* GetLuaTypeName () { return "lugre.rendermanager2d"; }
00276 };
00277 
00278 
00279 cSpriteList* gpLastOpenedSpriteList = 0;
00280 class cSpriteList_L : public cLuaBind<cSpriteList> { public:
00282         virtual void RegisterMethods    (lua_State *L) { PROFILE
00283             lua_register(L,"CreateSpriteList",          &cSpriteList_L::CreateSpriteList);
00284             lua_register(L,"SpriteList_Open",           &cSpriteList_L::SpriteList_Open);
00285             lua_register(L,"SpriteList_SetSprite",      &cSpriteList_L::SpriteList_SetSprite);
00286             lua_register(L,"SpriteList_SetSpriteEx",    &cSpriteList_L::SpriteList_SetSpriteEx);
00287             lua_register(L,"SpriteList_SetSpritePos",   &cSpriteList_L::SpriteList_SetSpritePos);
00288             lua_register(L,"SpriteList_Close",          &cSpriteList_L::SpriteList_Close);
00289 
00290             #define REGISTER_METHOD(methodname) mlMethod.push_back(make_luaL_reg(#methodname,&cSpriteList_L::methodname));
00291 
00292             REGISTER_METHOD(Destroy);
00293             REGISTER_METHOD(CastToRenderGroup2D);
00294             REGISTER_METHOD(SetMaterial);
00295             REGISTER_METHOD(ResizeList);
00296             REGISTER_METHOD(ClearTexTransform);
00297             REGISTER_METHOD(SetTexTransform);
00298             
00299             #undef REGISTER_METHOD
00300         }
00301 
00302     // static methods exported to lua
00303 
00306         static int                      CreateSpriteList        (lua_State *L) { PROFILE
00307             cRenderGroup2D* pParent     = (lua_gettop(L) >= 1 && !lua_isnil(L,1)) ? cLuaBind<cRenderGroup2D>::checkudata_alive(L,1) : 0;
00308             bool bVertexBufferDynamic   = (lua_gettop(L) >= 2 && !lua_isnil(L,2)) ? lua_toboolean(L,2) : false;
00309             bool bVertexCol             = (lua_gettop(L) >= 3 && !lua_isnil(L,3)) ? lua_toboolean(L,3) : false;
00310             cSpriteList* pNew = new cSpriteList(bVertexBufferDynamic,bVertexCol);
00311             if (pParent) pNew->SetParent(pParent);
00312             return CreateUData(L,pNew);
00313         }
00314         
00319         static int              SpriteList_Open     (lua_State *L) { PROFILE
00320             if (gpLastOpenedSpriteList) { printf("SpriteList_Open: error, close last first (SpriteList_Close) !"); return 0; }
00321             gpLastOpenedSpriteList = checkudata_alive(L);
00322             gpLastOpenedSpriteList->MarkGeometryAsDirty();
00323             return 0;
00324         }
00325         
00329         static int              SpriteList_Close        (lua_State *L) { PROFILE
00330             if (!gpLastOpenedSpriteList) { printf("SpriteList_Close: error, no spritelist open !"); return 0; }
00331             gpLastOpenedSpriteList->MarkRelBoundsAsDirty();
00332             gpLastOpenedSpriteList->UpdateClip();
00333             if (gpLastOpenedSpriteList->iMaxInitializedSprite < gpLastOpenedSpriteList->GetListSize() - 1) 
00334                 printf("SpriteList_Close warning ! unitialized sprites left ! %d/%d\n",
00335                     (int)gpLastOpenedSpriteList->iMaxInitializedSprite + 1,
00336                     (int)gpLastOpenedSpriteList->GetListSize());
00337             gpLastOpenedSpriteList = 0;
00338             return 0;
00339         }
00340         
00344         static int              SpriteList_SetSprite        (lua_State *L) { PROFILE
00345             if (!gpLastOpenedSpriteList) { printf("SpriteList_SetSprite: error, no spritelist open !"); return 0; }
00346             int iSpriteIndex = luaL_checkint(L,1);
00347             if (iSpriteIndex < 0 || iSpriteIndex >= gpLastOpenedSpriteList->GetListSize()) return 0;
00348             gpLastOpenedSpriteList->iMaxInitializedSprite = mymax(gpLastOpenedSpriteList->iMaxInitializedSprite,iSpriteIndex);
00349             gpLastOpenedSpriteList->GetSprite(iSpriteIndex).Set(
00350                 luaL_checknumber(L,2),luaL_checknumber(L,3),
00351                 luaL_checknumber(L,4),luaL_checknumber(L,5),
00352                 Ogre::Vector2(luaL_checknumber(L,6),luaL_checknumber(L,7)),
00353                 luaL_checknumber(L,8),
00354                 luaL_checknumber(L,9),
00355                 luaL_checknumber(L,10)
00356                 );
00357             // Set      (x,y,_w,_h,const Ogre::Vector2& uv_0,uv_w,uv_h,z=0.0)
00358             return 0;
00359         }
00360         
00365         static int              SpriteList_SetSpriteEx      (lua_State *L) { PROFILE
00366             if (!gpLastOpenedSpriteList) { printf("SpriteList_SetSpriteEx: error, no spritelist open !"); return 0; }
00367             int iSpriteIndex = luaL_checkint(L,1);
00368             if (iSpriteIndex < 0 || iSpriteIndex >= gpLastOpenedSpriteList->GetListSize()) return 0;
00369             gpLastOpenedSpriteList->iMaxInitializedSprite = mymax(gpLastOpenedSpriteList->iMaxInitializedSprite,iSpriteIndex);
00370             gpLastOpenedSpriteList->GetSprite(iSpriteIndex).Set(
00371                 luaL_checknumber(L,2),luaL_checknumber(L,3),
00372                 luaL_checknumber(L,4),luaL_checknumber(L,5),
00373                 Ogre::Vector2(luaL_checknumber(L,6),luaL_checknumber(L,7)),
00374                 Ogre::Vector2(luaL_checknumber(L,8),luaL_checknumber(L,9)),
00375                 Ogre::Vector2(luaL_checknumber(L,10),luaL_checknumber(L,11)),
00376                 luaL_checknumber(L,12),
00377                 Ogre::ColourValue(luaL_checknumber(L,13),luaL_checknumber(L,14),luaL_checknumber(L,15),luaL_checknumber(L,16))
00378                 );
00379             // Set      (x,y,_w,_h,const Ogre::Vector2& uv_0,const Ogre::Vector2& uv_x,const Ogre::Vector2& uv_y,z=0.0)
00380             return 0;
00381         }
00382         
00386         static int              SpriteList_SetSpritePos     (lua_State *L) { PROFILE
00387             if (!gpLastOpenedSpriteList) { printf("SpriteList_SetSpritePos: error, no spritelist open !"); return 0; }
00388             int iSpriteIndex = luaL_checkint(L,1);
00389             if (iSpriteIndex < 0 || iSpriteIndex >= gpLastOpenedSpriteList->GetListSize()) return 0;
00390             cSpriteList::cSprite& pSprite = gpLastOpenedSpriteList->GetSprite(iSpriteIndex);
00391             pSprite.p.x = luaL_checkint(L,2);
00392             pSprite.p.y = luaL_checkint(L,3);
00393             return 0;
00394         }
00395     
00396     // object methods exported to lua
00397         
00400         static int          Destroy     (lua_State *L) { PROFILE
00401             if (gpLastOpenedSpriteList) { printf("SpriteList:Destroy: warning : don't use this while spritelist is opened with SpriteList_Open !"); }
00402             gpLastOpenedSpriteList = 0;
00403             delete checkudata_alive(L);
00404             return 0;
00405         }
00406 
00410         static int                  CastToRenderGroup2D (lua_State *L) { PROFILE
00411             return cLuaBind<cRenderGroup2D>::CreateUData(L,checkudata_alive(L));
00412         }
00413         
00415         static int          SetMaterial (lua_State *L) { PROFILE
00416             std::string sMatName = luaL_checkstring(L,2);
00417             checkudata_alive(L)->SetMaterial(sMatName.c_str());
00418             return 0;
00419         }
00420         
00422         static int          ResizeList  (lua_State *L) { PROFILE
00423             checkudata_alive(L)->ResizeList(luaL_checkint(L,2));
00424             return 0;
00425         }
00426         
00427         
00429         static int          ClearTexTransform   (lua_State *L) { PROFILE
00430             checkudata_alive(L)->ClearTexTransform();
00431             return 0;
00432         }
00433         
00436         static int          SetTexTransform     (lua_State *L) { PROFILE
00437             if (lua_gettop(L) >= 16) {
00438                 Ogre::Matrix4 m;
00439                 for (int iRow=0;iRow<4;++iRow) 
00440                 for (int iCol=0;iCol<4;++iCol) m[iRow][iCol] = luaL_checknumber(L,2 + iCol + 4*iRow);
00441                 checkudata_alive(L)->SetTexTransform(m);
00442                 return 0;
00443             }
00444             float   x       = (lua_gettop(L) >= 2 && !lua_isnil(L,2)) ? luaL_checknumber(L,2) : 0.0;
00445             float   y       = (lua_gettop(L) >= 3 && !lua_isnil(L,3)) ? luaL_checknumber(L,3) : 0.0;
00446             float   sx      = (lua_gettop(L) >= 4 && !lua_isnil(L,4)) ? luaL_checknumber(L,4) : 1.0;
00447             float   sy      = (lua_gettop(L) >= 5 && !lua_isnil(L,5)) ? luaL_checknumber(L,5) : 1.0;
00448             float   angle   = (lua_gettop(L) >= 6 && !lua_isnil(L,6)) ? luaL_checknumber(L,6) : 0.0;
00449             
00450             
00451             checkudata_alive(L)->SetTexTransform(Ogre::Vector3(x,y,0),Ogre::Vector3(sx,sy,1),Ogre::Quaternion(Ogre::Radian(angle),Ogre::Vector3(0,0,1)));
00452             return 0;
00453         }
00454 
00455         virtual const char* GetLuaTypeName () { return "lugre.spritelist"; }
00456 };
00457 
00458 
00459 cRobRenderable2D*   gpLastOpenedRobRenderable2D = 0;
00460 cRobRenderOp*       gpLastOpenedRobRenderable2D_Op = 0;
00461 class cRobRenderable2D_L : public cLuaBind<cRobRenderable2D> { public:
00463         virtual void RegisterMethods    (lua_State *L) { PROFILE
00464             lua_register(L,"CreateRobRenderable2D",         &cRobRenderable2D_L::CreateRobRenderable2D);
00465             lua_register(L,"RobRenderable2D_Open",          &cRobRenderable2D_L::RobRenderable2D_Open);
00466             lua_register(L,"RobRenderable2D_Close",         &cRobRenderable2D_L::RobRenderable2D_Close);
00467             lua_register(L,"RobRenderable2D_Vertex",        &cRobRenderable2D_L::RobRenderable2D_Vertex);
00468             lua_register(L,"RobRenderable2D_Index",         &cRobRenderable2D_L::RobRenderable2D_Index);
00469             lua_register(L,"RobRenderable2D_Index2",        &cRobRenderable2D_L::RobRenderable2D_Index2);
00470             lua_register(L,"RobRenderable2D_Index3",        &cRobRenderable2D_L::RobRenderable2D_Index3);
00471             lua_register(L,"RobRenderable2D_SkipVertices",  &cRobRenderable2D_L::RobRenderable2D_SkipVertices);
00472             lua_register(L,"RobRenderable2D_SkipIndices",   &cRobRenderable2D_L::RobRenderable2D_SkipIndices);
00473             
00474 
00475             #define REGISTER_METHOD(methodname) mlMethod.push_back(make_luaL_reg(#methodname,&cRobRenderable2D_L::methodname));
00476 
00477             REGISTER_METHOD(Destroy);
00478             REGISTER_METHOD(CastToRenderGroup2D);
00479             REGISTER_METHOD(SetMaterial);
00480             REGISTER_METHOD(ClearTexTransform);
00481             REGISTER_METHOD(SetTexTransform);
00482             
00483             #undef REGISTER_METHOD
00484         }
00485 
00486     // static methods exported to lua
00487 
00490         static int                      CreateRobRenderable2D       (lua_State *L) { PROFILE
00491             cRenderGroup2D* pParent     = (lua_gettop(L) >= 1 && !lua_isnil(L,1)) ? cLuaBind<cRenderGroup2D>::checkudata_alive(L,1) : 0;
00492             cRobRenderable2D* pNew = new cRobRenderable2D();
00493             if (pParent) pNew->SetParent(pParent);
00494             return CreateUData(L,pNew);
00495         }
00496         
00501         static int              RobRenderable2D_Open        (lua_State *L) { PROFILE
00502             if (gpLastOpenedRobRenderable2D) { printf("RobRenderable2D_Open: error, close last first (RobRenderable2D_Close) !"); return 0; }
00503             gpLastOpenedRobRenderable2D = checkudata_alive(L);
00504             gpLastOpenedRobRenderable2D_Op = gpLastOpenedRobRenderable2D->GetRobRenderOp();
00505             // void Begin   (size_t iVertexCount,size_t iIndexCount,bool bDynamic,bool bKeepOldIndices,RenderOperation::OperationType opType);
00506             gpLastOpenedRobRenderable2D_Op->Begin(
00507                 luaL_checkint(L,2),
00508                 luaL_checkint(L,3),
00509                 lua_isboolean(L,4) ? lua_toboolean(L,4) : luaL_checkint(L,4),
00510                 lua_isboolean(L,5) ? lua_toboolean(L,5) : luaL_checkint(L,5),
00511                 (Ogre::RenderOperation::OperationType)luaL_checkint(L,6)
00512                 );
00513             return 0;
00514         }
00515         
00519         static int              RobRenderable2D_Close       (lua_State *L) { PROFILE
00520             if (!gpLastOpenedRobRenderable2D) { printf("RobRenderable2D_Close: error, no robrenderabl2d open !"); return 0; }
00521             gpLastOpenedRobRenderable2D_Op->End();
00522             gpLastOpenedRobRenderable2D->MarkRelBoundsAsDirty();
00523             gpLastOpenedRobRenderable2D = 0;
00524             gpLastOpenedRobRenderable2D_Op = 0;
00525             return 0;
00526         }
00527         
00528         
00529         /*
00530         must be called between RenderableBegin and RenderableEnd
00531         Real : 1 float
00532         Vector3 : 3 floats  x,y,z
00533         ColourValue : 4 floats  r,g,b,a
00534         void    RenderableVertex    (float,float,float,...);
00535         */
00537         static int      RobRenderable2D_Vertex  (lua_State *L) { PROFILE
00538             if (!gpLastOpenedRobRenderable2D_Op) return 0;
00539             #define F(i) luaL_checknumber(L,i)
00540             #define V(i) Vector3(F(i+0),F(i+1),F(i+2))
00541             #define C(i) ColourValue(F(i+0),F(i+1),F(i+2),F(i+3))
00542             Ogre::Vector3 p(F(1),F(2),F(3));
00543             int argc = lua_gettop(L); // static method, no this object
00544             switch (argc) {
00545                       case 3:   gpLastOpenedRobRenderable2D_Op->Vertex(p);                      // x,y,z        
00546                 break;case 5:   gpLastOpenedRobRenderable2D_Op->Vertex(p,F(4),F(5));            // x,y,z,u,v
00547                 break;case 6:   gpLastOpenedRobRenderable2D_Op->Vertex(p,V(4));                 // x,y,z,nx,ny,nz
00548                 break;case 8:   gpLastOpenedRobRenderable2D_Op->Vertex(p,V(4),F(7),F(8));       // x,y,z,nx,ny,nz,u,v
00549                     
00550                 break;case 7:   gpLastOpenedRobRenderable2D_Op->Vertex(p,C(4));                 // x,y,z,               r,g,b,a
00551                 break;case 9:   gpLastOpenedRobRenderable2D_Op->Vertex(p,F(4),F(5),C(6));       // x,y,z,u,v,           r,g,b,a
00552                 break;case 10:  gpLastOpenedRobRenderable2D_Op->Vertex(p,V(4),C(7));            // x,y,z,nx,ny,nz,      r,g,b,a
00553                 break;case 12:  gpLastOpenedRobRenderable2D_Op->Vertex(p,V(4),F(7),F(8),C(9));  // x,y,z,nx,ny,nz,u,v,  r,g,b,a
00554                 break;default: printf("WARNING ! cGfx3D_L::RenderableVertex : strange argument count : %d\n",argc);
00555             }
00556             #undef F
00557             #undef V
00558             #undef C
00559             return 0;
00560         }
00561         
00564         static int      RobRenderable2D_Index       (lua_State *L) { PROFILE
00565             if (!gpLastOpenedRobRenderable2D_Op) return 0;
00566             gpLastOpenedRobRenderable2D_Op->Index(luaL_checkint(L,1));
00567             return 0;
00568         }
00569 
00572         static int      RobRenderable2D_Index3      (lua_State *L) { PROFILE
00573             if (!gpLastOpenedRobRenderable2D_Op) return 0;
00574             gpLastOpenedRobRenderable2D_Op->Index(luaL_checkint(L,1),luaL_checkint(L,2),luaL_checkint(L,3));
00575             return 0;
00576         }
00577         
00580         static int      RobRenderable2D_Index2      (lua_State *L) { PROFILE
00581             if (!gpLastOpenedRobRenderable2D_Op) return 0;
00582             gpLastOpenedRobRenderable2D_Op->Index(luaL_checkint(L,1));
00583             gpLastOpenedRobRenderable2D_Op->Index(luaL_checkint(L,2));
00584             return 0;
00585         }
00586         
00588         static int      RobRenderable2D_SkipVertices    (lua_State *L) { PROFILE
00589             if (!gpLastOpenedRobRenderable2D_Op) return 0;
00590             gpLastOpenedRobRenderable2D_Op->SkipVertices(luaL_checkint(L,1));
00591             return 0;
00592         }
00593         
00595         static int      RobRenderable2D_SkipIndices (lua_State *L) { PROFILE
00596             if (!gpLastOpenedRobRenderable2D_Op) return 0;
00597             gpLastOpenedRobRenderable2D_Op->SkipIndices(luaL_checkint(L,1));
00598             return 0;
00599         }
00600         
00601         
00602         
00603     
00604     // object methods exported to lua
00605         
00608         static int          Destroy     (lua_State *L) { PROFILE
00609             if (gpLastOpenedRobRenderable2D) { printf("RobRenderable2D:Destroy: warning : don't use this while robrenderabl2d is opened with RobRenderable2D_Open !"); }
00610             gpLastOpenedRobRenderable2D = 0;
00611             gpLastOpenedRobRenderable2D_Op = 0;
00612             delete checkudata_alive(L);
00613             return 0;
00614         }
00615 
00619         static int                  CastToRenderGroup2D (lua_State *L) { PROFILE
00620             return cLuaBind<cRenderGroup2D>::CreateUData(L,checkudata_alive(L));
00621         }
00622         
00624         static int          SetMaterial (lua_State *L) { PROFILE
00625             std::string sMatName = luaL_checkstring(L,2);
00626             checkudata_alive(L)->SetMaterial(sMatName.c_str());
00627             return 0;
00628         }
00629         
00630         
00632         static int          ClearTexTransform   (lua_State *L) { PROFILE
00633             checkudata_alive(L)->ClearTexTransform();
00634             return 0;
00635         }
00636         
00639         static int          SetTexTransform (lua_State *L) { PROFILE
00640             if (lua_gettop(L) >= 16) {
00641                 Ogre::Matrix4 m;
00642                 for (int iRow=0;iRow<4;++iRow) 
00643                 for (int iCol=0;iCol<4;++iCol) m[iRow][iCol] = luaL_checknumber(L,2 + iCol + 4*iRow);
00644                 checkudata_alive(L)->SetTexTransform(m);
00645                 return 0;
00646             }
00647             float   x       = (lua_gettop(L) >= 2 && !lua_isnil(L,2)) ? luaL_checknumber(L,2) : 0.0;
00648             float   y       = (lua_gettop(L) >= 3 && !lua_isnil(L,3)) ? luaL_checknumber(L,3) : 0.0;
00649             float   sx      = (lua_gettop(L) >= 4 && !lua_isnil(L,4)) ? luaL_checknumber(L,4) : 1.0;
00650             float   sy      = (lua_gettop(L) >= 5 && !lua_isnil(L,5)) ? luaL_checknumber(L,5) : 1.0;
00651             float   angle   = (lua_gettop(L) >= 6 && !lua_isnil(L,6)) ? luaL_checknumber(L,6) : 0.0;
00652             checkudata_alive(L)->SetTexTransform(Ogre::Vector3(x,y,0),Ogre::Vector3(sx,sy,1),Ogre::Quaternion(Ogre::Radian(angle),Ogre::Vector3(0,0,1)));
00653             return 0;
00654         }
00655         
00656 
00657         virtual const char* GetLuaTypeName () { return "lugre.RobRenderable2D"; }
00658 };
00659 
00661 void    cSpriteList::LuaRegister    (lua_State *L) { PROFILE
00662     cLuaBind<cRenderManager2D>::GetSingletonPtr(new cRenderManager2D_L())->LuaRegister(L);
00663     cLuaBind<cRenderGroup2D>::GetSingletonPtr(new cRenderGroup2D_L())->LuaRegister(L);
00664     cLuaBind<cSpriteList>::GetSingletonPtr(new cSpriteList_L())->LuaRegister(L);
00665     cLuaBind<cRobRenderable2D>::GetSingletonPtr(new cRobRenderable2D_L())->LuaRegister(L);
00666 }
00667 
00668 };

Generated on Wed May 23 06:00:15 2012 for cpp by  doxygen 1.5.6