// -----------------------------------------------------------------------
//
//
// developer@photonengine.com
// ----------------------------------------------------------------------------
#if UNITY_2017_4_OR_NEWER
#define SUPPORTED_UNITY
#endif
#if !PHOTON_UNITY_NETWORKING
namespace Photon.Realtime
{
using System;
using System.IO;
using UnityEditor;
using UnityEngine;
///
/// Collection of connection-relevant settings, used internally by PhotonNetwork.ConnectUsingSettings.
///
///
/// Includes the AppSettings class from the Realtime APIs plus some other, PUN-relevant, settings.
[Serializable]
[HelpURL("https://doc.photonengine.com/en-us/pun/v2/getting-started/initial-setup")]
public class PhotonAppSettings : ScriptableObject
{
[Tooltip("Core Photon Server/Cloud settings.")]
public AppSettings AppSettings;
#if UNITY_EDITOR
[HideInInspector]
public bool DisableAutoOpenWizard;
//public bool ShowSettings;
//public bool DevRegionSetOnce;
#endif
private static PhotonAppSettings instance;
/// Serialized server settings, written by the Setup Wizard for use in ConnectUsingSettings.
public static PhotonAppSettings Instance
{
get
{
if (instance == null)
{
LoadOrCreateSettings();
}
return instance;
}
private set { instance = value; }
}
public static void LoadOrCreateSettings()
{
if (instance != null)
{
Debug.LogWarning("Instance is not null. Will not LoadOrCreateSettings().");
return;
}
#if UNITY_EDITOR
// let's check if the AssetDatabase finds the file; aimed to avoid multiple files being created, potentially a futile step
AssetDatabase.Refresh();
#endif
// try to load the resource / asset (ServerSettings a.k.a. PhotonServerSettings)
instance = (PhotonAppSettings)Resources.Load(typeof(PhotonAppSettings).Name, typeof(PhotonAppSettings));
if (instance != null)
{
//Debug.LogWarning("Settings from Resources."); // DEBUG
return;
}
// create it if not loaded
if (instance == null)
{
instance = (PhotonAppSettings)CreateInstance(typeof(PhotonAppSettings));
if (instance == null)
{
Debug.LogError("Failed to create ServerSettings. PUN is unable to run this way. If you deleted it from the project, reload the Editor.");
return;
}
//Debug.LogWarning("Settings created!"); // DEBUG
}
// in the editor, store the settings file as it's not loaded
#if UNITY_EDITOR
string punResourcesDirectory = "Assets/Photon/Resources/";
string serverSettingsAssetPath = punResourcesDirectory + typeof(PhotonAppSettings).Name + ".asset";
string serverSettingsDirectory = Path.GetDirectoryName(serverSettingsAssetPath);
if (!Directory.Exists(serverSettingsDirectory))
{
Directory.CreateDirectory(serverSettingsDirectory);
AssetDatabase.ImportAsset(serverSettingsDirectory);
}
AssetDatabase.CreateAsset(instance, serverSettingsAssetPath);
AssetDatabase.SaveAssets();
//Debug.Log("Settings stored to DB."); // DEBUG
#endif
}
}
}
#endif