private void _onCardDropFinished()
    {
        int handIndex     = _draggedIngredient.handIndex;
        int customerIndex = _droppedCustomer.cardState.slotIndex;

        _draggedIngredient = null;

        _playerHandView.RemoveCardByIndex(handIndex);

        Assert.IsNotNull(onResolveScore);
        bool customerFinished = onResolveScore(customerIndex);

        if (customerFinished)
        {
            _playfieldView.SetPlayerScore(activePlayer.index, activePlayer.score);
            CustomerCardState newState = _matchState.activeCustomerSet.GetCustomerByIndex(customerIndex);
            _setupCustomerView(customerIndex, newState);
        }

        _playerHandView.blockCardDrag = false;
        _isAnimating = false;

        if (_timerEndedTurn)
        {
            _endPlayerTurn(true);
            _timerEndedTurn = false;
        }
    }
    public void Start(GameMatchState matchState)
    {
        _matchState = matchState;

        _setupFX();

        _passController = new PassInterludeController();

        viewFactory.CreateAsync <PlayFieldView>("PlayFieldView", (_view) =>
        {
            _playfieldView = _view as PlayFieldView;
            view           = _view;

            _playfieldView.onIntroFinishedEvent += _playfieldView_OnIntroTransitionEvent;
            _playfieldView.confirmButton.onClick.AddListener(_onConfirmTurnButton);
            _playfieldView.undoButton.onClick.AddListener(_onUndoButton);
            _playfieldView.exitButton.onClick.AddListener(_onExitButton);

            _playfieldView.SetActivePlayer(activePlayer.index);

            for (int i = 0; i < _matchState.playerGroup.playerCount; ++i)
            {
                PlayerState player = _matchState.playerGroup.GetPlayerByIndex(i);
                _playfieldView.SetPlayerName(i, player.name);
                _playfieldView.SetPlayerScore(i, player.score);
            }

            _setupActiveCustomersView(_playfieldView.staticCardLayer);
            _createPlayerHandView(kLocalPlayerIndex, _playfieldView.staticCardLayer);
        });
    }
    public void Start(GameMatchState matchState)
    {
        _matchState = matchState;

        _setupFX();

        viewFactory.CreateAsync <PlayFieldView>("PlayFieldView", (_view) =>
        {
            _playfieldView = _view as PlayFieldView;
            view           = _view;

            _playfieldView.onIntroFinishedEvent += _playfieldView_OnIntroTransitionEvent;
            _playfieldView.confirmButton.onClick.AddListener(_onConfirmTurnButton);
            _playfieldView.undoButton.onClick.AddListener(_onUndoButton);
            _playfieldView.exitButton.onClick.AddListener(_onExitButton);

            _playfieldView.SetActivePlayer(activePlayer.index);

            if (_networkManager.isConnected)
            {
                _playfieldView.SetThisPlayer(PhotonNetwork.player.NickName);
            }

            for (int i = 0; i < _matchState.playerGroup.playerCount; ++i)
            {
                PlayerState player = _matchState.playerGroup.GetPlayerByIndex(i);
                _playfieldView.SetPlayerName(i, player.name);
                _playfieldView.SetPlayerScore(i, player.score);
            }

            _setupActiveCustomersView(_playfieldView.staticCardLayer);
            _createPlayerHandView(localPlayer.index, _playfieldView.staticCardLayer);

            //_shockClockController = new ShockClockController();
            //_shockClockController.Start(10.0, PhotonNetwork.time, onTimerCallback);
            viewFactory.CreateAsync <ShockClockView>("ShockClockView", (clock) =>
            {
                _shockClockView           = clock as ShockClockView;
                _shockClockView.timerText = "10";
            }, _playfieldView.staticCardLayer);
        });
    }