private IEnumerable <Tile> HighLightTilesInDirection(GoalDirection direction, int distance)
    {
        var directionVector = GlobalHelper.GetVectorForDirection(direction);

        var areaTiles = GameManager.Instance.CurrentArea.AreaTiles;

        var highlightedTiles = new List <Tile>();

        var currentTile = GameManager.Instance.CurrentTile;

        for (var i = 0; i < distance; i++)
        {
            var nextTileId = new Vector2(currentTile.X + directionVector.x, currentTile.Y + directionVector.y);

            try
            {
                currentTile = areaTiles[(int)nextTileId.x, (int)nextTileId.y];
            }
            catch (Exception)
            {
                break;
            }

            if (currentTile.GetBlocksLight() || currentTile.Visibility != Visibilities.Visible)
            {
                break;
            }

            HighlightTile(currentTile);

            highlightedTiles.Add(currentTile);
        }

        return(highlightedTiles);
    }
示例#2
0
 private static string GetDirectionName(GoalDirection direction)
 {
     if (direction == GoalDirection.Ascending)
         return "Ascending";
     if (direction == GoalDirection.Descending)
         return "Descending";
     return "N/A";
 }
示例#3
0
    private void Update()
    {
        if (Input.anyKeyDown && _listeningForInput)
        {
            _listeningForInput = false;

            GoalDirection chosenDirection      = GoalDirection.North;
            bool          validDirectionChosen = false;

            if (Input.GetKeyDown(KeyCode.Escape))
            {
                Hide();
                return;
            }

            foreach (var keypadDirection in _keypadDirections)
            {
                if (Input.GetKeyDown(keypadDirection.Key))
                {
                    chosenDirection      = keypadDirection.Value;
                    validDirectionChosen = true;
                    break;
                }
            }

            if (!validDirectionChosen)
            {
                _listeningForInput = true;
                return;
            }

            var currentTile     = GameManager.Instance.Player.CurrentTile;
            var directionVector = GlobalHelper.GetVectorForDirection(chosenDirection);

            var targetVector = new Vector2(currentTile.X + directionVector.x, currentTile.Y + directionVector.y);

            var targetTile = GameManager.Instance.CurrentArea.AreaTiles[(int)targetVector.x, (int)targetVector.y];

            if (targetTile.PresentProp is Grave)
            {
                //todo show grave inscription
            }

            EventMediator.Instance.Broadcast("DroppedItemPopup", this, targetTile);

            Hide();
        }
    }
示例#4
0
    public Push(Entity target, GoalDirection direction, int distance = 1)
    {
        name   = "push";
        entity = target;

        var directionVector = GlobalHelper.GetVectorForDirection(direction);

        for (var i = 0; i < distance; i++)
        {
            var targetTileCoordinates = new Vector2(target.CurrentTile.X + directionVector.x,
                                                    target.CurrentTile.Y + directionVector.y);

            if (!target.AreaMapCanMoveLocal(targetTileCoordinates))
            {
                break;
            }

            target.AreaMove(targetTileCoordinates);
        }
    }
 public static Vector2 GetVectorForDirection(GoalDirection direction)
 {
     return(DirectionVectorDictionary[direction]);
 }
示例#6
0
 public Step(GoalDirection direction)
 {
     StepDirection = direction;
 }
示例#7
0
        public static List <double> GetAllForbiddenAngle(int x1, int y1, List <System.Drawing.PointF> playetPos, GoalDirection goalDirection)
        {
            List <double> angels = new List <double>();

            float GBx, GTx;
            float GTy = FieldLocations.TopGoal;
            float GBy = FieldLocations.ButtomGoal;

            if (goalDirection == GoalDirection.Left)
            {
                GTx = FieldLocations.LeftLine;
                GBx = FieldLocations.LeftLine;
            }
            else
            {
                GTx = FieldLocations.RightLine;
                GBx = FieldLocations.RightLine;
            }

            var angle = GetAngleBetweenTwoPoints(x1, y1, GBx, GBy);

            angels.Add(angle);
            angle = GetAngleBetweenTwoPoints(x1, y1, GTx, GTy);
            angels.Add(angle);

            foreach (var point in playetPos)
            {
                if (isPointInTriangle(x1, y1, GTx, GTy, GBx, GBy, point.X, point.Y))
                {
                    angle = GetAngleBetweenTwoPoints(x1, y1, point.X, point.Y);
                    angels.Add(angle);
                }
            }

            angels.Sort();
            return(angels);
        }
示例#8
0
文件: Board.cs 项目: ashsvis/Checkers
        /// <summary>
        /// Добавление целевого поля для дамки
        /// </summary>
        /// <param name="goalList">Список целей, накопительный</param>
        /// <param name="pos">Адрес ячейки, вокруг которой ищется цель</param>
        /// <param name="direction">Направление поиска в "глубину"</param>
        /// <returns>true - была также найдена возможность боя</returns>
        private void AddKingGoal(List <Cell> steps, List <Cell> battles, Address pos, GoalDirection direction)
        {
            int dx, dy;

            switch (direction)
            {
            case GoalDirection.NW: dx = dy = -1; break;

            case GoalDirection.NE: dx = +1; dy = -1; break;

            case GoalDirection.SE: dx = dy = +1; break;

            case GoalDirection.SW: dx = -1; dy = +1; break;

            default: return;
            }
            var source = (Cell)_cells[pos];
            var combat = false;
            var addr   = pos;

            while (true)
            {
                addr = new Address(addr.Coords.X + dx, addr.Coords.Y + dy);
                if (addr.IsEmpty())
                {
                    break;
                }
                var cell = (Cell)_cells[addr];
                if (cell.State == State.Empty)
                {
                    if (combat)
                    {
                        battles.Add((Cell)_cells[addr]);
                    }
                    else
                    {
                        steps.Add((Cell)_cells[addr]);
                    }
                }
                else if (cell.State != source.State)
                {
                    addr = new Address(addr.Coords.X + dx, addr.Coords.Y + dy);
                    if (addr.IsEmpty())
                    {
                        break;
                    }
                    cell = (Cell)_cells[addr];
                    if (cell.State == State.Empty)
                    {
                        if (combat)
                        {
                            break;
                        }
                        battles.Add((Cell)_cells[addr]);
                        combat = true;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
        }
 public static void ShouldEqual(this ParsedGoal goal, decimal? quantity, GoalDirection direction, DateTime? deadline)
 {
     goal.Quantity.ShouldEqual(quantity);
     goal.Direction.ShouldEqual(direction);
     goal.Deadline.ShouldEqual(deadline);
 }