public static void ShowVarAcc(object o, VarHandleTemplate vh, FieldInfo fi)
        {
            if (!(fi.FieldType.IsGenericType && fi.FieldType.GetGenericTypeDefinition() == typeof(VarAccesser <>)))
            {
                return;
            }

            List <Variable> var = vh.Variables;
            List <Variable> u   = var.Where(x => fi.FieldType.GenericTypeArguments[0].IsAssignableFrom(x.GetVarType())).ToList();

            if (u.Count <= 0)
            {
                EditorGUILayout.LabelField($"{fi.Name}:  No variables of type {fi.FieldType.GenericTypeArguments[0].Name} found");
                return;
            }

            object    va   = fi.GetValue(o);
            FieldInfo idxF = fi.FieldType.GetField("idx");

            int varIdx = (int)idxF.GetValue(va);
            int uIdx   = varIdx >= 0 && varIdx < var.Count ? u.IndexOf(var[varIdx]) : 0;

            uIdx = EditorGUILayout.Popup(fi.Name, uIdx >= 0 && uIdx < u.Count ? uIdx : 0, u.Select(x => x.name).ToArray());

            //idxF.SetValue(va, var.IndexOf(u[uIdx]));
            object r = System.Activator.CreateInstance(fi.FieldType, var.IndexOf(u[uIdx]));

            fi.SetValue(o, r);
        }
 public static void ShowVars(object o, VarHandleTemplate vh)
 {
     foreach (FieldInfo fi in o.GetType().GetFields())
     {
         ShowVarAcc(o, vh, fi);
         ShowVarAtt(o, vh, fi);
     }
 }
示例#3
0
 public VarHandle(VarHandleTemplate template, object varHolder)
 {
     variables = new List <Variable>();
     foreach (Variable v in template)
     {
         Variable x = v.Duplicate(varHolder);
         variables.Add(x);
     }
 }
        public static VarHandleTemplateEditor GetCreateEditor(VarHandleTemplate vh)
        {
            VarHandleTemplateEditor vhe = SODatabase.GetSubObjectOfType <VarHandleTemplateEditor>(vh);

            if (vhe)
            {
                return(vhe);
            }

            vhe           = CreateInstance <VarHandleTemplateEditor>();
            vhe.varHandle = vh;
            vhe.name      = vh.name + "Editor";
            AssetDatabase.AddObjectToAsset(vhe, vh);

            return(vhe);
        }
        public static void ShowVarAtt(object o, VarHandleTemplate vh, FieldInfo fi)
        {
            VarIdxAttribute a = fi.GetCustomAttribute <VarIdxAttribute>();

            if (typeof(int) != fi.FieldType || a == null)
            {
                return;
            }

            List <Variable> var = vh.Variables;
            List <Variable> u   = var.Where(x => a.t.IsAssignableFrom(x.GetVarType())).ToList();

            int varIdx = (int)fi.GetValue(o);
            int uIdx   = varIdx >= 0 && varIdx < var.Count ? u.IndexOf(var[varIdx]) : 0;

            uIdx = EditorGUILayout.Popup(fi.Name, uIdx >= 0 && uIdx < u.Count ? uIdx : 0, u.Select(x => x.name).ToArray());

            fi.SetValue(o, var.IndexOf(u[uIdx]));
        }