Exemple #1
0
        public Hex GetHexInDirectionOf(Hex from, Hex to)
        {
            HexCoords closetCoords = null;
            var       minDistance  = 99;

            foreach (var direction in HexCoords.directions)
            {
                var dirCoords = from.coords + direction;
                if (IsHexEmpty(dirCoords) && !IsHexLocked(dirCoords))
                {
                    var newDistance = HexCoords.Distance(dirCoords, to.coords);
                    if (newDistance < minDistance)
                    {
                        minDistance  = newDistance;
                        closetCoords = dirCoords;
                    }
                }
            }
            if (!(closetCoords is null))
            {
                var offsetCoords = closetCoords.ToOffset();
                return(grid[offsetCoords.y, offsetCoords.x]);
            }
            return(null);
        }
Exemple #2
0
        public Entity FindEnemyInRange(HexCoords fromPosition, int attackRange, Guid team)
        {
            Entity entity = null;

            Queue <HexCoords>   openSet   = new();
            HashSet <HexCoords> closedSet = new();

            foreach (var direction in HexCoords.directions)
            {
                openSet.Enqueue(fromPosition + direction);
            }

            while (openSet.Count > 0)
            {
                var coord = openSet.Dequeue();
                closedSet.Add(coord);

                if (HexCoords.Distance(fromPosition, coord) > attackRange)
                {
                    continue;
                }

                if (coord == fromPosition)
                {
                    continue;
                }

                var unit = GetUnit(coord);
                if (!(unit is null))
                {
                    if (unit.GetComponent <TeamComponent>().Team != team)
                    {
                        return(unit);
                    }
                }

                foreach (var direction in HexCoords.directions)
                {
                    var newCoord = coord + direction;
                    if (!Contains(newCoord))
                    {
                        continue;
                    }

                    if (closedSet.Contains(newCoord))
                    {
                        continue;
                    }

                    openSet.Enqueue(newCoord);
                }
            }

            return(entity);
        }
Exemple #3
0
 public int Distance(Hex other)
 {
     return(HexCoords.Distance(coords, other.coords));
 }