示例#1
0
    public void NodeToHexagon(List<Direction.EnumDirection> dirs, ref List<Hexagon> hexas, Hexagon root)
    {
        Hexagon currentHexa;
        currentHexa = root.GetTarget(dirs);

        //Logger.Error("posx : " + currentHexa._posX + "posy : " + currentHexa._posY + "used : " +NodeUsed);
        if (currentHexa != null && currentHexa._posX >=0 && currentHexa._posY >= 0 && NodeUsed && currentHexa.isVisible())
        {
            hexas.Add(currentHexa);
            //Logger.Error("size ---------------->" + hexas.Count);
        }

        if ((currentHexa._posX == -1 && currentHexa._posY == -1) || currentHexa.isVisible()) 
        {
            for (int i = 0; i < Nodes.Count; i++)
            {
                dirs.Add(Nodes[i]._direction);
                Nodes[i].NodeToHexagon(dirs, ref hexas, root);
                dirs.RemoveAt(dirs.Count - 1);
            }
        }
        
    }
    public List<Hexagon> GetRange(Range r, Hexagon source)
    {
        int valueRange; 
        if (r.Orientation == Orientation.EnumOrientation.Diagonal)
        {
            valueRange = r.MaxRange + PlayBoardManager.GetInstance().GetCurrentPlayer().RangeModifier * 2;
        }
        else
        {
            valueRange = r.MaxRange + PlayBoardManager.GetInstance().GetCurrentPlayer().RangeModifier;
        }

        if (valueRange < r.MinRange)
            valueRange = r.MinRange;

        List<Hexagon> hexas = new List<Hexagon>();
        hexas.Add(source);
        if (r.Orientation == Orientation.EnumOrientation.Any)
        {
            for(int i = 0; i < _width; i++)
            {
                for(int j = 0; j < _height;j++)
                {
                    if(source.Distance(_grid[i][j]) >= r.MinRange && source.Distance(_grid[i][j]) <= valueRange && source.Distance(_grid[i][j]) > 0)
                    {
                        hexas.Add(_grid[i][j]);
                    }
                }
            }
        }
        else if (r.Orientation == Orientation.EnumOrientation.Line)
        {
            List<Direction.EnumDirection> dirs = Direction.GetLineEnum();
            foreach (Direction.EnumDirection dir in dirs)
            {
                List<Direction.EnumDirection> directions = new List<Direction.EnumDirection>();
                for (int i = 1; i < r.MinRange; i++)
                {
                    directions.Add(dir);
                }
                for (int i = r.MinRange; i <= valueRange; i++)
                {
                    directions.Add(dir);
                    hexas.Add(source.GetTarget(directions));
                }
            }
        }
        else if (r.Orientation == Orientation.EnumOrientation.Diagonal)
        {
            List<Direction.EnumDirection> dirs = Direction.GetDiagonalEnum();
            foreach (Direction.EnumDirection dir in dirs)
            {
                List<Direction.EnumDirection> directions = new List<Direction.EnumDirection>();
                for (int i = 2; i < r.MinRange; i+=2)
                {
                    directions.Add(dir);
                }
                for (int i = r.MinRange; i <= valueRange; i+=2)
                {
                    directions.Add(dir);
                    hexas.Add(source.GetTarget(directions));
                }
            }
        }
        return hexas;
    }