mak1a / SivPhoton

5 stars 1 forks source link

レビュー 2022-04-22 #7

Open Reputeless opened 2 years ago

Reputeless commented 2 years ago
/// @brief マルチプレイヤー用クラスを作成します。
/// @param secretPhotonAppID Photon アプリケーション ID
/// @param photonAppVersion アプリケーションのバージョンです。
/// @param verbose デバッグ用の Print 出力をする場合 Verbose::Yes, それ以外の場合は Verbose::No
void init(StringView secretPhotonAppID, StringView photonAppVersion, Verbose verbose = Verbose::Yes);

/// @brief 現在のルームに存在するローカルプレイヤーの人数を返します。 /// @return ローカルプレイヤーの人数 [[nodiscard]] int32 getPlayerCountInCurrentRoom() const;

```cpp
Array<LocalPlayer> Multiplayer_Photon::getLocalPlayers() const
{
    if (not m_client->getIsInGameRoom())
    {
        return{};
    }

    Array<LocalPlayer> results;

    const auto& players = m_client->getCurrentlyJoinedRoom().getPlayers();

    for (uint32 i = 0; i < players.getSize(); ++i)
    {
        const auto& player = players[i];

        LocalPlayer localPlayer
        {
            .localID    = player->getNumber(),
            .userName   = detail::ToString(player->getName()),
            .userID     = detail::ToString(player->getUserID()),
            .isHost     = player->getIsMasterClient(),
            .isActive   = (not player->getIsInactive()),
        };

        results << std::move(localPlayer);
    }

    return results;
}

/// @brief ルームへの入室を試みた結果が通知されるときに呼び出されます。 /// @param playerID ルーム内のローカルプレイヤー ID /// @param errorCode エラーコード /// @param errorString エラー文字列 virtual void joinRoomReturn(int32 playerID, int32 errorCode, const String& errorString);

/// @brief ルームに誰かが(自分または他人)が入室したときに呼び出されます。 /// @param playerID 入室者のローカルプレイヤー ID /// @param playerIDs ルーム内のプレイヤー全員のローカルプレイヤー ID /// @param isSelf 入室したのが自分である場合 true, それ以外の場合は false virtual void joinRoomEventAction(int32 playerID, const Array& playerIDs, bool isSelf);

/// @brief ルームから誰かが退室したときに呼び出されます。 /// @param playerID 退室者のローカルプレイヤー ID /// @param isInactive 再入室できる場合 true, それ以外の場合は false virtual void leaveRoomEventAction(int32 playerID, bool isInactive);

/// @brief 部屋の作成を試みた結果が通知されるときに呼び出されます。 /// @param playerID プレイヤーID /// @param errorCode エラーコード /// @param errorString エラー文字列 virtual void createRoomReturn(int32 playerID, int32 errorCode, const String& errorString);

/// @brief データを受信した際に呼び出されます。 /// @param playerID 送信者のローカルプレイヤー ID /// @param eventCode イベントコード /// @param data 受信したデータ virtual void customEventAction(int32 playerID, uint8 eventCode, bool data);


- `String getUserID() const;` の直後に `Optional<int32> getLocalPlayerID() const;`
- join できる状態であるかを返すために `isInLoby()` が必要
```cpp
bool Multiplayer_Photon::isInLobby() const
{
    return m_client->getIsInLobby();
}

参考実装

上記すべてに対応はしていない https://gist.github.com/Reputeless/148c74ce56311031e8e8147a43f3fe22