Skip to content

Commit 14e9f26

Browse files
Merge pull request #864 from Rain1950/templatePath
Fix templatePath (CreateNewNetworkBehaviour.cs)
2 parents 41dbab5 + 485e0b5 commit 14e9f26

File tree

3 files changed

+75
-18
lines changed

3 files changed

+75
-18
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: 6 additions & 10 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,20 +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;
20-
if (Directory.Exists(Application.dataPath + "/FishNet"))
21-
{
22-
templatePath = Application.dataPath + "/FishNet/Assets/FishNet/Runtime/Editor/NewNetworkBehaviour/template.txt";
23-
}
24-
else
25-
{
26-
templatePath = "Packages/com.firstgeargames.fishnet/Runtime/Editor/NewNetworkBehaviour/template.txt";
27-
}
2822

23+
string templatePath = Path.Combine(Configuration.Configurations.CreateNewNetworkBehaviour.templateDirectoryPath,"FishnetNBTemplate.txt");
2924
if (!File.Exists(templatePath))
3025
{
3126

@@ -41,7 +36,8 @@ private static void CreateNewAsset()
4136

4237
public static void CopyExistingTemplate(string templatePath)
4338
{
44-
File.Copy(EditorApplication.applicationContentsPath + "/Resources/ScriptTemplates/" + DEFAULT_TEMPLATE_NAME, templatePath);
39+
40+
File.Copy(EditorApplication.applicationContentsPath + "/Resources/ScriptTemplates/" + DEFAULT_TEMPLATE_NAME,templatePath);
4541
string fileContent = File.ReadAllText(templatePath);
4642
fileContent = fileContent.ReplaceFirstOccurence("MonoBehaviour", "NetworkBehaviour");
4743
fileContent = fileContent.Replace("using UnityEngine;", "using UnityEngine;\nusing FishNet.Object;");

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

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

1113

1214
namespace FishNet.Editing.NewNetworkBehaviourScript
@@ -15,9 +17,10 @@ internal static class SettingsProvider
1517
{
1618

1719

18-
private static PrefabGeneratorConfigurations _settings;
19-
static string templatePath = Application.dataPath + "/FishNet/Assets/FishNet/Runtime/Editor/NewNetworkBehaviour/template.txt";
20-
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,20 +42,70 @@ private static UnitySettingsProvider Create()
3942

4043
private static void OnGUI(string searchContext)
4144
{
42-
if(GUILayout.Button("Edit template"))
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);
55+
56+
if (GUILayout.Button("Edit template"))
4357
{
58+
templatePath = Path.Combine(_settings.templateDirectoryPath, "FishnetNBTemplate.txt");
59+
4460
if (!File.Exists(templatePath))
4561
{
4662
CreateNewNetworkBehaviour.CopyExistingTemplate(templatePath);
4763
}
4864
System.Diagnostics.Process.Start(templatePath);
4965
}
50-
}
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+
}
5180

52-
5381

54-
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+
}
55108
}
56-
}
57109

110+
}
58111
#endif

0 commit comments

Comments
 (0)