private void Awake() { cachedTransform = transform; cachedTransform.position = Vector3.zero; boardData = BoardData.Create(boardColumns, boardRows); instance = this; }
public override BoardData ToBoardData(int senderId, int receiverId) { var taskFields = ToEnumerable().Where(f => f is TaskField taskField && taskField.DistanceToPiece != -1) .Select(t => (TaskField)t); var goalFields = ToEnumerable().Where(f => f is GoalField goalField).Select(t => (GoalField)t); return(BoardData.Create(receiverId, taskFields.ToArray(), goalFields.ToArray())); }
public override BoardData Respond() { if (!HavePiece()) { return(BoardData.Create(PlayerId, new GoalField[0])); } var player = Board.Players[PlayerId]; var piece = Board.Pieces[player.Piece.Id]; if (Validate()) { player.Piece = null; if (Board.IsLocationInTaskArea(player.Location)) { piece.PlayerId = null; var playerGoalField = Board[player.Location] as TaskField; playerGoalField.PieceId = piece.Id; var resultPiece = new Piece(piece.Id, PieceType.Unknown); return(BoardData.Create(PlayerId, new[] { playerGoalField }, new[] { resultPiece })); } else { Board.Pieces.Remove(piece.Id); if (piece.Type == PieceType.Sham) { return(null); } var playerGoalField = Board[player.Location] as GoalField; if (playerGoalField != null && playerGoalField.Type == GoalFieldType.Goal) { Board.MarkGoalAsCompleted(playerGoalField); } return(BoardData.Create(PlayerId, new[] { playerGoalField })); } } else { var playerTaskField = Board[player.Location] as TaskField; var pieceInField = Board.Pieces[playerTaskField.PieceId.Value]; var resultPiece = new Piece(pieceInField.Id, PieceType.Unknown); var holdingPiece = new Piece(piece.Id, PieceType.Unknown, piece.PlayerId); return(BoardData.Create(PlayerId, new[] { playerTaskField.Clone() }, new[] { resultPiece, holdingPiece })); } }
public override BoardData ToBoardData(int senderId, int receiverId) { var taskFields = ToEnumerable().Where(f => f is TaskField taskField).Select(t => (TaskField)t); var goalFields = ToEnumerable().Where(f => f is GoalField goalField).Select(t => (GoalField)t); var pieces = Pieces.Values; var playerLocation = Players[receiverId].Location; return(BoardData.Create(receiverId, playerLocation, taskFields.ToArray(), goalFields.ToArray(), pieces.ToArray())); }
public override BoardData Respond() { if (!Validate()) { return(BoardData.Create(PlayerId, new Piece[0])); } var player = Board.Players[PlayerId]; var playerPiece = player.Piece; return(BoardData.Create(PlayerId, new[] { playerPiece })); }
public override BoardData Respond() { var player = Board.Players[PlayerId]; if (!IsStepInsideBoard()) { return(BoardData.Create(PlayerId, player.Location, new TaskField[0], new Piece[0])); } var taskFields = new List <TaskField>(); var pieces = new List <Piece>(); Location resultPlayerLocation; var newLocation = player.Location.GetNewLocation(_direction); var fieldAtNewLocation = Board[newLocation]; if (fieldAtNewLocation is TaskField taskField) { taskField.DistanceToPiece = Board.DistanceToPieceFrom(taskField); taskFields.Add(taskField.Clone()); if (taskField.PieceId.HasValue) { var piece = Board.Pieces[taskField.PieceId.Value]; pieces.Add(new Piece(piece.Id, PieceType.Unknown, piece.PlayerId)); } } if (Validate()) { resultPlayerLocation = newLocation; Board[player.Location].PlayerId = null; fieldAtNewLocation.PlayerId = PlayerId; player.Location = newLocation; } else { resultPlayerLocation = player.Location; if (fieldAtNewLocation.PlayerId.HasValue && Board.Players[fieldAtNewLocation.PlayerId.Value].Piece != null) { var piece = Board.Players[fieldAtNewLocation.PlayerId.Value].Piece; pieces.Add(new Piece(piece.Id, PieceType.Unknown, piece.PlayerId)); } } return(BoardData.Create(PlayerId, resultPlayerLocation, taskFields.ToArray(), pieces.ToArray())); }
public override BoardData Respond() { if (!Validate()) { return(BoardData.Create(PlayerId, new Piece[0])); } var player = Board.Players[PlayerId]; var playerPiece = player.Piece; player.Piece = null; playerPiece.Type = PieceType.Destroyed; Board.Pieces.Remove(playerPiece.Id); return(BoardData.Create(PlayerId, new[] { playerPiece })); }
public override BoardData Respond() { if (!Validate()) { return(BoardData.Create(PlayerId, new Piece[0])); } var player = Board.Players[PlayerId]; var playerField = Board[player.Location] as TaskField; var piece = Board.Pieces[playerField.PieceId.Value]; piece.PlayerId = PlayerId; player.Piece = piece; playerField.PieceId = null; return(BoardData.Create(PlayerId, new[] { new Piece(piece.Id, PieceType.Unknown, piece.PlayerId) })); }
public override BoardData Respond() { var player = Board.Players[PlayerId]; var taskFields = new List <TaskField>(); var pieces = new List <Piece>(); var downLeftCorner = new Location(Math.Max(player.Location.X - 1, 0), Math.Max(player.Location.Y - 1, 0)); var upRightCorner = new Location(Math.Min(player.Location.X + 1, Board.Width), Math.Min(player.Location.Y + 1, Board.Height)); for (var i = downLeftCorner.X; i < Math.Min(upRightCorner.X + 1, Board.Width); i++) { for (var j = downLeftCorner.Y; j < Math.Min(upRightCorner.Y + 1, Board.Height); j++) { if (Board[new Location(i, j)] is TaskField taskfield) { taskfield.DistanceToPiece = Board.DistanceToPieceFrom(taskfield); taskFields.Add(taskfield); if (taskfield.PieceId.HasValue) { var piece = Board.Pieces[taskfield.PieceId.Value]; pieces.Add(new Piece(piece.Id, PieceType.Unknown, piece.PlayerId)); } if (taskfield.PlayerId.HasValue && Board.Players[taskfield.PlayerId.Value].Piece != null) { var piece = Board.Players[taskfield.PlayerId.Value].Piece; pieces.Add(new Piece(piece.Id, PieceType.Unknown, piece.PlayerId)); } } } } return(BoardData.Create(PlayerId, taskFields.ToArray(), pieces.ToArray())); }