Exemple #1
0
    /* 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);
        }
    }