public void addBody( Body body ) { if ( bodySet.Contains( body ) ) throw new ArgumentException( "body already added" ); bodies.Add( body ); bodySet.Add( body ); }
public void addBody( Body body, Mesh mesh ) { addBody( body ); mesh.Transform.set( body.Transform ); bodyMeshMap.Add( body, mesh ); }
void removeContact( Body b1, Body b2 ) { HashSet<Body> contacts; contactMap.TryGetValue( b1, out contacts ); if ( contacts != null ) { contacts.Remove( b2 ); } contactMap.TryGetValue( b2, out contacts ); if ( contacts != null ) { contacts.Remove( b1 ); } }
bool hasContact( Body b1, Body b2 ) { HashSet<Body> contacts; contactMap.TryGetValue( b1, out contacts ); if ( contacts != null && contacts.Contains( b2 ) ) return true; contactMap.TryGetValue( b2, out contacts ); return contacts != null && contacts.Contains( b1 ); }
void collide( Collider collider, bool contact, Body body1, Body body2, int i, int j ) { if ( collider.collide( body1, body2 ) ) { if ( contact ) { //Console.WriteLine( "contact continued: " + body1 + " [" + i + "] vs " + body2 + " [" + j + "]" ); } else { //Console.WriteLine( "contact started: " + body1 + " [" + i + "] vs " + body2 + " [" + j + "]" ); addContact( body1, body2 ); } } else if ( contact ) { //Console.WriteLine( "contact ended: " + body1 + " [" + i + "] vs " + body2 + " [" + j + "]" ); removeContact( body1, body2 ); } }
void addContact( Body b1, Body b2 ) { HashSet<Body> contacts; contactMap.TryGetValue( b1, out contacts ); if ( contacts == null ) { contacts = new HashSet<Body>(); contactMap.Add( b1, contacts ); } contacts.Add( b2 ); contactMap.TryGetValue( b2, out contacts ); if ( contacts == null ) { contacts = new HashSet<Body>(); contactMap.Add( b2, contacts ); } contacts.Add( b1 ); }