Exemplo n.º 1
0
Arquivo: Mob.cs Projeto: misoten8/Mock
    private void OnTriggerStay(Collider other)
    {
        if (other.tag != "DanceRange")
        {
            return;
        }

        // 既に他のプレイヤーのダンスを視聴している場合無視する
        if (_isViewingInDance)
        {
            return;
        }

        Dance playerDance = other.gameObject.GetComponent <Dance>();

        // プレイヤーがダンス中であれば、視聴する
        if (playerDance.IsPlaying)
        {
            Debug.Log(_instanceID.ToString() + "番のモブは視聴するドン!");
            // モブ停止イベント実行
            onDanceWatchMob?.Invoke();

            // ダンス視聴中エフェクト再生
            _danceNowEffect = ParticleManager.Play("DanceNow", new Vector3(), transform);

            _isViewingInDance = true;

            // ダンス終了イベントにメソッドを登録する
            playerDance.onEndDance += (isCancel, isSuccess) =>
            {
                _isViewingInDance = false;

                if (!isCancel)
                {
                    // モブキャラ管理クラスにスコア変更を通知
                    _mobManager.OnScoreChange();

                    // ファンタイプが変更したかチェックする
                    Define.PlayerType newFunType = isSuccess ? playerDance.Player.Type : Define.PlayerType.None;
                    if (_funType != newFunType)
                    {
                        // ファンタイプの更新
                        _funType = newFunType;

                        // 推しているプレイヤーの更新
                        _funPlayer = playerDance.Player;

                        // 追従対象の更新
                        _fllowTarget = playerDance.PlayerType;

                        // アウトラインの更新
                        _meshRenderer.materials[1].color = playerDance.Player.PlayerColor;
                    }
                }

                // プレイヤーが客引き状態の場合、追従判定を行う
                if (_mobManager.GetFunCount(_fllowTarget) < _mobManager.GetFunCount(playerDance.PlayerType) ||
                    _fllowTarget == Define.PlayerType.None)
                {
                    if (FunType == Define.PlayerType.None)
                    {
                        // 追従対象の更新
                        _fllowTarget = playerDance.PlayerType;
                    }
                }

                // モブ再生イベント実行
                onMoveMob?.Invoke();

                Destroy(_danceNowEffect);
            };
        }
        else
        {
            // プレイヤーが客引き状態の場合、追従判定を行う
            if (_mobManager.GetFunCount(_fllowTarget) < _mobManager.GetFunCount(playerDance.PlayerType) ||
                _fllowTarget == Define.PlayerType.None)
            {
                if (FunType != Define.PlayerType.None)
                {
                    return;
                }
                _fllowTarget = playerDance.PlayerType;
                onChangeFllowPlayer?.Invoke();
            }
        }
    }