public void DrawColliderActions()
        {
            const float BtnWidth = 60;

            EditorGUILayout.LabelField("Manage Colliders");

            var outfit = Target;

            LizEditorGUIUtil.BeginLabelWidth(50);

            EditorGUILayout.LabelField("Behavior");
            EditorGUILayout.BeginHorizontal();

            m_RigidbodyBehaviorChoice = (RigidbodyBehavior)EditorGUILayout.EnumPopup(m_RigidbodyBehaviorChoice);

            GUI.enabled = outfit.BodyPartCount > 0;
            if (GUILayout.Button(BodyPartStatusLabel, GUILayout.MaxWidth(BtnWidth)))
            {
                ApplyBodyPartColliderStatus(outfit, m_RigidbodyBehaviorChoice);
            }
            GUI.enabled = true;

            GUI.enabled = outfit.PrimaryRigidbody;
            if (GUILayout.Button(PrimaryStatusLabel, GUILayout.MaxWidth(BtnWidth)))
            {
                LizEditorGUIUtil.SetRigidbodyBehavior(outfit.PrimaryRigidbody, m_RigidbodyBehaviorChoice);
            }
            GUI.enabled = true;

            EditorGUILayout.EndHorizontal();

            EditorGUILayout.LabelField("Layer");
            EditorGUILayout.BeginHorizontal();
            m_ColliderLayer = EditorGUILayout.LayerField(m_ColliderLayer);

            GUI.enabled = outfit.BodyPartCount > 0;
            if (GUILayout.Button(BodyPartStatusLabel, GUILayout.MaxWidth(BtnWidth)))
            {
                ApplyBodyPartLayer(outfit, m_ColliderLayer);
            }
            GUI.enabled = true;

            GUI.enabled = outfit.PrimaryCollider;
            if (GUILayout.Button(PrimaryStatusLabel, GUILayout.MaxWidth(BtnWidth)))
            {
                SetPrimaryColliderLayer(outfit, m_ColliderLayer);
            }
            GUI.enabled = true;

            EditorGUILayout.EndHorizontal();

            LizEditorGUIUtil.EndLabelWidth();
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Applies the rigidbody behavior to all body parts owned by the outfit.
 /// </summary>
 /// <remarks>
 /// <para>
 /// Warning: If non-body part colliders are associated with the same rigidbody as a body part collider, then
 /// the non-body part colliders will be caught up in the behavior change.
 /// </para>
 /// </remarks>
 /// <param name="status">The desired behavior.</param>
 public void ApplyBodyPartRehavior(RigidbodyBehavior behavior)
 {
     // Optimized for one rigidbody per collider.  Other configurations will result in duplicated effort.
     for (int i = 0; i < BodyPartCount; i++)
     {
         var item = GetBodyPart(i);
         if (item)
         {
             var rb = item.Rigidbody;
             if (rb)
             {
                 rb.SetBehavior(behavior, true);
             }
         }
     }
 }
Ejemplo n.º 3
0
        public static void ApplyBodyPartColliderStatus(Outfit outfit, RigidbodyBehavior status, bool singleUndo = true,
                                                       string undoLabel = "Set BP Collider Status")
        {
            if (AssetDatabase.Contains(outfit))
            {
                Debug.LogError("Can't modify an outfit asset.  Outfit must be in the scene.", outfit);
                return;
            }

            if (outfit.BodyPartCount == 0)
            {
                return;
            }

            if (singleUndo)
            {
                Undo.IncrementCurrentGroup();
            }

            for (int i = 0; i < outfit.BodyPartCount; i++)
            {
                var bp = outfit.GetBodyPart(i);
                if (bp)
                {
                    var rb = bp.Rigidbody;
                    if (rb)
                    {
                        LizEditorGUIUtil.SetRigidbodyBehavior(rb, status, false, undoLabel);
                    }
                }
            }

            if (singleUndo)
            {
                Undo.CollapseUndoOperations(Undo.GetCurrentGroup());
            }
        }
Ejemplo n.º 4
0
 public static RigidbodyBehavior InitializeRigidbodyBehavior(RigidbodyBehavior behavior, SpriteBehavior.ColliderType collider_type, string sprite_path, float x = 0, float y = 0)
 {
     InitializeSpriteBehavior(behavior, collider_type, sprite_path, x, y);
     behavior.rigid_body = behavior.gameObject.AddComponent<Rigidbody2D>();
     return behavior;
 }