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)); } }
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; }