Merge pull request #9565 from MonsterDruide1/tas-multiplayer-lengths
TAS: Show all script lengths for multiplayer
This commit is contained in:
		| @@ -156,10 +156,12 @@ void Tas::RecordInput(u64 buttons, TasAnalog left_axis, TasAnalog right_axis) { | |||||||
|     }; |     }; | ||||||
| } | } | ||||||
|  |  | ||||||
| std::tuple<TasState, size_t, size_t> Tas::GetStatus() const { | std::tuple<TasState, size_t, std::array<size_t, PLAYER_NUMBER>> Tas::GetStatus() const { | ||||||
|     TasState state; |     TasState state; | ||||||
|  |     std::array<size_t, PLAYER_NUMBER> lengths{0}; | ||||||
|     if (is_recording) { |     if (is_recording) { | ||||||
|         return {TasState::Recording, 0, record_commands.size()}; |         lengths[0] = record_commands.size(); | ||||||
|  |         return {TasState::Recording, record_commands.size(), lengths}; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (is_running) { |     if (is_running) { | ||||||
| @@ -168,7 +170,11 @@ std::tuple<TasState, size_t, size_t> Tas::GetStatus() const { | |||||||
|         state = TasState::Stopped; |         state = TasState::Stopped; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     return {state, current_command, script_length}; |     for (size_t i = 0; i < PLAYER_NUMBER; i++) { | ||||||
|  |         lengths[i] = commands[i].size(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return {state, current_command, lengths}; | ||||||
| } | } | ||||||
|  |  | ||||||
| void Tas::UpdateThread() { | void Tas::UpdateThread() { | ||||||
|   | |||||||
| @@ -124,7 +124,7 @@ public: | |||||||
|      * Current playback progress ; |      * Current playback progress ; | ||||||
|      * Total length of script file currently loaded or being recorded |      * Total length of script file currently loaded or being recorded | ||||||
|      */ |      */ | ||||||
|     std::tuple<TasState, size_t, size_t> GetStatus() const; |     std::tuple<TasState, size_t, std::array<size_t, PLAYER_NUMBER>> GetStatus() const; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     enum class TasAxis : u8; |     enum class TasAxis : u8; | ||||||
|   | |||||||
| @@ -3730,15 +3730,36 @@ void GMainWindow::UpdateWindowTitle(std::string_view title_name, std::string_vie | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | std::string GMainWindow::CreateTASFramesString( | ||||||
|  |     std::array<size_t, InputCommon::TasInput::PLAYER_NUMBER> frames) const { | ||||||
|  |     std::string string = ""; | ||||||
|  |     size_t maxPlayerIndex = 0; | ||||||
|  |     for (size_t i = 0; i < frames.size(); i++) { | ||||||
|  |         if (frames[i] != 0) { | ||||||
|  |             if (maxPlayerIndex != 0) | ||||||
|  |                 string += ", "; | ||||||
|  |             while (maxPlayerIndex++ != i) | ||||||
|  |                 string += "0, "; | ||||||
|  |             string += std::to_string(frames[i]); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     return string; | ||||||
|  | } | ||||||
|  |  | ||||||
| QString GMainWindow::GetTasStateDescription() const { | QString GMainWindow::GetTasStateDescription() const { | ||||||
|     auto [tas_status, current_tas_frame, total_tas_frames] = input_subsystem->GetTas()->GetStatus(); |     auto [tas_status, current_tas_frame, total_tas_frames] = input_subsystem->GetTas()->GetStatus(); | ||||||
|  |     std::string tas_frames_string = CreateTASFramesString(total_tas_frames); | ||||||
|     switch (tas_status) { |     switch (tas_status) { | ||||||
|     case InputCommon::TasInput::TasState::Running: |     case InputCommon::TasInput::TasState::Running: | ||||||
|         return tr("TAS state: Running %1/%2").arg(current_tas_frame).arg(total_tas_frames); |         return tr("TAS state: Running %1/%2") | ||||||
|  |             .arg(current_tas_frame) | ||||||
|  |             .arg(QString::fromStdString(tas_frames_string)); | ||||||
|     case InputCommon::TasInput::TasState::Recording: |     case InputCommon::TasInput::TasState::Recording: | ||||||
|         return tr("TAS state: Recording %1").arg(total_tas_frames); |         return tr("TAS state: Recording %1").arg(total_tas_frames[0]); | ||||||
|     case InputCommon::TasInput::TasState::Stopped: |     case InputCommon::TasInput::TasState::Stopped: | ||||||
|         return tr("TAS state: Idle %1/%2").arg(current_tas_frame).arg(total_tas_frames); |         return tr("TAS state: Idle %1/%2") | ||||||
|  |             .arg(current_tas_frame) | ||||||
|  |             .arg(QString::fromStdString(tas_frames_string)); | ||||||
|     default: |     default: | ||||||
|         return tr("TAS State: Invalid"); |         return tr("TAS State: Invalid"); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -12,6 +12,7 @@ | |||||||
|  |  | ||||||
| #include "common/announce_multiplayer_room.h" | #include "common/announce_multiplayer_room.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  | #include "input_common/drivers/tas_input.h" | ||||||
| #include "yuzu/compatibility_list.h" | #include "yuzu/compatibility_list.h" | ||||||
| #include "yuzu/hotkeys.h" | #include "yuzu/hotkeys.h" | ||||||
|  |  | ||||||
| @@ -266,6 +267,9 @@ private: | |||||||
|     void changeEvent(QEvent* event) override; |     void changeEvent(QEvent* event) override; | ||||||
|     void closeEvent(QCloseEvent* event) override; |     void closeEvent(QCloseEvent* event) override; | ||||||
|  |  | ||||||
|  |     std::string CreateTASFramesString( | ||||||
|  |         std::array<size_t, InputCommon::TasInput::PLAYER_NUMBER> frames) const; | ||||||
|  |  | ||||||
| #ifdef __unix__ | #ifdef __unix__ | ||||||
|     void SetupSigInterrupts(); |     void SetupSigInterrupts(); | ||||||
|     static void HandleSigInterrupt(int); |     static void HandleSigInterrupt(int); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user