Editor/Window/ManagedEC2/ManagedEC2GameParametersStep.cs (104 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
using System.Threading.Tasks;
using UnityEngine.UIElements;
using UnityEngine;
namespace AmazonGameLift.Editor
{
public class ManagedEC2GameParametersStep : ProgressBarStepComponent
{
private readonly FleetParametersInput _fleetParamsInput;
private VisualElement parametersContainer;
private VisualElement parametersContainerInProgress;
private VisualElement parametersContainerComplete;
private Button setParametersButton;
private Button modifyParametersButton;
private Label gameNameText;
private Label fleetNameText;
private Label buildNameText;
private Label launchParametersText;
private Label buildOSText;
private Label gameServerFolderText;
private Label gameServerFileText;
private EC2DeploymentSettings _deploymentSettings;
public ManagedEC2GameParametersStep(VisualElement container, StateManager stateManager, EC2DeploymentSettings deploymentSettings, ManagedEC2FleetParameters parameters, EC2DeployStep ec2DeployStep) : base(container, stateManager, "EditorWindow/Components/ManagedEC2/ManagedEC2GameParametersStep")
{
new DeploymentStepTemplate.Builder(Strings.ManagedEC2ParametersTitle, Strings.ManagedEC2ParametersDescription)
.WithoutBaseButtons()
.Build(container);
_deploymentSettings = deploymentSettings;
parametersContainer = container.Q<VisualElement>("ManagedEC2ParametersInputContainer");
parametersContainerInProgress = container.Q<VisualElement>("ParametersContainerInProgress");
parametersContainerComplete = container.Q<VisualElement>("ParametersContainerComplete");
gameNameText = container.Q<Label>("GameNameDisplay");
fleetNameText = container.Q<Label>("FleetNameDisplay");
buildNameText = container.Q<Label>("BuildNameDisplay");
launchParametersText = container.Q<Label>("LaunchParametersDisplay");
buildOSText = container.Q<Label>("BuildOSDisplay");
gameServerFolderText = container.Q<Label>("GameServerFolderDisplay");
gameServerFileText = container.Q<Label>("GameServerFileDisplay");
setParametersButton = container.Q<Button>("SetParametersButton");
modifyParametersButton = container.Q<Button>("ModifyParametersButton");
setParametersButton.RegisterCallback<ClickEvent>(_ => SetParametersClicked());
modifyParametersButton.RegisterCallback<ClickEvent>(_ => ModifyParametersClicked());
_fleetParamsInput = new FleetParametersInput(parametersContainer, parameters);
_fleetParamsInput.SetEnabled(deploymentSettings.CanEdit);
_fleetParamsInput.OnValueChanged += fleetParameters =>
{
ec2DeployStep.UpdateDeploymentSettings(fleetParameters);
};
Hide(parametersContainerInProgress);
Hide(parametersContainerComplete);
_deploymentSettings.CurrentStackInfoChanged += UpdateGUI;
}
protected sealed override Task StartOrResumeStep()
{
Show(parametersContainerInProgress);
return Task.CompletedTask;
}
protected sealed override void ResetStep()
{
Hide(parametersContainerComplete);
Hide(parametersContainerInProgress);
}
private void SetParametersClicked()
{
TryStart();
PopulateLabels();
Hide(parametersContainerInProgress);
Show(parametersContainerComplete);
CompleteStep();
}
private void ModifyParametersClicked()
{
Reset();
Show(parametersContainerInProgress);
Hide(parametersContainerComplete);
}
private void PopulateLabels()
{
gameNameText.text = _deploymentSettings.GameName;
fleetNameText.text = _deploymentSettings.FleetName;
buildNameText.text = _deploymentSettings.BuildName;
launchParametersText.text = _deploymentSettings.LaunchParameters;
buildOSText.text = _deploymentSettings.BuildOperatingSystem;
gameServerFolderText.text = _deploymentSettings.BuildFolderPath;
gameServerFileText.text = _deploymentSettings.BuildFilePath;
}
protected sealed override void UpdateGUI()
{
_fleetParamsInput.SetEnabled(_deploymentSettings.CanEdit);
if (_deploymentSettings.CurrentStackInfo.StackStatus == null)
{
return;
}
bool canModify = StackStatus.IsStackStatusOperationDone(_deploymentSettings.CurrentStackInfo.StackStatus);
if (canModify)
{
modifyParametersButton.SetEnabled(true);
}
else
{
modifyParametersButton.SetEnabled(false);
}
}
}
}