in GameLiftPlugin/Source/GameLiftPlugin/Private/SMenu/Containers/SCreateContainerFleetSection.cpp [18:265]
void SCreateContainerFleetSection::Construct(const FArguments& InArgs)
{
OnRetryStepDelegate = InArgs._OnRetryStepDelegate;
ChildSlot
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.Padding(SPadding::Right2x)
.AutoWidth()
[
SAssignNew(ProgressBar, SProgressBar)
.IsLastComponent(true)
]
+ SHorizontalBox::Slot()
.Padding(SPadding::Bottom5x + SPadding::Right2x)
.FillWidth(1.0f)
[
SNew(SVerticalBox)
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::SectionTitleTopPadding)
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kCreateContainerFleetHeader)
.AutoWrapText(true)
.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kTitleStyleName)
]
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Top3x)
[
SNew(SVerticalBox)
+ SVerticalBox::Slot()
.AutoHeight()
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kCreateContainerFleetDescription)
.AutoWrapText(true)
.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kParagraph)
]
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Top3x)
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kCreateContainerFleetDescriptionPart2)
.AutoWrapText(true)
.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kParagraph)
]
]
// Error text box
+ SVerticalBox::Slot()
.AutoHeight()
.Padding(SPadding::Top2x)
[
CreateShowErrorUI()
]
// Fleet status row
+ SVerticalBox::Slot()
.AutoHeight()
.HAlign(HAlign_Fill)
.Padding(SPadding::Top2x)
[
SAssignNew(FleetStatusRow, SNamedRow)
.NameText(Menu::DeployContainers::kContainerFleetStatusTitle)
.RowWidget(
SAssignNew(FleetStatusTextBlock, STextStatus)
.StatusTextStyle(Style::Text::kFieldBold)
)
.SecondaryColumnLeftPadding(true)
.Visibility_Lambda([&]() -> EVisibility
{
return ShowFleetDetails() ? EVisibility::Visible : EVisibility::Collapsed;
})
]
// Fleet id row
+ SVerticalBox::Slot()
.AutoHeight()
.HAlign(HAlign_Fill)
.Padding(SPadding::Top2x)
[
SAssignNew(FleetIdRow, SNamedRow)
.NameText(Menu::DeployContainers::kContainerFleetIdTitle)
.RowWidget(
SAssignNew(FleetIdTextBlock, STextBlock)
.AutoWrapText(true)
.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kParagraph)
)
.SecondaryColumnLeftPadding(true)
.Visibility_Lambda([&]() -> EVisibility
{
return ShowFleetDetails() ? EVisibility::Visible : EVisibility::Collapsed;
})
]
// Fleet type row
+ SVerticalBox::Slot()
.AutoHeight()
.HAlign(HAlign_Fill)
.Padding(SPadding::Top2x)
[
SAssignNew(FleetTypeRow, SNamedRow)
.NameText(Menu::DeployContainers::kContainerFleetTypeTitle)
.RowWidget(
SAssignNew(FleetTypeTextBlock, STextBlock)
.AutoWrapText(true)
.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kParagraph)
)
.SecondaryColumnLeftPadding(true)
.Visibility_Lambda([&]() -> EVisibility
{
return ShowFleetDetails() ? EVisibility::Visible : EVisibility::Collapsed;
})
]
// Instance type row
+ SVerticalBox::Slot()
.AutoHeight()
.HAlign(HAlign_Fill)
.Padding(SPadding::Top2x)
[
SAssignNew(InstanceTypeRow, SNamedRow)
.NameText(Menu::DeployContainers::kContainerInstanceTypeTitle)
.RowWidget(
SAssignNew(InstanceTypeTextBlock, STextBlock)
.AutoWrapText(true)
.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kParagraph)
)
.SecondaryColumnLeftPadding(true)
.Visibility_Lambda([&]() -> EVisibility
{
return ShowFleetDetails() ? EVisibility::Visible : EVisibility::Collapsed;
})
]
// Retry button
+ SVerticalBox::Slot()
.AutoHeight()
.HAlign(HAlign_Left)
.Padding(SPadding::Top3x)
[
SNew(SButton)
.OnClicked_Lambda([&]()
{
ResetUIToNotStarted();
OnRetryStepDelegate.ExecuteIfBound();
return FReply::Handled();
})
.Visibility_Lambda([&]() -> EVisibility
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
return ContainersStatus->ErrorCreatingContainerFleet && ContainersStatus->IsCgdConfigurationFinished ? EVisibility::Visible : EVisibility::Collapsed;
})
.Content()
[
SNew(SBox)
.HAlign(HAlign_Center)
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.AutoWidth()
.HAlign(HAlign_Left)
.VAlign(VAlign_Center)
.Padding(SPadding::Right)
[
SNew(SBox)
.WidthOverride(Style::kResetIconSize)
.HeightOverride(Style::kResetIconSize)
[
SNew(SImage)
.Image(FGameLiftPluginStyle::Get().GetBrush(Style::Brush::kResetIconName))
]
]
+ SHorizontalBox::Slot()
.AutoWidth()
.HAlign(HAlign_Center)
.VAlign(VAlign_Center)
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kRetryButtonLabel)
.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kButtonNormal)
]
]
]
]
// View in Gamelift Console button
+ SVerticalBox::Slot()
.AutoHeight()
.HAlign(HAlign_Left)
.Padding(SPadding::Top3x)
[
SNew(SButton)
.ButtonStyle(FGameLiftPluginStyle::Get(), Style::Button::kNormalButtonStyleName)
.Visibility_Lambda([&]() -> EVisibility
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
// On error, we will hide this because the error banner will have a button linking to CFN
return !ContainersStatus->ErrorCreatingContainerFleet && ContainersStatus->IsCgdConfigurationFinished ? EVisibility::Visible : EVisibility::Collapsed;
})
.OnClicked_Lambda([]
{
UGameLiftSettings* Settings = GetMutableDefault<UGameLiftSettings>();
FString CurrentAwsRegion = Settings->AwsRegion.ToString().IsEmpty() ? FString("us-west-2") : Settings->AwsRegion.ToString();
FPlatformProcess::LaunchURL(*FString::Format(Url::kAWSConsoleUrlContainerFleetFormat, { CurrentAwsRegion }), nullptr, nullptr);
return FReply::Handled();
})
.Content()
[
SNew(SBox)
.HeightOverride(OverrideButtonHeight)
.HAlign(HAlign_Center)
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.AutoWidth()
.HAlign(HAlign_Center)
.VAlign(VAlign_Center)
[
SNew(STextBlock)
.Text(Menu::DeployContainers::kAWSConsoleButtonText)
.TextStyle(FGameLiftPluginStyle::Get(), Style::Text::kButtonNormal)
]
+ SHorizontalBox::Slot()
.AutoWidth()
.Padding(SPadding::Left)
.HAlign(HAlign_Left)
.VAlign(VAlign_Center)
[
SNew(SBox)
.WidthOverride(Style::kLinkIconSize)
.HeightOverride(Style::kLinkIconSize)
[
SNew(SImage)
.Image(FGameLiftPluginStyle::Get().GetBrush(Style::Brush::kExternalLinkIconName))
#if(ENGINE_MAJOR_VERSION == 4)
.ColorAndOpacity(FColor::Black)
#endif
]
]
]
]
]
]
];
UpdateUIBasedOnCurrentState();
SCreateContainerGroupSection::OnConfigureCgdMultiDelegate.AddSP(this, &SCreateContainerFleetSection::StartSectionWorkflow);
SCreateContainerGroupSection::OnDeploymentCompleteMultiDelegate.AddSP(this, &SCreateContainerFleetSection::OnDeploymentComplete);
}