Skip to content

Commit

Permalink
updated to v2.10.1
Browse files Browse the repository at this point in the history
  • Loading branch information
michael811125 committed Mar 13, 2024
1 parent 96a29d8 commit 98f1d82
Show file tree
Hide file tree
Showing 42 changed files with 965 additions and 93 deletions.
41 changes: 41 additions & 0 deletions Assets/OxGFrame/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,46 @@
# CHANGELOG

## [2.10.1] - 2024-03-14
- Fixed AudioBase and VideoBase to avoid executing Stop again in OnDestroy if they are being destroyed.
- Added MediaLRUCache to handle audios or videos that have not been Unloaded for a long time (Optimize memory).
- Added binding access modifier rules in BindCodeSetting, split by "$".
- _Node@MyObj*Txt$public (UIBase, SRBase).
- ~Node@MyObj*Txt$public (CPBase).
```
// Default is protected, no set required (depends on the first element in BindCodeSetting)
UIBase, SRBase:
_Node@MyObj*Txt
CPBase:
~Node@MyObj*Txt
// Assign access modifier
UIBase, SRBase:
_Node@MyObj*Txt$public
_Node@MyObj*Txt$private
CPBase:
~Node@MyObj*Txt$public
~Node@MyObj*Txt$private
```
- Added binding attr rules in BindCodeSetting, pattern is "\[\]" (supported multi-attrs \[\]\[\]...).
- _Node@MyObj*Txt$public\[hi\] (UIBase, SRBase).
- ~Node@MyObj*Txt$public\[hi\] (CPBase).
```
[hi] = [HideInInspector]
UIBase, SRBase:
_Node@MyObj*Txt$public[hi]
CPBase:
~Node@MyObj*Txt$public[hi]
[sf] = [SerializeField]
UIBase, SRBase:
_Node@MyObj*Txt[sf]
CPBase:
~Node@MyObj*Txt[sf]
```
- Modified UIFrameDemo.
- Modified SRFrameDemo.
- Modified CPFrameDemo.

## [2.10.0] - 2024-03-07
- Added BuiltinQueryMode option on PatchLauncher, can switch built-in query mode.
```C#
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using UnityEditor;
using UnityEngine;

Expand All @@ -8,14 +10,18 @@ public static class BindCodeAutoGenerateEditor
{
private class BindInfo
{
public string[] attrNames;
public string variableAccessModifier;
public string bindName;
public string variableName;
public string componentName;
public BindCodeSetting.Pluralize pluralize;
public int count;

public BindInfo(string bindName, string variableName, string componentName, int count)
public BindInfo(string[] attrNames, string variableAccessModifier, string bindName, string variableName, string componentName, int count)
{
this.attrNames = attrNames;
this.variableAccessModifier = variableAccessModifier;
this.bindName = bindName;
this.variableName = variableName;
this.componentName = componentName;
Expand Down Expand Up @@ -129,25 +135,68 @@ private static void _CollectBindInfo(string name)
string[] heads = Binder.GetHeadSplitNameBySeparator(name);

string bindType = heads[0]; // 綁定類型(會去查找 dictComponentFinder 裡面有沒有符合的類型)
string bindName = heads[1]; // 要成為取得綁定物件後的Key
string bindInfo = heads[1]; // 要成為取得綁定物件後的 Key

// 再去判斷取得後的字串陣列是否綁定格式資格
if (heads == null || heads.Length < 2 || !FrameConfig.BIND_COMPONENTS.ContainsKey(bindType))
if (heads == null ||
heads.Length < 2 ||
!FrameConfig.BIND_COMPONENTS.ContainsKey(bindType))
{
return;
}

#region Common with Binder
// 變數存取權檢測
string[] bindArgs = Binder.GetAccessModifierSplitNameBySeparator(bindInfo);

// MyObj*Txt$public => ["MyObj*Txt", "public"]
string bindName = bindArgs[0];
string variableAccessModifier = (bindArgs.Length > 1) ? bindArgs[1] : null;

// 匹配 Attr []
string pattern = @"\[(.*?)\]";
string[] attrNames = new string[] { };
if (!string.IsNullOrEmpty(variableAccessModifier))
{
MatchCollection attrMatches = Regex.Matches(variableAccessModifier, pattern);
if (attrMatches.Count > 0)
{
// 將匹配的子字符串存入陣列
attrNames = attrMatches.Cast<Match>().Select(m => m.Value).ToArray();
// 將所有方括號替換為空字串
variableAccessModifier = Regex.Replace(variableAccessModifier, pattern, "");
}
}
else
{
MatchCollection attrMatches = Regex.Matches(bindName, pattern);
if (attrMatches.Count > 0)
{
// 將匹配的子字符串存入陣列
attrNames = attrMatches.Cast<Match>().Select(m => m.Value).ToArray();
// 將所有方括號替換為空字串
bindName = Regex.Replace(bindName, pattern, "");
}
}
#endregion

// 組件結尾檢測
string[] tails = Binder.GetTailSplitNameBySeparator(bindName);
string variableName = bindName.Replace(" ", string.Empty);
string componentName = _DEF_COMPONENT_NAME;
string variableName, componentName;

if (tails != null && tails.Length >= 2)
if (tails != null &&
tails.Length >= 2)
// Component
{
variableName = tails[0] + tails[1];
variableName.Replace(" ", string.Empty);
componentName = tails[1];
}
// GameObject
else
{
variableName = bindName;
componentName = _DEF_COMPONENT_NAME;
}

// 修正 Case
switch (_settings.variableCaseType)
Expand All @@ -165,7 +214,7 @@ private static void _CollectBindInfo(string name)
{
_collectBindInfos[bindName].count++;
}
else _collectBindInfos.Add(bindName, new BindInfo(bindName, variableName, componentName, 1));
else _collectBindInfos.Add(bindName, new BindInfo(attrNames, variableAccessModifier, bindName, variableName, componentName, 1));
}
#endregion

Expand Down Expand Up @@ -200,28 +249,34 @@ private static void _GenerateCodes()
// For GameObjects
if (bindInfo.Value.componentName == _DEF_COMPONENT_NAME)
{
_builder += space + $"{_settings.variableAccessModifier} ";
for (int i = 0; i < bindInfo.Value.attrNames.Length; i++)
_builder += space + $"{_settings.GetAttrReference(bindInfo.Value.attrNames[i])}\n";
_builder += space + $"{_settings.GetVariableAccessPairs(bindInfo.Value.variableAccessModifier)[0]} ";
_builder += $"{bindInfo.Value.componentName}[] ";
_builder += $"{_settings.variablePrefix}{bindInfo.Value.variableName}s;\n";
_builder += $"{_settings.GetVariableAccessPairs(bindInfo.Value.variableAccessModifier)[1]}{bindInfo.Value.variableName}s;\n";
}
else
{
_builder += space + $"{_settings.variableAccessModifier} ";
for (int i = 0; i < bindInfo.Value.attrNames.Length; i++)
_builder += space + $"{_settings.GetAttrReference(bindInfo.Value.attrNames[i])}\n";
_builder += space + $"{_settings.GetVariableAccessPairs(bindInfo.Value.variableAccessModifier)[0]} ";
_builder += $"{bindInfo.Value.componentName}[] ";
int varNameLength = bindInfo.Value.variableName.Length;
int endRemoveCount = (bindInfo.Value.pluralize.endRemoveCount > varNameLength) ? 0 : bindInfo.Value.pluralize.endRemoveCount;
string varName = bindInfo.Value.variableName.Substring(0, varNameLength - endRemoveCount);
string endPluralTxt = bindInfo.Value.pluralize.endPluralTxt;
string newVarName = $"{varName}{endPluralTxt}";
_builder += $"{_settings.variablePrefix}{newVarName};\n";
_builder += $"{_settings.GetVariableAccessPairs(bindInfo.Value.variableAccessModifier)[1]}{newVarName};\n";
}
}
// Single
else
{
_builder += space + $"{_settings.variableAccessModifier} ";
for (int i = 0; i < bindInfo.Value.attrNames.Length; i++)
_builder += space + $"{_settings.GetAttrReference(bindInfo.Value.attrNames[i])}\n";
_builder += space + $"{_settings.GetVariableAccessPairs(bindInfo.Value.variableAccessModifier)[0]} ";
_builder += $"{bindInfo.Value.componentName} ";
_builder += $"{_settings.variablePrefix}{bindInfo.Value.variableName};\n";
_builder += $"{_settings.GetVariableAccessPairs(bindInfo.Value.variableAccessModifier)[1]}{bindInfo.Value.variableName};\n";
}
}
#endregion
Expand All @@ -244,7 +299,7 @@ private static void _GenerateCodes()
// For GameObjects
if (bindInfo.Value.componentName == _DEF_COMPONENT_NAME)
{
_builder += space + $" {_settings.GetIndicateModifier()}{_settings.variablePrefix}{bindInfo.Value.variableName}s = ";
_builder += space + $" {_settings.GetIndicateModifier()}{_settings.GetVariableAccessPairs(bindInfo.Value.variableAccessModifier)[1]}{bindInfo.Value.variableName}s = ";
_builder += $"{_settings.GetIndicateModifier()}collector.GetNodes(\"{bindInfo.Value.bindName}\");\n";
}
else
Expand All @@ -255,7 +310,7 @@ private static void _GenerateCodes()
string varName = bindInfo.Value.variableName.Substring(0, varNameLength - endRemoveCount);
string endPluralTxt = bindInfo.Value.pluralize.endPluralTxt;
string newVarName = $"{varName}{endPluralTxt}";
_builder += space + $"{_settings.GetIndicateModifier()}{_settings.variablePrefix}{newVarName} = ";
_builder += space + $"{_settings.GetIndicateModifier()}{_settings.GetVariableAccessPairs(bindInfo.Value.variableAccessModifier)[1]}{newVarName} = ";
_builder += $"{_settings.GetIndicateModifier()}collector.GetNodeComponents<{bindInfo.Value.componentName}>(\"{bindInfo.Value.bindName}\");\n";
}
}
Expand All @@ -265,12 +320,12 @@ private static void _GenerateCodes()
// For GameObject
if (bindInfo.Value.componentName == _DEF_COMPONENT_NAME)
{
_builder += space + $" {_settings.GetIndicateModifier()}{_settings.variablePrefix}{bindInfo.Value.variableName} = ";
_builder += space + $" {_settings.GetIndicateModifier()}{_settings.GetVariableAccessPairs(bindInfo.Value.variableAccessModifier)[1]}{bindInfo.Value.variableName} = ";
_builder += $"{_settings.GetIndicateModifier()}collector.GetNode(\"{bindInfo.Value.bindName}\");\n";
}
else
{
_builder += space + $" {_settings.GetIndicateModifier()}{_settings.variablePrefix}{bindInfo.Value.variableName} = ";
_builder += space + $" {_settings.GetIndicateModifier()}{_settings.GetVariableAccessPairs(bindInfo.Value.variableAccessModifier)[1]}{bindInfo.Value.variableName} = ";
_builder += $"{_settings.GetIndicateModifier()}collector.GetNodeComponent<{bindInfo.Value.componentName}>(\"{bindInfo.Value.bindName}\");\n";
}
}
Expand Down
71 changes: 62 additions & 9 deletions Assets/OxGFrame/CoreFrame/Scripts/Editor/BindCodeSetting.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
using System;
using UnityEngine;
using MyBox;
using MyBox;
using System;
using System.Linq;
using UnityEditor;
using UnityEngine;

namespace OxGFrame.CoreFrame.Editor
{
Expand Down Expand Up @@ -52,15 +53,27 @@ public enum IndicateModifier
This
}

[Separator("Variable Setting")]
public CaseType variableCaseType = CaseType.CamelCase;
public string variableAccessModifier = "protected";
public string variablePrefix = "_";

[Separator("Method Setting")]
[Separator("Binding Method Setting")]
[Tooltip("*[Auto] Automatically save binding content to script.\n\n*[Manual] Manually copy the binding content from the clipboard to the script.")]
public MethodType methodType = MethodType.Auto;

[Separator("Attribute Setting")]
public AttrGenericDictionary<string, string> attrReferenceRules = new AttrGenericDictionary<string, string>()
{
{ "[hi]", "[HideInInspector]" },
{ "[sf]", "[SerializeField]"}
};

[Separator("Variable Setting")]
public CaseType variableCaseType = CaseType.CamelCase;
[Tooltip("The first element will be default")]
public VariableGenericDictionary<string, string> variableAccessRules = new VariableGenericDictionary<string, string>()
{
{ "protected", "_" },
{ "private", "_" },
{ "public" , "" }
};

[Separator("Indicate Modifier Setting")]
public IndicateModifier indicateModifier = IndicateModifier.This;

Expand Down Expand Up @@ -104,6 +117,46 @@ public string GetIndicateModifier()
}
}

public string GetAttrReference(string key)
{
if (string.IsNullOrEmpty(key))
return string.Empty;

this.attrReferenceRules.TryGetValue(key, out var result);
if (result == null)
return string.Empty;

return result;
}

public string[] GetVariableAccessPairs(string key)
{
if (string.IsNullOrEmpty(key))
{
return new string[]
{
this.variableAccessRules.Keys.First(),
this.variableAccessRules.Values.First()
};
}

this.variableAccessRules.TryGetValue(key, out var result);
if (result == null)
{
return new string[]
{
this.variableAccessRules.Keys.First(),
this.variableAccessRules.Values.First()
};
}

return new string[]
{
key,
result
};
}

public string GetMethodAccessModifier()
{
return "protected";
Expand Down
8 changes: 8 additions & 0 deletions Assets/OxGFrame/CoreFrame/Scripts/Editor/Dictionary.meta

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

Loading

0 comments on commit 98f1d82

Please sign in to comment.