Inheritance: UnityEngine.ScriptableObject
Ejemplo n.º 1
0
 public SteeringBehaviorProxy(SteeringBehaviorAsset asset)
 {
     Assembly assm = typeof(SteeringBehavior).Assembly;
     List<SteeringBehavior> behaviors = new List<SteeringBehavior>();
     foreach(SteeringBehaviorAsset.BehaviorDef def in asset.behaviors) {
         System.Type type = assm.GetType(def.type);
         SteeringBehavior behavior = (SteeringBehavior)
             System.Activator.CreateInstance(type);
         behavior.Weight = def.weight;
         behavior.Enabled = def.enabled;
         behaviors.Add(behavior);
         foreach(SteeringBehaviorAsset.LinkedProperty prop
             in def.properties)
         {
             List<PropProxy> props = null;
             if(properties.ContainsKey(prop.link)) {
                 props = properties[prop.link];
             } else {
                 props = new List<PropProxy>();
                 properties[prop.link] = props;
             }
             props.Add(new PropProxy(type.GetProperty(prop.name),
        	    			behavior, ParseValue(prop.type, prop.defaultValue)));
         }
     }
     this.behaviors = behaviors.ToArray();
     this.baseWeights = new float[this.behaviors.Length];
     for(int i = 0; i < baseWeights.Length; i ++) {
         baseWeights[i] = this.behaviors[i].Weight;
     }
 }
Ejemplo n.º 2
0
    object ParseValue(SteeringBehaviorAsset.PropertyType t, string val)
    {
        switch (t)
        {
        case SteeringBehaviorAsset.PropertyType.BOOL:
            return(System.Boolean.Parse(val));

        case SteeringBehaviorAsset.PropertyType.INT:
            return(System.Int32.Parse(val));

        case SteeringBehaviorAsset.PropertyType.FLOAT:
            return(System.Single.Parse(val));

        case SteeringBehaviorAsset.PropertyType.STRING:
            return(val);

        case SteeringBehaviorAsset.PropertyType.VECTOR2:
            return(SteeringBehaviorAsset.ParseVector2(val));

        case SteeringBehaviorAsset.PropertyType.VECTOR3:
            return(SteeringBehaviorAsset.ParseVector3(val));

        case SteeringBehaviorAsset.PropertyType.VECTOR4:
            return(SteeringBehaviorAsset.ParseVector4(val));
        }
        return(null);
    }
Ejemplo n.º 3
0
    public static void CreateWizard()
    {
        SteeringBehaviorAsset behavior = ScriptableObject.CreateInstance <SteeringBehaviorAsset>();
        string path = AssetDatabase.GenerateUniqueAssetPath(
            "Assets/new steering behavior.asset");

        AssetDatabase.CreateAsset(behavior, path);
        AssetDatabase.SetLabels(behavior, new string[] { "sanity", "steering" });
    }
Ejemplo n.º 4
0
 string NewLinkProperty(SteeringBehaviorAsset sab,
                        SteeringBehaviorAsset.SteeringProperty prop)
 {
     SteeringBehaviorAsset.SteeringProperty newProp =
         new SteeringBehaviorAsset.SteeringProperty();
     newProp.name = GetUniqueLinkedPropName(sab, prop.name);
     newProp.type = prop.type;
     sab.AddProperty(newProp);
     return(newProp.name);
 }
Ejemplo n.º 5
0
    private string DefaultField(string val,
                                SteeringBehaviorAsset.PropertyType t)
    {
        if (val == null)
        {
            return(null);
        }
        object result = null;

        switch (t)
        {
        case SteeringBehaviorAsset.PropertyType.BOOL:
            bool vb = System.Boolean.Parse(val);
            result = EditorGUILayout.Toggle("Enabled", vb);
            break;

        case SteeringBehaviorAsset.PropertyType.INT:
            int vi = System.Int32.Parse(val);
            result = EditorGUILayout.IntField("Default Value", vi);
            break;

        case SteeringBehaviorAsset.PropertyType.FLOAT:
            float vf = System.Single.Parse(val);
            result = EditorGUILayout.FloatField("Default Value", vf);
            break;

        case SteeringBehaviorAsset.PropertyType.STRING:
            result = EditorGUILayout.TextField("Default Value", val);
            break;

        case SteeringBehaviorAsset.PropertyType.VECTOR2:
            Vector2 v2 = SteeringBehaviorAsset.ParseVector2(val);
            result = EditorGUILayout.Vector2Field("Default Value", v2);
            break;

        case SteeringBehaviorAsset.PropertyType.VECTOR3:
            Vector3 v3 = SteeringBehaviorAsset.ParseVector3(val);
            result = EditorGUILayout.Vector3Field("Default Value", v3);
            break;

        case SteeringBehaviorAsset.PropertyType.VECTOR4:
            Vector4 v4 = SteeringBehaviorAsset.ParseVector4(val);
            result = EditorGUILayout.Vector4Field("Default Value", v4);
            break;
        }
        return(result == null ? null : result.ToString());
    }
Ejemplo n.º 6
0
    string GetUniqueLinkedPropName(SteeringBehaviorAsset sab, string name)
    {
        List <string> names = new List <string>();

        foreach (SteeringBehaviorAsset.SteeringProperty prop in sab.properties)
        {
            names.Add(prop.name);
        }
        names.Sort();
        int    i       = 1;
        string newName = name;

        while (names.BinarySearch(newName) >= 0)
        {
            newName = name + (i++);
        }
        return(newName);
    }
Ejemplo n.º 7
0
    public SteeringBehaviorProxy(SteeringBehaviorAsset asset)
    {
        Assembly assm = typeof(SteeringBehavior).Assembly;
        List <SteeringBehavior> behaviors = new List <SteeringBehavior>();

        foreach (SteeringBehaviorAsset.BehaviorDef def in asset.behaviors)
        {
            System.Type      type     = assm.GetType(def.type);
            SteeringBehavior behavior = (SteeringBehavior)
                                        System.Activator.CreateInstance(type);
            behavior.Weight  = def.weight;
            behavior.Enabled = def.enabled;
            behaviors.Add(behavior);
            foreach (SteeringBehaviorAsset.LinkedProperty prop
                     in def.properties)
            {
                List <PropProxy> props = null;
                if (properties.ContainsKey(prop.link))
                {
                    props = properties[prop.link];
                }
                else
                {
                    props = new List <PropProxy>();
                    properties[prop.link] = props;
                }
                props.Add(new PropProxy(type.GetProperty(prop.name),
                                        behavior, ParseValue(prop.type, prop.defaultValue)));
            }
        }
        this.behaviors   = behaviors.ToArray();
        this.baseWeights = new float[this.behaviors.Length];
        for (int i = 0; i < baseWeights.Length; i++)
        {
            baseWeights[i] = this.behaviors[i].Weight;
        }
    }
Ejemplo n.º 8
0
 object ParseValue(SteeringBehaviorAsset.PropertyType t, string val)
 {
     switch(t) {
     case SteeringBehaviorAsset.PropertyType.BOOL:
         return System.Boolean.Parse(val);
     case SteeringBehaviorAsset.PropertyType.INT:
         return System.Int32.Parse(val);
     case SteeringBehaviorAsset.PropertyType.FLOAT:
         return System.Single.Parse(val);
     case SteeringBehaviorAsset.PropertyType.STRING:
         return val;
     case SteeringBehaviorAsset.PropertyType.VECTOR2:
         return SteeringBehaviorAsset.ParseVector2(val);
     case SteeringBehaviorAsset.PropertyType.VECTOR3:
         return SteeringBehaviorAsset.ParseVector3(val);
     case SteeringBehaviorAsset.PropertyType.VECTOR4:
         return SteeringBehaviorAsset.ParseVector4(val);
     }
     return null;
 }
Ejemplo n.º 9
0
    public override void OnInspectorGUI()
    {
        EditorGUIUtility.LookLikeInspector();

        SteeringBehaviorAsset sab = (SteeringBehaviorAsset)target;

        EditorGUILayout.BeginVertical();

        showProperties = EditorGUILayout.Foldout(showProperties,
                                                 "Properties");
        if (showProperties)
        {
            EditorGUI.indentLevel++;
            int idx = 0;
            foreach (SteeringBehaviorAsset.SteeringProperty prop
                     in sab.properties)
            {
                EditorGUILayout.BeginVertical("Box");
                string newName = EditorGUILayout.TextField("Name", prop.name);
                if (!newName.Equals(prop.name))
                {
                    sab.RenameProperty(prop.name,
                                       GetUniqueLinkedPropName(sab, newName));
                }
                EditorGUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                int count = sab.CountUsed(prop.name);
                GUILayout.Label(count + " Link" + (count == 1 ? "" : "s"),
                                EditorStyles.miniLabel);
                EditorGUILayout.Space();
                if (GUILayout.Button("Delete", EditorStyles.miniButton))
                {
                    sab.RemoveProperty(idx);
                }
                EditorGUILayout.EndHorizontal();

                idx++;
                EditorGUILayout.EndVertical();
                EditorGUILayout.Separator();
            }
            EditorGUI.indentLevel--;
        }
        showBehaviors = EditorGUILayout.Foldout(showBehaviors,
                                                "Behavior Definitions");
        if (showBehaviors)
        {
            EditorGUI.indentLevel++;
            int idx = 0;
            foreach (SteeringBehaviorAsset.BehaviorDef def in sab.behaviors)
            {
                EditorGUILayout.BeginVertical("Box");
                EditorGUILayout.LabelField("Type", def.name);
                def.weight  = EditorGUILayout.FloatField("Weight", def.weight);
                def.enabled = EditorGUILayout.Toggle("Enabled", def.enabled);
                EditorGUI.indentLevel++;
                foreach (SteeringBehaviorAsset.LinkedProperty prop in
                         def.properties)
                {
                    EditorGUILayout.BeginVertical("Box");
                    EditorGUI.indentLevel++;
                    EditorGUILayout.LabelField("Built-in Property Name",
                                               prop.name);
                    EditorGUILayout.LabelField("Type", prop.type.ToString());
                    prop.defaultValue = DefaultField(
                        prop.defaultValue, prop.type);
                    List <string> existingProps = new List <string>();
                    existingProps.Add("(None)");
                    foreach (SteeringBehaviorAsset.SteeringProperty p2
                             in sab.properties)
                    {
                        if (p2.type == prop.type)
                        {
                            existingProps.Add(p2.name);
                        }
                    }
                    existingProps.Add("-- Add New --");
                    string[] linkNames = existingProps.ToArray();
                    int      link      = existingProps.IndexOf(prop.link);
                    if (link < 0)
                    {
                        link = 0;
                    }
                    link = EditorGUILayout.Popup("Linked To", link, linkNames);
                    if (link >= 1 && link < linkNames.Length - 1)
                    {
                        prop.link = linkNames[link];
                    }
                    else if (link == linkNames.Length - 1)
                    {
                        prop.link = NewLinkProperty(sab, prop);
                    }
                    else
                    {
                        prop.link = "";
                    }
                    EditorGUILayout.EndVertical();
                    EditorGUILayout.Separator();
                    EditorGUI.indentLevel--;
                }
                EditorGUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Delete", EditorStyles.miniButton))
                {
                    sab.RemoveBehavior(idx);
                    sab.RemoveUnused();
                }
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.EndVertical();

                EditorGUILayout.Separator();

                EditorGUI.indentLevel--;
                idx++;
            }
            EditorGUI.indentLevel--;
        }
        if (GUILayout.Button("Add Behavior"))
        {
            NewSteeringBehavior win = (NewSteeringBehavior)
                                      EditorWindow.GetWindow(typeof(NewSteeringBehavior));
            win.asset = sab;
        }
        EditorGUILayout.EndVertical();

        if (GUI.changed)
        {
            sab.RemoveUnused();
            EditorUtility.SetDirty(target);
        }
    }
Ejemplo n.º 10
0
    string NewLinkProperty(SteeringBehaviorAsset sab,
		SteeringBehaviorAsset.SteeringProperty prop)
    {
        SteeringBehaviorAsset.SteeringProperty newProp =
            new SteeringBehaviorAsset.SteeringProperty();
        newProp.name = GetUniqueLinkedPropName(sab, prop.name);
        newProp.type = prop.type;
        sab.AddProperty(newProp);
        return newProp.name;
    }
Ejemplo n.º 11
0
 string GetUniqueLinkedPropName(SteeringBehaviorAsset sab, string name)
 {
     List<string> names = new List<string>();
     foreach(SteeringBehaviorAsset.SteeringProperty prop in sab.properties)
     {
         names.Add(prop.name);
     }
     names.Sort();
     int i = 1;
     string newName = name;
     while(names.BinarySearch(newName) >= 0) {
         newName = name + (i++);
     }
     return newName;
 }
Ejemplo n.º 12
0
    private string DefaultField(string val,
		SteeringBehaviorAsset.PropertyType t)
    {
        if(val == null) {
            return null;
        }
        object result = null;
        switch(t) {
        case SteeringBehaviorAsset.PropertyType.BOOL:
            bool vb = System.Boolean.Parse(val);
            result = EditorGUILayout.Toggle("Enabled", vb);
            break;
        case SteeringBehaviorAsset.PropertyType.INT:
            int vi = System.Int32.Parse(val);
            result = EditorGUILayout.IntField("Default Value", vi);
            break;
        case SteeringBehaviorAsset.PropertyType.FLOAT:
            float vf = System.Single.Parse(val);
            result = EditorGUILayout.FloatField("Default Value", vf);
            break;
        case SteeringBehaviorAsset.PropertyType.STRING:
            result = EditorGUILayout.TextField("Default Value", val);
            break;
        case SteeringBehaviorAsset.PropertyType.VECTOR2:
            Vector2 v2 = SteeringBehaviorAsset.ParseVector2(val);
            result = EditorGUILayout.Vector2Field("Default Value", v2);
            break;
        case SteeringBehaviorAsset.PropertyType.VECTOR3:
            Vector3 v3 = SteeringBehaviorAsset.ParseVector3(val);
            result = EditorGUILayout.Vector3Field("Default Value", v3);
            break;
        case SteeringBehaviorAsset.PropertyType.VECTOR4:
            Vector4 v4 = SteeringBehaviorAsset.ParseVector4(val);
            result = EditorGUILayout.Vector4Field("Default Value", v4);
            break;
        }
        return result == null ? null : result.ToString();
    }