Files
ichni_Official/Assets/Scripts/Story/Dialog/StoryInterpreters.cs

88 lines
3.3 KiB
C#
Raw Normal View History

2025-06-06 10:14:55 -04:00
using System;
using DynamicExpresso;
using Ichni.Story;
2025-06-13 14:59:58 -04:00
using Ichni.Story.UI;
2025-06-06 10:14:55 -04:00
using UnityEngine;
namespace Ichni.Story
{
public static partial class StoryInterpreters
{
public static readonly Interpreter FunctionInterpreter;
public static readonly Interpreter ConditionInterpreter;
static StoryInterpreters()
{
FunctionInterpreter = new Interpreter();
ConditionInterpreter = new Interpreter();
SetFunctionInterpreter();
SetConditionInterpreter();
}
static void SetFunctionInterpreter()
{
2025-06-13 14:59:58 -04:00
FunctionInterpreter.SetFunction("SetVariable", new Action<string, int>(SetStoryVariable));
FunctionInterpreter.SetFunction("GetVariable", new Func<string, int>(GetStoryVariable));
FunctionInterpreter.SetFunction("GenerateDialogBlock", new Action<string>(GenerateDialogBlock));
FunctionInterpreter.SetFunction("GenerateSongBlock", new Action<string>(GenerateSongBlock));
2025-07-26 04:20:25 -04:00
FunctionInterpreter.SetFunction("SetUnlockKey", new Action<string>(SetUnlockKey));
2025-06-06 10:14:55 -04:00
}
static void SetConditionInterpreter()
{
2025-06-13 14:59:58 -04:00
ConditionInterpreter.SetFunction("GetVariable", new Func<string, int>(GetStoryVariable));
2025-06-06 10:14:55 -04:00
}
}
public static partial class StoryInterpreters
{
2025-06-13 14:59:58 -04:00
/// <summary>
/// 设置全局变量的值
/// </summary>
static void SetStoryVariable(string variableName, int value)
{
GameSaveManager.instance.StorySaveModule.storyVariables[variableName] = value;
}
2025-06-06 10:14:55 -04:00
/// <summary>
/// 获取全局变量的值
/// </summary>
2025-06-13 14:59:58 -04:00
static int GetStoryVariable(string variableName)
2025-06-06 10:14:55 -04:00
{
2025-06-13 14:59:58 -04:00
if (GameSaveManager.instance.StorySaveModule.storyVariables.TryGetValue(variableName, out int value))
2025-06-06 10:14:55 -04:00
{
return value;
}
throw new ArgumentException($"Global variable '{variableName}' not found.");
}
}
2025-06-13 14:59:58 -04:00
public static partial class StoryInterpreters
{
static void GenerateDialogBlock(string blockName)
{
StoryBlockUIBase currentBlock = StoryManager.instance.storyline.currentBlock;
Vector2 positionOffset = new Vector2(500, 0);
DialogBlockUI newBlock = StoryManager.instance.storyline.GenerateDialogBlock(blockName, currentBlock.blockPosition + positionOffset, StoryBlockState.Current);
StoryManager.instance.storyline.GenerateConnector(currentBlock, newBlock);
}
static void GenerateSongBlock(string blockName)
{
StoryBlockUIBase currentBlock = StoryManager.instance.storyline.currentBlock;
Vector2 positionOffset = new Vector2(500, 0);
SongBlockUI newBlock = StoryManager.instance.storyline.GenerateSongBlock(blockName, currentBlock.blockPosition + positionOffset, StoryBlockState.Current);
StoryManager.instance.storyline.GenerateConnector(currentBlock, newBlock);
}
2025-07-26 04:20:25 -04:00
static void SetUnlockKey(string key)
{
if (GameSaveManager.instance.SongSaveModule.unlockKeys.Add(key))
{
GameSaveManager.instance.SongSaveModule.SaveUnlockKeys();
}
}
2025-06-13 14:59:58 -04:00
}
2025-06-06 10:14:55 -04:00
}