// 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); } } }