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."); }
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; } }
//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; } }
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; } }
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; } }
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."); }
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); }
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(); } }
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); }
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); }
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); }
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."); }
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; } }
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]); }