すべてを統合する - フレンドを追加する - (Unreal Engine モジュール)
注釈:本資料はAI技術を用いて翻訳されています。
受信したリクエストを取得するために UI を接続する
-
FriendRequestsWidget_Starterクラスの CPP ファイルを開き、GetFriendRequestList()関数に移動して、現在の実装を以下のコードに置き換えます。これはFriendsSubsystem_Starterサブシステムを使用して受信したフレンドリクエストリストを取得し、完了時に表示します。void UFriendRequestsWidget_Starter::GetFriendRequestList()
{
ensure(FriendsSubsystem);
Ws_FriendRequests->SetWidgetState(EAccelByteWarsWidgetSwitcherState::Loading);
FriendsSubsystem->GetInboundFriendRequestList(
GetOwningPlayer(),
FOnGetInboundFriendRequestListComplete::CreateWeakLambda(this, [this](bool bWasSuccessful, TArray<UFriendData*> FriendRequests, const FString& ErrorMessage)
{
Lv_FriendRequests->ClearListItems();
if (bWasSuccessful)
{
Lv_FriendRequests->SetListItems(FriendRequests);
Ws_FriendRequests->SetWidgetState(FriendRequests.IsEmpty() ?
EAccelByteWarsWidgetSwitcherState::Empty :
EAccelByteWarsWidgetSwitcherState::Not_Empty);
}
else
{
Ws_FriendRequests->ErrorMessage = FText::FromString(ErrorMessage);
Ws_FriendRequests->SetWidgetState(EAccelByteWarsWidgetSwitcherState::Error);
}
}
));
} -
NativeOnActivated()関数を以下のコードに置き換えます。これはGetFriendRequestList()関数をOnCachedFriendsDataUpdatedにバインドし、実際のリストが変更されるとすぐに表示されるリストを更新します。void UFriendRequestsWidget_Starter::NativeOnActivated()
{
Super::NativeOnActivated();
Btn_Back->OnClicked().AddUObject(this, &ThisClass::DeactivateWidget);
// Reset widgets.
Ws_FriendRequests->SetWidgetState(EAccelByteWarsWidgetSwitcherState::Empty);
Lv_FriendRequests->ClearListItems();
FriendsSubsystem->BindOnCachedFriendsDataUpdated(GetOwningPlayer(), FOnCachedFriendsDataUpdated::CreateUObject(this, &ThisClass::GetFriendRequestList));
GetFriendRequestList();
} -
NativeOnDeactivated()に以下のコードを追加します。基本的に、ウィジェットが閉じられると、受信したフレンドリクエストリストの変更の監視を停止します。void UFriendRequestsWidget_Starter::NativeOnDeactivated()
{
Btn_Back->OnClicked().Clear();
FriendsSubsystem->UnbindOnCachedFriendsDataUpdated(GetOwningPlayer());
Super::NativeOnDeactivated();
}
送信したリクエストを取得するために UI を接続する
-
SentFriendRequestsWidget_Starterクラスの CPP ファイルを開き、GetSentFriendRequestList()関数に移動して、現在の実装を以下のコードに置き換えます。これはFriendsSubsystem_Starterサブシステムを使用して送信したフレンドリクエストリストを取得し、完了時に表示します。void USentFriendRequestsWidget_Starter::GetSentFriendRequestList()
{
ensure(FriendsSubsystem);
Ws_FriendRequests->SetWidgetState(EAccelByteWarsWidgetSwitcherState::Loading);
FriendsSubsystem->GetOutboundFriendRequestList(
GetOwningPlayer(),
FOnGetOutboundFriendRequestListComplete::CreateWeakLambda(this, [this](bool bWasSuccessful, TArray<UFriendData*> FriendRequests, const FString& ErrorMessage)
{
Lv_FriendRequests->ClearListItems();
if (bWasSuccessful)
{
Lv_FriendRequests->SetListItems(FriendRequests);
Ws_FriendRequests->SetWidgetState(FriendRequests.IsEmpty() ?
EAccelByteWarsWidgetSwitcherState::Empty :
EAccelByteWarsWidgetSwitcherState::Not_Empty);
}
else
{
Ws_FriendRequests->ErrorMessage = FText::FromString(ErrorMessage);
Ws_FriendRequests->SetWidgetState(EAccelByteWarsWidgetSwitcherState::Error);
}
}
));
} -
NativeOnActivated()に以下のコードを追加します。これはGetSentFriendRequestList()関数をOnCachedFriendsDataUpdatedにバインドし、実際のリストが変更されるとすぐに表示されるリストを更新します。void USentFriendRequestsWidget_Starter::NativeOnActivated()
{
Super::NativeOnActivated();
Btn_Back->OnClicked().AddUObject(this, &ThisClass::DeactivateWidget);
// Reset widgets.
Ws_FriendRequests->SetWidgetState(EAccelByteWarsWidgetSwitcherState::Empty);
Lv_FriendRequests->ClearListItems();
FriendsSubsystem->BindOnCachedFriendsDataUpdated(GetOwningPlayer(), FOnCachedFriendsDataUpdated::CreateUObject(this, &ThisClass::GetSentFriendRequestList));
GetSentFriendRequestList();
} -
NativeOnDeactivated()に以下のコードを追加します。基本的に、ウィジェットが閉じられると、送信したフレンドリクエストリストの変更の監視を停止します。void USentFriendRequestsWidget_Starter::NativeOnDeactivated()
{
Btn_Back->OnClicked().Clear();
FriendsSubsystem->UnbindOnCachedFriendsDataUpdated(GetOwningPlayer());
Super::NativeOnDeactivated();
}
リクエストを承認、拒否、キャンセルするために UI を接続する
-
まず、フレンドリクエストの承認から始めます。
FriendWidgetEntry_Starterクラスの CPP ファイルを開き、OnAcceptButtonClicked()関数に移動して、現在の実装を以下のコードに置き換えます。void UFriendWidgetEntry_Starter::OnAcceptButtonClicked()
{
ensure(CachedFriendData);
ensure(FriendsSubsystem);
FriendsSubsystem->AcceptFriendRequest(GetOwningPlayer(), CachedFriendData->UserId);
} -
同じファイル内で、
OnRejectButtonClicked()関数に移動し、現在の実装を以下のコードに置き換えます。void UFriendWidgetEntry_Starter::OnRejectButtonClicked()
{
ensure(CachedFriendData);
ensure(FriendsSubsystem);
FriendsSubsystem->RejectFriendRequest(GetOwningPlayer(), CachedFriendData->UserId);
} -
OnCancelButtonClicked()関数に移動し、フレンドリクエストをキャンセルするために現在の実装を以下のコードに置き換えます。void UFriendWidgetEntry_Starter::OnCancelButtonClicked()
{
ensure(CachedFriendData);
ensure(FriendsSubsystem);
// Cancel friend request is the same as removing a friend.
FriendsSubsystem->CancelFriendRequest(GetOwningPlayer(), CachedFriendData->UserId);
}
リソース
- このチュートリアルセクションで使用されているファイルは、Unreal Byte Wars GitHub リポジトリで入手できます。
- AccelByteWars/Source/AccelByteWars/TutorialModules/Social/FriendsEssentials/UI/FriendRequestsWidget_Starter.h
- AccelByteWars/Source/AccelByteWars/TutorialModules/Social/FriendsEssentials/UI/FriendRequestsWidget_Starter.cpp
- AccelByteWars/Source/AccelByteWars/TutorialModules/Social/FriendsEssentials/UI/SentFriendRequestsWidget_Starter.h
- AccelByteWars/Source/AccelByteWars/TutorialModules/Social/FriendsEssentials/UI/SentFriendRequestsWidget_Starter.cpp
- AccelByteWars/Source/AccelByteWars/TutorialModules/Social/FriendsEssentials/UI/FriendWidgetEntry_Starter.h
- AccelByteWars/Source/AccelByteWars/TutorialModules/Social/FriendsEssentials/UI/FriendWidgetEntry_Starter.cpp