Beispiel #1
0
    /// <summary>
    /// アイテム獲得
    /// </summary>
    /// <param name="eventData"></param>
    private IEnumerator GetEventItems(EventData.EventDataDetail eventDataDetail)
    {
        // 獲得したアイテムの種類分だけ繰り返す
        for (int i = 0; i < eventDataDetail.eventItemNames.Length; i++)
        {
            bool isClick = false;

            // 獲得した種類で分岐
            if (eventDataDetail.eventItemNames[i] == ItemName.お金)
            {
                txtDialog.DOText(eventDataDetail.eventItemNames[i].ToString() + " × " + eventDataDetail.eventItemCounts[i] + "ゴールド獲得", 1.0f).SetEase(Ease.Linear).OnComplete(() => { isClick = true; });

                // お金の加算処理
                GameData.instance.CalculateMoney(eventDataDetail.eventItemCounts[i]);
            }
            else if (eventDataDetail.eventItemNames[i] == ItemName.経験値)
            {
                // TODO 経験値の加算処理
            }
            else
            {
                // 獲得したアイテムの名前と数を表示(文字が全部表示されたら)
                txtDialog.DOText(eventDataDetail.eventItemNames[i].ToString() + " × " + eventDataDetail.eventItemCounts[i] + "獲得", 1.0f).SetEase(Ease.Linear).OnComplete(() => { isClick = true; });

                // アイテム獲得
                GameData.instance.AddItemInventryData(eventDataDetail.eventItemNames[i], eventDataDetail.eventItemCounts[i]);
            }

            // アクションボタンが押されて、かつ文字が全部表示されたら次のメッセージ表示
            yield return(new WaitUntil(() => Input.GetButtonDown("Action") && isClick));

            txtDialog.text = "";
            yield return(null);
        }

        isTalk = false;
    }
Beispiel #2
0
    /// <summary>
    /// ダイアログの表示
    /// </summary>
    public IEnumerator DisplayDialog(EventData eventData, NonPlayerCharacter nonPlayerCharacter)
    {
        if (this.nonPlayerCharacter == null)
        {
             
            this.nonPlayerCharacter = nonPlayerCharacter;
        }

        if (this.eventData == null)
        {
            this.eventData = eventData;
        }

        canvasGroup.DOFade(1.0f, 0.5f);      // フェードイン 0.5秒かけて透明度を1に

        txtTitleName.text = this.eventData.title;

        // 会話イベント開始
        isTalk = true;

        // ノーマル会話イベントの場合(進行形でない)
        if (this.eventData.eventDataDetailsList.Exists(x => x.eventProgressType == EventProgressType.None))
        {
            // TODO 画像データがある場合
            // Image型の変数を宣言フィールドで用意しておいて、EventDataDetailクラスにあるeventSpriteを代入する

            // メッセージを表示
            yield return(StartCoroutine(PlayTalkEventProgress(this.eventData.eventDataDetailsList.Find(x => x.eventProgressType == EventProgressType.None).dialogs)));

            // 進行型の会話イベントの場合
        }
        else
        {
            // 会話イベントをクリア済みか確認
            if (GameData.instance.CheckClearTalkEventNum(this.eventData.no))
            {
                // TODO 画像

                // クリア後の会話イベント
                yield return(StartCoroutine(PlayTalkEventProgress(this.eventData.eventDataDetailsList.Find(x => x.eventProgressType == EventProgressType.Cleard).dialogs)));
            }
            // まだクリアしていない場合
            else
            {
                // イベントの種類を特定
                // 消費するタイプか、持っているだけでよいタイプか判定するために、EventDataDetailを取得
                EventData.EventDataDetail talkEventDataDetail = this.eventData.eventDataDetailsList.Find(x => (x.eventProgressType == EventProgressType.Need || x.eventProgressType == EventProgressType.Permission));

                // 初めての会話の場合(会話数が0の場合)
                if (currentTalkCount == 0)
                {
                    // TODO 画像

                    // クリア前の会話イベント
                    yield return(StartCoroutine(PlayTalkEventProgress(talkEventDataDetail.dialogs)));

                    currentTalkCount++; // 会話数を増やす +1

                    // 2回目以降の場合
                }
                else
                {
                    // 会話イベントを達成しているかどうか判定する(最初はfalse)
                    bool isNeedItems = false;

                    // 必要なアイテムを持っているかどうかを1つずつ確認
                    for (int i = 0; i < talkEventDataDetail.eventItemNames.Length; i++)
                    {
                        // 条件をクリアしていない場合
                        if (!GameData.instance.CheckTalkEventItemFromItemInvenry(talkEventDataDetail.eventItemNames[i], talkEventDataDetail.eventItemCounts[i]))
                        {
                            // チェックを終了して、持っていない判定にする
                            break;
                        }
                        else
                        {
                            // 条件をクリアしている場合、かつ最後の確認
                            if (i == talkEventDataDetail.eventItemNames.Length - 1)
                            {
                                // クリアに必要なすべてのアイテムを持っている判定にする
                                isNeedItems = true;
                            }
                        }
                    }

                    // クリアアイテムが必要数だけあるか確認
                    if (isNeedItems)
                    {
                        // すべて揃っていればクリア判定し、会話イベントを進める
                        // 初回クリアなら
                        if (!GameData.instance.CheckClearTalkEventNum(this.eventData.no))
                        {
                            // TODO 画像

                            // クリア達成時の会話イベント
                            yield return(StartCoroutine(PlayTalkEventProgress(this.eventData.eventDataDetailsList.Find(x => x.eventProgressType == EventProgressType.Get).dialogs)));

                            // アイテム獲得
                            yield return(StartCoroutine(GetEventItems(this.eventData.eventDataDetailsList.Find(x => x.eventProgressType == EventProgressType.Get))));

                            // 会話イベントのクリア状態を保存
                            GameData.instance.AddClearTalkEventNum(this.eventData.no);

                            // アイテムを消耗するイベントの場合
                            if (talkEventDataDetail.eventProgressType == EventProgressType.Need)
                            {
                                // 消耗対象をすべて確認
                                for (int i = 0; i < talkEventDataDetail.eventItemNames.Length; i++)
                                {
                                    // TODO 分岐を作成し、お金か、アイテムを減算するようにする
                                    if (talkEventDataDetail.eventItemNames[i] == ItemName.お金)
                                    {
                                        // お金を減算
                                        GameData.instance.CalculateMoney(-talkEventDataDetail.eventItemCounts[i]);
                                    }
                                    else
                                    {
                                        // アイテムを減算
                                        GameData.instance.RemoveItemInventryData(talkEventDataDetail.eventItemNames[i], talkEventDataDetail.eventItemCounts[i]);
                                    }
                                }
                            }

                            // クリアした会話イベントをセーブ
                            GameData.instance.SaveClearTalkEventNum(this.eventData.no);

                            // インベントリの状態をセーブ
                            GameData.instance.SaveItemInventryDatas();

                            // TODO お金や経験値のセーブ
                        }

                        // クリアアイテムがない場合
                    }
                    else
                    {
                        // TODO 画像

                        // クリア前の会話イベント
                        yield return(StartCoroutine(PlayTalkEventProgress(talkEventDataDetail.dialogs)));
                    }
                }
            }
        }

        // 会話イベント終了
        isTalk = false;

        // Dialog を閉じる
        nonPlayerCharacter.StopTalk();

        // 1ページだけのとき用
        // 1文字ずつ表示する(表示間隔を一定にする)
        // txtDialog.DOText(this.eventData.dialog, 1.0f).SetEase(Ease.Linear);

        // TODO 画像データ Image型の変数にeventData.eventSpriteを代入
    }