using UnityEngine;
using System.Collections;
namespace MoreMountains.Tools
{
///
/// Add this class to a gameobject, and it'll enable/disable it based on platform context, using conditional defintions to do so
///
[AddComponentMenu("More Mountains/Tools/Activation/MMPlatformActivation")]
public class MMPlatformActivation : MonoBehaviour
{
/// the possible times at which this script can run
public enum ExecutionTimes { Awake, Start, OnEnable }
public enum PlatformActions { DoNothing, Disable }
[Header("Settings")]
/// the selected execution time
public ExecutionTimes ExecutionTime = ExecutionTimes.Awake;
/// whether or not this should output a debug line in the console
public bool DebugToTheConsole = false;
[Header("Desktop")]
/// whether or not this gameobject should be active on Windows
public PlatformActions UNITY_STANDALONE_WIN = PlatformActions.DoNothing;
/// whether or not this gameobject should be active on OSX
public PlatformActions UNITY_STANDALONE_OSX = PlatformActions.DoNothing;
/// whether or not this gameobject should be active on Linux
public PlatformActions UNITY_STANDALONE_LINUX = PlatformActions.DoNothing;
/// whether or not this gameobject should be active on standalone
public PlatformActions UNITY_STANDALONE = PlatformActions.DoNothing;
[Header("Mobile")]
/// whether or not this gameobject should be active on iOS
public PlatformActions UNITY_IOS = PlatformActions.DoNothing;
/// whether or not this gameobject should be active on iPhone
public PlatformActions UNITY_IPHONE = PlatformActions.DoNothing;
/// whether or not this gameobject should be active on Android
public PlatformActions UNITY_ANDROID = PlatformActions.DoNothing;
/// whether or not this gameobject should be active on Tizen
public PlatformActions UNITY_TIZEN = PlatformActions.DoNothing;
[Header("Console")]
/// whether or not this gameobject should be active on Wii
public PlatformActions UNITY_WII = PlatformActions.DoNothing;
/// whether or not this gameobject should be active on PS4
public PlatformActions UNITY_PS4 = PlatformActions.DoNothing;
/// whether or not this gameobject should be active on XBoxOne
public PlatformActions UNITY_XBOXONE = PlatformActions.DoNothing;
[Header("Others")]
/// whether or not this gameobject should be active on WebGL
public PlatformActions UNITY_WEBGL = PlatformActions.DoNothing;
/// whether or not this gameobject should be active on Lumin
public PlatformActions UNITY_LUMIN = PlatformActions.DoNothing;
/// whether or not this gameobject should be active on TVOS
public PlatformActions UNITY_TVOS = PlatformActions.DoNothing;
/// whether or not this gameobject should be active on WSA
public PlatformActions UNITY_WSA = PlatformActions.DoNothing;
/// whether or not this gameobject should be active on Facebook
public PlatformActions UNITY_FACEBOOK = PlatformActions.DoNothing;
/// whether or not this gameobject should be active on Ads
public PlatformActions UNITY_ADS = PlatformActions.DoNothing;
/// whether or not this gameobject should be active on Analytics
public PlatformActions UNITY_ANALYTICS = PlatformActions.DoNothing;
[Header("Active in Editor")]
/// whether or not this gameobject should be active in Editor
public PlatformActions UNITY_EDITOR = PlatformActions.DoNothing;
/// whether or not this gameobject should be active in Editor on Windows
public PlatformActions UNITY_EDITOR_WIN = PlatformActions.DoNothing;
/// whether or not this gameobject should be active in Editor on OSX
public PlatformActions UNITY_EDITOR_OSX = PlatformActions.DoNothing;
/// whether or not this gameobject should be active in Editor on Linux
public PlatformActions UNITY_EDITOR_LINUX = PlatformActions.DoNothing;
///
/// On Enable, processes the state if needed
///
protected virtual void OnEnable()
{
if (ExecutionTime == ExecutionTimes.OnEnable)
{
Process();
}
}
///
/// On Awake, processes the state if needed
///
protected virtual void Awake()
{
if (ExecutionTime == ExecutionTimes.Awake)
{
Process();
}
}
///
/// On Start, processes the state if needed
///
protected virtual void Start()
{
if (ExecutionTime == ExecutionTimes.Start)
{
Process();
}
}
///
/// Enables or disables the object based on current platform
///
protected virtual void Process()
{
// DESKTOP ----------------------------------------------------------------------------------
#if UNITY_STANDALONE_WIN
DisableIfNeeded(UNITY_STANDALONE_WIN, "Windows");
#endif
#if UNITY_STANDALONE_OSX
DisableIfNeeded(UNITY_STANDALONE_OSX, "OSX");
#endif
#if UNITY_STANDALONE_LINUX
DisableIfNeeded(UNITY_STANDALONE_LINUX, "Linux");
#endif
#if UNITY_STANDALONE
DisableIfNeeded(UNITY_STANDALONE, "Standalone");
#endif
// MOBILE ----------------------------------------------------------------------------------
#if UNITY_IOS
DisableIfNeeded(UNITY_IOS, "iOS");
#endif
#if UNITY_IPHONE
DisableIfNeeded(UNITY_IPHONE, "iPhone");
#endif
#if UNITY_ANDROID
DisableIfNeeded(UNITY_ANDROID, "Android");
#endif
#if UNITY_TIZEN
DisableIfNeeded(UNITY_TIZEN, "Tizen");
#endif
// CONSOLE ----------------------------------------------------------------------------------
#if UNITY_WII
DisableIfNeeded(UNITY_WII, "Wii");
#endif
#if UNITY_PS4
DisableIfNeeded(UNITY_PS4, "PS4");
#endif
#if UNITY_XBOXONE
DisableIfNeeded(UNITY_XBOXONE, "XBoxOne");
#endif
// CONSOLE ----------------------------------------------------------------------------------
#if UNITY_WEBGL
DisableIfNeeded(UNITY_WEBGL, "WebGL");
#endif
#if UNITY_LUMIN
DisableIfNeeded(UNITY_LUMIN, "Lumin");
#endif
#if UNITY_TVOS
DisableIfNeeded(UNITY_TVOS, "TV OS");
#endif
#if UNITY_WSA
DisableIfNeeded(UNITY_WSA, "WSA");
#endif
#if UNITY_FACEBOOK
DisableIfNeeded(UNITY_FACEBOOK, "Facebook");
#endif
#if UNITY_ADS
DisableIfNeeded(UNITY_ADS, "Ads");
#endif
#if UNITY_ANALYTICS
DisableIfNeeded(UNITY_ANALYTICS, "Analytics");
#endif
// EDITOR ----------------------------------------------------------------------------------
#if UNITY_EDITOR
DisableIfNeeded(UNITY_EDITOR, "Editor");
#endif
#if UNITY_EDITOR_WIN
DisableIfNeeded(UNITY_EDITOR_WIN, "Editor Windows");
#endif
#if UNITY_EDITOR_OSX
DisableIfNeeded(UNITY_EDITOR_OSX, "Editor OSX");
#endif
#if UNITY_EDITOR_LINUX
DisableIfNeeded(UNITY_EDITOR_LINUX, "Editor Linux");
#endif
}
///
/// Disables the object if needed, and outputs a debug log if requested
///
///
///
protected virtual void DisableIfNeeded(PlatformActions platform, string platformName)
{
if (this.gameObject.activeInHierarchy && (platform == PlatformActions.Disable))
{
this.gameObject.SetActive(false);
if (DebugToTheConsole)
{
Debug.LogFormat(this.gameObject.name + " got disabled via MMPlatformActivation, platform : " + platformName + ".");
}
}
}
}
}