BU-CS673/bubolo — pull request #274 by Nesciosquid (2014-03-30 00:50:15+00:00)
Title: Adaptive Tiling, Collisions, and Slippery Tanks

* Adaptive Tiling is implemented!
* Water, DeepWater, Wall, Crater, and Road are now tiled based on their positional context with other Tiles.
* Water and DeepWater textures changed (a lot!) to support correct corner-drawing. (I had the algorithm wrong, before!)
* Currently using an AdaptiveTileUtil class to do this behavior. There is probably a better place to put these methods, but an Interface seems wrong, since the methods are all static. Ideas?

* Brute-force collisions implemented for all Entities.
* Default height/width set for all concrete Entities. (used in collisions!)
* Tanks have special collision for movement, and special behavior for frontal-collisions that allows them to 'slide' along walls, pillboxes...
* Added 'solid' parameter to Entity, so that moving Entities can easily determine whether or not to colide with any given Entity (in a way that impedes movement)
* Modified Entity rotation so that the rotation value always stays between 0 and 2*PI, since this was causing (major!) issues with the rotation of Polygon-based bounding volumes.

Check out the CollisionTestApplication for a demo of tank collisions, as well as Brandon's new map with Adaptive Tiling working.

I could use some help figuring out how to unit test the getOverlappingEntities / getLookaheadEntities methods. They're Protected/Private, but I'm sure there is a way to unit test them appropriately, I'm just not sure what it is! Ideas would be appreciated, here.

More intelligent collisions would be great, but I don't have the time to code it up before the next Sprint. This would include checking only the surrounding TIles and other moving things (Actors, Effects) for collisions, instead of world.getEntities().