/* JAB END */ private bool SkipThisCollider(GameObject otherBody) { // Does the other body also handle collisions? resolve who should handle this NBodyCollision otherNBC = otherBody.GetComponent <NBodyCollision>(); if (otherNBC != null) { #pragma warning disable 162 // disable unreachable code warning if (GravityEngine.DEBUG) { Debug.Log("Both objects have colliders: " + collisionPrecedence + " vs " + otherNBC.collisionPrecedence); } #pragma warning restore 162 if (collisionPrecedence > otherNBC.collisionPrecedence) { return(true); } else if (collisionPrecedence == otherNBC.collisionPrecedence) { if (gameObject.GetInstanceID() > otherBody.GetInstanceID()) { return(true); } } } return(false); }
public override void OnInspectorGUI() { GUI.changed = false; NBodyCollision nbc = (NBodyCollision)target; GameObject explodePF = nbc.explosionPrefab; int precedence = nbc.collisionPrecedence; float explodeOrBounceVelocity = nbc.explodeOrBounceVelocity; float bounceFactor = 1f; string layer = null; float oldWidth = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = 200; NBodyCollision.CollisionType type = NBodyCollision.CollisionType.ABSORB_IMMEDIATE; type = (NBodyCollision.CollisionType)EditorGUILayout.EnumPopup(new GUIContent("Collision Type", collTip), nbc.collisionType); precedence = EditorGUILayout.IntField(new GUIContent("Collision Precedence", cTip), nbc.collisionPrecedence); layer = EditorGUILayout.TextField(new GUIContent("Collision Layer (Optional)", layerTip), nbc.collisionLayer); if (type == NBodyCollision.CollisionType.EXPLODE) { explodePF = (GameObject)EditorGUILayout.ObjectField( new GUIContent("Explosion Prefab", "Particle System with NBodyParticles"), explodePF, typeof(GameObject), true); } else if (type == NBodyCollision.CollisionType.BOUNCE) { EditorGUIUtility.labelWidth = oldWidth; bounceFactor = EditorGUILayout.Slider(new GUIContent("Bounce", bTip), nbc.bounceFactor, 0f, 1f); } else if (type == NBodyCollision.CollisionType.EXPLODE_OR_BOUNCE) { explodePF = (GameObject)EditorGUILayout.ObjectField( new GUIContent("Explosion Prefab", "Particle System with NBodyParticles"), explodePF, typeof(GameObject), true); bounceFactor = EditorGUILayout.Slider(new GUIContent("Bounce", bTip), nbc.bounceFactor, 0f, 1f); GravityScaler.Units units = GravityEngine.Instance().units; EditorGUIUtility.labelWidth = oldWidth; string prompt = string.Format("Relative Velocity to Explode ({0})", GravityScaler.VelocityUnits(units)); explodeOrBounceVelocity = EditorGUILayout.FloatField(new GUIContent(prompt, dTip), nbc.explodeOrBounceVelocity); } if (GUI.changed) { Undo.RecordObject(nbc, "NBodyCollision Change"); nbc.explosionPrefab = explodePF; nbc.collisionType = type; nbc.bounceFactor = bounceFactor; nbc.explodeOrBounceVelocity = explodeOrBounceVelocity; nbc.collisionPrecedence = precedence; nbc.collisionLayer = layer; EditorUtility.SetDirty(nbc); } }