diff --git a/stepmania/src/HoldJudgment.cpp b/stepmania/src/HoldJudgment.cpp index 09f6971d75..85aa8dbc79 100644 --- a/stepmania/src/HoldJudgment.cpp +++ b/stepmania/src/HoldJudgment.cpp @@ -4,10 +4,13 @@ #include "GameConstantsAndTypes.h" #include "ThemeManager.h" #include "ThemeMetric.h" +#include "ActorUtil.h" +#include "StatsManager.h" static ThemeMetric HELD_COMMAND ("HoldJudgment","HeldCommand"); static ThemeMetric LET_GO_COMMAND ("HoldJudgment","LetGoCommand"); +REGISTER_ACTOR_CLASS( HoldJudgment ) HoldJudgment::HoldJudgment() { @@ -15,6 +18,8 @@ HoldJudgment::HoldJudgment() m_sprJudgment->StopAnimating(); ResetAnimation(); this->AddChild( m_sprJudgment ); + + m_mpToTrack = MultiPlayer_INVALID; } void HoldJudgment::ResetAnimation() @@ -48,6 +53,43 @@ void HoldJudgment::SetHoldJudgment( HoldNoteScore hns ) } } +void HoldJudgment::LoadFromMultiPlayer( MultiPlayer mp ) +{ + ASSERT( m_mpToTrack == MultiPlayer_INVALID ); // assert only load once + m_mpToTrack = mp; + this->SubscribeToMessage( enum_add2(Message_ShowHoldJudgmentMuliPlayerP1,m_mpToTrack) ); +} + +void HoldJudgment::HandleMessage( const RString &sMessage ) +{ + ASSERT( m_mpToTrack != MultiPlayer_INVALID ); + if( sMessage == MessageToString( enum_add2(Message_ShowHoldJudgmentMuliPlayerP1,m_mpToTrack) ) ) + SetHoldJudgment( STATSMAN->m_CurStageStats.m_multiPlayer[m_mpToTrack].hnsLast ); + + ActorFrame::HandleMessage( sMessage ); +} + +// lua start +#include "LuaBinding.h" + +class LunaHoldJudgment: public Luna +{ +public: + LunaHoldJudgment() { LUA->Register( Register ); } + + static int LoadFromMultiPlayer( T* p, lua_State *L ) { p->LoadFromMultiPlayer( (MultiPlayer)IArg(1) ); return 0; } + + static void Register(lua_State *L) + { + ADD_METHOD( LoadFromMultiPlayer ); + + Luna::Register( L ); + } +}; + +LUA_REGISTER_DERIVED_CLASS( HoldJudgment, ActorFrame ) +// lua end + /* * (c) 2001-2004 Chris Danford * All rights reserved. diff --git a/stepmania/src/HoldJudgment.h b/stepmania/src/HoldJudgment.h index 36a5bf6af4..62c28823bb 100644 --- a/stepmania/src/HoldJudgment.h +++ b/stepmania/src/HoldJudgment.h @@ -10,12 +10,21 @@ class HoldJudgment : public ActorFrame { public: HoldJudgment(); + virtual Actor *Copy() const; void SetHoldJudgment( HoldNoteScore hns ); + void LoadFromMultiPlayer( MultiPlayer mp ); + void HandleMessage( const RString &sMessage ); + + // + // Lua + // + virtual void PushSelf( lua_State *L ); protected: void ResetAnimation(); AutoActor m_sprJudgment; + MultiPlayer m_mpToTrack; }; #endif diff --git a/stepmania/src/Judgment.cpp b/stepmania/src/Judgment.cpp index 39e1c176a3..e9c386985d 100644 --- a/stepmania/src/Judgment.cpp +++ b/stepmania/src/Judgment.cpp @@ -5,19 +5,24 @@ #include "GameState.h" #include "ThemeManager.h" #include "ThemeMetric.h" +#include "ActorUtil.h" +#include "StatsManager.h" -static ThemeMetric W1_COMMAND ("Judgment","W1Command"); -static ThemeMetric W2_COMMAND ("Judgment","W2Command"); -static ThemeMetric W3_COMMAND ("Judgment","W3Command"); -static ThemeMetric W4_COMMAND ("Judgment","W4Command"); -static ThemeMetric W5_COMMAND ("Judgment","W5Command"); +static ThemeMetric W1_COMMAND ("Judgment","W1Command"); +static ThemeMetric W2_COMMAND ("Judgment","W2Command"); +static ThemeMetric W3_COMMAND ("Judgment","W3Command"); +static ThemeMetric W4_COMMAND ("Judgment","W4Command"); +static ThemeMetric W5_COMMAND ("Judgment","W5Command"); static ThemeMetric MISS_COMMAND ("Judgment","MissCommand"); +REGISTER_ACTOR_CLASS( Judgment ) + Judgment::Judgment() { + m_mpToTrack = MultiPlayer_INVALID; } -void Judgment::Load( bool bBeginner ) +void Judgment::LoadNormal( bool bBeginner ) { m_sprJudgment.Load( THEME->GetPathG("Judgment",bBeginner?"BeginnerLabel":"label") ); ASSERT( m_sprJudgment.GetNumStates() == 6 || m_sprJudgment.GetNumStates() == 12 ); @@ -26,7 +31,6 @@ void Judgment::Load( bool bBeginner ) this->AddChild( &m_sprJudgment ); } - void Judgment::Reset() { m_sprJudgment.FinishTweening(); @@ -77,6 +81,50 @@ void Judgment::SetJudgment( TapNoteScore score, bool bEarly ) } } +void Judgment::LoadFromMultiPlayer( MultiPlayer mp ) +{ + LoadNormal( false ); + ASSERT( m_mpToTrack == MultiPlayer_INVALID ); // assert only load once + m_mpToTrack = mp; + this->SubscribeToMessage( enum_add2(Message_ShowJudgmentMuliPlayerP1,m_mpToTrack) ); +} + +void Judgment::HandleMessage( const RString &sMessage ) +{ + ASSERT( m_mpToTrack != MultiPlayer_INVALID ); + if( sMessage == MessageToString( enum_add2(Message_ShowJudgmentMuliPlayerP1,m_mpToTrack) ) ) + SetJudgment( STATSMAN->m_CurStageStats.m_multiPlayer[m_mpToTrack].tnsLast, false ); // FIXME: save and pass early bool? + + ActorFrame::HandleMessage( sMessage ); +} + +void Judgment::DrawPrimitives() +{ + ActorFrame::DrawPrimitives(); +} + + +// lua start +#include "LuaBinding.h" + +class LunaJudgment: public Luna +{ +public: + LunaJudgment() { LUA->Register( Register ); } + + static int LoadFromMultiPlayer( T* p, lua_State *L ) { p->LoadFromMultiPlayer( (MultiPlayer)IArg(1) ); return 0; } + + static void Register(lua_State *L) + { + ADD_METHOD( LoadFromMultiPlayer ); + + Luna::Register( L ); + } +}; + +LUA_REGISTER_DERIVED_CLASS( Judgment, ActorFrame ) +// lua end + /* * (c) 2001-2004 Chris Danford * All rights reserved. diff --git a/stepmania/src/Judgment.h b/stepmania/src/Judgment.h index bf3de4298a..167bcb7cd5 100644 --- a/stepmania/src/Judgment.h +++ b/stepmania/src/Judgment.h @@ -12,12 +12,22 @@ class Judgment : public ActorFrame { public: Judgment(); - void Load( bool bAlternateLabel ); + virtual Actor *Copy() const; + void LoadNormal( bool bAlternateLabel ); + void LoadFromMultiPlayer( MultiPlayer mp ); void Reset(); void SetJudgment( TapNoteScore score, bool bEarly ); + void HandleMessage( const RString &sMessage ); + virtual void DrawPrimitives(); + + // + // Lua + // + virtual void PushSelf( lua_State *L ); protected: Sprite m_sprJudgment; + MultiPlayer m_mpToTrack; }; #endif