예제 #1
0
    void ElevateArea(int c, int r, int range, float centerAltitude = .8f)
    {
        Hexagon centerH = GetHexagonAt(c, r);

        //centerH.Altitude = 0.5f;


        Hexagon[] areaH = GetHexagonsInRange(centerH, range);

        foreach (Hexagon h in areaH)
        {
            h.Altitude = centerAltitude * Mathf.Lerp(1f, 0.25f, Mathf.Pow(Hexagon.Distance(centerH, h) / range, 2f));
        }
    }
예제 #2
0
    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;
    }
    /// <summary>
    /// Calculates the percentage acquired from the influence of each pole on every rune.
    /// </summary>
    /// <param name="perfection">The perfection percentage.</param>
    /// <param name="sublimation">The sublimation percentage.</param>
    /// <param name="stability">The stability percentage.</param>
    public void GetPolesInfluence(out float perfection, out float sublimation, out float stability)
    {
        Hexagon hexPerfection = new Hexagon(_idPerfection / 5, _idPerfection % 5, null);
        Hexagon hexSublimation = new Hexagon(_idSublimation / 5, _idSublimation % 5, null);
        Hexagon hexStability = new Hexagon(_idStability / 5, _idStability % 5, null);

        float perfect = 0;
        float subli = 0;
        float stabi = 0;

        foreach(int id in _runesOnBoard.Keys)
        {
            Hexagon hexRune = new Hexagon(id / 5, id % 5, null);
            int distPerfection = hexRune.Distance(hexPerfection);
            int distSublimation = hexRune.Distance(hexSublimation);
            int distStability = hexRune.Distance(hexStability);

            perfect += Mathf.Ceil((4 - distPerfection) * 2.5f);
            subli += Mathf.Ceil((4 - distSublimation) * 2.5f);
            stabi += Mathf.Ceil((4 - distStability) * 2.5f);
        }

        perfection = perfect * 0.01f;
        sublimation = subli * 0.01f;
        stability = stabi * 0.01f;
    }