update MeatKit (9a1a68ab68cd0650227af944ffa30d1166b9e056)

This commit is contained in:
msk
2023-07-26 16:45:05 -07:00
parent 920875f56b
commit d2316bac96
266 changed files with 2855 additions and 9187 deletions
@@ -0,0 +1,80 @@
using System;
using System.Linq;
using Mono.Cecil;
using UnityEngine;
namespace MeatKit
{
[CreateAssetMenu(menuName = "MeatKit/Assembly Editors/Path Replacer", fileName = "New Path Replacer")]
public class CreatePathModifier : AssemblyModifier
{
[Tooltip("The new path replacements")]
public ReplacementPath[] ReplacementPaths = new ReplacementPath[0];
public override void ApplyModification(AssemblyDefinition assembly)
{
TypeReference stringRef = assembly.MainModule.TypeSystem.String;
TypeReference intRef = assembly.MainModule.TypeSystem.Int32;
if (stringRef == null || intRef == null) return;
foreach (ReplacementPath replacementPath in ReplacementPaths)
{
TypeReference type = assembly.MainModule.GetType(replacementPath.ScriptableObjectName);
if (type == null) continue;
TypeDefinition definition = type.Resolve();
CustomAttribute createMenuAttribute = GetCreateAssetMenuAttribute(definition);
if (createMenuAttribute == null)
{
Debug.LogWarning("Could not get CreateAssetMenuAttribute for scriptable object: " + replacementPath.ScriptableObjectName);
continue;
}
CustomAttributeArgument pathArgumentValue = new CustomAttributeArgument(stringRef, replacementPath.NewPath);
CustomAttributeArgument fileNameArgumentValue = new CustomAttributeArgument(stringRef, replacementPath.NewDefaultName);
CustomAttributeArgument orderArgumentValue = new CustomAttributeArgument(intRef, replacementPath.NewOrder);
CustomAttributeNamedArgument pathArgument = new CustomAttributeNamedArgument("menuName", pathArgumentValue);
CustomAttributeNamedArgument fileNameArgument = new CustomAttributeNamedArgument("fileName", fileNameArgumentValue);
CustomAttributeNamedArgument orderArgument = new CustomAttributeNamedArgument("order", orderArgumentValue);
createMenuAttribute.Properties.Clear();
createMenuAttribute.Properties.Add(pathArgument);
createMenuAttribute.Properties.Add(fileNameArgument);
createMenuAttribute.Properties.Add(orderArgument);
}
Applied = true;
}
private CustomAttribute GetCreateAssetMenuAttribute(TypeDefinition definition)
{
CustomAttribute[] foundAttributes = definition.CustomAttributes.Where(ca => ca.AttributeType.FullName.Contains("CreateAssetMenuAttribute")).ToArray();
if(foundAttributes.Length > 0)
{
return foundAttributes[0];
}
return null;
}
[Serializable]
public struct ReplacementPath
{
[Tooltip("Specify the FULL NAME of the scriptable object you wish to modify. e.g. Sub.Namespace.Type")]
public string ScriptableObjectName;
[Tooltip("The new create asset path of the scriptable object")]
public string NewPath;
[Tooltip("The new default name of the scriptable object when created")]
public string NewDefaultName;
[Tooltip("The new ordering of the scriptable object in menu")]
public int NewOrder;
}
}
}