public HashSet <IHexagon> GetTargetsInRange(IHexagon start, int range)
        {
            Queue <IHexagon>   hexQueue       = new Queue <IHexagon>();
            HashSet <IHexagon> visited        = new HashSet <IHexagon>();
            HashSet <IHexagon> targetsInRange = new HashSet <IHexagon>();


            hexQueue.Enqueue(start);
            while (hexQueue.Count != 0)
            {
                IHexagon currentHex = hexQueue.Dequeue();

                if (currentHex.MyHexMap.IsOccupied())
                {
                    if (currentHex.Contents.MyHasTurn != null)
                    {
                        targetsInRange.Add(currentHex);
                    }
                }

                foreach (IHexagon neighbour in currentHex.MyHexMap.Neighbours)
                {
                    if (HexMath.FindDistance(start, neighbour) <= range && !visited.Contains(neighbour))
                    {
                        hexQueue.Enqueue(neighbour);
                        visited.Add(neighbour);
                    }
                }
            }

            //algorithm would return the attacker as a target otherwise
            targetsInRange.Remove(start);

            return(targetsInRange);
        }
Ejemplo n.º 2
0
        public void find_straight_distance()
        {
            GameObject    gameObject    = new GameObject();
            MapGeneration mapGeneration = gameObject.AddComponent <MapGeneration>();

            mapGeneration.HexagonPrefab = new GameObject();
            mapGeneration.MapRadius     = 10;

            mapGeneration.HexDict = new Dictionary <Vector3Int, IHexagon>();
            mapGeneration.GenerateMap();
            mapGeneration.UpdateHexNeighbours();

            IHexagon start_hex = mapGeneration.HexDict[new Vector3Int(0, 0, 0)];
            IHexagon end_hex   = mapGeneration.HexDict[new Vector3Int(0, -4, 4)];


            int distance = 4;

            Assert.AreEqual(distance, HexMath.FindDistance(start_hex, end_hex));
        }