Skip to content

Commit

Permalink
fixed #478
Browse files Browse the repository at this point in the history
  • Loading branch information
JasonXuDeveloper committed Oct 15, 2023
1 parent 43c4d89 commit f2e7b15
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 24 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,6 @@ UnityProject/Logs/Packages-Update.log
UnityProject/Sandbox/*
UnityProject/Logs/*
UnityProject/Build/*
UnityProject/HotUpdateScripts/.idea/*
UnityProject/HotUpdateScripts/.idea/*
UnityProject/Assets/JEngine.proj
UnityProject/Assets/JEngine.proj.meta
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ static EditorUpdate()
EditorApplication.update += AllowUnsafe.Update; //允许Unsafe code
}

if (!SetData.hasAdded)
if (!SetData.HasAdded)
{
EditorApplication.update += SetData.Update; //设置某些需要在后台设置的东西
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,47 +9,75 @@ namespace JEngine.Editor
{
internal static class SetData
{
public static bool hasAdded;
private static string path = "JEngine.lock";
public static bool HasAdded;
private static string _path = "JEngine.proj";
private static JEngineProjData _data = new JEngineProjData();

public static void UpdateData(Action<JEngineProjData> func)
{
func.Invoke(_data);
Span<byte> data = stackalloc byte[_data.Size()];
_data.AsBinary(ref data);
File.WriteAllBytes(Path.Combine(Application.dataPath, _path), data.ToArray());
}

public static string GetPrefix()
{
string prefix = "";

//看看文件存不存在,不存在就创建和提示
string fPath = Path.Combine(Application.dataPath, path);
string fPath = Path.Combine(Application.dataPath, _path);
if (!File.Exists(fPath))
{
prefix = Guid.NewGuid().ToString();
File.WriteAllText(fPath, prefix);
//提示看文档
Debug.LogError(Setting.GetString(SettingString.NoticeText));
EditorUtility.DisplayDialog(Setting.GetString(SettingString.Notice),
Setting.GetString(SettingString.NoticeText), Setting.GetString(SettingString.Done));
if (Setting.Language == JEngineLanguage.English)
_data = new JEngineProjData();
//兼容老版本
bool flag = false;
if (File.Exists(Path.Combine(Application.dataPath, "JEngine.lock")))
{
Application.OpenURL("https://docs.xgamedev.net/documents/0.8/");
_data.Prefix = File.ReadAllText(Path.Combine(Application.dataPath, "JEngine.lock"));
_data.EncryptPassword = PlayerPrefs.GetString($"{_data.Prefix}.EncryptPassword", "");
File.Delete(Path.Combine(Application.dataPath, "JEngine.lock"));
}
else
{
Application.OpenURL("https://docs.xgamedev.net/zh/documents/0.8/");
_data.Prefix = Guid.NewGuid().ToString();
flag = true;
}
Span<byte> data = stackalloc byte[_data.Size()];
_data.AsBinary(ref data);
File.WriteAllBytes(fPath, data.ToArray());
if (flag)
{
//提示看文档
Debug.LogError(Setting.GetString(SettingString.NoticeText));
EditorUtility.DisplayDialog(Setting.GetString(SettingString.Notice),
Setting.GetString(SettingString.NoticeText), Setting.GetString(SettingString.Done));
if (Setting.Language == JEngineLanguage.English)
{
Application.OpenURL("https://docs.xgamedev.net/documents/0.8/");
}
else
{
Application.OpenURL("https://docs.xgamedev.net/zh/documents/0.8/");
}
}
InjectDefineSymbol();
}
else
{
prefix = File.ReadAllText(fPath);
//读取文件
Span<byte> data = File.ReadAllBytes(fPath);
_data.FromBinary(ref data);
}

return prefix;
return _data.Prefix;
}

public static void Update()
{
string prefix = GetPrefix();
InjectDefineSymbol();
hasAdded = true;
HasAdded = true;
Setting.SetPrefix(prefix);
Setting.EncryptPassword = _data.EncryptPassword;
}

private static void InjectDefineSymbol()
Expand All @@ -59,9 +87,9 @@ private static void InjectDefineSymbol()
var group = BuildPipeline.GetBuildTargetGroup(target);
var org = PlayerSettings.GetScriptingDefineSymbolsForGroup(group);
var d = PlayerSettings.GetScriptingDefineSymbolsForGroup(group);
string[] Symbols = new string[] { "ILRuntime" };
string[] symbols = new string[] { "ILRuntime" };
List<string> dfList = d.Split(';').ToList();
dfList.AddRange(Symbols.Except(dfList));
dfList.AddRange(symbols.Except(dfList));
d = string.Join(";", dfList.Distinct().ToArray());
if (org != d)
PlayerSettings.SetScriptingDefineSymbolsForGroup(group, d);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using System;
using System.Runtime.InteropServices;

namespace JEngine.Editor
{
public class JEngineProjData
{
public string Prefix = "";
public string EncryptPassword = "";
public string Version = "0.8.0f6";

public int Size()
{
return (Prefix.AsSpan().Length + EncryptPassword.AsSpan().Length + Version.AsSpan().Length) * 2 + 3;
}

public void AsBinary(ref Span<byte> data)
{
if (data.Length < Size())
throw new Exception("data.Length < Size()");

var prefix = MemoryMarshal.Cast<char, byte>(Prefix.AsSpan());
var encryptPassword = MemoryMarshal.Cast<char, byte>(EncryptPassword.AsSpan());
var version = MemoryMarshal.Cast<char, byte>(Version.AsSpan());

data[0] = (byte)prefix.Length;
prefix.CopyTo(data.Slice(1));
data[prefix.Length + 1] = (byte)encryptPassword.Length;
encryptPassword.CopyTo(data.Slice(prefix.Length + 2));
data[prefix.Length + encryptPassword.Length + 2] = (byte)version.Length;
version.CopyTo(data.Slice(prefix.Length + encryptPassword.Length + 3));
}

public void FromBinary(ref Span<byte> data)
{
var prefixLength = data[0];
Prefix = MemoryMarshal.Cast<byte, char>(data.Slice(1, prefixLength)).ToString();
var encryptPasswordLength = data[prefixLength + 1];
EncryptPassword = MemoryMarshal.Cast<byte, char>(data.Slice(prefixLength + 2, encryptPasswordLength))
.ToString();
var versionLength = data[prefixLength + encryptPasswordLength + 2];
Version = MemoryMarshal
.Cast<byte, char>(data.Slice(prefixLength + encryptPasswordLength + 3, versionLength)).ToString();
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,15 @@ public static JEngineLanguage Language
public static string EncryptPassword
{
get => PlayerPrefs.GetString($"{_prefix}.EncryptPassword", "");
set => PlayerPrefs.SetString($"{_prefix}.EncryptPassword", value);
set
{
if (string.IsNullOrEmpty(value))
{
return;
}
PlayerPrefs.SetString($"{_prefix}.EncryptPassword", value);
SetData.UpdateData(data=>data.EncryptPassword = value);
}
}

/// <summary>
Expand Down
13 changes: 11 additions & 2 deletions UnityProject/UserSettings/EditorUserSettings.asset
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,21 @@ EditorUserSettings:
serializedVersion: 4
m_ConfigSettings:
RecentlyUsedScenePath-0:
value: 22424703114646720307186c052d56040f
value: 2242470311464673021a393214224b1524120b25393a25353e663c37e6cf3a69add435ece93f70283c11fb721130082beb
flags: 0
RecentlyUsedScenePath-1:
value: 2242470311464673021a393214224b1524120b25393a25353e663c37e6cf3a69add435ece93f70283c11fb721130082beb
value: 22424703114646720307181615304b231512162f7a7b7e627f7d4e60b2b4646fb2b56fb0be6a7129370bfb25
flags: 0
RecentlyUsedScenePath-2:
value: 22424703114646720307181615304b231512162f7a7b7e627f7d4e60b2b8626fb1b160bdb36a7129370bfb25
flags: 0
RecentlyUsedScenePath-3:
value: 2242470311464673021a393214224b1524120b25393a25353e663032ebee7b0be1e238eca81d3e313c50a1290a371526
flags: 0
RecentlyUsedScenePath-4:
value: 22424703114646720307186c052d56040f
flags: 0
RecentlyUsedScenePath-5:
value: 2242470311464673021a393214224b1524120b25393a25353e663032ebee7b0be1e238eca81d3e313c4cfa320d2a18
flags: 0
vcSharedLogLevel:
Expand Down

0 comments on commit f2e7b15

Please sign in to comment.