Compare commits
1 Commits
5b235a7f26
...
2f24d94db2
| Author | SHA1 | Date | |
|---|---|---|---|
| 2f24d94db2 |
@@ -116,7 +116,7 @@ namespace Convention.RScript.Variable.CStyle
|
||||
|
||||
protected override string WritePageHead(Type currentType)
|
||||
{
|
||||
return $"#include\"{GetFilename(currentType)}\"";
|
||||
return $"#include\"{GetFilename(currentType.BaseType)}\"";
|
||||
}
|
||||
|
||||
public override string GetFilename(Type currentType)
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using UnityEditor;
|
||||
|
||||
namespace Convention.RScript.Variable
|
||||
{
|
||||
@@ -115,44 +116,59 @@ namespace Convention.RScript.Variable
|
||||
|
||||
StringBuilder builder = new();
|
||||
builder.AppendLine(this.WritePageHead(targetType));
|
||||
builder.AppendLine(this.WriteClassHead(targetType));
|
||||
builder.AppendLine(this.WriteClassBodyEnter(targetType));
|
||||
// 绘制枚举
|
||||
if (targetType.IsEnum)
|
||||
{
|
||||
var scriptEnums = from enumItem in targetType.GetNestedTypes(BindingFlags.NonPublic | BindingFlags.Public)
|
||||
where enumItem.GetCustomAttribute<Attr.EnumAttribute>() != null
|
||||
select enumItem;
|
||||
foreach (var enumItem in scriptEnums)
|
||||
// 绘制枚举
|
||||
builder.AppendLine(this.WriteEnumHead(targetType));
|
||||
builder.AppendLine(this.WriteEnumBodyEnter(targetType));
|
||||
foreach (var enumName in targetType.GetEnumNames())
|
||||
{
|
||||
var attr = enumItem.GetCustomAttribute<Attr.EnumAttribute>();
|
||||
this.WriteEnumHead(targetType);
|
||||
this.WriteEnumBodyEnter(targetType);
|
||||
foreach (var enumName in enumItem.GetEnumNames())
|
||||
builder.AppendLine(this.WriteEnumName(enumName));
|
||||
}
|
||||
builder.AppendLine(this.WriteEnumBodyExit(targetType));
|
||||
builder.AppendLine(this.WriteEnumTail(targetType));
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.AppendLine(this.WriteClassHead(targetType));
|
||||
builder.AppendLine(this.WriteClassBodyEnter(targetType));
|
||||
// 绘制枚举
|
||||
{
|
||||
var scriptEnums = from enumItem in targetType.GetNestedTypes(BindingFlags.NonPublic | BindingFlags.Public)
|
||||
where enumItem.GetCustomAttribute<Attr.EnumAttribute>() != null
|
||||
select enumItem;
|
||||
foreach (var enumItem in scriptEnums)
|
||||
{
|
||||
this.WriteEnumName(enumName);
|
||||
var attr = enumItem.GetCustomAttribute<Attr.EnumAttribute>();
|
||||
this.WriteEnumHead(targetType);
|
||||
this.WriteEnumBodyEnter(targetType);
|
||||
foreach (var enumName in enumItem.GetEnumNames())
|
||||
{
|
||||
this.WriteEnumName(enumName);
|
||||
}
|
||||
this.WriteEnumBodyExit(targetType);
|
||||
this.WriteEnumTail(targetType);
|
||||
}
|
||||
this.WriteEnumBodyExit(targetType);
|
||||
this.WriteEnumTail(targetType);
|
||||
}
|
||||
}
|
||||
// 绘制方法
|
||||
{
|
||||
var scriptMethods = from method in targetType.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)
|
||||
where method.GetCustomAttribute<Attr.MethodAttribute>() != null
|
||||
select method;
|
||||
foreach (var method in scriptMethods)
|
||||
// 绘制方法
|
||||
{
|
||||
var attr = method.GetCustomAttribute<Attr.MethodAttribute>();
|
||||
var returnType = method.ReturnType;
|
||||
var methodName = method.Name;
|
||||
var parameters = method.GetParameters();
|
||||
var parameterNames = from item in parameters select item.Name;
|
||||
var parameterTypes = from item in parameters select item.ParameterType;
|
||||
builder.AppendLine(this.WriteClassMethod(returnType, methodName, parameterNames.ToArray(), parameterTypes.ToArray()));
|
||||
var scriptMethods = from method in targetType.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)
|
||||
where method.GetCustomAttribute<Attr.MethodAttribute>() != null
|
||||
select method;
|
||||
foreach (var method in scriptMethods)
|
||||
{
|
||||
var attr = method.GetCustomAttribute<Attr.MethodAttribute>();
|
||||
var returnType = method.ReturnType;
|
||||
var methodName = method.Name;
|
||||
var parameters = method.GetParameters();
|
||||
var parameterNames = from item in parameters select item.Name;
|
||||
var parameterTypes = from item in parameters select item.ParameterType;
|
||||
builder.AppendLine(this.WriteClassMethod(returnType, methodName, parameterNames.ToArray(), parameterTypes.ToArray()));
|
||||
}
|
||||
}
|
||||
builder.AppendLine(this.WriteClassBodyExit(targetType));
|
||||
builder.AppendLine(this.WriteClassTail(targetType));
|
||||
}
|
||||
builder.AppendLine(this.WriteClassBodyExit(targetType));
|
||||
builder.AppendLine(this.WriteClassTail(targetType));
|
||||
builder.AppendLine(this.WritePageEnd(targetType));
|
||||
this.scriptIndicator = builder.ToString();
|
||||
}
|
||||
@@ -173,20 +189,54 @@ namespace Convention.RScript.Variable
|
||||
return AllRScriptInjectVariables.Remove(name);
|
||||
}
|
||||
|
||||
public class EnumGetter
|
||||
{
|
||||
public Type enumType;
|
||||
public EnumGetter(Type enumType)
|
||||
{
|
||||
this.enumType = enumType;
|
||||
}
|
||||
public object Get(string name)
|
||||
{
|
||||
return Enum.Parse(enumType, name);
|
||||
}
|
||||
}
|
||||
|
||||
public static object GenerateRScriptVariable(string name)
|
||||
{
|
||||
if (AllRScriptInjectVariables.TryGetValue(name, out var variable))
|
||||
{
|
||||
if (variable.MyGenerater != null)
|
||||
if (variable.targetType.IsEnum)
|
||||
{
|
||||
var result = variable.Generate();
|
||||
if (result.GetType().IsSubclassOf(variable.targetType) || result.GetType() == variable.targetType)
|
||||
if (variable.MyGenerater != null)
|
||||
{
|
||||
variable.GenerateObjects.Add(result);
|
||||
return result;
|
||||
var result = variable.Generate();
|
||||
if (result.GetType().IsSubclassOf(variable.targetType) || result.GetType() == variable.targetType)
|
||||
{
|
||||
variable.GenerateObjects.Add(result);
|
||||
return result;
|
||||
}
|
||||
else
|
||||
throw new InvalidOperationException($"{name} target is not sub-class of it's target type");
|
||||
}
|
||||
else
|
||||
throw new InvalidOperationException($"{name} target is not sub-class of it's target type");
|
||||
{
|
||||
return variable.targetType;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (variable.MyGenerater != null)
|
||||
{
|
||||
var result = variable.Generate();
|
||||
if (result.GetType().IsSubclassOf(variable.targetType) || result.GetType() == variable.targetType)
|
||||
{
|
||||
variable.GenerateObjects.Add(result);
|
||||
return result;
|
||||
}
|
||||
else
|
||||
throw new InvalidOperationException($"{name} target is not sub-class of it's target type");
|
||||
}
|
||||
}
|
||||
}
|
||||
throw new InvalidOperationException($"{name} target is not exist or abstract");
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using static Convention.RScript.RScriptContext;
|
||||
|
||||
namespace Convention.RScript
|
||||
@@ -276,10 +277,12 @@ namespace Convention.RScript
|
||||
}
|
||||
catch (RScriptException)
|
||||
{
|
||||
Debug.LogError($"current sentence: {sentence}");
|
||||
throw;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"current sentence: {sentence}");
|
||||
throw new RScriptRuntimeException($"Runtime error: {ex.Message}", CurrentRuntimePointer, ex);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user