Dialog_SO.cs 1.8 KB
Newer Older
秃头给你一拳's avatar
秃头给你一拳 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 对话数据文件。(数据库表的定义)
/// </summary>
[CreateAssetMenu(menuName = "SO_Datas/Dialog_SO")]
public class Dialog_SO : ScriptableObject
{
    public List<SingleDialog> dialogList = new List<SingleDialog>();
}


//=================================================================


/// <summary>
/// 单项对话,包含对话框内文本,和玩家可选择的选项
/// </summary>
[System.Serializable]
public class SingleDialog
{
    [TextArea] public string dialogText;

    public RequireClass requireMent;//进入该对话需满足的条件

    public SingleDialogSelection[] dialogSelections;
}

/// <summary>
/// 单个玩家可选的对话选项。包含文本和点击后跳转至的下一项对话的索引
/// </summary>
[System.Serializable]
public class SingleDialogSelection : IInteraction
{
    [Tooltip("选项文本")]
    public string text;
    [Tooltip("下一项对话的可选下标集合,按顺序选择第一个满足条件的,若为空或选不到满足条件的则为退出")]
    public int[] nextDialogIndexes;
    [Tooltip("点击该选项后产生的影响效果")]
    public List<ImpactValue> impacts = new List<ImpactValue>();

    #region 实现接口
    public string SelectionText { get { return text; } set { text = value; } }

    //重要!
    public void DoInteract(PlayerManager playerManager)
    {
        //实现效果
        foreach (var item in impacts)
        {
            IImpactEffect.Execute(item);
        }
        /*对话跳转
        if (nextDialogIndex != -1)
        {
            UIManager.GetInstance().dialogPanel.StartADialog(nextDialogIndex);
        }
        else
        {
            UIManager.GetInstance().dialogPanel.EndDialog();
        }*/
        //交给那边的方法去判断处理
        UIManager.GetInstance().dialogPanel.HandleNextDialog(nextDialogIndexes);


    }
    #endregion
}