static void ResolveCollision(CollisionPair pair) { if (pair.a == null || pair.b == null || pair.a.gameObject == null || pair.b.gameObject == null) { return; } NumberInfo a = pair.a; NumberInfo b = pair.b; if (a.transform.parent == b.transform.parent && b.transform.parent != null) { return; } // don't combine from same generator // if (a.transform.parent.GetComponent<AISpikeyGenerator>() && b.tran if (a.destroyedThisFrame || b.destroyedThisFrame) { return; } if (a.GetComponent <SoapedNumber>() && b.GetComponent <SoapedNumber>()) { return; } // soaped number don't combine with each other. if (a.GetComponent <TemporaryPreventCombine>() || b.GetComponent <TemporaryPreventCombine>()) { return; } // numbers chopped with sword won't recombine. This behavior is destoyed on player pickup. if (a.GetComponent <BlobNumber>() || b.GetComponent <BlobNumber>()) { // if (a.GetComponent<MonsterSnail>() || b.GetComponent<MonsterSnail>()) { return; } // blob monsters if (a.GetComponent <BlobNumber>() && b.GetComponent <Rigidbody>() && !b.GetComponent <Rigidbody>().isKinematic) { a.Eat(b); } else if (b.GetComponent <BlobNumber>() && a.GetComponent <Rigidbody>() && !a.GetComponent <Rigidbody>().isKinematic) { b.Eat(a); } } else if (a.GetComponent <MonsterAISpikey1>() || b.GetComponent <MonsterAISpikey1>()) { if (a.GetComponent <MonsterAISpikey1>() && b.GetComponent <MonsterAISpikey1>()) { return; } // spikey' dont eat each other else if (!a.GetComponent <Rigidbody>() || !b.GetComponent <Rigidbody>()) { return; } // spikeys dont interact with non rigidbodies else if (a.GetComponent <Rigidbody>() && a.GetComponent <Rigidbody>().isKinematic) { return; } // spikeys dont eat kinematics. else if (b.GetComponent <Rigidbody>() && b.GetComponent <Rigidbody>().isKinematic) { return; } // spikeys dont eat kinematics. else if (a.GetComponent <MonsterAISpikey1>() && !b.GetComponent <MonsterAISpikey1>()) { a.Eat(b); } // spikeys eat regular num else if (!a.GetComponent <MonsterAISpikey1>() && b.GetComponent <MonsterAISpikey1>()) { b.Eat(a); } } else if (a.fraction.numerator == -b.fraction.numerator && a.fraction.denominator == b.fraction.denominator) { // DestroyedFX(a.transform,b.tran); // b.DestroyedFX(); a.ZeroFX(a.transform.position); a.GemFX(); b.ZeroFX(b.transform.position); b.GemFX(); Destroy(a.gameObject); //if (a.myShape == NumberShape.Cube) NumberPool.inst.DestroyOrPool (a); // else Destroy(a.gameObject); Destroy(b.gameObject); //if (b.myShape == NumberShape.Cube) NumberPool.inst.DestroyOrPool (b); // else Destroy(b.gameObject); SMW_FX.CreateSmallPurpleExplosion(a.transform.position); //,1.5f,.5f); SMW_FX.CreateWhiteFlash(a.transform.position); //,20f,.3f); SMW_FX.CreateShards(a.transform.position); SMW_FX.CreateTextEffect(a.transform.position, "zero"); a.destroyedThisFrame = true; b.destroyedThisFrame = true; // a.DestroyedFX(); // AudioManager.inst.PlayNumberShatter(a.transform.position); return; } else if (a.myShape == NumberShape.Cube && b.myShape == NumberShape.Sphere) { a.Eat(b); } else if (a.myShape == NumberShape.Sphere && b.myShape == NumberShape.Cube) { b.Eat(a); } else if (a.myShape == NumberShape.Cube && b.myShape == NumberShape.Cube) { if (a.gameObject.GetComponent <Rigidbody>() && !b.gameObject.GetComponent <Rigidbody>()) { b.Eat(a); } else if (b.gameObject.GetComponent <Rigidbody>() && !a.gameObject.GetComponent <Rigidbody>()) { a.Eat(b); } } else if (a.gameObject.GetComponent <Rigidbody>() && a.gameObject.GetComponent <Rigidbody>().isKinematic) { a.Eat(b); } else if (b.gameObject.GetComponent <Rigidbody>() && b.gameObject.GetComponent <Rigidbody>().isKinematic) { b.Eat(a); } else if (a.neverEats) { b.Eat(a); } else if (b.neverEats) { a.Eat(b); } else if (a.combineLayer > b.combineLayer) { a.Eat(b); } else if (a.combineLayer < b.combineLayer) { b.Eat(a); } else if (a.gameObject == PlayerGadgetController.inst.thrownNumber) { b.Eat(a); } else if (b.gameObject == PlayerGadgetController.inst.thrownNumber) { a.Eat(b); } else if (a.GetComponent <SoapedNumber>() && !b.GetComponent <SoapedNumber>()) { a.Eat(b); } else if (b.GetComponent <SoapedNumber>() && !a.GetComponent <SoapedNumber>()) { b.Eat(a); } else if (a.gameObject.GetComponent <Rigidbody>() && b.gameObject.GetComponent <Rigidbody>()) { float velA = a.gameObject.GetComponent <Rigidbody>().velocity.sqrMagnitude; float velB = b.gameObject.GetComponent <Rigidbody>().velocity.sqrMagnitude; if (velA < velB) { a.Eat(b); } else { b.Eat(a); } } else if (Fraction.AbsGreater(a.fraction, b.fraction)) { a.Eat(b); } else if (Fraction.AbsGreater(b.fraction, a.fraction)) { b.Eat(a); } }