Editor/Window/FleetParametersInput.cs (112 lines of code) (raw):
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
using OperatingSystem = Amazon.GameLift.OperatingSystem;
namespace AmazonGameLift.Editor
{
public class FleetParametersInput
{
private static readonly Dictionary<string, OperatingSystem> OSMappings = new()
{
{ "Amazon Linux 2 (AL2)", OperatingSystem.AMAZON_LINUX_2 },
{ "Amazon Linux 2023 (AL2023)", OperatingSystem.AMAZON_LINUX_2023 },
{ "Windows Server 2016", OperatingSystem.WINDOWS_2016 },
};
private readonly ManagedEC2FleetParameters _parameters;
private readonly VisualElement _container;
private readonly TextField _gameNameInput;
private readonly TextField _fleetNameInput;
private readonly TextField _buildNameInput;
private readonly TextField _launchParamsInput;
private readonly TextField _serverFolderInput;
private readonly TextField _serverFileInput;
private readonly DropdownField _osDropdown;
private readonly Button _serverFolderButton;
private readonly Button _serverFileButton;
public Action<ManagedEC2FleetParameters> OnValueChanged;
public FleetParametersInput(VisualElement container, ManagedEC2FleetParameters parameters)
{
var uxml = Resources.Load<VisualTreeAsset>("EditorWindow/Components/DeploymentParameters");
container.Add(uxml.Instantiate());
_container = container;
_parameters = parameters;
_gameNameInput = SetupInput("ManagedEC2ParametersGameNameInput", parameters.GameName,
value => parameters.GameName = value);
_fleetNameInput = SetupInput("ManagedEC2ParametersFleetNameInput", parameters.FleetName,
value => parameters.FleetName = value);
_buildNameInput = SetupInput("ManagedEC2ParametersBuildNameInput", parameters.BuildName,
value => parameters.BuildName = value);
_launchParamsInput = SetupInput("ManagedEC2ParametersLaunchParametersInput", parameters.LaunchParameters,
value => parameters.LaunchParameters = value);
_serverFolderInput = SetupInput("ManagedEC2ParametersGameServerFolderInput", parameters.GameServerFolder,
value => parameters.GameServerFolder = value);
_serverFileInput = SetupInput("ManagedEC2ParametersGameServerFileInput", parameters.GameServerFile,
value => parameters.GameServerFile = value);
_osDropdown = container.Q<DropdownField>("ManagedEC2ParametersOperatingSystemInput");
_osDropdown.choices = OSMappings.Keys.ToList();
_osDropdown.index = OSMappings.Values.ToList().IndexOf(parameters.OperatingSystem);
_osDropdown.RegisterValueChangedCallback(e =>
{
_parameters.OperatingSystem = OSMappings[e.newValue];
OnValueChanged(_parameters);
});
_serverFolderButton = container.Q<Button>("ManagedEC2ParametersGameServerFolderButton");
_serverFolderButton.RegisterCallback<ClickEvent>(_ =>
{
var popupTitle = new TextProvider().Get(Strings.ManagedEC2ParametersGameServerFolderPath);
var value = EditorUtility.OpenFolderPanel(popupTitle, Application.dataPath,
_parameters.GameServerFolder);
_parameters.GameServerFolder = value;
_serverFolderInput.value = value;
OnValueChanged(_parameters);
});
_serverFileButton = container.Q<Button>("ManagedEC2ParametersGameServerFileButton");
_serverFileButton.RegisterCallback<ClickEvent>(_ =>
{
var popupTitle = new TextProvider().Get(Strings.ManagedEC2ParametersGameServerFilePath);
var value = EditorUtility.OpenFilePanel(popupTitle, _parameters.GameServerFolder, "" );
_parameters.GameServerFile = value;
_serverFileInput.value = value;
OnValueChanged(_parameters);
});
LocalizeText();
}
private TextField SetupInput(string inputName, string initialValue, Action<string> onChangeEvent)
{
var input = _container.Q<TextField>(inputName);
input.value = initialValue;
input.RegisterValueChangedCallback(e =>
{
onChangeEvent(e.newValue);
OnValueChanged(_parameters);
});
return input;
}
public void SetEnabled(bool value)
{
_gameNameInput.SetEnabled(value);
_fleetNameInput.SetEnabled(value);
_buildNameInput.SetEnabled(value);
_launchParamsInput.SetEnabled(value);
_serverFolderInput.SetEnabled(value);
_serverFileInput.SetEnabled(value);
_osDropdown.SetEnabled(value);
_serverFolderButton.SetEnabled(value);
_serverFileButton.SetEnabled(value);
}
private void LocalizeText()
{
var l = new ElementLocalizer(_container);
l.SetElementText("ManagedEC2ParametersGameNameLabel", Strings.ManagedEC2ParametersGameNameLabel);
l.SetElementText("ManagedEC2ParametersFleetNameLabel", Strings.ManagedEC2ParametersFleetNameLabel);
l.SetElementText("ManagedEC2ParametersBuildNameLabel", Strings.ManagedEC2ParametersBuildNameLabel);
l.SetElementText("ManagedEC2ParametersLaunchParametersLabel", Strings.ManagedEC2ParametersLaunchParametersLabel);
l.SetElementText("ManagedEC2ParametersOperatingSystemLabel", Strings.ManagedEC2ParametersOperatingSystemLabel);
l.SetElementText("ManagedEC2ParametersGameServerFolderLabel", Strings.ManagedEC2ParametersGameServerFolderLabel);
l.SetElementText("ManagedEC2ParametersGameServerFileLabel", Strings.ManagedEC2ParametersGameServerFileLabel);
}
}
}