69 lines
1.6 KiB
C#
69 lines
1.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using Yarn.Unity;
|
|
|
|
namespace AibisDream
|
|
{
|
|
[Serializable]
|
|
public class SceneExit
|
|
{
|
|
[Tooltip("出口名称,用于Yarn命令指定跳转目标,如 good_end / bad_end / default")]
|
|
public string exitName;
|
|
|
|
public TalkSceneSO targetScene;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 章节类型数据
|
|
/// </summary>
|
|
[CreateAssetMenu(menuName = AibisAssetMenus.NarrativeTalkScene)]
|
|
public class TalkSceneSO : ScriptableObject
|
|
{
|
|
private const string DEFAULT_EXIT_NAME = "default";
|
|
|
|
public List<SceneExit> exits = new();
|
|
|
|
public YarnProject yarnProject;
|
|
|
|
public string firstSceneName;
|
|
|
|
#region 用于显示的字段
|
|
|
|
public string title;
|
|
|
|
[Tooltip("章节面板显示用本地化 Key,对应 ChapterInfo 表条目;为空则回退 title")]
|
|
public string titleKey;
|
|
|
|
public string description;
|
|
public Sprite coverPic;
|
|
public string chapter;
|
|
|
|
#endregion
|
|
|
|
#region 仅编辑器使用
|
|
|
|
[HideInInspector] public Vector2 graphPosition;
|
|
public Color nodeColor = new(0.85f, 0.45f, 0.45f);
|
|
|
|
#endregion
|
|
|
|
public TalkSceneSO GetNextScene(string exitName = null)
|
|
{
|
|
if (exits == null || exits.Count == 0)
|
|
return null;
|
|
|
|
if (string.IsNullOrEmpty(exitName))
|
|
exitName = DEFAULT_EXIT_NAME;
|
|
|
|
foreach (var exit in exits)
|
|
{
|
|
if (exit.exitName == exitName)
|
|
return exit.targetScene;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
}
|