void ScreenPrompt::BeginScreen() { ScreenWithMenuElements::BeginScreen(); m_Answer = g_defaultAnswer; ENUM_CLAMP( m_Answer, PromptAnswer(0), PromptAnswer(g_PromptType) ); m_textQuestion.SetText( g_sText ); SET_XY( m_textQuestion ); m_textQuestion.PlayCommand( "On" ); m_sprCursor->PlayCommand( "On" ); for( int i=0; i<=g_PromptType; i++ ) { RString sElem = ssprintf("Answer%dOf%d", i+1, g_PromptType+1); m_textAnswer[i].SetName( sElem ); LOAD_ALL_COMMANDS(m_textAnswer[i]); // Side note: Because LOAD_ALL_COMMANDS occurs here, InitCommand will // not be run for the actors. People can just use OnCommand instead. RString sAnswer = PromptAnswerToString( (PromptAnswer)i ); // FRAGILE if( g_PromptType == PROMPT_OK ) sAnswer = "OK"; m_textAnswer[i].SetText( ANSWER_TEXT(sAnswer) ); m_textAnswer[i].PlayCommand( "On" ); SET_XY( m_textAnswer[i] ); } for( int i=g_PromptType+1; i<NUM_PromptAnswer; i++ ) m_textAnswer[i].SetText( "" ); PositionCursor(); }
void ScreenPrompt::BeginScreen() { ScreenWithMenuElements::BeginScreen(); m_Answer = g_defaultAnswer; ENUM_CLAMP( m_Answer, PromptAnswer(0), PromptAnswer(g_PromptType) ); m_textQuestion.SetText( g_sText ); SET_XY( m_textQuestion ); m_textQuestion.PlayCommand( "On" ); m_sprCursor->PlayCommand( "On" ); for( int i=0; i<=g_PromptType; i++ ) { RString sElem = ssprintf("Answer%dOf%d", i+1, g_PromptType+1); m_textAnswer[i].SetName( sElem ); RString sAnswer = PromptAnswerToString( (PromptAnswer)i ); // FRAGILE if( g_PromptType == PROMPT_OK ) sAnswer = "OK"; m_textAnswer[i].SetText( ANSWER_TEXT(sAnswer) ); m_textAnswer[i].PlayCommand( "On" ); SET_XY( m_textAnswer[i] ); } for( int i=g_PromptType+1; i<NUM_PromptAnswer; i++ ) m_textAnswer[i].SetText( "" ); PositionCursor(); }
void ScreenTextEntry::BeginScreen() { m_sAnswer = RStringToWstring( g_sInitialAnswer ); ScreenWithMenuElements::BeginScreen(); m_textQuestion.SetText( g_sQuestion ); SET_XY( m_textQuestion ); SET_XY( m_textAnswer ); UpdateAnswerText(); }
void ScreenNetRoom::Init() { ScreenNetSelectBase::Init(); m_soundChangeSel.Load( THEME->GetPathS("ScreenNetRoom","change sel")); m_iRoomPlace = 0; m_sprTitleBG.Load( THEME->GetPathG( m_sName, "TitleBG" ) ); m_sprTitleBG.SetName( "TitleBG" ); m_sprTitleBG.SetWidth( TITLEBG_WIDTH ); m_sprTitleBG.SetHeight( TITLEBG_HEIGHT ); SET_XY_AND_ON_COMMAND( m_sprTitleBG ); this->AddChild( &m_sprTitleBG); m_textTitle.LoadFromFont( THEME->GetPathF(m_sName,"wheel") ); m_textTitle.SetShadowLength( 0 ); m_textTitle.SetName( "Title" ); m_textTitle.SetMaxWidth( TITLEBG_WIDTH ); SET_XY_AND_ON_COMMAND( m_textTitle ); this->AddChild( &m_textTitle); m_RoomWheel.Load("RoomWheel"); m_RoomWheel.SetName( "RoomWheel" ); SET_XY( m_RoomWheel ); m_RoomWheel.TweenOnScreen(); m_RoomWheel.SetDrawOrder(1); this->AddChild( &m_RoomWheel ); this->MoveToHead( &m_RoomWheel ); ON_COMMAND( m_RoomWheel ); NSMAN->ReportNSSOnOff(7); }
void main(void) { int ADC10_Result=0; double ADC10_RESULT=0; char a[5]; int i; lcd_init(); adc_init(); LCD_INIT(); /*SET_XY(0*T_CHAR,0); W_STR("X"); SET_XY(0*T_CHAR,1); W_STR("Z"); SET_XY(0*T_CHAR,2); W_STR("J"); SET_XY(0*T_CHAR,3); W_STR("jiaodu"); SET_XY(0*T_CHAR,4); W_STR("jiaosudu"); */ while(1) { for(i=0;i<20;i++) { ADC10CTL0 |=ENC+ADC10SC; //开始转换 while((ADC10CTL0 &ADC10IFG)==0); //等待ADC10IFG标志变高(转换完成) ADC10_Result+=ADC10MEM; //读取采样结果 } ADC10_RESULT=ADC10_Result/20*100; ADC10_RESULT=ADC10_Result/1024*5/2; ADC10_RESULT=(ADC10_Result-ADC_STEP)/ADC_G; //if(ADC10_RESULT>=1) //ADC10_RESULT=1.0; ADC10_RESULT=asin(ADC10_Result/100.0)/3.14*180; ADC10_Result=(int)abs(ADC10_Result); a[0]=ADC10_Result/100+48; a[1]=ADC10_Result/10%10+48; a[2]='.'; a[3]=ADC10_Result%10+48; a[4]='\0'; SET_XY(0*T_CHAR,0); W_STR(a); for(i=0;i<500;i++) { for(ADC10_Result=0;ADC10_Result<10;ADC10_Result++) { ; } } } }
ScreenCredits::ScreenCredits( CString sName ) : ScreenAttract( sName ) { vector<Song*> arraySongs; SONGMAN->GetSongs( arraySongs ); SongUtil::SortSongPointerArrayByTitle( arraySongs ); // FIXME: Redo this screen with a BGA m_ScrollerBackgrounds.SetName( "Backgrounds" ); m_ScrollerBackgrounds.Load( BACKGROUNDS_SCROLL_SECONDS_PER_ITEM, 4, RageVector3(0, 0, 0), RageVector3(0, 0, 0), RageVector3(BACKGROUNDS_SPACING_X, BACKGROUNDS_SPACING_Y, 0), RageVector3(0, 0, 0) ); SET_XY( m_ScrollerBackgrounds ); this->AddChild( &m_ScrollerBackgrounds ); m_ScrollerFrames.SetName( "Backgrounds" ); m_ScrollerFrames.Load( BACKGROUNDS_SCROLL_SECONDS_PER_ITEM, 4, RageVector3(0, 0, 0), RageVector3(0, 0, 0), RageVector3(BACKGROUNDS_SPACING_X, BACKGROUNDS_SPACING_Y, 0), RageVector3(0, 0, 0) ); SET_XY( m_ScrollerFrames ); this->AddChild( &m_ScrollerFrames ); float fTime = 0; { for( int i=0; i<NUM_BACKGROUNDS; i++ ) { Song* pSong = NULL; for( int j=0; j<50; j++ ) { pSong = arraySongs[ rand()%arraySongs.size() ]; if( pSong->HasBackground() ) break; } Sprite* pBackground = new Sprite; pBackground->LoadBG( pSong->HasBackground() ? pSong->GetBackgroundPath() : THEME->GetPathToG("Common fallback background") ); pBackground->ScaleToClipped( BACKGROUNDS_WIDTH, BACKGROUNDS_HEIGHT ); m_ScrollerBackgrounds.AddChild( pBackground ); Sprite* pFrame = new Sprite; pFrame->Load( THEME->GetPathToG("ScreenCredits background frame") ); m_ScrollerFrames.AddChild( pFrame ); } const int iFirst = -2, iLast = NUM_BACKGROUNDS+2; m_ScrollerBackgrounds.SetCurrentAndDestinationItem( iFirst ); m_ScrollerBackgrounds.SetDestinationItem( iLast ); m_ScrollerFrames.SetCurrentAndDestinationItem( iFirst ); m_ScrollerFrames.SetDestinationItem( iLast ); fTime = max( fTime, BACKGROUNDS_SCROLL_SECONDS_PER_ITEM*(iLast-iFirst) ); } m_ScrollerTexts.SetName( "Texts" ); m_ScrollerTexts.Load( TEXTS_SCROLL_SECONDS_PER_ITEM, 40, RageVector3(0, 0, 0), RageVector3(0, 0, 0), RageVector3(TEXTS_SPACING_X, TEXTS_SPACING_Y, 0), RageVector3(0, 0, 0) ); SET_XY( m_ScrollerTexts ); this->AddChild( &m_ScrollerTexts ); { for( unsigned i=0; i<ARRAYSIZE(CREDIT_LINES); i++ ) { BitmapText* pText = new BitmapText; pText->LoadFromFont( THEME->GetPathToF("ScreenCredits titles") ); pText->SetText( CREDIT_LINES[i].text ); switch( CREDIT_LINES[i].colorIndex ) { case 1: pText->SetDiffuse( TEXTS_COLOR_INTRO ); break; case 2: pText->SetDiffuse( TEXTS_COLOR_HEADER ); break; case 0: pText->SetDiffuse( TEXTS_COLOR_NORMAL ); break; default: ASSERT(0); } pText->SetZoom( TEXTS_ZOOM ); m_ScrollerTexts.AddChild( pText ); } const int iFirst = -10, iLast = ARRAYSIZE(CREDIT_LINES)+10; m_ScrollerTexts.SetCurrentAndDestinationItem( iFirst ); m_ScrollerTexts.SetDestinationItem( iLast ); fTime = max( fTime, TEXTS_SCROLL_SECONDS_PER_ITEM*(iLast-iFirst) ); } m_Overlay.LoadFromAniDir( THEME->GetPathToB("ScreenCredits overlay") ); this->AddChild( &m_Overlay ); this->MoveToTail( &m_In ); // put it in the back so it covers up the stuff we just added this->MoveToTail( &m_Out ); // put it in the back so it covers up the stuff we just added this->ClearMessageQueue( SM_BeginFadingOut ); // ignore ScreenAttract's SecsToShow LOG->Trace("XXXXXXXXX %f", fTime); this->PostScreenMessage( SM_BeginFadingOut, fTime ); // this->PostScreenMessage( SM_BeginFadingOut, m_Background.GetLengthSeconds() ); SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("credits") ); }
ScreenUnlock::ScreenUnlock( CString sClassName ) : ScreenAttract( sClassName ) { LOG->Trace("ScreenUnlock::ScreenUnlock()"); unsigned NumUnlocks = NUM_UNLOCKS; if (UNLOCKMAN->m_SongEntries.size() < NumUnlocks) NumUnlocks = UNLOCKMAN->m_SongEntries.size(); if (!PREFSMAN->m_bUseUnlockSystem || NumUnlocks == 0) { this->HandleScreenMessage( SM_GoToNextScreen ); return; } PointsUntilNextUnlock.LoadFromFont( THEME->GetPathToF("Common normal") ); PointsUntilNextUnlock.SetHorizAlign( Actor::align_left ); unsigned i; CString IconCommand = ICON_COMMAND; for(i=1; i <= NumUnlocks; i++) { // get pertaining UnlockEntry CString SongTitle = DISPLAYED_SONG(i); if (USE_UNLOCKS_DAT == 1) if ((unsigned)i <= UNLOCKMAN->m_SongEntries.size() ) SongTitle = UNLOCKMAN->m_SongEntries[i-1].m_sSongName; LOG->Trace("UnlockScreen: Searching for %s", SongTitle.c_str()); const UnlockEntry *pSong = UNLOCKMAN->FindLockEntry( SongTitle ); if( pSong == NULL) { LOG->Trace("Can't find song %s", SongTitle.c_str()); continue; } Sprite* entry = new Sprite; // new unlock graphic entry->Load( THEME->GetPathToG(ssprintf("ScreenUnlock %d icon", i)) ); // set graphic location entry->SetName( ssprintf("Unlock%d",i) ); SET_XY( *entry ); entry->Command(IconCommand); Unlocks.push_back(entry); if ( !pSong->IsLocked() ) this->AddChild(Unlocks[Unlocks.size() - 1]); } // scrolling text if (UNLOCK_TEXT_SCROLL != 0) { float ScrollingTextX = UNLOCK_TEXT_SCROLL_X; float ScrollingTextStartY = UNLOCK_TEXT_SCROLL_START_Y; float ScrollingTextEndY = UNLOCK_TEXT_SCROLL_END_Y; float ScrollingTextZoom = UNLOCK_TEXT_SCROLL_ZOOM; float ScrollingTextRows = UNLOCK_TEXT_SCROLL_ROWS; float MaxWidth = UNLOCK_TEXT_SCROLL_MAX_WIDTH; float SecondsToScroll = TIME_TO_DISPLAY; if (SecondsToScroll > 2) SecondsToScroll--; float SECS_PER_CYCLE = 0; if (UNLOCK_TEXT_SCROLL != 3) SECS_PER_CYCLE = (float)SecondsToScroll/(ScrollingTextRows + NumUnlocks); else SECS_PER_CYCLE = (float)SecondsToScroll/(ScrollingTextRows * 3 + NumUnlocks + 4); for(i = 1; i <= NumUnlocks; i++) { CString DisplayedSong = DISPLAYED_SONG(i); if (USE_UNLOCKS_DAT == 1) if ((unsigned)i <= UNLOCKMAN->m_SongEntries.size() ) DisplayedSong = UNLOCKMAN->m_SongEntries[i-1].m_sSongName; DisplayedSong.MakeUpper(); const UnlockEntry *pSong = UNLOCKMAN->FindLockEntry(DisplayedSong); if ( pSong == NULL ) // no such song continue; BitmapText* text = new BitmapText; text->LoadFromFont( THEME->GetPathToF("ScreenUnlock text") ); text->SetHorizAlign( Actor::align_left ); text->SetZoom(ScrollingTextZoom); if (pSong && pSong->m_pSong != NULL) { CString title = pSong->m_pSong->GetDisplayMainTitle(); CString subtitle = pSong->m_pSong->GetDisplaySubTitle(); if( subtitle != "" ) title = title + "\n" + subtitle; text->SetMaxWidth( MaxWidth ); text->SetText( title ); } else // song is missing, might be a course { Course *crs = SONGMAN->FindCourse( DisplayedSong ); if (crs != NULL) { text->SetMaxWidth( MaxWidth ); text->SetText( crs->GetFullDisplayTitle() ); text->Command("Diffuse,0,1,0,1"); } else // entry isn't a song or course { text->SetText( "" ); text->Command("Diffuse,0.5,0,0,1"); } } if (pSong != NULL && pSong->m_pSong != NULL) { if( pSong->IsLocked() ) // song is locked { text->SetText("???"); text->SetZoomX(1); } else { // song is unlocked, change color RageColor color = SONGMAN->GetGroupColor(pSong->m_pSong->m_sGroupName); text->SetGlobalDiffuseColor(color); } } text->SetXY(ScrollingTextX, ScrollingTextStartY); if (UNLOCK_TEXT_SCROLL == 3 && UNLOCK_TEXT_SCROLL_ROWS + i > NumUnlocks) { // special command for last unlocks when extreme-style scrolling is in effect float TargetRow = -0.5f + i + UNLOCK_TEXT_SCROLL_ROWS - NumUnlocks; float StopOffPoint = ScrollingTextEndY - TargetRow / UNLOCK_TEXT_SCROLL_ROWS * (ScrollingTextEndY - ScrollingTextStartY); float FirstCycleTime = (UNLOCK_TEXT_SCROLL_ROWS - TargetRow) * SECS_PER_CYCLE; float SecondCycleTime = (6 + TargetRow) * SECS_PER_CYCLE - FirstCycleTime; LOG->Trace("Target Row: %f", TargetRow); LOG->Trace("command for icon %d: %s", i, ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), FirstCycleTime, StopOffPoint, SecondCycleTime * 2, ScrollingTextEndY).c_str() ); text->Command( ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), FirstCycleTime, StopOffPoint, SecondCycleTime, ScrollingTextEndY) ); } else text->Command( ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), SECS_PER_CYCLE * (ScrollingTextRows), ScrollingTextEndY) ); item.push_back(text); if (UNLOCK_TEXT_SCROLL >= 2) { Sprite* IconCount = new Sprite; // new unlock graphic IconCount->Load( THEME->GetPathToG(ssprintf("ScreenUnlock %d icon", i)) ); // set graphic location IconCount->SetXY( UNLOCK_TEXT_SCROLL_ICON_X, ScrollingTextStartY); IconCount->SetHeight(UNLOCK_TEXT_SCROLL_ICON_SIZE); IconCount->SetWidth(UNLOCK_TEXT_SCROLL_ICON_SIZE); if (UNLOCK_TEXT_SCROLL == 3 && UNLOCK_TEXT_SCROLL_ROWS + i > NumUnlocks) { float TargetRow = -0.5f + i + UNLOCK_TEXT_SCROLL_ROWS - NumUnlocks; float StopOffPoint = ScrollingTextEndY - TargetRow / UNLOCK_TEXT_SCROLL_ROWS * (ScrollingTextEndY - ScrollingTextStartY); float FirstCycleTime = (UNLOCK_TEXT_SCROLL_ROWS - TargetRow) * SECS_PER_CYCLE; float SecondCycleTime = (6 + TargetRow) * SECS_PER_CYCLE - FirstCycleTime; LOG->Trace("Target Row: %f", TargetRow); LOG->Trace("command for icon %d: %s", i, ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), FirstCycleTime, StopOffPoint, SecondCycleTime * 2, ScrollingTextEndY).c_str() ); IconCount->Command( ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), FirstCycleTime, StopOffPoint, SecondCycleTime, ScrollingTextEndY) ); } else IconCount->Command( ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), SECS_PER_CYCLE * (ScrollingTextRows), ScrollingTextEndY) ); ItemIcons.push_back(IconCount); LOG->Trace("Added unlock text %d", i); if (UNLOCK_TEXT_SCROLL == 3) { if ( !pSong->IsLocked() ) LastUnlocks.push_back(i); } } } } if (UNLOCK_TEXT_SCROLL == 3) { float ScrollingTextX = UNLOCK_TEXT_SCROLL_X; float ScrollingTextStartY = UNLOCK_TEXT_SCROLL_START_Y; float ScrollingTextEndY = UNLOCK_TEXT_SCROLL_END_Y; float ScrollingTextRows = UNLOCK_TEXT_SCROLL_ROWS; float MaxWidth = UNLOCK_TEXT_SCROLL_MAX_WIDTH; float SecondsToScroll = TIME_TO_DISPLAY - 1; float SECS_PER_CYCLE = (float)SecondsToScroll/(ScrollingTextRows * 3 + NumUnlocks + 4); for(i=1; i <= UNLOCK_TEXT_SCROLL_ROWS; i++) { if (i > LastUnlocks.size()) continue; unsigned NextIcon = LastUnlocks[LastUnlocks.size() - i]; CString DisplayedSong = DISPLAYED_SONG(NextIcon); if (USE_UNLOCKS_DAT == 1) { if (NextIcon <= UNLOCKMAN->m_SongEntries.size() ) DisplayedSong = UNLOCKMAN->m_SongEntries[NextIcon-1].m_sSongName; } DisplayedSong.MakeUpper(); const UnlockEntry *pSong = UNLOCKMAN->FindLockEntry(DisplayedSong); if (pSong->m_pSong == NULL) continue; BitmapText* NewText = new BitmapText; NewText->LoadFromFont( THEME->GetPathToF("ScreenUnlock text") ); NewText->SetHorizAlign( Actor::align_left ); CString title = pSong->m_pSong->GetDisplayMainTitle(); CString subtitle = pSong->m_pSong->GetDisplaySubTitle(); if( subtitle != "" ) title = title + "\n" + subtitle; NewText->SetZoom(UNLOCK_TEXT_SCROLL_ZOOM); NewText->SetMaxWidth( MaxWidth ); NewText->SetText( title ); RageColor color = SONGMAN->GetGroupColor(pSong->m_pSong->m_sGroupName); NewText->SetGlobalDiffuseColor(color); NewText->SetXY(ScrollingTextX, ScrollingTextStartY); NewText->Command( ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;", SECS_PER_CYCLE * (NumUnlocks + 2 * i - 2), SECS_PER_CYCLE * ((ScrollingTextRows - i) * 2 + 1 ), (ScrollingTextStartY + (ScrollingTextEndY - ScrollingTextStartY) * (ScrollingTextRows - i + 0.5) / ScrollingTextRows )) ); // new unlock graphic Sprite* NewIcon = new Sprite; NewIcon->Load( THEME->GetPathToG(ssprintf("ScreenUnlock %d icon", NextIcon)) ); // set graphic location NewIcon->SetXY( UNLOCK_TEXT_SCROLL_ICON_X, ScrollingTextStartY); NewIcon->SetHeight(UNLOCK_TEXT_SCROLL_ICON_SIZE); NewIcon->SetWidth(UNLOCK_TEXT_SCROLL_ICON_SIZE); NewIcon->Command( ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;", SECS_PER_CYCLE * (NumUnlocks + 2 * i - 2), SECS_PER_CYCLE * ((ScrollingTextRows - i) * 2 + 1 ), (ScrollingTextStartY + (ScrollingTextEndY - ScrollingTextStartY) * (ScrollingTextRows - i + 0.5) / ScrollingTextRows )) ); ItemIcons.push_back(NewIcon); item.push_back(NewText); } } // NOTE: the following two loops require the iterator to // be ints because if you decrement an unsigned when it // equals zero, you get the maximum value of an unsigned, // which is still greater than 0. By typecasting it as // an integer, you can achieve -1, which exits the loop. for(i = item.size() - 1; (int)i >= 0; i--) this->AddChild(item[i]); for(i = ItemIcons.size() - 1; (int)i >= 0; i--) this->AddChild(ItemIcons[i]); PointsUntilNextUnlock.SetName( "PointsDisplay" ); CString PointDisplay = TYPE_TO_DISPLAY; if (PointDisplay == "DP" || PointDisplay == "Dance") { CString sDP = ssprintf( "%d", (int)UNLOCKMAN->DancePointsUntilNextUnlock() ); PointsUntilNextUnlock.SetText( sDP ); } else if (PointDisplay == "AP" || PointDisplay == "Arcade") { CString sAP = ssprintf( "%d", (int)UNLOCKMAN->ArcadePointsUntilNextUnlock() ); PointsUntilNextUnlock.SetText( sAP ); } else if (PointDisplay == "SP" || PointDisplay == "Song") { CString sSP = ssprintf( "%d", (int)UNLOCKMAN->SongPointsUntilNextUnlock() ); PointsUntilNextUnlock.SetText( sSP ); } PointsUntilNextUnlock.SetZoom( POINTS_ZOOM ); SET_XY( PointsUntilNextUnlock ); this->AddChild( &PointsUntilNextUnlock ); this->ClearMessageQueue( SM_BeginFadingOut ); // ignore ScreenAttract's SecsToShow this->PostScreenMessage( SM_BeginFadingOut, TIME_TO_DISPLAY ); this->SortByDrawOrder(); }
ScreenSelectMode::ScreenSelectMode( const CString &sClassName ) : ScreenSelect( sClassName ) { m_b2DAvailable = m_bCharsAvailable = false; int pn; for(pn=0;pn<NUM_PLAYERS;pn++) { m_iCurrentChar[pn]= -1; // minus 1 indicates no character. m_CurChar[pn].SetName(ssprintf("CharacterIconP%d",pn+1)); SET_XY( m_CurChar[pn] ); } m_bSelected = false; m_ChoiceListFrame.Load( THEME->GetPathToG("ScreenSelectMode list frame")); m_ChoiceListFrame.SetXY( SCROLLING_LIST_X, SCROLLING_LIST_Y); m_ChoiceListFrame.SetName("ChoiceListFrame"); this->AddChild( &m_ChoiceListFrame ); m_soundModeChange.Load( THEME->GetPathToS("ScreenSelectMode modechange")); m_soundConfirm.Load( THEME->GetPathToS("ScreenSelectMode modeconfirm")); m_soundStart.Load( THEME->GetPathToS("ScreenSelectMode menustart")); unsigned i; for( i=0; i<m_aModeChoices.size(); i++ ) { const ModeChoice& mc = m_aModeChoices[i]; // // Load Sprite // CString sElementPath = THEME->GetPathToG(ssprintf("ScreenSelectMode %s", mc.m_sName.c_str())); arrayLocations.push_back( sElementPath ); /* if(USE_MODE_SPECIFIC_BGS == 1) { BGAnimation templayer; templayer.LoadFromAniDir( THEME->GetPathToB(ssprintf("ScreenSelectMode background %s", mc.name )) ); // templayer.SetDiffuse(RageColor(0,0,0,0)); m_Backgrounds.push_back(&templayer); this->AddChild( &m_Backgrounds[i] ); }*/ } // check for character availability vector<Character*> apCharacters; if(ENABLE_CHAR_SELECT) { GAMESTATE->GetCharacters( apCharacters ); for(unsigned i=0; i<apCharacters.size(); i++) { if(apCharacters[i] != NULL) // check its not null { m_bCharsAvailable = true; if(apCharacters[i]->Has2DElems()) { LOG->Trace("Char: %d, %s, 2D: true",i,apCharacters[i]->GetSongSelectIconPath().c_str()); m_b2DAvailable = true; } else { LOG->Trace("Char: %d, %s, 2D: false",i,apCharacters[i]->GetSongSelectIconPath().c_str()); } } } for(pn=0;pn<NUM_PLAYERS;pn++) m_CurChar[pn].Load( THEME->GetPathToG("ScreenSelectMode nochar") ); } // m_ScrollingList.UseSpriteType(BANNERTYPE); m_ScrollingList.SetXY( SCROLLING_LIST_X, SCROLLING_LIST_Y ); m_ScrollingList.SetSpacing( ELEM_SPACING ); m_ScrollingList.SetName("ScrollingList"); this->AddChild( &m_ScrollingList ); m_ChoiceListHighlight.Load( THEME->GetPathToG("ScreenSelectMode list highlight")); m_ChoiceListHighlight.SetXY( SCROLLING_LIST_X, SCROLLING_LIST_Y ); m_ChoiceListHighlight.SetName("ChoiceListHighlight"); this->AddChild(&m_ChoiceListHighlight); m_Guide.Load( THEME->GetPathToG("select mode guide")); m_Guide.SetXY( GUIDE_X, GUIDE_Y ); m_Guide.SetName("Guide"); this->AddChild( &m_Guide ); UpdateSelectableChoices(); }
ScreenCredits::ScreenCredits( CString sName ) : ScreenAttract( sName ) { vector<Song*> arraySongs; SONGMAN->GetSongs( arraySongs ); SongUtil::SortSongPointerArrayByTitle( arraySongs ); // FIXME: Redo this screen with a BGA CString sBackgroundsTransformFunction = ssprintf( "function(self,offset,itemIndex,numItems) " " self:x(%f*offset); " " self:y(%f*offset); " "end", (float)BACKGROUNDS_SPACING_X, (float)BACKGROUNDS_SPACING_Y ); m_ScrollerBackgrounds.SetName( "Backgrounds" ); m_ScrollerBackgrounds.Load3( BACKGROUNDS_SCROLL_SECONDS_PER_ITEM, 4, false, sBackgroundsTransformFunction, false ); SET_XY( m_ScrollerBackgrounds ); this->AddChild( &m_ScrollerBackgrounds ); m_ScrollerFrames.SetName( "Backgrounds" ); m_ScrollerFrames.Load3( BACKGROUNDS_SCROLL_SECONDS_PER_ITEM, 4, false, sBackgroundsTransformFunction, false ); SET_XY( m_ScrollerFrames ); this->AddChild( &m_ScrollerFrames ); float fTime = 0; { for( int i=0; i<NUM_BACKGROUNDS; i++ ) { Song* pSong = NULL; for( int j=0; j<50; j++ ) { pSong = arraySongs[ rand()%arraySongs.size() ]; if( pSong->HasBackground() ) break; } Sprite* pBackground = new Sprite; pBackground->LoadBG( pSong->HasBackground() ? pSong->GetBackgroundPath() : THEME->GetPathG("Common","fallback background") ); pBackground->ScaleToClipped( BACKGROUNDS_WIDTH, BACKGROUNDS_HEIGHT ); m_ScrollerBackgrounds.AddChild( pBackground ); Sprite* pFrame = new Sprite; pFrame->Load( THEME->GetPathG("ScreenCredits","background frame") ); m_ScrollerFrames.AddChild( pFrame ); } float fFirst = -2; float fLast = NUM_BACKGROUNDS+2; m_ScrollerBackgrounds.SetCurrentAndDestinationItem( fFirst ); m_ScrollerBackgrounds.SetDestinationItem( fLast ); m_ScrollerFrames.SetCurrentAndDestinationItem( fFirst ); m_ScrollerFrames.SetDestinationItem( fLast ); fTime = max( fTime, BACKGROUNDS_SCROLL_SECONDS_PER_ITEM*(fLast-fFirst) ); } CString sTextsTransformFunction = ssprintf( "function(self,offset,itemIndex,numItems) " " self:x(%f*offset); " " self:y(%f*offset); " "end", (float)TEXTS_SPACING_X, (float)TEXTS_SPACING_Y ); m_ScrollerTexts.SetName( "Texts" ); m_ScrollerTexts.Load3( TEXTS_SCROLL_SECONDS_PER_ITEM, 40, false, sTextsTransformFunction, false ); SET_XY( m_ScrollerTexts ); this->AddChild( &m_ScrollerTexts ); { for( unsigned i=0; i<ARRAYLEN(CREDIT_LINES); i++ ) { BitmapText* pText = new BitmapText; pText->LoadFromFont( THEME->GetPathF("ScreenCredits","titles") ); pText->SetText( CREDIT_LINES[i].text ); switch( CREDIT_LINES[i].colorIndex ) { case 1: pText->SetDiffuse( TEXTS_COLOR_INTRO ); break; case 2: pText->SetDiffuse( TEXTS_COLOR_HEADER ); break; case 0: pText->SetDiffuse( TEXTS_COLOR_NORMAL ); break; default: ASSERT(0); } pText->SetZoom( TEXTS_ZOOM ); m_ScrollerTexts.AddChild( pText ); } float fFirst = -10; float fLast = ARRAYLEN(CREDIT_LINES)+10; m_ScrollerTexts.SetCurrentAndDestinationItem( fFirst ); m_ScrollerTexts.SetDestinationItem( fLast ); fTime = max( fTime, TEXTS_SCROLL_SECONDS_PER_ITEM*(fLast-fFirst) ); } this->SortByDrawOrder(); this->ClearMessageQueue( SM_BeginFadingOut ); // ignore ScreenAttract's SecsToShow this->PostScreenMessage( SM_BeginFadingOut, fTime ); // this->PostScreenMessage( SM_BeginFadingOut, m_Background.GetLengthSeconds() ); SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("credits") ); }
void ScreenOptions::InitMenu( InputMode im, const vector<OptionRowDefinition> &vDefs, const vector<OptionRowHandler*> &vHands ) { LOG->Trace( "ScreenOptions::Set()" ); ASSERT( vDefs.size() == vHands.size() ); m_InputMode = im; for( unsigned r=0; r<vDefs.size(); r++ ) // foreach row { m_Rows.push_back( new OptionRow() ); OptionRow &row = *m_Rows.back(); const OptionRowDefinition &def = vDefs[r]; OptionRowHandler* hand = vHands[r]; bool bFirstRowGoesDown = m_OptionsNavigation==NAV_TOGGLE_THREE_KEY; row.LoadMetrics( m_sName ); row.LoadNormal( def, hand, bFirstRowGoesDown ); vector<PlayerNumber> vpns; FOREACH_HumanPlayer( p ) vpns.push_back( p ); this->ImportOptions( r, vpns ); CHECKPOINT_M( ssprintf("row %i: %s", r, row.GetRowDef().name.c_str()) ); row.AfterImportOptions(); } m_sprPage.Load( THEME->GetPathG(m_sName,"page") ); m_sprPage->SetName( "Page" ); SET_XY_AND_ON_COMMAND( m_sprPage ); m_framePage.AddChild( m_sprPage ); // init line line highlights FOREACH_HumanPlayer( p ) { m_sprLineHighlight[p].Load( THEME->GetPathG(m_sName,"line highlight") ); m_sprLineHighlight[p].SetName( "LineHighlight" ); m_sprLineHighlight[p].SetX( SCREEN_CENTER_X ); m_framePage.AddChild( &m_sprLineHighlight[p] ); ON_COMMAND( m_sprLineHighlight[p] ); } // init cursors FOREACH_HumanPlayer( p ) { m_Cursor[p].Load( m_sName, OptionsCursor::cursor ); m_Cursor[p].Set( p ); m_framePage.AddChild( &m_Cursor[p] ); } for( unsigned r=0; r<m_Rows.size(); r++ ) // foreach row { OptionRow &row = *m_Rows[r]; m_framePage.AddChild( &row ); } if( SHOW_EXIT_ROW ) { // TRICKY: Add "EXIT" item m_Rows.push_back( new OptionRow() ); OptionRow &row = *m_Rows.back(); row.LoadMetrics( m_sName ); row.LoadExit(); m_framePage.AddChild( &row ); } // add explanation here so it appears on top FOREACH_PlayerNumber( p ) { m_textExplanation[p].LoadFromFont( THEME->GetPathF(m_sName,"explanation") ); m_textExplanation[p].SetZoom( EXPLANATION_ZOOM ); m_textExplanation[p].SetShadowLength( 0 ); m_framePage.AddChild( &m_textExplanation[p] ); } if( SHOW_SCROLL_BAR ) { m_ScrollBar.SetName( "ScrollBar" ); m_ScrollBar.SetBarHeight( SCROLL_BAR_HEIGHT ); m_ScrollBar.SetBarTime( SCROLL_BAR_TIME ); FOREACH_PlayerNumber( p ) m_ScrollBar.EnablePlayer( p, GAMESTATE->IsHumanPlayer(p) ); m_ScrollBar.Load( "DualScrollBar" ); SET_XY( m_ScrollBar ); m_framePage.AddChild( &m_ScrollBar ); } m_sprMore.Load( THEME->GetPathG( m_sName,"more") ); m_sprMore->SetName( "More" ); SET_XY_AND_ON_COMMAND( m_sprMore ); COMMAND( m_sprMore, m_bMoreShown? "ShowMore":"HideMore" ); m_framePage.AddChild( m_sprMore ); switch( m_InputMode ) { case INPUTMODE_INDIVIDUAL: { FOREACH_PlayerNumber( p ) m_textExplanation[p].SetXY( EXPLANATION_X.GetValue(p), EXPLANATION_Y.GetValue(p) ); } break; case INPUTMODE_SHARE_CURSOR: m_textExplanation[0].SetXY( EXPLANATION_TOGETHER_X, EXPLANATION_TOGETHER_Y ); break; default: ASSERT(0); } FOREACH_PlayerNumber( p ) { m_sprDisqualify[p].Load( THEME->GetPathG(m_sName,"disqualify") ); m_sprDisqualify[p]->SetName( ssprintf("DisqualifyP%i",p+1) ); SET_XY_AND_ON_COMMAND( m_sprDisqualify[p] ); m_sprDisqualify[p]->SetHidden( true ); // unhide later if handicapping options are discovered m_framePage.AddChild( m_sprDisqualify[p] ); } // poke once at all the explanation metrics so that we catch missing ones early for( int r=0; r<(int)m_Rows.size(); r++ ) // foreach row { GetExplanationText( r ); } // put focus on the first enabled row FOREACH_PlayerNumber( p ) { for( unsigned r=0; r<m_Rows.size(); r++ ) { const OptionRow &row = *m_Rows[r]; if( row.GetRowDef().IsEnabledForPlayer(p) ) { m_iCurrentRow[p] = r; break; } } } // Hide highlight if no rows are enabled. FOREACH_HumanPlayer( p ) if( m_iCurrentRow[p] == -1 ) m_sprLineHighlight[p].SetHidden( true ); CHECKPOINT; PositionItems(); PositionAllUnderlines(); PositionIcons(); RefreshAllIcons(); PositionCursors(); UpdateEnabledDisabled(); FOREACH_PlayerNumber( p ) OnChange( p ); CHECKPOINT; /* It's tweening into position, but on the initial tween-in we only want to * tween in the whole page at once. Since the tweens are nontrivial, it's * easiest to queue the tweens and then force them to finish. */ for( int r=0; r<(int) m_Rows.size(); r++ ) // foreach options line { OptionRow &row = *m_Rows[r]; row.FinishTweening(); } m_sprMore->FinishTweening(); this->SortByDrawOrder(); }