public MaterialCollisionItem(Material materialOne, Material materialTwo, MatCollCallBack callBack) { m_pair = new MaterialPair(materialOne, materialTwo); m_delegate += callBack; }
//---------------------------------------------------------------------------- //---------------------------------------------------------------------------- internal void ProcessFineCollisions(DeltaTime deltaTime) { if (m_collisionsFineList.Count > 0) { foreach (CollisionPair pair in m_collisionsFineList) { if (pair.ColliderOne.Contains(pair.ColliderTwo)) { MaterialCollisionItem item; PhysicsBody bodyOne = pair.ColliderOne.Body; PhysicsBody bodyTwo = pair.ColliderTwo.Body; CollisionBehaviour behaviour = CollisionBehaviour.DefaultCollision; if (GetMaterialPair(pair.ColliderOne.Material, pair.ColliderTwo.Material, out item)) { MatCollCallBack callBack = item.GetDelegate(); if (callBack != null) { behaviour = callBack(item.Pair, bodyOne, bodyTwo); } } if (behaviour == CollisionBehaviour.DefaultCollision) { //do default collision here. } } } m_collisionsFineList.Clear(); } }
//---------------------------------------------------------------------------- //---------------------------------------------------------------------------- public void RemoveMaterialPair(MaterialPairKey key, MatCollCallBack callBack) { try { m_materialPairs[key.Key].RemoveCallback(callBack); } catch (System.Exception ex) { Debug.Assert(false, "MaterialPair doesn't exist"); } }
//---------------------------------------------------------------------------- //---------------------------------------------------------------------------- public void Clear_Callbacks() { m_delegate = null; }
//---------------------------------------------------------------------------- //---------------------------------------------------------------------------- public void RemoveCallback(MatCollCallBack callback) { m_delegate -= callback; }
//---------------------------------------------------------------------------- //---------------------------------------------------------------------------- public void AddCallback(MatCollCallBack callBack) { m_delegate += callBack; }
//---------------------------------------------------------------------------- //---------------------------------------------------------------------------- public MaterialPairKey AddMaterialPair(Material materialOne, Material materialTwo, MatCollCallBack callBack) { MaterialCollisionItem pair; int nKey = MaterialPair.GetMaterialPairHashKey(materialOne, materialTwo); if (m_materialPairs.TryGetValue(nKey, out pair)) { pair.AddCallback(callBack); } else { pair = new MaterialCollisionItem(materialOne, materialTwo, callBack); } return(new MaterialPairKey(nKey)); }