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
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
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) {
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
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
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
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
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
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
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
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
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
00531
00532
00533
00534
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);
00544 switch (argc) {
00545 case 3: gpLastOpenedRobRenderable2D_Op->Vertex(p);
00546 break;case 5: gpLastOpenedRobRenderable2D_Op->Vertex(p,F(4),F(5));
00547 break;case 6: gpLastOpenedRobRenderable2D_Op->Vertex(p,V(4));
00548 break;case 8: gpLastOpenedRobRenderable2D_Op->Vertex(p,V(4),F(7),F(8));
00549
00550 break;case 7: gpLastOpenedRobRenderable2D_Op->Vertex(p,C(4));
00551 break;case 9: gpLastOpenedRobRenderable2D_Op->Vertex(p,F(4),F(5),C(6));
00552 break;case 10: gpLastOpenedRobRenderable2D_Op->Vertex(p,V(4),C(7));
00553 break;case 12: gpLastOpenedRobRenderable2D_Op->Vertex(p,V(4),F(7),F(8),C(9));
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
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 };