mirror of
https://github.com/Dadechin/Unity-WebSocket.git
synced 2025-07-03 20:04:33 +00:00
103 lines
4.0 KiB
C#
103 lines
4.0 KiB
C#
#if UNITY_EDITOR
|
|
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using UnitySettingsProviderAttribute = UnityEditor.SettingsProviderAttribute;
|
|
using UnitySettingsProvider = UnityEditor.SettingsProvider;
|
|
using FishNet.Configuring;
|
|
using System.IO;
|
|
using System;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace FishNet.Editing.NewNetworkBehaviourScript
|
|
{
|
|
internal static class SettingsProvider
|
|
{
|
|
private static CreateNewNetworkBehaviourConfigurations _settings;
|
|
private static GUIContent _folderIcon;
|
|
private static readonly Regex SlashRegex = new(@"[\\//]");
|
|
|
|
[UnitySettingsProvider]
|
|
private static UnitySettingsProvider Create()
|
|
{
|
|
return new("Project/Fish-Networking/New NetworkBehaviour Template", SettingsScope.Project)
|
|
{
|
|
label = "New NetworkBehaviour Template",
|
|
|
|
guiHandler = OnGUI,
|
|
|
|
keywords = new string[]
|
|
{
|
|
"Fish",
|
|
"Networking",
|
|
"CreateNewNetworkBehaviour",
|
|
"Template"
|
|
},
|
|
};
|
|
}
|
|
|
|
private static void OnGUI(string searchContext)
|
|
{
|
|
if (_settings == null)
|
|
_settings = Configuration.Configurations.CreateNewNetworkBehaviour;
|
|
|
|
if (_folderIcon == null)
|
|
_folderIcon = EditorGUIUtility.IconContent("d_FolderOpened Icon");
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
|
|
GUILayoutOption iconWidthConstraint = GUILayout.MaxWidth(32.0f);
|
|
GUILayoutOption iconHeightConstraint = GUILayout.MaxHeight(EditorGUIUtility.singleLineHeight);
|
|
|
|
if (GUILayout.Button("Edit template"))
|
|
{
|
|
CreateNewNetworkBehaviour.EnsureTemplateExists();
|
|
|
|
try
|
|
{
|
|
System.Diagnostics.Process.Start(CreateNewNetworkBehaviour.TemplatePath);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Debug.LogError($"An issue occurred while trying to launch the NetworkBehaviour template. {e.Message}");
|
|
}
|
|
}
|
|
GUILayout.Space(20);
|
|
EditorGUILayout.BeginHorizontal();
|
|
GUILayout.Label("Template directory: ", GUILayout.MaxWidth(150));
|
|
string newDirectoryPath;
|
|
|
|
newDirectoryPath = EditorGUILayout.DelayedTextField(_settings.templateDirectoryPath, GUILayout.MaxWidth(600));
|
|
if (newDirectoryPath.StartsWith("Assets") && Directory.Exists(newDirectoryPath))
|
|
{
|
|
_settings.templateDirectoryPath = newDirectoryPath;
|
|
}
|
|
else
|
|
{
|
|
EditorWindow.focusedWindow.ShowNotification(new($"Directory must be inside the Assets folder."), 2);
|
|
}
|
|
|
|
|
|
if (GUILayout.Button(_folderIcon, iconHeightConstraint, iconWidthConstraint))
|
|
{
|
|
newDirectoryPath = EditorUtility.OpenFolderPanel("Select template directory", _settings.templateDirectoryPath, "");
|
|
}
|
|
if (newDirectoryPath.StartsWith(Application.dataPath, StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
newDirectoryPath = SlashRegex.Replace(newDirectoryPath.Remove(0, Path.GetDirectoryName(Application.dataPath).Length + 1), Path.DirectorySeparatorChar.ToString());
|
|
_settings.templateDirectoryPath = newDirectoryPath;
|
|
}
|
|
else if (!newDirectoryPath.StartsWith(Application.dataPath, StringComparison.OrdinalIgnoreCase) && !newDirectoryPath.StartsWith("Assets"))
|
|
{
|
|
EditorWindow.focusedWindow.ShowNotification(new($"Directory must be inside the Assets folder."), 2);
|
|
}
|
|
|
|
EditorGUILayout.EndHorizontal();
|
|
|
|
// EditorGUILayout.HelpBox("By default MonoBehaviour script template will be copied", MessageType.Info);
|
|
if (EditorGUI.EndChangeCheck())
|
|
Configuration.Configurations.Write(true);
|
|
}
|
|
}
|
|
}
|
|
#endif |