public void Initialize() { m_EventTypes = new MyContactEventType[32, 32]; MyContactEventType defaultContactTypeMask = MyContactEventType.CET_START_AND_END; for (int i = 0; i < 32; i++) { for (int j = 0; j < 32; j++) { m_EventTypes[i, j] = defaultContactTypeMask; m_EventTypes[j, i] = defaultContactTypeMask; } } m_CollisionLayers = new bool[32, 32]; for (int i = 0; i < 32; i++) { for (int j = 0; j < 32; j++) { if (i == j) { m_CollisionLayers[i, j] = true; } else { m_CollisionLayers[i, j] = false; } } } }
/// <summary> /// sets a mask for contact events for 2 rigid body types /// </summary> public void SetRigidBodyContactEventTypeMask(MyContactEventType ev, ushort type1, ushort type2) { m_EventTypes[type1, type2] = ev; m_EventTypes[type2, type1] = ev; }
/// <summary> /// calls the user contact callbacks /// </summary> private void FireContactCallbacks() { MyRigidBodyModule module = MyPhysics.physicsSystem.GetRigidBodyModule(); for (int i = 0; i < m_StartContactEvents.Count; i++) { MyContactEventInfo coi = m_StartContactEvents[i]; MyContactEventType cet = module.GetRigidBodyContactEventTypeMask(coi.m_RigidBody1.Type, coi.m_RigidBody2.Type); if (cet == MyContactEventType.CET_START || cet == MyContactEventType.CET_START_AND_END || cet == MyContactEventType.CET_START_AND_TOUCH || cet == MyContactEventType.CET_START_AND_TOUCH_AND_END) { if (coi.m_RigidBody1.NotifyContactHandler != null) { coi.m_RigidBody1.NotifyContactHandler.OnContactStart(coi); } if (coi.m_RigidBody2.NotifyContactHandler != null) { coi.m_RigidBody2.NotifyContactHandler.OnContactStart(coi); } } } for (int i = 0; i < m_TouchContactEvents.Count; i++) { MyContactEventInfo coi = m_TouchContactEvents[i]; MyContactEventType cet = module.GetRigidBodyContactEventTypeMask(coi.m_RigidBody1.Type, coi.m_RigidBody2.Type); if (cet == MyContactEventType.CET_TOUCH || cet == MyContactEventType.CET_START_AND_TOUCH || cet == MyContactEventType.CET_END_AND_TOUCH || cet == MyContactEventType.CET_START_AND_TOUCH_AND_END) { if (coi.m_RigidBody1.NotifyContactHandler != null) { coi.m_RigidBody1.NotifyContactHandler.OnContactTouch(coi); } if (coi.m_RigidBody2.NotifyContactHandler != null) { coi.m_RigidBody2.NotifyContactHandler.OnContactTouch(coi); } } m_FreeCei.Push(coi); } for (int i = 0; i < m_EndContactEvents.Count; i++) { MyContactEventInfo coi = m_EndContactEvents[i]; MyContactEventType cet = module.GetRigidBodyContactEventTypeMask(coi.m_RigidBody1.Type, coi.m_RigidBody2.Type); if (cet == MyContactEventType.CET_END || cet == MyContactEventType.CET_START_AND_END || cet == MyContactEventType.CET_END_AND_TOUCH || cet == MyContactEventType.CET_START_AND_TOUCH_AND_END) { if (coi.m_RigidBody1.NotifyContactHandler != null) { coi.m_RigidBody1.NotifyContactHandler.OnContactEnd(coi); } if (coi.m_RigidBody2.NotifyContactHandler != null) { coi.m_RigidBody2.NotifyContactHandler.OnContactEnd(coi); } } m_FreeCei.Push(coi); } }
public void Initialize() { m_EventTypes = new MyContactEventType[32,32]; MyContactEventType defaultContactTypeMask = MyContactEventType.CET_START_AND_END; for (int i = 0; i < 32; i++) { for (int j = 0; j < 32; j++) { m_EventTypes[i, j] = defaultContactTypeMask; m_EventTypes[j, i] = defaultContactTypeMask; } } m_CollisionLayers = new bool[32,32]; for (int i = 0; i < 32; i++) { for (int j = 0; j < 32; j++) { if(i == j) m_CollisionLayers[i, j] = true; else m_CollisionLayers[i, j] = false; } } }