public void OpenCard(GameFlowManager.TurnStatus turnStatus, int index)
 {
     if (turnStatus == GameFlowManager.TurnStatus.PlayerTurn)
     {
         var cardObj = aiHand[index].GetComponent <CardObject>();
         cardObj.OpenCard();
     }
     else
     {
         var cardObj = playerHand[index].GetComponent <CardObject>();
         cardObj.OpenCard();
     }
 }
    public IEnumerator DrawCard(GameFlowManager.TurnStatus turnStatus, Card draw)
    {
        Debug.Log("test1.1");
        _nowDraw = Instantiate(cardPrefab) as GameObject;
        _nowDraw.GetComponent <RectTransform>().position = deckPos.position;
        _nowDraw.GetComponent <RectTransform>().SetParent(cardCanvas.transform);
        _nowDraw.GetComponent <RectTransform>().localScale = Vector3.one;
        CardObject cardObj = _nowDraw.GetComponent <CardObject>();

        cardObj.card = draw;
        cardObj.ui   = ui;
        Debug.Log("test1.2");
        yield return(StartCoroutine(cardObj.Draw(turnStatus, deckPos, drawedPos)));

        _drawed = true;
    }
Beispiel #3
0
    public IEnumerator Draw(GameFlowManager.TurnStatus turn, RectTransform deckPos, RectTransform drawPos)
    {
        //カードの初期化を待つ
        while (!_isInitialized)
        {
            yield return(null);
        }

        _animator.SetBool("IsPlayerTurn", turn == GameFlowManager.TurnStatus.PlayerTurn);
        _animator.SetTrigger("Draw");
        if (turn == GameFlowManager.TurnStatus.AITurn)
        {
            _button.onClick.AddListener(() => ui.SelectTarget(card.color, white, black, index));
        }
        else
        {
            Color color   = (card.color == Card.Color.White)? white : black;
            Color inverse = (color == white)? black : white;
            _button.onClick.AddListener(() => ui.ShowNumber(card.number, color, inverse, _rectTransform));
        }
        float timer = 0f;

        AnimationClip currentClip = null;

        foreach (var clipInfo in _animator.GetCurrentAnimatorClipInfo(0))
        {
            Match m = Regex.Match(clipInfo.clip.name, "Draw");
            currentClip = (m.Success)? clipInfo.clip : currentClip;
        }

        float length = 1f;

        if (currentClip)
        {
            length = currentClip.length;
        }

        while (timer <= length)
        {
            timer += Time.deltaTime;
            _rectTransform.position = Vector3.Lerp(deckPos.position, drawPos.position, timer / length);
            yield return(new WaitForEndOfFrame());
        }
    }
    //DrawCard使用後に使う
    public IEnumerator IntoHand(GameFlowManager.TurnStatus turnStatus, bool isOpen)
    {
        //ドローが完了するまで待つ
        while (!_drawed)
        {
            yield return(new WaitForEndOfFrame());
        }
        _drawed = false;
        if (turnStatus == GameFlowManager.TurnStatus.PlayerTurn)
        {
            playerHand.Add(_nowDraw);
            playerHand.Sort(CardObjectManager.CompareCard);

            for (int i = 0; i < playerHand.Count; ++i)
            {
                playerHand[i].GetComponent <CardObject>().index = i;
            }
        }
        else
        {
            aiHand.Add(_nowDraw);
            aiHand.Sort(CardObjectManager.CompareCard);
            for (int i = 0; i < aiHand.Count; ++i)
            {
                aiHand[i].GetComponent <CardObject>().index = i;
            }
        }
        CardObject cardObj = _nowDraw.GetComponent <CardObject>();

        if (turnStatus == GameFlowManager.TurnStatus.PlayerTurn)
        {
            yield return(StartCoroutine(cardObj.IntoHand(drawedPos, playerHandPos, isOpen)));
        }
        else
        {
            yield return(StartCoroutine(cardObj.IntoHand(drawedPos, aiHandPos, isOpen)));
        }
        //位置を整理する
        if (turnStatus == GameFlowManager.TurnStatus.PlayerTurn)
        {
            foreach (var cgo in playerHand)
            {
                CardObject co      = cgo.GetComponent <CardObject>();
                float      opening = 0.001f;
                float      width   = cgo.GetComponent <RectTransform>().sizeDelta.x;
                Vector3    origin  = Vector3.zero;
                if (playerHand.Count % 2 == 0)
                {
                    //FIXME: Vector3.rightだとワールドのものが適用されているので危険
                    origin = playerHandPos.position + Vector3.left * (playerHand.Count / 2 * (width + opening) - width / 2f - opening / 2f);
                }
                else
                {
                    origin = playerHandPos.position + Vector3.left * (playerHand.Count / 2 * (width + opening));
                }
                origin.x /= 2f;
                StartCoroutine(co.MoveTo(origin + Vector3.right * (width / 2f + opening) * co.index));
            }
        }
        else
        {
            foreach (var cgo in aiHand)
            {
                CardObject co      = cgo.GetComponent <CardObject>();
                float      opening = 0.001f;
                float      width   = cgo.GetComponent <RectTransform>().sizeDelta.x;
                Vector3    origin  = Vector3.zero;
                if (aiHand.Count % 2 == 0)
                {
                    //FIXME: Vector3.rightだとワールドのものが適用されているので危険
                    origin = aiHandPos.position + Vector3.right * (aiHand.Count / 2 * (width + opening) - width / 2f - opening / 2f);
                }
                else
                {
                    origin = aiHandPos.position + Vector3.right * (aiHand.Count / 2 * (width + opening));
                }
                origin.x /= 2f;
                StartCoroutine(co.MoveTo(origin + Vector3.left * (width / 2f + opening) * co.index));
            }
        }
    }