// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
using System;
using System.IO;
namespace AmazonGameLift.Editor
{
internal class PathConverter
{
private readonly CoreApi _coreApi;
public static PathConverter SharedInstance { get; } = new PathConverter(CoreApi.SharedInstance);
public PathConverter(CoreApi coreApi) =>
_coreApi = coreApi ?? throw new ArgumentNullException(nameof(coreApi));
/// Returns the absolute scenario folder path, if the plugin is located under 'Assets' or 'Packages'.
/// If is null or empty.
public virtual string GetScenarioAbsolutePath(string scenarioFolderName)
{
if (string.IsNullOrEmpty(scenarioFolderName))
{
throw new ArgumentException(DevStrings.StringNullOrEmpty, nameof(scenarioFolderName));
}
if (scenarioFolderName.StartsWith("Assets/"))
{
return Path.GetFullPath(scenarioFolderName);
}
string parametersInternalPath = $"{Paths.PackageName}/{Paths.ScenariosRootInPackage}/{scenarioFolderName}/{Paths.ParametersFileName}";
string parametersAssetPath = $"Assets/{parametersInternalPath}";
string parametersPath = Path.GetFullPath(parametersAssetPath);
if (!_coreApi.FileExists(parametersPath))
{
string parametersPackagePath = $"Packages/{parametersInternalPath}";
parametersPath = Path.GetFullPath(parametersPackagePath);
}
return Path.GetDirectoryName(parametersPath);
}
/// If is null or empty.
public virtual string GetCustomScenarioAbsolutePath(string scenarioAssetFolderPath)
{
if (string.IsNullOrEmpty(scenarioAssetFolderPath))
{
throw new ArgumentException(DevStrings.StringNullOrEmpty, nameof(scenarioAssetFolderPath));
}
string parametersAssetPath = $"{scenarioAssetFolderPath}/{Paths.ParametersFileName}";
string parametersPath = Path.GetFullPath(parametersAssetPath);
return Path.GetDirectoryName(parametersPath);
}
/// If is null or empty.
public virtual string GetParametersFilePath(string scenarioFolderPath)
{
if (string.IsNullOrEmpty(scenarioFolderPath))
{
throw new ArgumentException(DevStrings.StringNullOrEmpty, nameof(scenarioFolderPath));
}
return Path.Combine(scenarioFolderPath, Paths.ParametersFileName);
}
}
}