Example #1
0
 public MinesValidator(Board board, StartingPosition startingPosition, ExitPosition exitPosition)
 {
     RuleFor(m => m)
     .NotEqual(startingPosition.Tile).WithMessage($"There is a mine on starting position.")
     .NotEqual(exitPosition.Tile).WithMessage($"There is a mine on exit position.")
     .SetValidator(m => new TileValidator($"Mines {m.GetValueOrDefault()}", board.Rows, board.Columns)).WithMessage("Some of the mines are invalid.");
 }
Example #2
0
        private void OnTriggerEnter2D(Collider2D collision)
        {
            string      tag         = collision.tag;
            GameManager gameManager = FindObjectOfType <GameManager>();

            switch (tag)
            {
            case "Treasure":
                wealth += 10;
                collision.gameObject.SetActive(false);
                gameManager.UpdateWealthText();
                gameManager.UpdateRoomEntity(collision.gameObject.transform.position.x, collision.gameObject.transform.position.y);
                break;

            case "Exit":
                if (!isMoving)
                {
                    Exit exit = collision.gameObject.GetComponent <Exit>();

                    gameManager.DisablePlayerInput();

                    ExitPosition roomDirection = exit.exitPosition.GetOpposite();

                    this.gameObject.SetActive(false);
                    gameManager.EnterRoom(roomDirection, exit.exitRoomId);
                }
                break;

            default:
                break;
            }
        }
Example #3
0
        //Tested
        protected void SetExit(ComplexObject cObj, int layerZ, ExitPosition wallPosition, int exitIndex)
        {
            switch (wallPosition)
            {
            case ExitPosition.TOP:
                SetComplexObject(cObj, layerZ, HeightY - 1, exitIndex);
                Exits.Add(new SExitInformation(wallPosition, exitIndex));
                break;

            case ExitPosition.RIGHT:
                SetComplexObject(cObj, layerZ, exitIndex, LengthX - 1);
                Exits.Add(new SExitInformation(wallPosition, exitIndex));
                break;

            case ExitPosition.BOTTOM:
                SetComplexObject(cObj, layerZ, 0, exitIndex);
                Exits.Add(new SExitInformation(wallPosition, exitIndex));
                break;

            case ExitPosition.LEFT:
                SetComplexObject(cObj, layerZ, exitIndex, 0);
                Exits.Add(new SExitInformation(wallPosition, exitIndex));
                break;
            }
        }
Example #4
0
        public void PositionWall(ExitPosition exitPosition, int exitRoomId)
        {
            this.exitRoomId = exitRoomId;

            base.PositionWall(exitPosition);
            this.name = $"Exit {exitPosition}";

            switch (exitPosition)
            {
            case ExitPosition.North:
                this.transform.rotation = Quaternion.identity;
                break;

            case ExitPosition.East:
                this.transform.rotation = Quaternion.Euler(0f, 0f, 270f);
                break;

            case ExitPosition.South:
                this.transform.rotation = Quaternion.Euler(0f, 0f, 180f);
                break;

            case ExitPosition.West:
                this.transform.rotation = Quaternion.Euler(0f, 0f, 90f);
                break;

            default:
                break;
            }
        }
Example #5
0
        public void PositionWall(ExitPosition exitPosition)
        {
            this.name         = $"Wall {exitPosition}";
            this.exitPosition = exitPosition;

            switch (exitPosition)
            {
            case ExitPosition.North:
                this.transform.position = new Vector2(0.5f, 5.5f);
                break;

            case ExitPosition.East:
                this.transform.position = new Vector2(9.5f, 0.5f);
                break;

            case ExitPosition.South:
                this.transform.position = new Vector2(0.5f, -4.5f);
                break;

            case ExitPosition.West:
                this.transform.position = new Vector2(-8.5f, 0.5f);
                break;

            default:
                break;
            }
        }
Example #6
0
        public void When_validating_exiting_position_and_tile_is_null_then_return_error()
        {
            var exitPosition = new ExitPosition();

            var results = _exitPositionValidator.Validate(exitPosition);

            results.Errors.Count.Should().Be(1);
            results.Errors[0].ErrorMessage.Should().Be("ExitPosition tile should not be null.");
        }
Example #7
0
        public void When_validating_exiting_position_and_tile_is_not_on_the_edge_then_return_error()
        {
            var exitPosition = new ExitPosition {
                Tile = new Point(2, 2)
            };

            var results = _exitPositionValidator.Validate(exitPosition);

            results.Errors.Count.Should().Be(1);
            results.Errors[0].ErrorMessage.Should().Be("ExitPosition should be on the edge of the board.");
        }
        public static ExitPosition GetRandomPostion(ExitPosition forbiddenPosition)
        {
            int forbiddenInt = (int)forbiddenPosition;
            int randomNumber = forbiddenInt;

            do
            {
                randomNumber = Random.Range(0, 3);
            } while (randomNumber == forbiddenInt);

            return((ExitPosition)randomNumber);
        }
Example #9
0
        public void EnterRoom(ExitPosition exitPosition, int roomId)
        {
            gameState = GameState.None;
            enemies.Clear();

            int wealth = _player.wealth;

            Destroy(_player.gameObject);

            if (_maze.ExitRoomId == roomId)
            {
                winText.text = $"You found the exit and acquired {wealth} Wealth!";
                StartCoroutine(EndGame());
            }
            else
            {
                LoadRoom(roomId);

                _player = Instantiate(playerPrefab) as Player;

                _player.name   = "Player";
                _player.wealth = wealth;

                switch (exitPosition)
                {
                case ExitPosition.North:
                    _player.SetLocation(0.5f, 4.5f);
                    break;

                case ExitPosition.East:
                    _player.SetLocation(8.5f, 0.5f);
                    break;

                case ExitPosition.South:
                    _player.SetLocation(0.5f, -3.5f);
                    break;

                case ExitPosition.West:
                    _player.SetLocation(-7.5f, 0.5f);
                    break;

                default:
                    break;
                }

                EnablePlayerInput();
            }
        }
Example #10
0
        protected override YAMLMappingNode ExportYAMLRoot(IExportContainer container)
        {
            YAMLMappingNode node = base.ExportYAMLRoot(container);

            node.InsertSerializedVersion(GetSerializedVersion(container.ExportVersion));
            node.Add(ChildStatesName, ChildStates.ExportYAML(container));
            node.Add(ChildStateMachinesName, ChildStateMachines.ExportYAML(container));
            node.Add(AnyStateTransitionsName, AnyStateTransitions.ExportYAML(container));
            node.Add(EntryTransitionsName, EntryTransitions.ExportYAML(container));
            node.Add(StateMachineTransitionsName, StateMachineTransitions.ExportYAML(container));
            node.Add(StateMachineBehavioursName, StateMachineBehaviours.ExportYAML(container));
            node.Add(AnyStatePositionName, AnyStatePosition.ExportYAML(container));
            node.Add(EntryPositionName, EntryPosition.ExportYAML(container));
            node.Add(ExitPositionName, ExitPosition.ExportYAML(container));
            node.Add(ParentStateMachinePositionName, ParentStateMachinePosition.ExportYAML(container));
            node.Add(DefaultStateName, DefaultState.ExportYAML(container));
            return(node);
        }
Example #11
0
        protected override YAMLMappingNode ExportYAMLRoot(IExportContainer container)
        {
            YAMLMappingNode node = base.ExportYAMLRoot(container);

            node.InsertSerializedVersion(GetSerializedVersion(container.Version));
            node.Add("m_ChildStates", ChildStates.ExportYAML(container));
            node.Add("m_ChildStateMachines", ChildStateMachines.ExportYAML(container));
            node.Add("m_AnyStateTransitions", AnyStateTransitions.ExportYAML(container));
            node.Add("m_EntryTransitions", EntryTransitions.ExportYAML(container));
            node.Add("m_StateMachineTransitions", StateMachineTransitions.ExportYAMLArrayPPtr(container));
            node.Add("m_StateMachineBehaviours", StateMachineBehaviours.ExportYAML(container));
            node.Add("m_AnyStatePosition", AnyStatePosition.ExportYAML(container));
            node.Add("m_EntryPosition", EntryPosition.ExportYAML(container));
            node.Add("m_ExitPosition", ExitPosition.ExportYAML(container));
            node.Add("m_ParentStateMachinePosition", ParentStateMachinePosition.ExportYAML(container));
            node.Add("m_DefaultState", DefaultState.ExportYAML(container));
            return(node);
        }
Example #12
0
        protected override YAMLMappingNode ExportYAMLRoot()
        {
            YAMLMappingNode node = base.ExportYAMLRoot();

            node.AddSerializedVersion(SerializedVersion);
            node.Add("m_СhildStates", ChildStates.ExportYAML());
            node.Add("m_ChildStateMachines", ChildStateMachines.ExportYAML());
            node.Add("m_AnyStateTransitions", AnyStateTransitions.ExportYAML());
            node.Add("m_EntryTransitions", EntryTransitions.ExportYAML());
            node.Add("m_StateMachineTransitions", StateMachineTransitions.ExportYAMLEnum());
            node.Add("m_StateMachineBehaviours", StateMachineBehaviours.ExportYAML());
            node.Add("m_AnyStatePosition", AnyStatePosition.ExportYAML());
            node.Add("m_EntryPosition", EntryPosition.ExportYAML());
            node.Add("m_ExitPosition", ExitPosition.ExportYAML());
            node.Add("m_ParentStateMachinePosition", ParentStateMachinePosition.ExportYAML());
            node.Add("m_DefaultState", DefaultState.ExportYAML());
            return(node);
        }
Example #13
0
        public void When_validating_mines_and_one_of_then_is_equal_starting_or_exit_position_then_return_error()
        {
            var board = new Board {
                Rows = 4, Columns = 5
            };
            var startingPosition = new StartingPosition {
                Tile = new Point(4, 2)
            };
            var exitPosition = new ExitPosition {
                Tile = new Point(4, 2)
            };
            var minesValidator = new MinesValidator(board, startingPosition, exitPosition);
            var mine           = new Point(4, 2);

            var results = minesValidator.Validate(mine);

            results.Errors.Count.Should().Be(2);
            results.Errors[0].ErrorMessage.Should().Be("There is a mine on starting position.");
            results.Errors[1].ErrorMessage.Should().Be("There is a mine on exit position.");
        }
Example #14
0
        private void EnterRoom(ExitPosition exitPosition)
        {
            switch (exitPosition)
            {
            case ExitPosition.North:
                SetLocation(0.5f, 4.5f);
                break;

            case ExitPosition.East:
                SetLocation(8.5f, 0.5f);
                break;

            case ExitPosition.South:
                SetLocation(0.5f, -3.5f);
                break;

            case ExitPosition.West:
                SetLocation(-7.5f, 0.5f);
                break;

            default:
                break;
            }
        }
Example #15
0
 public SExitInformation(ExitPosition wallPosition, int exitIndexZ)
 {
     WallPosition = wallPosition;
     ExitIndexZ   = exitIndexZ;
 }
        private RoomExit[] GenerateRoomExits(int roomId)
        {
            ExitPosition randomPosition    = ExitPositions.GetRandomPostion();
            ExitPosition forbiddenPosition = randomPosition;

            unvisitedRooms.Remove(unvisitedRooms.Where(x => x == roomId).FirstOrDefault()); // Mark room as visited
            bool anyUnvisitedRooms = unvisitedRooms.Count() > 0;

            List <RoomExit> newExits = new List <RoomExit>();

            // Add any connected rooms
            if (generatedExits.Where(x => x.NeighbouringRoom == roomId).Count() > 0)
            {
                var  neighbourExit = generatedExits.Where(x => x.NeighbouringRoom == roomId).FirstOrDefault();
                Room neighbour     = null;

                if (neighbourExit != null)
                {
                    neighbour         = generatedRooms.Where(x => x.Exits.Contains(neighbourExit)).FirstOrDefault();
                    forbiddenPosition = neighbourExit.Position.GetOpposite();
                    randomPosition    = ExitPositions.GetRandomPostion(forbiddenPosition);
                }

                var newExit = new RoomExit
                {
                    Position         = forbiddenPosition,
                    IsExit           = neighbour != null,
                    NeighbouringRoom = neighbour == null ? (int?)null : neighbour.RoomId
                };

                newExits.Add(newExit);
            }

            if (anyUnvisitedRooms)
            {
                // Generate room with assumption of at least 1 new exit
                int?newVistedRoom = anyUnvisitedRooms ? unvisitedRooms.FirstOrDefault() : (int?)null;

                newExits.Add(new RoomExit
                {
                    IsExit           = anyUnvisitedRooms, // Guarantee at least one exit, unless all rooms have been visited
                    Position         = randomPosition,
                    NeighbouringRoom = newVistedRoom
                });

                int exactRoomId;

                if (int.TryParse(newVistedRoom.ToString(), out exactRoomId))
                {
                    unvisitedRooms.Remove(unvisitedRooms.Where(x => x == exactRoomId).FirstOrDefault());
                }
            }

            // Generate all other exits
            for (int i = 0; i < ExitPositions.positions.Length; i++)
            {
                var position = (ExitPosition)i;

                if (position != randomPosition && position != forbiddenPosition)
                {
                    bool isExit           = false;
                    int? neighbouringRoom = null;

                    if (unvisitedRooms.Count() > 0)
                    {
                        // Leave it to chance
                        var chance = Random.Range(1, 10) % 2 == 0;

                        if (chance)
                        {
                            isExit           = true;
                            neighbouringRoom = unvisitedRooms.FirstOrDefault();
                            unvisitedRooms.Remove(unvisitedRooms.Where(x => x == neighbouringRoom).FirstOrDefault());
                        }
                    }

                    newExits.Add(new RoomExit
                    {
                        IsExit           = isExit,
                        Position         = position,
                        NeighbouringRoom = neighbouringRoom
                    });
                }
            }

            generatedExits.AddRange(newExits);

            return(newExits.ToArray());
        }
 public static ExitPosition GetOpposite(this ExitPosition exitPosition)
 {
     return(opposites[(int)exitPosition]);
 }