public static int GetManhattanDistance(Hero hero1, Hero hero2) { uint key = (uint)((hero1.Dimensions >> Hero.PositionX) | (hero2.Dimensions << (16 - Hero.PositionX))); byte distance; lock (locker) { if (!ManhattanDistance.TryGetValue(key, out distance)) { distance = (byte)(Math.Abs(hero1.X - hero2.X) + Math.Abs(hero1.Y - hero2.Y)); ManhattanDistance[key] = distance; } } return(distance); }
public static int GetManhattanDistance(Tile tile0, Tile tile1) { uint key = (uint)((tile0.Dimensions >> Hero.PositionX) | (tile1.Dimensions << (16 - Hero.PositionX))); byte distance; lock (locker) { if (!ManhattanDistance.TryGetValue(key, out distance)) { distance = (byte)(Math.Abs(tile0.X - tile1.X) + Math.Abs(tile0.Y - tile1.Y)); ManhattanDistance[key] = distance; } } return(distance); }