void MyPreSolve(Fixture fixtureA, Fixture fixtureB, Contact contact) { if (fixtureA.Equals(m_platform)) { contact.SetTangentSpeed(5.0f); } if (fixtureB.Equals(m_platform)) { contact.SetTangentSpeed(-5.0f); } }
public void InsertFixture(Fixture fixture, bool overwrite = false) { if(overwrite && _fixtures.Contains(fixture)) { if(fixture.Equals(_fixtures.First)) { _fixtures.Remove(fixture); _fixtures.AddFirst(fixture); } else { LinkedListNode<Fixture> prior = _fixtures.Find(fixture); _fixtures.Remove(fixture); _fixtures.AddAfter(prior, fixture); } } else { _fixtures.AddLast(fixture); } }
public bool OnCollision(Fixture fixtureA, Fixture fixtureB, FarseerPhysics.Dynamics.Contacts.Contact contact) { int indexA = -1, indexB = -1; for (int i = 0; i < blockList.Count; i++) { for (int j = 0; j < blockList.ElementAt(i).body.FixtureList.Count; j++) { if (fixtureA.Equals(blockList.ElementAt(i).body.FixtureList.ElementAt(j))) { indexA = i; } if (fixtureB.Equals(blockList.ElementAt(i).body.FixtureList.ElementAt(j))) { indexB = i; } } } if (indexA >= 0 && indexB >= 0) { if (blockList.ElementAt(indexA).colorNum > 0 && blockList.ElementAt(indexA).colorNum == blockList.ElementAt(indexB).colorNum) { if (indexA > indexB) { world.RemoveBody(blockList.ElementAt(indexA).body); blockList.RemoveAt(indexA); world.RemoveBody(blockList.ElementAt(indexB).body); blockList.RemoveAt(indexB); } else { world.RemoveBody(blockList.ElementAt(indexB).body); blockList.RemoveAt(indexB); world.RemoveBody(blockList.ElementAt(indexA).body); blockList.RemoveAt(indexA); } } } return(true); }