Skip to content

Commit 485e0b5

Browse files
committed
Add saving and choosing template directory
1 parent e402b65 commit 485e0b5

File tree

3 files changed

+74
-13
lines changed

3 files changed

+74
-13
lines changed

Assets/FishNet/Runtime/Editor/Configuring/ConfigurationData.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.IO;
66
using System.Xml.Serialization;
77
using UnityEditor;
8+
using UnityEngine;
89

910

1011
namespace FishNet.Configuring
@@ -21,6 +22,12 @@ public enum SearchScopeType : int
2122
SpecificFolders = 1,
2223
}
2324

25+
public class CreateNewNetworkBehaviourConfigurations
26+
{
27+
public string templateDirectoryPath = "Assets";
28+
29+
}
30+
2431
public class PrefabGeneratorConfigurations
2532
{
2633
public bool Enabled = true;
@@ -53,6 +60,7 @@ public class ConfigurationData
5360

5461
public PrefabGeneratorConfigurations PrefabGenerator = new();
5562
public CodeStrippingConfigurations CodeStripping = new();
63+
public CreateNewNetworkBehaviourConfigurations CreateNewNetworkBehaviour = new();
5664
}
5765

5866
public static class ConfigurationDataExtension

Assets/FishNet/Runtime/Editor/NewNetworkBehaviour/CreateNewNetworkBehaviour.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
using FishNet.Configuring;
23
using System;
34
using System.IO;
45
using UnityEditor;
@@ -12,11 +13,14 @@ internal sealed class CreateNewNetworkBehaviour : MonoBehaviour
1213
{
1314

1415
private const string DEFAULT_TEMPLATE_NAME = "1-Scripting__MonoBehaviour Script-NewMonoBehaviourScript.cs.txt";
16+
17+
1518

1619
[MenuItem("Assets/Create/NetworkBehaviour Script", false, -220)]
1720
private static void CreateNewAsset()
1821
{
19-
string templatePath = Application.dataPath + "/FishnetNBTemplate.txt";
22+
23+
string templatePath = Path.Combine(Configuration.Configurations.CreateNewNetworkBehaviour.templateDirectoryPath,"FishnetNBTemplate.txt");
2024
if (!File.Exists(templatePath))
2125
{
2226

@@ -32,7 +36,8 @@ private static void CreateNewAsset()
3236

3337
public static void CopyExistingTemplate(string templatePath)
3438
{
35-
File.Copy(EditorApplication.applicationContentsPath + "/Resources/ScriptTemplates/" + DEFAULT_TEMPLATE_NAME, templatePath);
39+
40+
File.Copy(EditorApplication.applicationContentsPath + "/Resources/ScriptTemplates/" + DEFAULT_TEMPLATE_NAME,templatePath);
3641
string fileContent = File.ReadAllText(templatePath);
3742
fileContent = fileContent.ReplaceFirstOccurence("MonoBehaviour", "NetworkBehaviour");
3843
fileContent = fileContent.Replace("using UnityEngine;", "using UnityEngine;\nusing FishNet.Object;");

Assets/FishNet/Runtime/Editor/NewNetworkBehaviour/SettingsProvider.cs

Lines changed: 59 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
using UnitySettingsProvider = UnityEditor.SettingsProvider;
88
using FishNet.Configuring;
99
using System.IO;
10-
using System.Xml.Linq;
10+
using System;
11+
using System.Text.RegularExpressions;
1112

1213

1314
namespace FishNet.Editing.NewNetworkBehaviourScript
@@ -16,8 +17,10 @@ internal static class SettingsProvider
1617
{
1718

1819

19-
private static PrefabGeneratorConfigurations _settings;
20-
static string templatePath;
20+
private static CreateNewNetworkBehaviourConfigurations _settings;
21+
static string templatePath;
22+
private static GUIContent _folderIcon;
23+
private static readonly Regex SlashRegex = new(@"[\\//]");
2124
[UnitySettingsProvider]
2225
private static UnitySettingsProvider Create()
2326
{
@@ -39,25 +42,70 @@ private static UnitySettingsProvider Create()
3942

4043
private static void OnGUI(string searchContext)
4144
{
42-
if(templatePath == null) templatePath = Application.dataPath + "/FishnetNBTemplate.txt";
45+
if (_settings == null)
46+
_settings = Configuration.Configurations.CreateNewNetworkBehaviour;
47+
48+
if (_folderIcon == null)
49+
_folderIcon = EditorGUIUtility.IconContent("d_FolderOpened Icon");
50+
51+
EditorGUI.BeginChangeCheck();
52+
53+
GUILayoutOption iconWidthConstraint = GUILayout.MaxWidth(32.0f);
54+
GUILayoutOption iconHeightConstraint = GUILayout.MaxHeight(EditorGUIUtility.singleLineHeight);
4355

4456
if (GUILayout.Button("Edit template"))
4557
{
58+
templatePath = Path.Combine(_settings.templateDirectoryPath, "FishnetNBTemplate.txt");
59+
4660
if (!File.Exists(templatePath))
4761
{
4862
CreateNewNetworkBehaviour.CopyExistingTemplate(templatePath);
4963
}
5064
System.Diagnostics.Process.Start(templatePath);
5165
}
52-
53-
EditorGUILayout.LabelField($"Template path: {templatePath}");
54-
55-
}
66+
GUILayout.Space(20);
67+
EditorGUILayout.BeginHorizontal();
68+
GUILayout.Label("Template directory: ", GUILayout.MaxWidth(150));
69+
string newDirectoryPath;
70+
71+
newDirectoryPath = EditorGUILayout.DelayedTextField(_settings.templateDirectoryPath, GUILayout.MaxWidth(600));
72+
if (newDirectoryPath.StartsWith("Assets") && Directory.Exists(newDirectoryPath))
73+
{
74+
_settings.templateDirectoryPath = newDirectoryPath;
75+
}
76+
else
77+
{
78+
EditorWindow.focusedWindow.ShowNotification(new($"Directory must be inside the Assets folder."), 2);
79+
}
5680

57-
5881

59-
82+
if (GUILayout.Button(_folderIcon, iconHeightConstraint, iconWidthConstraint))
83+
{
84+
newDirectoryPath = EditorUtility.OpenFolderPanel("Select template directory", _settings.templateDirectoryPath, "");
85+
}
86+
if (newDirectoryPath.StartsWith(Application.dataPath, StringComparison.OrdinalIgnoreCase))
87+
{
88+
newDirectoryPath = SlashRegex.Replace(newDirectoryPath.Remove(0, Path.GetDirectoryName(Application.dataPath).Length + 1), Path.DirectorySeparatorChar.ToString());
89+
_settings.templateDirectoryPath = newDirectoryPath;
90+
}
91+
else if (!newDirectoryPath.StartsWith(Application.dataPath, StringComparison.OrdinalIgnoreCase) && !newDirectoryPath.StartsWith("Assets"))
92+
{
93+
EditorWindow.focusedWindow.ShowNotification(new($"Directory must be inside the Assets folder."), 2);
94+
}
95+
96+
EditorGUILayout.EndHorizontal();
97+
98+
EditorGUILayout.HelpBox("By default MonoBehaviour script template will be copied", MessageType.Info);
99+
if (EditorGUI.EndChangeCheck())
100+
Configuration.Configurations.Write(true);
101+
102+
103+
104+
105+
106+
107+
}
60108
}
61-
}
62109

110+
}
63111
#endif

0 commit comments

Comments
 (0)