75 lines
2.5 KiB
C#
75 lines
2.5 KiB
C#
using System;
|
||
using Sirenix.OdinInspector;
|
||
using UnityEngine;
|
||
|
||
namespace Ichni.Story
|
||
{
|
||
/// <summary>
|
||
/// StoryData 中声明的章节变量默认值类型。
|
||
/// 数值变量会保存为 float;Int 仅决定 Inspector 和读取接口的语义。
|
||
/// </summary>
|
||
public enum StoryVariableType
|
||
{
|
||
Bool,
|
||
Int,
|
||
Float,
|
||
String
|
||
}
|
||
|
||
/// <summary>
|
||
/// 一个章节变量的静态默认定义。
|
||
/// 默认值不写入玩家存档:当存档中没有同名覆盖值时,StoryVariables 才返回此处的配置。
|
||
/// 因此“重开章节”只要清空章节变量容器,便会自然回到该定义的初始状态。
|
||
/// </summary>
|
||
[Serializable]
|
||
[InlineProperty]
|
||
[HideReferenceObjectPicker]
|
||
public class StoryVariableDefinition
|
||
{
|
||
[HorizontalGroup("Variable", 0.55f)]
|
||
[LabelText("Key")]
|
||
[LabelWidth(28)]
|
||
[Tooltip("变量 Key:使用小写英文、数字和下划线,例如 c0_route_choice。不要使用 Yarn 的 $variable 语法。")]
|
||
public string key;
|
||
|
||
[HorizontalGroup("Variable", 0.18f)]
|
||
[LabelText("Type")]
|
||
[LabelWidth(32)]
|
||
[Tooltip("变量的默认值类型。运行时可由 Yarn 的 set_* 指令写入同名永久章节变量。")]
|
||
public StoryVariableType type;
|
||
|
||
[HorizontalGroup("Variable")]
|
||
[LabelText("Default")]
|
||
[LabelWidth(48)]
|
||
[ShowIf(nameof(IsBool))]
|
||
[Tooltip("变量尚未被玩家存档覆盖时使用的默认 Bool 值。")]
|
||
public bool boolValue;
|
||
|
||
[HorizontalGroup("Variable")]
|
||
[LabelText("Default")]
|
||
[LabelWidth(48)]
|
||
[ShowIf(nameof(IsInt))]
|
||
[Tooltip("变量尚未被玩家存档覆盖时使用的默认 Int 值。")]
|
||
public int intValue;
|
||
|
||
[HorizontalGroup("Variable")]
|
||
[LabelText("Default")]
|
||
[LabelWidth(48)]
|
||
[ShowIf(nameof(IsFloat))]
|
||
[Tooltip("变量尚未被玩家存档覆盖时使用的默认 Float 值。")]
|
||
public float floatValue;
|
||
|
||
[HorizontalGroup("Variable")]
|
||
[LabelText("Default")]
|
||
[LabelWidth(48)]
|
||
[ShowIf(nameof(IsString))]
|
||
[Tooltip("变量尚未被玩家存档覆盖时使用的默认 String 值。")]
|
||
public string stringValue;
|
||
|
||
private bool IsBool() => type == StoryVariableType.Bool;
|
||
private bool IsInt() => type == StoryVariableType.Int;
|
||
private bool IsFloat() => type == StoryVariableType.Float;
|
||
private bool IsString() => type == StoryVariableType.String;
|
||
}
|
||
}
|