public static List <ICollisionObject> MapObjects(TilePos tile) { List <ICollisionObject> result = new List <ICollisionObject>(); foreach (TileDir dir in gmap.ReverseDirs(tile)) { result.Add(new CollisionSide(tile, dir)); } HashSet <TileDir> edgeDirs = new HashSet <TileDir>(); foreach (TileDir dir1 in gmap.Dirs(tile)) { foreach (TileDir dir2 in gmap.Dirs(tile)) { if (dir1 != dir2) { edgeDirs.Add(dir1 + dir2); } } } edgeDirs.ExceptWith(new HashSet <TileDir> { TileDir.Zero }); foreach (TileDir dir in edgeDirs) { result.Add(new CollisionCircle(tile.ToVector(0.5 * (1 + dir.X), 0.5 * (1 + dir.Y)), game.TrackTileMargin)); } return(result); }