diff options
| author | liamwhite <liamwhite@users.noreply.github.com> | 2023-01-10 15:26:36 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-01-10 15:26:36 -0500 | 
| commit | 9f974ea8189c255ff3ab8fcad6ae310a5e50d296 (patch) | |
| tree | 865bd949208a7dad04a4eb45e9f353588df589d6 | |
| parent | fda0e7e9899e1a023f3dea76079ffa9cce0e5d89 (diff) | |
| parent | 115bf204484d5ac058e7edaf5139974b22aa6f7e (diff) | |
Merge pull request #9565 from MonsterDruide1/tas-multiplayer-lengths
TAS: Show all script lengths for multiplayer
| -rw-r--r-- | src/input_common/drivers/tas_input.cpp | 12 | ||||
| -rw-r--r-- | src/input_common/drivers/tas_input.h | 2 | ||||
| -rw-r--r-- | src/yuzu/main.cpp | 27 | ||||
| -rw-r--r-- | src/yuzu/main.h | 4 | 
4 files changed, 38 insertions, 7 deletions
| diff --git a/src/input_common/drivers/tas_input.cpp b/src/input_common/drivers/tas_input.cpp index f3ade90da..f3cb14c56 100644 --- a/src/input_common/drivers/tas_input.cpp +++ b/src/input_common/drivers/tas_input.cpp @@ -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; +    std::array<size_t, PLAYER_NUMBER> lengths{0};      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) { @@ -168,7 +170,11 @@ std::tuple<TasState, size_t, size_t> Tas::GetStatus() const {          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() { diff --git a/src/input_common/drivers/tas_input.h b/src/input_common/drivers/tas_input.h index 38a27a230..5be66d142 100644 --- a/src/input_common/drivers/tas_input.h +++ b/src/input_common/drivers/tas_input.h @@ -124,7 +124,7 @@ public:       * Current playback progress ;       * 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:      enum class TasAxis : u8; diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 2ea3b7d59..571eacf9f 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -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 {      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) {      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: -        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: -        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:          return tr("TAS State: Invalid");      } diff --git a/src/yuzu/main.h b/src/yuzu/main.h index f25ce65a8..0f61abc7a 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -12,6 +12,7 @@  #include "common/announce_multiplayer_room.h"  #include "common/common_types.h" +#include "input_common/drivers/tas_input.h"  #include "yuzu/compatibility_list.h"  #include "yuzu/hotkeys.h" @@ -266,6 +267,9 @@ private:      void changeEvent(QEvent* event) override;      void closeEvent(QCloseEvent* event) override; +    std::string CreateTASFramesString( +        std::array<size_t, InputCommon::TasInput::PLAYER_NUMBER> frames) const; +  #ifdef __unix__      void SetupSigInterrupts();      static void HandleSigInterrupt(int); | 
