Esempio n. 1
0
    /*
     * メイン画面用
     * カードのドラッグが終わったとき
     * タイル上にいい感じに置くのと隣との大きさ比べする
     */
    public void OnEndDragCard(GameObject gameObject)
    {
        //ドラッグしたカードのチーム
        TeamColor teamColor = _cardAction.CardAttribute.TeamColor;

        RectTransform rectTransform    = _dragObject.RectTransform;
        Vector3       originalPosition = _dragObject.OriginalPosition;

        /*
         * 今いる場所を渡すと近いタイルの場所を教えてくれる
         * Item1 : カードを置くタイルのposition
         * Item2 : true → Item1のタイル上に置く false → 元の場所に戻す
         * Item3 : カードを置いたタイルのIndex
         */
        var position = _gameBoard.NearestSquare(rectTransform.localPosition);

        //近くのタイルの上にカードを置く
        if (position.Item2)
        {
            //置いた
            rectTransform.localPosition = position.Item1;
            //Drag無効にするのでこの子はもう二度と動けない
            _dragObject.enabled = false;

            //gridNum * gridNum = タイルの数 (正方形とします)
            int gridNum = _gameMaster.GridNum;
            cardIndex = position.Item3;

            //タイルと対応する番号に情報入れてあげる
            _gameMaster.AddCardAttributeOnTileArray(position.Item3, this);

            //隣と比べたりする
            if (SpecialRulesSender.Instance.SettingRuleList[(int)SpecialRules.PLUS])
            {
                _gameMaster.ComparePlus(cardIndex);
            }

            if (SpecialRulesSender.Instance.SettingRuleList[(int)SpecialRules.SAME])
            {
                _gameMaster.CompareSame(cardIndex);
            }

            _gameMaster.CompareCard(cardIndex);

            //プレイヤー交代
            _gameMaster.ChangeSelectableCards(teamColor);
        }
        else
        {
            rectTransform.localPosition = originalPosition;
        }

        //drag中タイルの色変えてたから元に戻してあげる
        _gameBoard.SquareCororRevert();
    }