tournamentsetupstate.cpp
来自「Source code (C++) of the Amoebax game fo」· C++ 代码 · 共 781 行 · 第 1/2 页
CPP
781 行
currentCharacter++, x += static_cast<uint16_t> (k_FaceSpan * originalScale) ) { faces->blit ((currentCharacter % k_FacesPerRow) * faceWidth, (currentCharacter / k_FacesPerRow) * faceHeight, faceWidth, faceHeight, x, static_cast<uint16_t> (k_MaleFacesRowY * originalScale), m_Background->toSDLSurface()); } for ( uint16_t currentCharacter = 1, x = static_cast<uint16_t> (k_FaceStartX * originalScale); currentCharacter < 7 ; currentCharacter++, x += static_cast<uint16_t> (k_FaceSpan * originalScale) ) { faces->blit ((currentCharacter % k_FacesPerRow) * faceWidth, faceHeight, faceWidth, faceHeight, x, static_cast<uint16_t> (k_ComputerFacesRowY * originalScale), m_Background->toSDLSurface()); } } { std::auto_ptr<Surface> title ( Surface::fromFile (File::getGraphicsFilePath ("humanplayers.png"))); title->blit (static_cast<uint16_t> (k_FaceStartX * originalScale), static_cast<uint16_t> (k_HumanCharactersLabelY * originalScale), m_Background->toSDLSurface ()); } { std::auto_ptr<Surface> title ( Surface::fromFile (File::getGraphicsFilePath ("computerplayers.png"))); title->blit (static_cast<uint16_t> (k_FaceStartX * originalScale), static_cast<uint16_t> (k_ComputerCharactersLabelY * originalScale), m_Background->toSDLSurface ()); } { std::auto_ptr<Surface> title ( Surface::fromFile (File::getGraphicsFilePath ("tournament.png"))); title->blit (m_Background->getWidth () / 2 - title->getWidth () / 2, 0, m_Background->toSDLSurface ()); } m_Background->resize (screenScale); for ( uint32_t currentCharacter = 0 ; currentCharacter < k_NumCharacters ; ++currentCharacter ) { m_Characters[currentCharacter].image.reset ( Surface::fromFile (File::getGraphicsFilePath ( m_Characters[currentCharacter].name + ".png"))); m_Characters[currentCharacter].image->resize (screenScale); } m_Selection.reset ( Surface::fromFile (File::getGraphicsFilePath ("faceSelection.png"))); m_Selection->resize (screenScale); m_Font.reset ( Font::fromFile (File::getFontFilePath ("fontMenu")));}voidTournamentSetupState::redrawBackground (SDL_Rect *region, SDL_Surface *screen){ m_Background->blit (region->x, region->y, region->w, region->h, region->x, region->y, screen);}voidTournamentSetupState::render (SDL_Surface *screen){ const float screenScale = System::getInstance ().getScreenScaleFactor (); if ( !allCharactersSelected () ) { std::ostringstream selectPlayerString; selectPlayerString << "Select Player "; selectPlayerString << getCurrentPlayer() + 1; m_Font->write (selectPlayerString.str(), static_cast<uint16_t> (k_SelectPlayerX * screenScale), static_cast<uint16_t> (k_SelectPlayerY * screenScale), screen); } // Render the currently selected character's image and name. uint16_t x = static_cast<uint16_t> (k_CharacterImageX * screenScale - getSelectedCharacter ().image->getWidth () / 2); uint16_t y = static_cast<uint16_t> (k_CharacterImageY * screenScale - getSelectedCharacter ().image->getHeight () / 2); getSelectedCharacter ().image->blit (x, y, screen); uint16_t textWidth = m_Font->getTextWidth (getSelectedCharacter ().name); m_Font->write (getSelectedCharacter ().name, static_cast<uint16_t> (k_CharacterImageX * screenScale - textWidth / 2), y + getSelectedCharacter ().image->getHeight (), screen); // Render the already selected characters. for ( std::vector<SelectedCharacter>::const_iterator currentCharacter = m_SelectedCharacters.begin () ; currentCharacter != m_SelectedCharacters.end () ; ++currentCharacter ) { x = static_cast<uint16_t> (getXPositionOfCol (currentCharacter->col) * screenScale); y = static_cast<uint16_t> (getYPositionOfRow (currentCharacter->row) * screenScale); m_Selection->blit (m_Selection->getWidth () - m_Selection->getHeight (), 0, m_Selection->getHeight (), m_Selection->getHeight (), x, y, screen); } // Render the character selection on the character grid. if ( !allCharactersSelected () ) { x = static_cast<uint16_t> (getXPositionOfCol (getSelectedCol ()) * screenScale); y = static_cast<uint16_t> (getYPositionOfRow (getSelectedRow ()) * screenScale); m_Selection->blit (m_Selection->getHeight () * getCurrentPlayer (), 0, m_Selection->getHeight (), m_Selection->getHeight (), x, y, screen); }}////// \brief Selects the currently selected character as the player's character.///voidTournamentSetupState::selectCharacter (void){ // If all characters are selected, then we just move // forward to the next state. if ( allCharactersSelected () ) { setTimeToWait (0); return; } SelectedCharacter selectedCharacter; selectedCharacter.col = getSelectedCol (); selectedCharacter.index = getSelectedCharacterIndex (); selectedCharacter.row = getSelectedRow (); m_SelectedCharacters.push_back (selectedCharacter); setNextPlayer (); if ( allCharactersSelected () ) { setTimeToWait (k_TimeToWait); } else { selectFirstCharacter (); }}////// \brief Sets the first available character as the selected.///voidTournamentSetupState::selectFirstCharacter (void){ if ( allCharactersSelected () ) { return; } setSelectedCol (0); setSelectedRow (0); if ( !isSelectedPositionValid () ) { selectNextCol (); }}////// \brief Selects the next available column.////// If the next row is behind the last one, the first column/// of the next row is selected.///voidTournamentSetupState::selectNextCol (void){ if ( allCharactersSelected () ) { return; } if ( (getSelectedRow () != k_ComputerFacesRow && getSelectedCol () < (k_HumanCharactersColumns - 1)) || (getSelectedRow () == k_ComputerFacesRow && getSelectedCol () < (k_ComputerCharactersColumns - 1)) ) { setSelectedCol (getSelectedCol () + 1); } else { selectNextRow (); setSelectedCol (0); } if ( !isSelectedPositionValid () ) { selectNextCol (); }}////// \brief Selects the next available row.////// If the next row is after the last one, the first row is selected.///voidTournamentSetupState::selectNextRow (void){ if ( allCharactersSelected () ) { return; } setSelectedRow ((getSelectedRow () + 1) % k_NumCharactersRows); if ( getSelectedRow () != k_ComputerFacesRow && getSelectedCol () > (k_HumanCharactersColumns - 1) ) { setSelectedCol (k_HumanCharactersColumns - 1); } if ( !isSelectedPositionValid () ) { selectNextCol (); }}////// \brief Selects the previous available column.////// If the previous column is before the first one, the last column/// of the previous column is selected.///voidTournamentSetupState::selectPreviousCol (void){ if ( allCharactersSelected () ) { return; } if ( getSelectedCol () > 0 ) { setSelectedCol (getSelectedCol () - 1); } else { if ( getSelectedRow () == k_FemaleFacesRow ) { setSelectedCol (k_ComputerCharactersColumns - 1); } else { setSelectedCol (k_HumanCharactersColumns - 1); } selectPreviousRow (); } if ( !isSelectedPositionValid () ) { selectPreviousCol (); }}////// \brief Selectes the previous row.////// If the previous row is before the first, the last column is selected.///voidTournamentSetupState::selectPreviousRow (void){ if ( allCharactersSelected () ) { return; } if ( getSelectedRow () > 0 ) { setSelectedRow (getSelectedRow () - 1); // Since the computer characters row is the last one, we // can be sure that the row we are now is a human characters row. if ( getSelectedCol () > (k_HumanCharactersColumns - 1) ) { setSelectedCol (k_HumanCharactersColumns - 1); } } else { setSelectedRow (k_ComputerFacesRow); } if ( !isSelectedPositionValid () ) { selectNextCol (); }}////// \brief Increments the current player.///inline voidTournamentSetupState::setNextPlayer (void){ ++m_CurrentPlayer;}////// \brief Decrements the current player.///inline voidTournamentSetupState::setPreviousPlayer (void){ --m_CurrentPlayer;}////// \brief Sets the currently selected column.////// \param col The column to set as selected.///inline voidTournamentSetupState::setSelectedCol (uint8_t col){ m_SelectedCol = col;}////// \brief Sets the currently selected row.////// \param row The row to set as selected.///inline voidTournamentSetupState::setSelectedRow (uint8_t row){ m_SelectedRow = row;}////// \brief Sets the time to wait before changing to the tournament state.////// \param timeToWait The time to wait in milliseconds.///inline voidTournamentSetupState::setTimeToWait (int32_t timeToWait){ m_TimeToWait = timeToWait;}voidTournamentSetupState::update (uint32_t elapsedTime){ if ( allCharactersSelected () ) { setTimeToWait (getTimeToWait () - elapsedTime); if ( getTimeToWait () <= 0 ) { std::vector <TournamentState::Player> tournamentPlayers; for (std::vector <SelectedCharacter>::const_iterator currentPlayer = m_SelectedCharacters.begin() ; currentPlayer != m_SelectedCharacters.end() ; ++currentPlayer) { TournamentState::Player player; player.characterIndex = currentPlayer->index; player.name = m_Characters[currentPlayer->index].name; player.isComputerPlayer = k_ComputerFacesRow == currentPlayer->row; player.computerPlayerLevel = currentPlayer->col; tournamentPlayers.push_back (player); } System::getInstance ().removeActiveState (false); System::getInstance ().setActiveState ( new TournamentState (tournamentPlayers)); } }}voidTournamentSetupState::videoModeChanged (void){ loadGraphicResources ();}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?