Editor/Window/Anywhere/AnywhereLaunchStep.cs (91 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
using AmazonGameLift.Runtime;
using System.Threading.Tasks;
using UnityEditor;
using UnityEditor.Build;
using UnityEngine.UIElements;
namespace AmazonGameLift.Editor
{
public class AnywhereLaunchStep : ProgressBarStepComponent
{
private const string _primaryButtonClassName = "button--primary";
private const int RefreshUIMilliseconds = 2000;
private GameLiftClientSettings _gameLiftClientSettings;
private readonly GameLiftClientSettingsLoader _gameLiftClientSettingsLoader;
private readonly DeploymentStepTemplate _templateContent;
private readonly Button _launchServerButton;
private readonly Button _configureClientButton;
public AnywhereLaunchStep(VisualElement container, StateManager stateManager) : base(container, stateManager, "EditorWindow/Components/Anywhere/AnywhereLaunchStep")
{
_templateContent = new DeploymentStepTemplate.Builder(Strings.AnywherePageLaunchTitle, Strings.AnywherePageLaunchDescription)
.WithoutBaseButtons()
.Build(container);
LocalizeText();
_gameLiftClientSettingsLoader = new GameLiftClientSettingsLoader(_templateContent.StatusBox);
LoadGameLiftClientSettings();
_launchServerButton = container.Q<Button>("AnywherePageLaunchServerButton");
_launchServerButton.RegisterCallback<ClickEvent>(_ =>
{
EditorUserBuildSettings.SwitchActiveBuildTarget(NamedBuildTarget.Server,
EditorUserBuildSettings.selectedStandaloneTarget);
EditorApplication.EnterPlaymode();
});
_configureClientButton = container.Q<Button>("AnywherePageConfigureClientButton");
_configureClientButton.RegisterCallback<ClickEvent>(_ =>
{
_gameLiftClientSettings.ConfigureAnywhereClientSettings();
_stateManager.OnClientSettingsChanged?.Invoke();
});
UpdateGUI();
}
protected sealed override Task StartOrResumeStep()
{
CompleteStep();
return Task.CompletedTask;
}
protected sealed override void ResetStep() { }
protected sealed override void UpdateGUI()
{
_container.SetEnabled(_stateManager.IsBootstrapped());
bool isComputeRegistered = true;
bool isClientConfigured = _gameLiftClientSettings && _gameLiftClientSettings.IsGameLiftAnywhere;
bool isConfigureClientEnabled = isComputeRegistered && !isClientConfigured && _gameLiftClientSettings;
_configureClientButton.SetEnabled(isConfigureClientEnabled);
if (isConfigureClientEnabled)
{
_configureClientButton.AddToClassList(_primaryButtonClassName);
}
else
{
_configureClientButton.RemoveFromClassList(_primaryButtonClassName);
}
bool isLaunchServerEnabled = isComputeRegistered && isClientConfigured;
_launchServerButton.SetEnabled(isLaunchServerEnabled);
if (isLaunchServerEnabled)
{
_launchServerButton.AddToClassList(_primaryButtonClassName);
}
else
{
_launchServerButton.RemoveFromClassList(_primaryButtonClassName);
}
}
private void LocalizeText()
{
var l = new ElementLocalizer(_container);
l.SetElementText("AnywherePageConfigureClientLabel", Strings.AnywherePageConfigureClientLabel);
l.SetElementText("AnywherePageConfigureClientButton", Strings.AnywherePageConfigureClientButton);
l.SetElementText("AnywherePageLaunchServerLabel", Strings.AnywherePageLaunchServerLabel);
l.SetElementText("AnywherePageLaunchServerButton", Strings.AnywherePageLaunchServerButton);
l.SetElementText("AnywherePageLaunchClientLabel", Strings.AnywherePageLaunchClientLabel);
l.SetElementText("AnywherePageLaunchClientDescription", Strings.AnywherePageLaunchClientDescription);
}
private void LoadGameLiftClientSettings()
{
_gameLiftClientSettings = _gameLiftClientSettingsLoader.LoadAsset();
_container.schedule.Execute(() => {
LoadGameLiftClientSettings();
UpdateGUI();
}).StartingIn(RefreshUIMilliseconds);
}
}
}