public void checkNonFatalCollision(ScreenObject so, TimeSpan timeSpan) { float soX, soY, soWidth, soHeight; float coX, coY, coWidth, coHeight; bool collision = true; _screenColliders.Clear(); // pour all of the screen objects into the list of objects to check for collisions against to start with foreach (ScreenObject sObj in _screenObjects) { if (!(sObj is Soldier) && so.getState() != ScreenObject.STATE_DEAD && so.getState() != ScreenObject.STATE_DYING) _screenColliders.Add(sObj); } if (so.getState() != ScreenObject.STATE_DEAD || so.getState() != ScreenObject.STATE_DYING) { // get the values here so we aren't calling functions like crazy // pavise HACK if (so is Pavise) { soX = so.getPosition().X; soY = so.getPosition().Y - 10; soWidth = so.getWidth(); soHeight = so.getHeight() + 10; } else { soX = so.getPosition().X; soY = so.getPosition().Y; soWidth = so.getWidth(); soHeight = so.getHeight(); } foreach (ScreenObject co in _screenColliders) { if (so != co) { // pavise HACK if (so is Pavise) { coX = co.getPosition().X; coY = co.getPosition().Y - 10; coWidth = co.getWidth(); coHeight = co.getHeight() + 10; } else { coX = co.getPosition().X; coY = co.getPosition().Y; coWidth = co.getWidth(); coHeight = co.getHeight(); } collision = true; // see if we didn't collide if (soX > coX + coWidth) collision = false; else if (soX + soWidth < coX) collision = false; else if (soY > coY + coHeight) collision = false; else if (soY + soHeight < coY) collision = false; if (collision) { so.collide(co, timeSpan); co.collide(so, timeSpan); } } } } }