Example #1
0
 /// <summary>
 /// Copy constructor.
 /// </summary>
 /// <param name="config">The configuration to copy.</param>
 public CrowdAgentParams(CrowdAgentParams config)
 {
     this.radius                = config.radius;
     this.height                = config.height;
     this.maxAcceleration       = config.maxAcceleration;
     this.maxSpeed              = config.maxSpeed;
     this.collisionQueryRange   = config.collisionQueryRange;
     this.pathOptimizationRange = config.pathOptimizationRange;
     this.separationWeight      = config.separationWeight;
     this.updateFlags           = config.updateFlags;
     this.avoidanceType         = config.avoidanceType;
     this.userData              = config.userData;
 }
 public void SetCrowdUpdateFlags(int index, CrowdUpdateFlags flags)
 {
     mUpdateFlags[index] = flags;
 }
 /// <summary>
 /// Copy constructor.
 /// </summary>
 /// <param name="config">The configuration to copy.</param>
 public CrowdAgentParams(CrowdAgentParams config)
 {
     this.radius = config.radius;
     this.height = config.height;
     this.maxAcceleration = config.maxAcceleration;
     this.maxSpeed = config.maxSpeed;
     this.collisionQueryRange = config.collisionQueryRange;
     this.pathOptimizationRange = config.pathOptimizationRange;
     this.separationWeight = config.separationWeight;
     this.updateFlags = config.updateFlags;
     this.avoidanceType = config.avoidanceType;
     this.userData = config.userData;
 }
Example #4
0
 public void SetCrowdUpdateFlags(int index, CrowdUpdateFlags flags)
 {
     mUpdateFlags[index] = flags;
 }
    /// <summary>
    /// Controls behavior of the inspector.
    /// </summary>
    public override void OnInspectorGUI()
    {
        AgentGroupSettings targ = (AgentGroupSettings)target;

        EditorGUILayout.Separator();

        int delTarget = -1;

        if (targ.GroupCount == 0)
        {
            // A reset, or something else odd happened.
            OnEnable();
        }

        string[] names = mNamesAsset.groupNames;

        bool blockDelete = (targ.GroupCount < 2);

        // Note: Because we are looping on the names, we are guarenteed to cover
        // all the definitions in the target.  names is always the most complete list.
        for (int iNames = 0; iNames < names.Length; iNames++)
        {
            int iTarg = targ.GetGroupIndex((byte)iNames);

            if (names[iNames] == AgentGroupNames.Undefined)
            {
                if (iTarg < 0)
                {
                    // It is truly undefined.
                    continue;
                }

                // Fix the error.  All defined groups must have a name.
                names[iNames] = "Agent Group " + iNames;
            }

            mShowGroup[iNames] = EditorGUILayout.Foldout(
                mShowGroup[iNames], string.Format("{0} ({1})", names[iNames], iNames));

            if (!mShowGroup[iNames])
            {
                continue;
            }

            EditorGUILayout.BeginHorizontal();

            string sn = EditorGUILayout.TextField("Name", names[iNames]);

            if (sn != names[iNames] &&
                sn != AgentGroupNames.Undefined)
            {
                bool foundDup = false;
                foreach (string n in names)
                {
                    if (sn == n)
                    {
                        foundDup = true;
                        break;
                    }
                }

                if (!foundDup)
                {
                    names[iNames] = sn;
                    EditorUtility.SetDirty(mNamesAsset);
                }
            }

            GUI.enabled = (!blockDelete);

            if (GUILayout.Button("X", GUILayout.Width(20)))
            {
                delTarget = iTarg;

                names[iNames] = AgentGroupNames.Undefined;
                EditorUtility.SetDirty(mNamesAsset);

                mShowGroup[iNames] = false;

                GUI.changed = true;
            }

            GUI.enabled = true;

            EditorGUILayout.EndHorizontal();

            float fv;

            fv = EditorGUILayout.FloatField("Agent Radius", targ.GetAgentRadius(iTarg));
            targ.SetAgentRadius(iTarg, fv);

            fv = EditorGUILayout.FloatField("Agent Height", targ.GetAgentHeight(iTarg));
            targ.SetAgentHeight(iTarg, fv);

            fv = EditorGUILayout.FloatField("Walk Speed", targ.GetMaxWalkSpeed(iTarg));
            targ.SetMaxWalkSpeed(iTarg, fv);

            fv = EditorGUILayout.FloatField("Jog Speed", targ.GetMaxJogSpeed(iTarg));
            targ.SetMaxJogSpeed(iTarg, fv);

            fv = EditorGUILayout.FloatField("Run Speed", targ.GetMaxRunSpeed(iTarg));
            targ.SetMaxRunSpeed(iTarg, fv);

            fv = EditorGUILayout.FloatField("Max Acceleration", targ.GetMaxAcceleration(iTarg));
            targ.SetMaxAcceleration(iTarg, fv);

            fv = EditorGUILayout.FloatField("Max Turn Speed", targ.GetMaxTurnSpeed(iTarg));
            targ.SetMaxTurnSpeed(iTarg, fv);

            fv = EditorGUILayout.FloatField("Query Range", targ.GetQueryRange(iTarg));
            targ.SetQueryRange(iTarg, fv);

            fv = EditorGUILayout.FloatField("Optimization Range", targ.GetOptimizationRange(iTarg));
            targ.SetOptimizationRange(iTarg, fv);

            fv = EditorGUILayout.FloatField("Separation Weight", targ.GetSeparationWeight(iTarg));
            targ.SetSeparationWeight(iTarg, fv);

            int iv;

            iv = EditorGUILayout.Popup(
                "Avoidance Quality", targ.GetAvoidanceType(iTarg), mAvoidanceNames);
            targ.SetAvoidanceType(iTarg, iv);

            CrowdUpdateFlags flags = (CrowdUpdateFlags)
                                     EditorGUILayout.EnumMaskField("Update Flags", targ.GetCrowdUpdateFlags(iTarg));
            targ.SetCrowdUpdateFlags(iTarg, flags);

            iv = EditorGUILayout.IntField("Corridor Pool Size", targ.GetCorridorPoolSize(iTarg));
            targ.SetCorridorPoolSize(iTarg, iv);

            iv = EditorGUILayout.IntField("Path Pool Size", targ.GetPathPoolSize(iTarg));
            targ.SetPathPoolSize(iTarg, iv);
        }

        if (delTarget >= 0)
        {
            // Note: The name is already taken care of.
            targ.RemoveGroup(delTarget);

            mNewArea  = NextUndefined();
            mFocusNew = true;  // So don't have odd GUI behavior.
        }

        EditorGUILayout.Separator();

        EditorGUILayout.BeginHorizontal();

        GUI.SetNextControlName(AddGroupName);
        mNewArea = (byte)Mathf.Min(
            AgentGroupNames.MaxGroups - 1, EditorGUILayout.IntField(mNewArea, GUILayout.Width(80)));
        if (mFocusNew)
        {
            GUI.FocusControl(AddGroupName);
            mFocusNew = false;
        }

        GUI.enabled = (names[mNewArea] == AgentGroupNames.Undefined);

        if (GUILayout.Button("Add New Group"))
        {
            names[mNewArea] = "Agent Group " + mNewArea;
            EditorUtility.SetDirty(mNamesAsset);

            targ.AddGroup(mNewArea);
            mShowGroup[mNewArea] = true;

            mNewArea    = NextUndefined();
            mFocusNew   = true;
            GUI.changed = true;
        }

        GUI.enabled = true;

        EditorGUILayout.EndHorizontal();

        EditorGUILayout.Separator();

        EditorGUILayout.LabelField("Maximum allowed group id: " + (AgentGroupNames.MaxGroups - 1)
                                   , EditorUtil.HelpStyle, GUILayout.ExpandWidth(true));

        EditorGUILayout.Separator();

        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }