From d413a0044d652e370e0fc9eb555886747161ee76 Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Sun, 7 Aug 2011 01:05:43 -0500 Subject: [PATCH] [LifeMeterBattery] Added LostLife param to LifeChanged message. Converted LifeMeterBattery lives to an AutoActor. --- Docs/Changelog_sm5.txt | 5 ++ ...1x4.redir => LifeMeterBattery lives.redir} | 0 .../_lives 1x4.png} | Bin .../LifeMeterBattery lives/default.lua | 20 ++++++ src/LifeMeterBattery.cpp | 61 ++++++------------ src/LifeMeterBattery.h | 4 +- 6 files changed, 45 insertions(+), 45 deletions(-) rename Themes/_fallback/Graphics/{LifeMeterBattery lives 1x4.redir => LifeMeterBattery lives.redir} (100%) rename Themes/default/Graphics/{LifeMeterBattery lives 1x4.png => LifeMeterBattery lives/_lives 1x4.png} (100%) create mode 100644 Themes/default/Graphics/LifeMeterBattery lives/default.lua diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt index ea3b92493f..975e00f49e 100644 --- a/Docs/Changelog_sm5.txt +++ b/Docs/Changelog_sm5.txt @@ -8,6 +8,11 @@ ________________________________________________________________________________ StepMania 5.0 Preview 3 | 20110??? -------------------------------------------------------------------------------- +2011/08/07 +---------- +* [LifeMeterBattery] Added LostLife param to LifeChanged message. [AJ] +* [LifeMeterBattery] Converted LifeMeterBattery lives to an AutoActor. [AJ] + 2011/08/06 ---------- * [NoteSkins/beat/default] Fix Issue 425. [AJ] diff --git a/Themes/_fallback/Graphics/LifeMeterBattery lives 1x4.redir b/Themes/_fallback/Graphics/LifeMeterBattery lives.redir similarity index 100% rename from Themes/_fallback/Graphics/LifeMeterBattery lives 1x4.redir rename to Themes/_fallback/Graphics/LifeMeterBattery lives.redir diff --git a/Themes/default/Graphics/LifeMeterBattery lives 1x4.png b/Themes/default/Graphics/LifeMeterBattery lives/_lives 1x4.png similarity index 100% rename from Themes/default/Graphics/LifeMeterBattery lives 1x4.png rename to Themes/default/Graphics/LifeMeterBattery lives/_lives 1x4.png diff --git a/Themes/default/Graphics/LifeMeterBattery lives/default.lua b/Themes/default/Graphics/LifeMeterBattery lives/default.lua new file mode 100644 index 0000000000..adcc839a62 --- /dev/null +++ b/Themes/default/Graphics/LifeMeterBattery lives/default.lua @@ -0,0 +1,20 @@ +local player = Var "Player" +local blinkTime = 1.2 + +local t = Def.ActorFrame{ + LoadActor("_lives")..{ + -- xxx: assumes course is 4lives + InitCommand=cmd(pause;setstate,3); + LifeChangedMessageCommand=function(self,param) + if param.Player == player then + if param.LivesLeft <= 4 then + self:setstate( math.max(param.LivesLeft-1,0) ) + else + self:setstate(3) + end + end + end; + }; +}; + +return t; \ No newline at end of file diff --git a/src/LifeMeterBattery.cpp b/src/LifeMeterBattery.cpp index 3f49487a17..34f63575e7 100644 --- a/src/LifeMeterBattery.cpp +++ b/src/LifeMeterBattery.cpp @@ -9,12 +9,9 @@ LifeMeterBattery::LifeMeterBattery() { - m_iLivesLeft = GAMESTATE->m_SongOptions.GetStage().m_iBatteryLives; m_iTrailingLivesLeft = m_iLivesLeft; - m_fBatteryBlinkTime = 0; - m_soundGainLife.Load( THEME->GetPathS("LifeMeterBattery","gain") ); m_soundLoseLife.Load( THEME->GetPathS("LifeMeterBattery","lose"),true ); } @@ -34,22 +31,19 @@ void LifeMeterBattery::Load( const PlayerState *pPlayerState, PlayerStageStats * LET_GO_SUBTRACT_LIVES.Load(sType, "LetGoSubtractLives"); LIVES_FORMAT.Load(sType, "NumLivesFormat"); - BATTERY_BLINK_TIME.Load(sType, "BatteryBlinkTime"); // 1.2f by default bool bPlayerEnabled = GAMESTATE->IsPlayerEnabled( pPlayerState ); + LuaThreadVariable var( "Player", LuaReference::Create(m_pPlayerState->m_PlayerNumber) ); m_sprFrame.Load( THEME->GetPathG(sType,"frame") ); this->AddChild( m_sprFrame ); - m_sprBattery.Load( THEME->GetPathG(sType,"lives 1x4") ); - m_sprBattery.SetName( ssprintf("BatteryP%i",int(pn+1)) ); - // required because it's a sprite. todo: allow for AutoActoring but detect - // Sprites for old behavior. -aj - m_sprBattery.StopAnimating(); + m_sprBattery.Load( THEME->GetPathG(sType,"lives") ); + m_sprBattery->SetName( ssprintf("BatteryP%i",int(pn+1)) ); if( bPlayerEnabled ) { ActorUtil::LoadAllCommandsAndSetXY( m_sprBattery, sType ); - this->AddChild( &m_sprBattery ); + this->AddChild( m_sprBattery ); } m_textNumLives.LoadFromFont( THEME->GetPathF(sType, "lives") ); @@ -120,7 +114,6 @@ void LifeMeterBattery::SubtractLives( int iLives ) m_textNumLives.PlayCommand("LoseLife"); Refresh(); - m_fBatteryBlinkTime = BATTERY_BLINK_TIME; } void LifeMeterBattery::AddLives( int iLives ) @@ -134,7 +127,6 @@ void LifeMeterBattery::AddLives( int iLives ) m_textNumLives.PlayCommand("GainLife"); Refresh(); - m_fBatteryBlinkTime = 0; } void LifeMeterBattery::ChangeLives(int iLifeDiff) @@ -150,19 +142,27 @@ void LifeMeterBattery::ChangeLife( TapNoteScore score ) if( m_iLivesLeft == 0 ) return; + bool bSubtract = false; // this probably doesn't handle hold checkpoints. -aj if( score == TNS_HitMine && MINES_SUBTRACT_LIVES > 0 ) + { SubtractLives(MINES_SUBTRACT_LIVES); + bSubtract = true; + } else { if( score < MIN_SCORE_TO_KEEP_LIFE && score > TNS_CheckpointMiss && SUBTRACT_LIVES > 0 ) + { SubtractLives(SUBTRACT_LIVES); + bSubtract = true; + } } Message msg( "LifeChanged" ); msg.SetParam( "Player", m_pPlayerState->m_PlayerNumber ); msg.SetParam( "LifeMeter", LuaReference::CreateFromPush(*this) ); msg.SetParam( "LivesLeft", GetLivesLeft() ); + msg.SetParam( "LostLife", bSubtract ); MESSAGEMAN->Broadcast( msg ); } @@ -171,15 +171,20 @@ void LifeMeterBattery::ChangeLife( HoldNoteScore score, TapNoteScore tscore ) if( m_iLivesLeft == 0 ) return; + bool bSubtract = false; if( score == HNS_Held && HELD_ADD_LIVES > 0 ) AddLives(HELD_ADD_LIVES); if( score == HNS_LetGo && LET_GO_SUBTRACT_LIVES > 0 ) + { SubtractLives(LET_GO_SUBTRACT_LIVES); + bSubtract = true; + } Message msg( "LifeChanged" ); msg.SetParam( "Player", m_pPlayerState->m_PlayerNumber ); msg.SetParam( "LifeMeter", LuaReference::CreateFromPush(*this) ); msg.SetParam( "LivesLeft", GetLivesLeft() ); + msg.SetParam( "LostLife", bSubtract ); MESSAGEMAN->Broadcast( msg ); } @@ -223,41 +228,13 @@ int LifeMeterBattery::GetRemainingLives() const } void LifeMeterBattery::Refresh() { - // todo: make this restraint metricable + handle non-sprites -aj - if( m_iLivesLeft <= 4 ) - { - m_textNumLives.SetText( "" ); - m_sprBattery.SetState( max(m_iLivesLeft-1,0) ); - } - else - { - //m_textNumLives.SetText( ssprintf("x%d", m_iLivesLeft-1) ); - m_textNumLives.SetText( ssprintf(LIVES_FORMAT.GetValue(), m_iLivesLeft-1) ); - m_sprBattery.SetState( 3 ); - } + m_textNumLives.SetText( ssprintf(LIVES_FORMAT.GetValue(), m_iLivesLeft-1) ); + //update m_sprBattery } void LifeMeterBattery::Update( float fDeltaTime ) { LifeMeter::Update( fDeltaTime ); - - if( m_fBatteryBlinkTime > 0 ) - { - m_fBatteryBlinkTime -= fDeltaTime; - int iFrame1 = m_iLivesLeft-1; - int iFrame2 = m_iTrailingLivesLeft-1; - - int iFrameNo = (int(m_fBatteryBlinkTime*15)%2) ? iFrame1 : iFrame2; - CLAMP( iFrameNo, 0, 3 ); - m_sprBattery.SetState( iFrameNo ); - } - else - { - m_fBatteryBlinkTime = 0; - int iFrameNo = m_iLivesLeft-1; - CLAMP( iFrameNo, 0, 3 ); - m_sprBattery.SetState( iFrameNo ); - } } // lua start diff --git a/src/LifeMeterBattery.h b/src/LifeMeterBattery.h index 648811a9fc..ebe96b83cb 100644 --- a/src/LifeMeterBattery.h +++ b/src/LifeMeterBattery.h @@ -44,8 +44,6 @@ private: int m_iLivesLeft; // dead when 0 int m_iTrailingLivesLeft; // lags m_iLivesLeft - float m_fBatteryBlinkTime; // if > 0 battery is blinking - ThemeMetric BATTERY_BLINK_TIME; ThemeMetric MIN_SCORE_TO_KEEP_LIFE; ThemeMetric DANGER_THRESHOLD; @@ -56,7 +54,7 @@ private: ThemeMetric LIVES_FORMAT; AutoActor m_sprFrame; - Sprite m_sprBattery; + AutoActor m_sprBattery; BitmapText m_textNumLives; PercentageDisplay m_Percent;