From ae4ae98f4085922e8d4fcc2ecc6bc00c2699db54 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Wed, 16 Aug 2006 22:55:14 +0000 Subject: [PATCH] xml --- stepmania/src/GrooveRadar.cpp | 106 ++++++++++++++++++++++++++++------ stepmania/src/GrooveRadar.h | 22 +++---- 2 files changed, 98 insertions(+), 30 deletions(-) diff --git a/stepmania/src/GrooveRadar.cpp b/stepmania/src/GrooveRadar.cpp index 1daecba54d..2eb463f1a9 100644 --- a/stepmania/src/GrooveRadar.cpp +++ b/stepmania/src/GrooveRadar.cpp @@ -9,6 +9,9 @@ #include "RageMath.h" #include "ThemeMetric.h" #include "CommonMetrics.h" +#include "ActorUtil.h" + +REGISTER_ACTOR_CLASS(GrooveRadar) #define LABEL_OFFSET_X( i ) THEME->GetMetricF("GrooveRadar",ssprintf("Label%dOffsetX",i+1)) #define LABEL_OFFSET_Y( i ) THEME->GetMetricF("GrooveRadar",ssprintf("Label%dOffsetY",i+1)) @@ -47,6 +50,11 @@ GrooveRadar::GrooveRadar() } } +void GrooveRadar::LoadFromNode( const RString& sDir, const XNode* pNode ) +{ + ActorFrame::LoadFromNode( sDir, pNode ); +} + void GrooveRadar::TweenOnScreen() { for( int c=0; cGetRadarValues( pn ); + m_GrooveRadarValueMap[pn].SetFromSteps( rv ); +} + + GrooveRadar::GrooveRadarValueMap::GrooveRadarValueMap() { m_bValuesVisible = false; @@ -94,28 +125,25 @@ GrooveRadar::GrooveRadarValueMap::GrooveRadarValueMap() } } -void GrooveRadar::GrooveRadarValueMap::SetFromSteps( PlayerNumber pn, const Steps* pSteps ) // NULL means no song +void GrooveRadar::GrooveRadarValueMap::SetEmpty() { - if( pSteps != NULL ) - { - for( int c=0; cGetRadarValues( pn )[c]; - } + m_bValuesVisible = false; +} - if( !m_bValuesVisible ) // the values WERE invisible - m_PercentTowardNew = 1; - else - m_PercentTowardNew = 0; - - m_bValuesVisible = true; - } - else // pSteps == NULL +void GrooveRadar::GrooveRadarValueMap::SetFromSteps( const RadarValues &rv ) +{ + m_bValuesVisible = true; + for( int c=0; c +{ +public: + LunaGrooveRadar() { LUA->Register( Register ); } + + static int SetFromRadarValues( T* p, lua_State *L ) + { + PlayerNumber pn = (PlayerNumber)IArg(1); + if( lua_isnil(L,2) ) + { + p->SetEmpty( pn ); + } + else + { + RadarValues *pRV = Luna::check(L,2); + p->SetFromRadarValues( pn, *pRV ); + } + return 0; + } + static int SetEmpty( T* p, lua_State *L ) { p->SetEmpty( (PlayerNumber)IArg(1) ); return 0; } + static int tweenonscreen( T* p, lua_State *L ) { p->TweenOnScreen(); return 0; } + static int tweenoffscreen( T* p, lua_State *L ) { p->TweenOffScreen(); return 0; } + + static void Register(lua_State *L) + { + ADD_METHOD( SetFromRadarValues ); + ADD_METHOD( SetEmpty ); + ADD_METHOD( tweenonscreen ); + ADD_METHOD( tweenoffscreen ); + + Luna::Register( L ); + } +}; + +LUA_REGISTER_DERIVED_CLASS( GrooveRadar, ActorFrame ) +// lua end + /* * (c) 2001-2004 Chris Danford * All rights reserved. diff --git a/stepmania/src/GrooveRadar.h b/stepmania/src/GrooveRadar.h index 6d203451b4..aebb626de3 100644 --- a/stepmania/src/GrooveRadar.h +++ b/stepmania/src/GrooveRadar.h @@ -8,26 +8,25 @@ #include "PlayerNumber.h" #include "GameConstantsAndTypes.h" class Steps; - +struct RadarValues; class GrooveRadar : public ActorFrame { public: GrooveRadar(); + virtual Actor *Copy() const; + virtual void LoadFromNode( const RString& sDir, const XNode* pNode ); - void SetEmpty( PlayerNumber pn ) - { - SetFromSteps( pn, NULL ); - } - - void SetFromSteps( PlayerNumber pn, Steps* pSteps ) // NULL means no Song - { - m_GrooveRadarValueMap[pn].SetFromSteps( pn, pSteps ); - } + void SetEmpty( PlayerNumber pn ); + void SetFromRadarValues( PlayerNumber pn, const RadarValues &rv ); + void SetFromSteps( PlayerNumber pn, Steps* pSteps ); // NULL means no Steps void TweenOnScreen(); void TweenOffScreen(); + // Lua + void PushSelf( lua_State *L ); + protected: // the value map must be a separate Actor so we can tween it separately from the labels @@ -39,7 +38,8 @@ protected: virtual void Update( float fDeltaTime ); virtual void DrawPrimitives(); - void SetFromSteps( PlayerNumber pn, const Steps* pSteps ); // NULL means no Song + void SetEmpty(); + void SetFromSteps( const RadarValues &rv ); void SetRadius( float f ) { m_size.x = f; m_size.y = f; }