/// <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> /// 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); } }