public void DeRegisterInGrid(ITilemapMember member) { //do not check if member registers in the grid. Just in case the value changed // it's important that it gets removed if it was ever registered var position = member.PositionInTileMap; GetListFromCoord(position)?.Remove(member); var chunk = GetIndexInChunkMap(member.PositionInTileMap).ToAxial(); IList <ITilemapMember> chunkList; if (tileMemberChunkMap.TryGetValue(chunk, out chunkList)) { chunkList.Remove(member); if (chunkList.Count == 0) { tileMemberChunkMap.Remove(chunk); } } }
public void RegisterInGrid(ITilemapMember item) { if (!item.DoesRegisterInIndex) { return; } var position = item.PositionInTileMap; GetListFromCoord(position)?.Add(item); var chunk = GetIndexInChunkMap(item.PositionInTileMap).ToAxial(); IList <ITilemapMember> chunkList; if (!tileMemberChunkMap.TryGetValue(chunk, out chunkList)) { chunkList = new List <ITilemapMember>(); tileMemberChunkMap[chunk] = chunkList; } chunkList.Add(item); }
public TileRoute GetRouteBetweenMembers(ITilemapMember origin, ITilemapMember destination) { return(new TileRoute(coordinateSystem.GetRouteGenerator(origin.PositionInTileMap, destination.PositionInTileMap).ToList())); }
public bool IsWithinDistance(ITilemapMember first, ITilemapMember second, int distance) { //TODO: replace with distance function return(!coordinateSystem.GetRouteGenerator(first.PositionInTileMap, second.PositionInTileMap).Skip(distance).Any()); }