Beispiel #1
0
 public void OffBoxInteraction(ESelectStartSide eSelectStartSide)
 {
     if (eSelectStartSide.Equals(ESelectStartSide.FirstSide))
     {
         allPiecesFirstPlayers.ForEach(item => { if (item)
                                                 {
                                                     item.thisCollider.enabled = true;
                                                 }
                                       });
         allPiecesSecondPlayers.ForEach(item => { if (item)
                                                  {
                                                      item.thisCollider.enabled = false;
                                                  }
                                        });
     }
     else
     {
         allPiecesFirstPlayers.ForEach(item => { if (item)
                                                 {
                                                     item.thisCollider.enabled = false;
                                                 }
                                       });
         allPiecesSecondPlayers.ForEach(item => { if (item)
                                                  {
                                                      item.thisCollider.enabled = true;
                                                  }
                                        });
     }
 }
        public void CheckMovePieces(EPieces ePieces, ESelectStartSide eSelectSide, Vector2Int slot, bool isCheckmate = false)
        {
            _allSlot = new List <Vector2Int>();
            _slot    = slot;
            _side    = eSelectSide;

            switch (ePieces)
            {
            case EPieces.Pawn: PawnMove(); break;

            case EPieces.Rook: RookMove(); break;

            case EPieces.Knight: KnightMove(); break;

            case EPieces.Bishop: BishopMove(); break;

            case EPieces.Queen: QueenMove(); break;

            case EPieces.King: KingMove(); break;

            case EPieces.PawnHott: PawnHottMove(); break;

            case EPieces.Hott: HottMove(); break;

            default: break;
            }

            _allSlot = _allSlot.Distinct().OrderBy(item => item.x).ThenBy(item => item.y).ToList();
            (isCheckmate ? (System.Action)Checkmate : CheckInteractBoard)();
        }
Beispiel #3
0
        IEnumerator OffBoxInteraction(ESelectStartSide eSelectStartSide, float times = 0)
        {
            yield return(new WaitForSeconds(times));

            if (eSelectStartSide.Equals(ESelectStartSide.FirstSide))
            {
                allPiecesFirstPlayers.ForEach(item => { if (item)
                                                        {
                                                            item.thisCollider.enabled = true;
                                                        }
                                              });
                allPiecesSecondPlayers.ForEach(item => { if (item)
                                                         {
                                                             item.thisCollider.enabled = false;
                                                         }
                                               });
            }
            else
            {
                allPiecesFirstPlayers.ForEach(item => { if (item)
                                                        {
                                                            item.thisCollider.enabled = false;
                                                        }
                                              });
                allPiecesSecondPlayers.ForEach(item => { if (item)
                                                         {
                                                             item.thisCollider.enabled = true;
                                                         }
                                               });
            }
        }
        void Start()
        {
            _thisTog.onValueChanged.AddListener((result) =>
            {
                if (_thisTog.isOn && isFirstSelect)
                {
                    ESelectStartSide selectStartColor = BoardManage.instance.presentPieces.eSelectSide;
                    var _remove = selectStartColor.Equals(ESelectStartSide.FirstSide) ? BoardManage.instance.chessManage.allPiecesFirstPlayers.Remove(BoardManage.instance.presentPieces) : BoardManage.instance.chessManage.allPiecesSecondPlayers.Remove(BoardManage.instance.presentPieces);
                    BoardManage.instance.presentTargetBox.ClearChild();
                    BasePieces _piece = Instantiate(SelectPieces(), BoardManage.instance.presentTargetBox.transform);
                    Destroy(_piece.GetComponent <Rigidbody>());
                    _piece.eSelectSide                 = selectStartColor;
                    _piece.transform.localPosition     = Vector3.zero;
                    BoardManage.instance.presentPieces = _piece;

                    if (selectStartColor.Equals(ESelectStartSide.FirstSide))
                    {
                        _piece.meshRdr.material = BoardManage.instance.firstPlayerMat;
                        BoardManage.instance.chessManage.allPiecesFirstPlayers.Add(_piece);
                    }
                    else
                    {
                        _piece.meshRdr.material = BoardManage.instance.secondPlayerMat;
                        BoardManage.instance.chessManage.allPiecesSecondPlayers.Add(_piece);
                    }
                    EnchantPawn.CallBackSelectEnchant?.Invoke(false);
                }
                isFirstSelect = result;
            });
        }
Beispiel #5
0
        void SpawnPieceSingle(ESelectStartSide eSelectStartColor, BasePieces piece, Vector2Int slot, Material mat, List <BasePieces> basePieces)
        {
            Spawn(BoardManage.instance.detailBoxes[slot.x].boxManages[slot.y].transform);
            void Spawn(Transform parentPiece)
            {
                BasePieces _pieces = Instantiate(piece, parentPiece);

                _pieces.eSelectSide      = eSelectStartColor;
                _pieces.meshRdr.material = mat;
                basePieces.Add(_pieces);
            }
        }
Beispiel #6
0
 public void SwichTurn()
 {
     subBoardMovePieces.ClearBorad();
     eTurnPlayer = ~(eTurnPlayer - 1);
     if (chessManage)
     {
         chessManage.CallBackCheckKingCheckmate?.Invoke();
         chessManage.OffBoxInteraction(eTurnPlayer);
     }
     else
     {
         checkersManage.OffBoxInteraction(eTurnPlayer);
     }
 }
Beispiel #7
0
        IEnumerator IEEatPiece(EPieces ePieces, ESelectStartSide eSelectSide, Vector2Int slot)
        {
            ClearTemp();
            ClearNullList();
            yield return(new WaitForFixedUpdate());

            if (allPiecesFirstPlayers.Count(item => item) <= 0)
            {
                SideWin.CallBackSideWin?.Invoke(ESelectStartSide.SecondSide);
            }
            else if (allPiecesSecondPlayers.Count(item => item) <= 0)
            {
                SideWin.CallBackSideWin?.Invoke(ESelectStartSide.FirstSide);
            }
            else
            {
                if (isEatPiece)
                {
                    oldSlot = BoardManage.instance.presentTargetBox.slot;
                    yield return(new WaitForFixedUpdate());

                    yield return(StartCoroutine(BoardManage.instance.subBoardMovePieces.CheckChainingEat(ePieces, eSelectSide, slot)));
                }

                if (BoardManage.instance.presentTargetBox.isPawnEnchant && ePieces.Equals(EPieces.PawnHott))
                {
                    EnchantPawn.CallBackAutoEnchant?.Invoke();
                }
                else if (BoardManage.instance.checkersManage.CheckHaveEatPiece())
                {
                    BoardManage.instance.checkersManage.OffBoxInteraction(BoardManage.instance.eTurnPlayer);
                }
                else
                {
                    BoardManage.instance.presentPieces?.DefaulValue();
                    BoardManage.instance.SwichTurn();
                }
            }
        }
        public IEnumerator CheckChainingEat(EPieces ePieces, ESelectStartSide eSelectSide, Vector2Int slot)
        {
            BoardManage.instance.checkersManage.isEatPiece = false;
            _allSlot = new List <Vector2Int>();
            _slot    = slot;
            _side    = eSelectSide;

            switch (ePieces)
            {
            case EPieces.PawnHott: PawnHottMove(true); break;

            case EPieces.Hott: HottMove(true); break;

            default: break;
            }

            if (BoardManage.instance.checkersManage.CheckHaveEatPiece())
            {
                _allSlot = _allSlot.Distinct().OrderBy(item => item.x).ThenBy(item => item.y).ToList();
                CheckInteractBoard();
            }
            yield return(new WaitForFixedUpdate());
        }
Beispiel #9
0
        public void EatPiece(Vector2Int presentSlot, EPieces ePieces, ESelectStartSide eSelectSide, Vector2Int slot)
        {
            if (presentSlot.x > oldSlot.x) // Up
            {
                if (presentSlot.y > oldSlot.y)
                {
                    if (tempEatUpRight && presentSlot.y > tempEatUpRight.transform.parent.GetComponent <BoxManage>().slot.y)
                    {
                        Debug.Log($"UR");
                        Destroy(tempEatUpRight.gameObject);
                        isEatPiece = true;
                    }
                    else
                    {
                        Debug.Log($"OUR");
                    }
                }
                else
                {
                    if (tempEatUpLeft && presentSlot.y < tempEatUpLeft.transform.parent.GetComponent <BoxManage>().slot.y)
                    {
                        Debug.Log($"UL");
                        Destroy(tempEatUpLeft.gameObject);
                        isEatPiece = true;
                    }
                    else
                    {
                        Debug.Log($"OUL");
                    }
                }
            }
            else // Down
            {
                if (presentSlot.y > oldSlot.y)
                {
                    if (tempEatDownRight && presentSlot.y > tempEatDownRight.transform.parent.GetComponent <BoxManage>().slot.y)
                    {
                        Debug.Log($"DR");
                        Destroy(tempEatDownRight.gameObject);
                        isEatPiece = true;
                    }
                    else
                    {
                        Debug.Log($"ODR");
                    }
                }
                else
                {
                    if (tempEatDownLeft && presentSlot.y < tempEatDownLeft.transform.parent.GetComponent <BoxManage>().slot.y)
                    {
                        Debug.Log($"DL");
                        Destroy(tempEatDownLeft.gameObject);
                        isEatPiece = true;
                    }
                    else
                    {
                        Debug.Log($"ODL");
                    }
                }
            }

            StartCoroutine(IEEatPiece(ePieces, eSelectSide, slot));
        }
Beispiel #10
0
 void Start()
 {
     _selectStartColor = GetComponent <BasePieces>().eSelectSide;
     BoardManage.instance.chessManage.CallBackCheckKingCheckmate += CheckPiecesEatKing;
 }