// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
using System;
using System.Collections.Generic;
using System.Linq;
namespace AmazonGameLift.Editor
{
///
/// Locates the sceanrio deploymemt types and creates their instances.
///
internal class ScenarioLocator
{
public static ScenarioLocator SharedInstance { get; } = new ScenarioLocator();
internal ScenarioLocator()
{
}
public virtual IEnumerable GetScenarios()
{
IEnumerable deployerTypes = AppDomain.CurrentDomain.GetAssemblies()
.Select(assembly => assembly.GetTypes().FirstOrDefault(IsNonProxyDelpoyerType))
.OfType();
DeployerBase[] deployers = deployerTypes
.Select(deployerType => (DeployerBase)Activator.CreateInstance(deployerType))
.ToArray();
Array.Sort(deployers, (item1, item2) => item1.PreferredUiOrder.CompareTo(item2.PreferredUiOrder));
return deployers;
}
// Proxy is the pattern for dynamic mocked type
private static bool IsNonProxyDelpoyerType(Type type)
{
return type.IsPublic && type.IsSubclassOf(typeof(DeployerBase)) && !type.Name.EndsWith("Proxy");
}
}
}