using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
namespace Pumkin.Dependencies
{
[InitializeOnLoad]
public static class ScriptDefinesManager
{
///
/// Adds define strings to 'Edit > Project Settings > Player > Scripting Define Symbols' for the currently selected platform
///
/// New defines to add
public static void AddDefinesIfMissing(params string[] newDefines)
{
AddDefinesIfMissing(EditorUserBuildSettings.selectedBuildTargetGroup, newDefines);
}
///
/// Removes define strings from 'Edit > Project Settings > Player > Scripting Define Symbols' for the currently selected platform
///
/// Defines to remove from the current build target
public static void RemoveDefines(params string[] definesToRemove)
{
RemoveDefines(EditorUserBuildSettings.selectedBuildTargetGroup, definesToRemove);
}
///
/// Checks if define is set for the currently selected build target
///
/// String to check for
public static bool IsDefined(string defineString)
{
return IsDefined(EditorUserBuildSettings.selectedBuildTargetGroup, defineString);
}
///
/// Adds define strings to 'Edit > Project Settings > Player > Scripting Define Symbols' for the given platform
///
/// Build target to add defines for. Different for every platform
/// New defines to add
public static void AddDefinesIfMissing(BuildTargetGroup buildTarget, params string[] newDefines)
{
bool definesChanged = false;
string existingDefines = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTarget);
HashSet defineSet = new HashSet();
if(existingDefines.Length > 0)
defineSet = new HashSet(existingDefines.Split(';'));
foreach(string def in newDefines)
if(defineSet.Add(def))
definesChanged = true;
if(definesChanged)
{
string finalDefineString = string.Join(";", defineSet.ToArray());
PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTarget, finalDefineString);
Debug.LogFormat("Set Scripting Define Symbols for selected build target ({0}) to: {1}", buildTarget.ToString(), finalDefineString);
}
}
///
/// Removes define strings from 'Edit > Project Settings > Player > Scripting Define Symbols' for the given platform
///
/// Build target to remove defines for. Different for every platform
/// Defines to remove from selected build target
public static void RemoveDefines(BuildTargetGroup buildTarget, params string[] definesToRemove)
{
string existingDefines = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTarget);
if(existingDefines.Length == 0)
return;
HashSet defineSet = new HashSet(existingDefines.Split(';'));
bool removedSomething = false;
foreach(string def in definesToRemove)
{
if(defineSet.Remove(def))
removedSomething = true;
}
if(!removedSomething)
return;
string finalDefineString = string.Join(";", defineSet.ToArray());
PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTarget, finalDefineString);
Debug.LogFormat("Set Scripting Define Symbols for selected build target ({0}) to: {1}", buildTarget.ToString(), finalDefineString);
}
///
/// Checks if define is set for given build target
///
/// Build target to check define for
/// String to check for
public static bool IsDefined(BuildTargetGroup buildTarget, string defineString)
{
string existingDefines = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTarget);
List splitDefines = existingDefines.Split(';').ToList();
if(splitDefines != null && splitDefines.Count > 0)
if(splitDefines.Contains(defineString))
return true;
return false;
}
///
/// Returns currently set defines for the given build target as an array split by ';'
///
/// Selected build target
public static string[] GetDefinesAsArray(BuildTargetGroup buildTarget)
{
return PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTarget).Split(';');
}
///
/// Returns currently set defines for the currently selected build target as an array split by ';'
///
public static string[] GetDefinesAsArray()
{
return PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup).Split(';');
}
}
}