// 27 Slicer
// Copyright 2021 Deftly Games
// https://slicer.deftly.games/
using UnityEngine;
namespace Slicer.Core
{
///
/// Static class used for managing configuration and other useful information for the slicer.
///
///
/// > [!Warning]
/// > The configuration should not be changed during runtime and instead should only be modified using the "27 Slicer Configuration" window.
/// > This window can be found by navigating to Window -> 27 Slicer -> Configuration in the Unity Editor.
///
public static class SlicerConfiguration
{
static SlicerConfiguration()
{
LoadConfiguration();
}
///
/// The URL to the 27 Slicer web site.
///
public const string SiteUrl = "https://slicer.deftly.games";
///
/// The path to the reference manuals for components on the web site.
///
public const string ComponentsManualPath = "/manual/components/";
///
/// The path to the reference manuals.
///
public const string ManualPath = "/manual/";
///
/// Gets a value indicating whether the configuration has been customized and loaded from file.
///
///
/// true if a custom configuration is being used; otherwise, false.
///
public static bool CustomConfigurationLoaded { get; private set; } = false;
///
public static bool SkipUnmodifiedSlices { get; private set; }
///
public static bool RefreshSlicesOnUpdate { get; private set; }
///
public static bool FinalizeOnStart { get; private set; }
///
public static bool UseFinalizedSlicedMeshComponent { get; private set; }
///
public static bool SetFinalizedSlicedMeshToBeNoLongerReadable { get; private set; }
///
public static bool OptimizeFinalizedSlicedMesh { get; private set; }
///
/// Loads the configuration.
///
/// If a custom configuration is being used the configuration file asset will be loaded and will overwrite the default configuration.
///
public static void LoadConfiguration()
{
var configurationFile = Resources.Load(SlicerCustomConfiguration.FileName);
if (configurationFile != null)
{
LoadCustomConfiguration(configurationFile);
Resources.UnloadAsset(configurationFile);
}
else
{
LoadDefaultConfiguration();
}
}
private static void LoadCustomConfiguration(SlicerCustomConfiguration configurationFile)
{
CustomConfigurationLoaded = true;
SkipUnmodifiedSlices = configurationFile.SkipUnmodifiedSlices;
RefreshSlicesOnUpdate = configurationFile.RefreshSlicesOnUpdate;
FinalizeOnStart = configurationFile.FinalizeOnStart;
UseFinalizedSlicedMeshComponent = configurationFile.UseFinalizedSlicedMeshComponent;
SetFinalizedSlicedMeshToBeNoLongerReadable = configurationFile.SetFinalizedSlicedMeshToBeNoLongerReadable;
OptimizeFinalizedSlicedMesh = configurationFile.OptimizeFinalizedSlicedMesh;
}
private static void LoadDefaultConfiguration()
{
CustomConfigurationLoaded = false;
SkipUnmodifiedSlices = SlicerCustomConfiguration.SkipUnmodifiedSlicesDefault;
RefreshSlicesOnUpdate = SlicerCustomConfiguration.RefreshSlicesOnUpdateDefault;
FinalizeOnStart = SlicerCustomConfiguration.FinalizeOnStartDefault;
UseFinalizedSlicedMeshComponent = SlicerCustomConfiguration.UseFinalizedSlicedMeshComponentDefault;
SetFinalizedSlicedMeshToBeNoLongerReadable = SlicerCustomConfiguration.SetFinalizedSlicedMeshToBeNoLongerReadableDefault;
OptimizeFinalizedSlicedMesh = SlicerCustomConfiguration.OptimizeFinalizedSlicedMeshDefault;
}
public new static string ToString()
{
var str = $"27 Slicer Configuration\n" +
$"CustomConfigurationLoaded = {CustomConfigurationLoaded}\n" +
$"\n" +
$"SkipUnmodifiedSlices = {SkipUnmodifiedSlices}\n" +
$"RefreshSlicesOnUpdate = {RefreshSlicesOnUpdate}\n" +
$"FinalizeOnStart = {FinalizeOnStart}\n" +
$"UseFinalizedSlicedMeshComponent = {UseFinalizedSlicedMeshComponent}\n" +
$"SetFinalizedSlicedMeshToBeNoLongerReadable = {SetFinalizedSlicedMeshToBeNoLongerReadable}\n" +
$"OptimizeFinalizedSlicedMesh = {OptimizeFinalizedSlicedMesh}\n";
return str;
}
}
}