/// <summary>
        /// Проверяет, допустимая ли дистанция для совершения действия.
        /// </summary>
        /// <param name="act"> Проверяемое действие. </param>
        /// <param name="currentCubePos"> Узел, из которого совершается действие. </param>
        /// <param name="targetCubePos"> Целевой узел. </param>
        /// <returns>Возвращает true, если дистанция допустима.</returns>
        public static bool CheckDistance(this ITacticalAct act,
                                         CubeCoords currentCubePos,
                                         CubeCoords targetCubePos)
        {
            var range        = act.Stats.Range;
            var distance     = currentCubePos.DistanceTo(targetCubePos);
            var isInDistance = range.Contains(distance);

            return(isInDistance);
        }
        /// <summary>
        /// Рисует линию в кубических координатах.
        /// </summary>
        /// <param name="a"> Начало линии. </param>
        /// <param name="b"> Конец линии. </param>
        /// <returns> Набор координат, составляющих линию. </returns>
        public static CubeCoords[] CubeDrawLine(CubeCoords a, CubeCoords b)
        {
            var n = a.DistanceTo(b);

            var list = new List <CubeCoords>();

            for (var i = 0; i <= n; i++)
            {
                LerpCube(a, b, 1.0f / n * i, out float cubeX, out float cubeY, out float cubeZ);
                var point = RoundCube(cubeX, cubeY, cubeZ);
                list.Add(point);
            }

            return(list.ToArray());
        }
Ejemplo n.º 3
0
        public static CubeCoords[] CubeDrawLine([NotNull] CubeCoords a, [NotNull] CubeCoords b)
        {
            var n = a.DistanceTo(b);

            var list = new List <CubeCoords>();

            // Первую итерацию выполняем отдельно.
            // В ней всегда берём t=0
            AddPointToList(a, b, list, 0);

            // Последующие итерации начинаем с 1,
            // т.к. первую итерацию обработали.
            for (var i = 1; i <= n; i++)
            {
                // t принимает значения 0..1.
                // Мы делим 1 на количество шагов n.
                // И  берём i-тый шаг.
                var t = 1.0f / n * i;

                AddPointToList(a, b, list, t);
            }

            return(list.ToArray());
        }