diff --git a/stepmania/src/Actor.h b/stepmania/src/Actor.h index 873b3c7e70..1870779762 100644 --- a/stepmania/src/Actor.h +++ b/stepmania/src/Actor.h @@ -16,193 +16,6 @@ struct lua_State; #define DRAW_ORDER_TRANSITIONS 100 #define DRAW_ORDER_AFTER_EVERYTHING 200 -template -class LunaActor : public Luna -{ -public: - LunaActor() { LUA->Register( Register ); } - - static int sleep( T* p, lua_State *L ) { p->Sleep(FArg(1)); return 0; } \ - static int linear( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_LINEAR); return 0; } \ - static int accelerate( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_ACCELERATE); return 0; } \ - static int decelerate( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_DECELERATE); return 0; } \ - static int bouncebegin( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_BOUNCE_BEGIN); return 0; } \ - static int bounceend( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_BOUNCE_END); return 0; } \ - static int spring( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_SPRING); return 0; } \ - static int stoptweening( T* p, lua_State *L ) { p->StopTweening(); p->BeginTweening( 0.0001f, Actor::TWEEN_LINEAR ); return 0; } \ - static int finishtweening( T* p, lua_State *L ) { p->FinishTweening(); return 0; } \ - static int hurrytweening( T* p, lua_State *L ) { p->HurryTweening(FArg(1)); return 0; } \ - static int x( T* p, lua_State *L ) { p->SetX(FArg(1)); return 0; } \ - static int y( T* p, lua_State *L ) { p->SetY(FArg(1)); return 0; } \ - static int z( T* p, lua_State *L ) { p->SetZ(FArg(1)); return 0; } \ - static int addx( T* p, lua_State *L ) { p->AddX(FArg(1)); return 0; } \ - static int addy( T* p, lua_State *L ) { p->AddY(FArg(1)); return 0; } \ - static int addz( T* p, lua_State *L ) { p->AddZ(FArg(1)); return 0; } \ - static int zoom( T* p, lua_State *L ) { p->SetZoom(FArg(1)); return 0; } \ - static int zoomx( T* p, lua_State *L ) { p->SetZoomX(FArg(1)); return 0; } \ - static int zoomy( T* p, lua_State *L ) { p->SetZoomY(FArg(1)); return 0; } \ - static int zoomz( T* p, lua_State *L ) { p->SetZoomZ(FArg(1)); return 0; } \ - static int zoomtowidth( T* p, lua_State *L ) { p->ZoomToWidth(FArg(1)); return 0; } \ - static int zoomtoheight( T* p, lua_State *L ) { p->ZoomToHeight(FArg(1)); return 0; } \ - static int stretchto( T* p, lua_State *L ) { p->StretchTo( RectF(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ - static int cropleft( T* p, lua_State *L ) { p->SetCropLeft(FArg(1)); return 0; } \ - static int croptop( T* p, lua_State *L ) { p->SetCropTop(FArg(1)); return 0; } \ - static int cropright( T* p, lua_State *L ) { p->SetCropRight(FArg(1)); return 0; } \ - static int cropbottom( T* p, lua_State *L ) { p->SetCropBottom(FArg(1)); return 0; } \ - static int fadeleft( T* p, lua_State *L ) { p->SetFadeLeft(FArg(1)); return 0; } \ - static int fadetop( T* p, lua_State *L ) { p->SetFadeTop(FArg(1)); return 0; } \ - static int faderight( T* p, lua_State *L ) { p->SetFadeRight(FArg(1)); return 0; } \ - static int fadebottom( T* p, lua_State *L ) { p->SetFadeBottom(FArg(1)); return 0; } \ - static int diffuse( T* p, lua_State *L ) { p->SetDiffuse( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ - static int diffuseleftedge( T* p, lua_State *L ) { p->SetDiffuseLeftEdge( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ - static int diffuserightedge( T* p, lua_State *L ) { p->SetDiffuseRightEdge( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ - static int diffusetopedge( T* p, lua_State *L ) { p->SetDiffuseTopEdge( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ - static int diffusebottomedge( T* p, lua_State *L ) { p->SetDiffuseBottomEdge( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ - static int diffusealpha( T* p, lua_State *L ) { p->SetDiffuseAlpha(FArg(1)); return 0; } \ - static int diffusecolor( T* p, lua_State *L ) { p->SetDiffuseColor( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ - static int glow( T* p, lua_State *L ) { p->SetGlow( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ - static int rotationx( T* p, lua_State *L ) { p->SetRotationX(FArg(1)); return 0; } \ - static int rotationy( T* p, lua_State *L ) { p->SetRotationY(FArg(1)); return 0; } \ - static int rotationz( T* p, lua_State *L ) { p->SetRotationZ(FArg(1)); return 0; } \ - static int heading( T* p, lua_State *L ) { p->AddRotationH(FArg(1)); return 0; } \ - static int pitch( T* p, lua_State *L ) { p->AddRotationP(FArg(1)); return 0; } \ - static int roll( T* p, lua_State *L ) { p->AddRotationR(FArg(1)); return 0; } \ - static int shadowlength( T* p, lua_State *L ) { p->SetShadowLength(FArg(1)); return 0; } \ - static int horizalign( T* p, lua_State *L ) { p->SetHorizAlignString(SArg(1)); return 0; } \ - static int vertalign( T* p, lua_State *L ) { p->SetVertAlignString(SArg(1)); return 0; } \ - static int diffuseblink( T* p, lua_State *L ) { p->SetEffectDiffuseBlink(); return 0; } \ - static int diffuseshift( T* p, lua_State *L ) { p->SetEffectDiffuseShift(); return 0; } \ - static int glowblink( T* p, lua_State *L ) { p->SetEffectGlowBlink(); return 0; } \ - static int glowshift( T* p, lua_State *L ) { p->SetEffectGlowShift(); return 0; } \ - static int rainbow( T* p, lua_State *L ) { p->SetEffectRainbow(); return 0; } \ - static int wag( T* p, lua_State *L ) { p->SetEffectWag(); return 0; } \ - static int bounce( T* p, lua_State *L ) { p->SetEffectBounce(); return 0; } \ - static int bob( T* p, lua_State *L ) { p->SetEffectBob(); return 0; } \ - static int pulse( T* p, lua_State *L ) { p->SetEffectPulse(); return 0; } \ - static int spin( T* p, lua_State *L ) { p->SetEffectSpin(); return 0; } \ - static int vibrate( T* p, lua_State *L ) { p->SetEffectVibrate(); return 0; } \ - static int stopeffect( T* p, lua_State *L ) { p->SetEffectNone(); return 0; } \ - static int effectcolor1( T* p, lua_State *L ) { p->SetEffectColor1( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ - static int effectcolor2( T* p, lua_State *L ) { p->SetEffectColor2( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ - static int effectperiod( T* p, lua_State *L ) { p->SetEffectPeriod(FArg(1)); return 0; } \ - static int effectoffset( T* p, lua_State *L ) { p->SetEffectOffset(FArg(1)); return 0; } \ - static int effectdelay( T* p, lua_State *L ) { p->SetEffectDelay(FArg(1)); return 0; } \ - static int effectclock( T* p, lua_State *L ) { p->SetEffectClockString(SArg(1)); return 0; } \ - static int effectmagnitude( T* p, lua_State *L ) { p->SetEffectMagnitude( RageVector3(FArg(1),FArg(2),FArg(3)) ); return 0; } \ - static int scaletocover( T* p, lua_State *L ) { p->ScaleToCover( RectF(FArg(1), FArg(2), FArg(3), FArg(4)) ); return 0; } \ - static int scaletofit( T* p, lua_State *L ) { p->ScaleToFitInside( RectF(FArg(1), FArg(2), FArg(3), FArg(4)) ); return 0; } \ - static int animate( T* p, lua_State *L ) { p->EnableAnimation(BArg(1)); return 0; } \ - static int play( T* p, lua_State *L ) { p->EnableAnimation(true); return 0; } \ - static int pause( T* p, lua_State *L ) { p->EnableAnimation(false); return 0; } \ - static int setstate( T* p, lua_State *L ) { p->SetState(IArg(1)); return 0; } \ - static int texturewrapping( T* p, lua_State *L ) { p->SetTextureWrapping(BArg(1)); return 0; } \ - static int additiveblend( T* p, lua_State *L ) { p->SetBlendMode(BArg(1) ? BLEND_ADD : BLEND_NORMAL); return 0; } \ - static int blend( T* p, lua_State *L ) { p->SetBlendModeString(SArg(1)); return 0; } \ - static int zbuffer( T* p, lua_State *L ) { p->SetUseZBuffer(BArg(1)); return 0; } \ - static int ztest( T* p, lua_State *L ) { p->SetZTestMode(BArg(1)?ZTEST_WRITE_ON_PASS:ZTEST_OFF); return 0; } \ - static int ztestmode( T* p, lua_State *L ) { p->SetZTestModeString(SArg(1)); return 0; } \ - static int zwrite( T* p, lua_State *L ) { p->SetZWrite(BArg(1)); return 0; } \ - static int clearzbuffer( T* p, lua_State *L ) { p->SetClearZBuffer(BArg(1)); return 0; } \ - static int backfacecull( T* p, lua_State *L ) { p->SetCullMode(BArg(1) ? CULL_BACK : CULL_NONE); return 0; } \ - static int cullmode( T* p, lua_State *L ) { p->SetCullModeString(SArg(1)); return 0; } \ - static int hidden( T* p, lua_State *L ) { p->SetHidden(BArg(1)); return 0; } \ - static int hibernate( T* p, lua_State *L ) { p->SetHibernate(FArg(1)); return 0; } \ - static int draworder( T* p, lua_State *L ) { p->SetDrawOrder(IArg(1)); return 0; } \ - static int playcommand( T* p, lua_State *L ) { p->PlayCommand(SArg(1)); return 0; } \ - static int queuecommand( T* p, lua_State *L ) { p->QueueCommand(SArg(1)); return 0; } \ - - static void Register(lua_State *L) { - ADD_METHOD( sleep ) \ - ADD_METHOD( linear ) \ - ADD_METHOD( accelerate ) \ - ADD_METHOD( decelerate ) \ - ADD_METHOD( bouncebegin ) \ - ADD_METHOD( bounceend ) \ - ADD_METHOD( spring ) \ - ADD_METHOD( stoptweening ) \ - ADD_METHOD( finishtweening ) \ - ADD_METHOD( hurrytweening ) \ - ADD_METHOD( x ) \ - ADD_METHOD( y ) \ - ADD_METHOD( z ) \ - ADD_METHOD( addx ) \ - ADD_METHOD( addy ) \ - ADD_METHOD( addz ) \ - ADD_METHOD( zoom ) \ - ADD_METHOD( zoomx ) \ - ADD_METHOD( zoomy ) \ - ADD_METHOD( zoomz ) \ - ADD_METHOD( zoomtowidth ) \ - ADD_METHOD( zoomtoheight ) \ - ADD_METHOD( stretchto ) \ - ADD_METHOD( cropleft ) \ - ADD_METHOD( croptop ) \ - ADD_METHOD( cropright ) \ - ADD_METHOD( cropbottom ) \ - ADD_METHOD( fadeleft ) \ - ADD_METHOD( fadetop ) \ - ADD_METHOD( faderight ) \ - ADD_METHOD( fadebottom ) \ - ADD_METHOD( diffuse ) \ - ADD_METHOD( diffuseleftedge ) \ - ADD_METHOD( diffuserightedge ) \ - ADD_METHOD( diffusetopedge ) \ - ADD_METHOD( diffusebottomedge ) \ - ADD_METHOD( diffusealpha ) \ - ADD_METHOD( diffusecolor ) \ - ADD_METHOD( glow ) \ - ADD_METHOD( rotationx ) \ - ADD_METHOD( rotationy ) \ - ADD_METHOD( rotationz ) \ - ADD_METHOD( heading ) \ - ADD_METHOD( pitch ) \ - ADD_METHOD( roll ) \ - ADD_METHOD( shadowlength ) \ - ADD_METHOD( horizalign ) \ - ADD_METHOD( vertalign ) \ - ADD_METHOD( diffuseblink ) \ - ADD_METHOD( diffuseshift ) \ - ADD_METHOD( glowblink ) \ - ADD_METHOD( glowshift ) \ - ADD_METHOD( rainbow ) \ - ADD_METHOD( wag ) \ - ADD_METHOD( bounce ) \ - ADD_METHOD( bob ) \ - ADD_METHOD( pulse ) \ - ADD_METHOD( spin ) \ - ADD_METHOD( vibrate ) \ - ADD_METHOD( stopeffect ) \ - ADD_METHOD( effectcolor1 ) \ - ADD_METHOD( effectcolor2 ) \ - ADD_METHOD( effectperiod ) \ - ADD_METHOD( effectoffset ) \ - ADD_METHOD( effectdelay ) \ - ADD_METHOD( effectclock ) \ - ADD_METHOD( effectmagnitude ) \ - ADD_METHOD( scaletocover ) \ - ADD_METHOD( scaletofit ) \ - ADD_METHOD( animate ) \ - ADD_METHOD( play ) \ - ADD_METHOD( pause ) \ - ADD_METHOD( setstate ) \ - ADD_METHOD( texturewrapping ) \ - ADD_METHOD( additiveblend ) \ - ADD_METHOD( blend ) \ - ADD_METHOD( zbuffer ) \ - ADD_METHOD( ztest ) \ - ADD_METHOD( ztestmode ) \ - ADD_METHOD( zwrite ) \ - ADD_METHOD( clearzbuffer ) \ - ADD_METHOD( backfacecull ) \ - ADD_METHOD( cullmode ) \ - ADD_METHOD( hidden ) \ - ADD_METHOD( hibernate ) \ - ADD_METHOD( draworder ) \ - ADD_METHOD( playcommand ) \ - ADD_METHOD( queuecommand ) \ - Luna::Register( L ); - } -}; class Actor { @@ -607,6 +420,194 @@ protected: map m_mapNameToCommands; }; +template +class LunaActor : public Luna +{ +public: + LunaActor() { LUA->Register( Register ); } + + static int sleep( T* p, lua_State *L ) { p->Sleep(FArg(1)); return 0; } \ + static int linear( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_LINEAR); return 0; } \ + static int accelerate( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_ACCELERATE); return 0; } \ + static int decelerate( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_DECELERATE); return 0; } \ + static int bouncebegin( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_BOUNCE_BEGIN); return 0; } \ + static int bounceend( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_BOUNCE_END); return 0; } \ + static int spring( T* p, lua_State *L ) { p->BeginTweening(FArg(1),Actor::TWEEN_SPRING); return 0; } \ + static int stoptweening( T* p, lua_State *L ) { p->StopTweening(); p->BeginTweening( 0.0001f, Actor::TWEEN_LINEAR ); return 0; } \ + static int finishtweening( T* p, lua_State *L ) { p->FinishTweening(); return 0; } \ + static int hurrytweening( T* p, lua_State *L ) { p->HurryTweening(FArg(1)); return 0; } \ + static int x( T* p, lua_State *L ) { p->SetX(FArg(1)); return 0; } \ + static int y( T* p, lua_State *L ) { p->SetY(FArg(1)); return 0; } \ + static int z( T* p, lua_State *L ) { p->SetZ(FArg(1)); return 0; } \ + static int addx( T* p, lua_State *L ) { p->AddX(FArg(1)); return 0; } \ + static int addy( T* p, lua_State *L ) { p->AddY(FArg(1)); return 0; } \ + static int addz( T* p, lua_State *L ) { p->AddZ(FArg(1)); return 0; } \ + static int zoom( T* p, lua_State *L ) { p->SetZoom(FArg(1)); return 0; } \ + static int zoomx( T* p, lua_State *L ) { p->SetZoomX(FArg(1)); return 0; } \ + static int zoomy( T* p, lua_State *L ) { p->SetZoomY(FArg(1)); return 0; } \ + static int zoomz( T* p, lua_State *L ) { p->SetZoomZ(FArg(1)); return 0; } \ + static int zoomtowidth( T* p, lua_State *L ) { p->ZoomToWidth(FArg(1)); return 0; } \ + static int zoomtoheight( T* p, lua_State *L ) { p->ZoomToHeight(FArg(1)); return 0; } \ + static int stretchto( T* p, lua_State *L ) { p->StretchTo( RectF(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ + static int cropleft( T* p, lua_State *L ) { p->SetCropLeft(FArg(1)); return 0; } \ + static int croptop( T* p, lua_State *L ) { p->SetCropTop(FArg(1)); return 0; } \ + static int cropright( T* p, lua_State *L ) { p->SetCropRight(FArg(1)); return 0; } \ + static int cropbottom( T* p, lua_State *L ) { p->SetCropBottom(FArg(1)); return 0; } \ + static int fadeleft( T* p, lua_State *L ) { p->SetFadeLeft(FArg(1)); return 0; } \ + static int fadetop( T* p, lua_State *L ) { p->SetFadeTop(FArg(1)); return 0; } \ + static int faderight( T* p, lua_State *L ) { p->SetFadeRight(FArg(1)); return 0; } \ + static int fadebottom( T* p, lua_State *L ) { p->SetFadeBottom(FArg(1)); return 0; } \ + static int diffuse( T* p, lua_State *L ) { p->SetDiffuse( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ + static int diffuseleftedge( T* p, lua_State *L ) { p->SetDiffuseLeftEdge( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ + static int diffuserightedge( T* p, lua_State *L ) { p->SetDiffuseRightEdge( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ + static int diffusetopedge( T* p, lua_State *L ) { p->SetDiffuseTopEdge( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ + static int diffusebottomedge( T* p, lua_State *L ) { p->SetDiffuseBottomEdge( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ + static int diffusealpha( T* p, lua_State *L ) { p->SetDiffuseAlpha(FArg(1)); return 0; } \ + static int diffusecolor( T* p, lua_State *L ) { p->SetDiffuseColor( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ + static int glow( T* p, lua_State *L ) { p->SetGlow( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ + static int rotationx( T* p, lua_State *L ) { p->SetRotationX(FArg(1)); return 0; } \ + static int rotationy( T* p, lua_State *L ) { p->SetRotationY(FArg(1)); return 0; } \ + static int rotationz( T* p, lua_State *L ) { p->SetRotationZ(FArg(1)); return 0; } \ + static int heading( T* p, lua_State *L ) { p->AddRotationH(FArg(1)); return 0; } \ + static int pitch( T* p, lua_State *L ) { p->AddRotationP(FArg(1)); return 0; } \ + static int roll( T* p, lua_State *L ) { p->AddRotationR(FArg(1)); return 0; } \ + static int shadowlength( T* p, lua_State *L ) { p->SetShadowLength(FArg(1)); return 0; } \ + static int horizalign( T* p, lua_State *L ) { p->SetHorizAlignString(SArg(1)); return 0; } \ + static int vertalign( T* p, lua_State *L ) { p->SetVertAlignString(SArg(1)); return 0; } \ + static int diffuseblink( T* p, lua_State *L ) { p->SetEffectDiffuseBlink(); return 0; } \ + static int diffuseshift( T* p, lua_State *L ) { p->SetEffectDiffuseShift(); return 0; } \ + static int glowblink( T* p, lua_State *L ) { p->SetEffectGlowBlink(); return 0; } \ + static int glowshift( T* p, lua_State *L ) { p->SetEffectGlowShift(); return 0; } \ + static int rainbow( T* p, lua_State *L ) { p->SetEffectRainbow(); return 0; } \ + static int wag( T* p, lua_State *L ) { p->SetEffectWag(); return 0; } \ + static int bounce( T* p, lua_State *L ) { p->SetEffectBounce(); return 0; } \ + static int bob( T* p, lua_State *L ) { p->SetEffectBob(); return 0; } \ + static int pulse( T* p, lua_State *L ) { p->SetEffectPulse(); return 0; } \ + static int spin( T* p, lua_State *L ) { p->SetEffectSpin(); return 0; } \ + static int vibrate( T* p, lua_State *L ) { p->SetEffectVibrate(); return 0; } \ + static int stopeffect( T* p, lua_State *L ) { p->SetEffectNone(); return 0; } \ + static int effectcolor1( T* p, lua_State *L ) { p->SetEffectColor1( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ + static int effectcolor2( T* p, lua_State *L ) { p->SetEffectColor2( RageColor(FArg(1),FArg(2),FArg(3),FArg(4)) ); return 0; } \ + static int effectperiod( T* p, lua_State *L ) { p->SetEffectPeriod(FArg(1)); return 0; } \ + static int effectoffset( T* p, lua_State *L ) { p->SetEffectOffset(FArg(1)); return 0; } \ + static int effectdelay( T* p, lua_State *L ) { p->SetEffectDelay(FArg(1)); return 0; } \ + static int effectclock( T* p, lua_State *L ) { p->SetEffectClockString(SArg(1)); return 0; } \ + static int effectmagnitude( T* p, lua_State *L ) { p->SetEffectMagnitude( RageVector3(FArg(1),FArg(2),FArg(3)) ); return 0; } \ + static int scaletocover( T* p, lua_State *L ) { p->ScaleToCover( RectF(FArg(1), FArg(2), FArg(3), FArg(4)) ); return 0; } \ + static int scaletofit( T* p, lua_State *L ) { p->ScaleToFitInside( RectF(FArg(1), FArg(2), FArg(3), FArg(4)) ); return 0; } \ + static int animate( T* p, lua_State *L ) { p->EnableAnimation(BArg(1)); return 0; } \ + static int play( T* p, lua_State *L ) { p->EnableAnimation(true); return 0; } \ + static int pause( T* p, lua_State *L ) { p->EnableAnimation(false); return 0; } \ + static int setstate( T* p, lua_State *L ) { p->SetState(IArg(1)); return 0; } \ + static int texturewrapping( T* p, lua_State *L ) { p->SetTextureWrapping(BArg(1)); return 0; } \ + static int additiveblend( T* p, lua_State *L ) { p->SetBlendMode(BArg(1) ? BLEND_ADD : BLEND_NORMAL); return 0; } \ + static int blend( T* p, lua_State *L ) { p->SetBlendModeString(SArg(1)); return 0; } \ + static int zbuffer( T* p, lua_State *L ) { p->SetUseZBuffer(BArg(1)); return 0; } \ + static int ztest( T* p, lua_State *L ) { p->SetZTestMode(BArg(1)?ZTEST_WRITE_ON_PASS:ZTEST_OFF); return 0; } \ + static int ztestmode( T* p, lua_State *L ) { p->SetZTestModeString(SArg(1)); return 0; } \ + static int zwrite( T* p, lua_State *L ) { p->SetZWrite(BArg(1)); return 0; } \ + static int clearzbuffer( T* p, lua_State *L ) { p->SetClearZBuffer(BArg(1)); return 0; } \ + static int backfacecull( T* p, lua_State *L ) { p->SetCullMode(BArg(1) ? CULL_BACK : CULL_NONE); return 0; } \ + static int cullmode( T* p, lua_State *L ) { p->SetCullModeString(SArg(1)); return 0; } \ + static int hidden( T* p, lua_State *L ) { p->SetHidden(BArg(1)); return 0; } \ + static int hibernate( T* p, lua_State *L ) { p->SetHibernate(FArg(1)); return 0; } \ + static int draworder( T* p, lua_State *L ) { p->SetDrawOrder(IArg(1)); return 0; } \ + static int playcommand( T* p, lua_State *L ) { p->PlayCommand(SArg(1)); return 0; } \ + static int queuecommand( T* p, lua_State *L ) { p->QueueCommand(SArg(1)); return 0; } \ + + static void Register(lua_State *L) { + ADD_METHOD( sleep ) \ + ADD_METHOD( linear ) \ + ADD_METHOD( accelerate ) \ + ADD_METHOD( decelerate ) \ + ADD_METHOD( bouncebegin ) \ + ADD_METHOD( bounceend ) \ + ADD_METHOD( spring ) \ + ADD_METHOD( stoptweening ) \ + ADD_METHOD( finishtweening ) \ + ADD_METHOD( hurrytweening ) \ + ADD_METHOD( x ) \ + ADD_METHOD( y ) \ + ADD_METHOD( z ) \ + ADD_METHOD( addx ) \ + ADD_METHOD( addy ) \ + ADD_METHOD( addz ) \ + ADD_METHOD( zoom ) \ + ADD_METHOD( zoomx ) \ + ADD_METHOD( zoomy ) \ + ADD_METHOD( zoomz ) \ + ADD_METHOD( zoomtowidth ) \ + ADD_METHOD( zoomtoheight ) \ + ADD_METHOD( stretchto ) \ + ADD_METHOD( cropleft ) \ + ADD_METHOD( croptop ) \ + ADD_METHOD( cropright ) \ + ADD_METHOD( cropbottom ) \ + ADD_METHOD( fadeleft ) \ + ADD_METHOD( fadetop ) \ + ADD_METHOD( faderight ) \ + ADD_METHOD( fadebottom ) \ + ADD_METHOD( diffuse ) \ + ADD_METHOD( diffuseleftedge ) \ + ADD_METHOD( diffuserightedge ) \ + ADD_METHOD( diffusetopedge ) \ + ADD_METHOD( diffusebottomedge ) \ + ADD_METHOD( diffusealpha ) \ + ADD_METHOD( diffusecolor ) \ + ADD_METHOD( glow ) \ + ADD_METHOD( rotationx ) \ + ADD_METHOD( rotationy ) \ + ADD_METHOD( rotationz ) \ + ADD_METHOD( heading ) \ + ADD_METHOD( pitch ) \ + ADD_METHOD( roll ) \ + ADD_METHOD( shadowlength ) \ + ADD_METHOD( horizalign ) \ + ADD_METHOD( vertalign ) \ + ADD_METHOD( diffuseblink ) \ + ADD_METHOD( diffuseshift ) \ + ADD_METHOD( glowblink ) \ + ADD_METHOD( glowshift ) \ + ADD_METHOD( rainbow ) \ + ADD_METHOD( wag ) \ + ADD_METHOD( bounce ) \ + ADD_METHOD( bob ) \ + ADD_METHOD( pulse ) \ + ADD_METHOD( spin ) \ + ADD_METHOD( vibrate ) \ + ADD_METHOD( stopeffect ) \ + ADD_METHOD( effectcolor1 ) \ + ADD_METHOD( effectcolor2 ) \ + ADD_METHOD( effectperiod ) \ + ADD_METHOD( effectoffset ) \ + ADD_METHOD( effectdelay ) \ + ADD_METHOD( effectclock ) \ + ADD_METHOD( effectmagnitude ) \ + ADD_METHOD( scaletocover ) \ + ADD_METHOD( scaletofit ) \ + ADD_METHOD( animate ) \ + ADD_METHOD( play ) \ + ADD_METHOD( pause ) \ + ADD_METHOD( setstate ) \ + ADD_METHOD( texturewrapping ) \ + ADD_METHOD( additiveblend ) \ + ADD_METHOD( blend ) \ + ADD_METHOD( zbuffer ) \ + ADD_METHOD( ztest ) \ + ADD_METHOD( ztestmode ) \ + ADD_METHOD( zwrite ) \ + ADD_METHOD( clearzbuffer ) \ + ADD_METHOD( backfacecull ) \ + ADD_METHOD( cullmode ) \ + ADD_METHOD( hidden ) \ + ADD_METHOD( hibernate ) \ + ADD_METHOD( draworder ) \ + ADD_METHOD( playcommand ) \ + ADD_METHOD( queuecommand ) \ + Luna::Register( L ); + } +}; + #endif /* diff --git a/stepmania/src/LuaBinding.h b/stepmania/src/LuaBinding.h index 4c39e0a33a..dc4ebb0e9b 100644 --- a/stepmania/src/LuaBinding.h +++ b/stepmania/src/LuaBinding.h @@ -21,14 +21,18 @@ extern "C" #define FArg(n) ((float) luaL_checknumber(L,n)) +template +struct RegType +{ + const char *name; + int (*mfunc)(T *p, lua_State *L); +}; template class Luna { typedef struct { T *pT; } userdataType; public: - typedef int (*mfp)(T *p, lua_State *L); - typedef struct { const char *name; mfp mfunc; } RegType; static void Register(lua_State *L) { lua_newtable(L); @@ -56,8 +60,9 @@ public: lua_settable(L, metatable); // fill method table with methods from class T - for (vector::const_iterator i = s_pvMethods->begin(); i != s_pvMethods->end(); i++) { - const RegType *l = &(*i); + for (unsigned i=0; isize(); i++ ) + { + const MyRegType *l = &(*s_pvMethods)[i]; lua_pushstring(L, l->name); lua_pushlightuserdata(L, (void*)l); lua_pushcclosure(L, thunk, 1); @@ -83,7 +88,7 @@ private: T *obj = check(L, 1); // get 'self', or if you prefer, 'this' lua_remove(L, 1); // remove self so member function args start at index 1 // get member function from upvalue - RegType *l = static_cast(lua_touserdata(L, lua_upvalueindex(1))); + MyRegType *l = static_cast(lua_touserdata(L, lua_upvalueindex(1))); return (*(l->mfunc))(obj,L); // call member function } @@ -98,8 +103,15 @@ public: return 1; // userdata containing pointer to T object } - typedef vector RegTypeVector; + typedef RegType MyRegType; + typedef vector RegTypeVector; static RegTypeVector *s_pvMethods; + + static void CreateMethodsVector() + { + if(s_pvMethods==NULL) + s_pvMethods = new RegTypeVector; + } private: static const char s_className[]; @@ -121,7 +133,7 @@ static Luna##T registera; \ void T::PushSelf( lua_State *L ) { Luna##T::Push( L, this ); } #define ADD_METHOD( method_name ) \ - { if(s_pvMethods==NULL) s_pvMethods = new RegTypeVector; RegType r = {#method_name,method_name}; s_pvMethods->push_back(r); } + { CreateMethodsVector(); RegType r = {#method_name,method_name}; s_pvMethods->push_back(r); } #endif