79 lines
2.9 KiB
C#
79 lines
2.9 KiB
C#
using System;
|
|
using DynamicExpresso;
|
|
using Ichni.Story;
|
|
using Ichni.Story.UI;
|
|
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()
|
|
{
|
|
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));
|
|
}
|
|
|
|
static void SetConditionInterpreter()
|
|
{
|
|
ConditionInterpreter.SetFunction("GetVariable", new Func<string, int>(GetStoryVariable));
|
|
}
|
|
}
|
|
|
|
public static partial class StoryInterpreters
|
|
{
|
|
/// <summary>
|
|
/// 设置全局变量的值
|
|
/// </summary>
|
|
static void SetStoryVariable(string variableName, int value)
|
|
{
|
|
GameSaveManager.instance.StorySaveModule.storyVariables[variableName] = value;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取全局变量的值
|
|
/// </summary>
|
|
static int GetStoryVariable(string variableName)
|
|
{
|
|
if (GameSaveManager.instance.StorySaveModule.storyVariables.TryGetValue(variableName, out int value))
|
|
{
|
|
return value;
|
|
}
|
|
|
|
throw new ArgumentException($"Global variable '{variableName}' not found.");
|
|
}
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
} |