void DrawMask( float fPercent ) { RectI rect; int iChamber; float fChamberOverflowPercent; GetChamberIndexAndOverslow( fPercent, iChamber, fChamberOverflowPercent ); float fRightPercent = GetRightEdgePercent( iChamber, fChamberOverflowPercent ); float fHeightPercent = GetHeightPercent( iChamber, fChamberOverflowPercent ); float fChamberLeftPercent = GetChamberLeftPercent( iChamber ); float fChamberRightPercent = GetChamberRightPercent( iChamber ); // draw mask for vertical chambers rect.left = int(-METER_WIDTH/2 + fChamberLeftPercent*METER_WIDTH-1); rect.top = int(-METER_HEIGHT/2); rect.right = int(-METER_WIDTH/2 + fChamberRightPercent*METER_WIDTH+1); rect.bottom = int(-METER_HEIGHT/2 + fHeightPercent*METER_HEIGHT); rect.left = MIN( rect.left, + METER_WIDTH/2 ); rect.right = MIN( rect.right, + METER_WIDTH/2 ); m_quadMask.StretchTo( rect ); m_quadMask.Draw(); // draw mask for horizontal chambers rect.left = (int)(-METER_WIDTH/2 + fRightPercent*METER_WIDTH); rect.top = -METER_HEIGHT/2; rect.right = +METER_WIDTH/2; rect.bottom = +METER_HEIGHT/2; rect.left = MIN( rect.left, + METER_WIDTH/2 ); rect.right = MIN( rect.right, + METER_WIDTH/2 ); m_quadMask.StretchTo( rect ); m_quadMask.Draw(); }
void BackgroundImpl::Init() { if( m_bInitted ) return; m_bInitted = true; m_bDangerAllWasVisible = false; m_StaticBackgroundDef = BackgroundDef(); if( !USE_STATIC_BG ) { m_StaticBackgroundDef.m_sColor1 = "#00000000"; m_StaticBackgroundDef.m_sColor2 = "#00000000"; } // load transitions { ASSERT( m_mapNameToTransition.empty() ); vector<RString> vsPaths, vsNames; BackgroundUtil::GetBackgroundTransitions( "", vsPaths, vsNames ); for( unsigned i=0; i<vsPaths.size(); i++ ) { const RString &sPath = vsPaths[i]; const RString &sName = vsNames[i]; XNode xml; XmlFileUtil::LoadFromFileShowErrors(xml, sPath); ASSERT( xml.GetName() == "BackgroundTransition" ); BackgroundTransition &bgt = m_mapNameToTransition[sName]; RString sCmdLeaves; bool bSuccess = xml.GetAttrValue( "LeavesCommand", sCmdLeaves ); ASSERT( bSuccess ); bgt.cmdLeaves = ActorUtil::ParseActorCommands( sCmdLeaves ); RString sCmdRoot; bSuccess = xml.GetAttrValue( "RootCommand", sCmdRoot ); ASSERT( bSuccess ); bgt.cmdRoot = ActorUtil::ParseActorCommands( sCmdRoot ); } } bool bOneOrMoreChars = false; bool bShowingBeginnerHelper = false; FOREACH_HumanPlayer( p ) { bOneOrMoreChars = true; // Disable dancing characters if Beginner Helper will be showing. if( PREFSMAN->m_bShowBeginnerHelper && BeginnerHelper::CanUse() && GAMESTATE->m_pCurSteps[p] && GAMESTATE->m_pCurSteps[p]->GetDifficulty() == Difficulty_Beginner ) bShowingBeginnerHelper = true; } if( bOneOrMoreChars && !bShowingBeginnerHelper && SHOW_DANCING_CHARACTERS ) m_pDancingCharacters = new DancingCharacters; RageColor c = GetBrightnessColor(0); m_quadBorderLeft.StretchTo( RectF(SCREEN_LEFT,SCREEN_TOP,LEFT_EDGE,SCREEN_BOTTOM) ); m_quadBorderLeft.SetDiffuse( c ); m_quadBorderTop.StretchTo( RectF(LEFT_EDGE,SCREEN_TOP,RIGHT_EDGE,TOP_EDGE) ); m_quadBorderTop.SetDiffuse( c ); m_quadBorderRight.StretchTo( RectF(RIGHT_EDGE,SCREEN_TOP,SCREEN_RIGHT,SCREEN_BOTTOM) ); m_quadBorderRight.SetDiffuse( c ); m_quadBorderBottom.StretchTo( RectF(LEFT_EDGE,BOTTOM_EDGE,RIGHT_EDGE,SCREEN_BOTTOM) ); m_quadBorderBottom.SetDiffuse( c ); this->AddChild( &m_quadBorderLeft ); this->AddChild( &m_quadBorderTop ); this->AddChild( &m_quadBorderRight ); this->AddChild( &m_quadBorderBottom ); this->AddChild( &m_Brightness ); }