diff --git a/src/YarnSpinner.Console/Commands/RunCommand.cs b/src/YarnSpinner.Console/Commands/RunCommand.cs index bec51ae..bf6f3c7 100644 --- a/src/YarnSpinner.Console/Commands/RunCommand.cs +++ b/src/YarnSpinner.Console/Commands/RunCommand.cs @@ -3,7 +3,8 @@ namespace YarnSpinnerConsole using System; using System.IO; using System.Linq; - + using Yarn; + public static class RunCommand { public static void RunFiles(FileInfo[] inputs, string startNode, bool autoAdvance) @@ -38,6 +39,24 @@ string TextForLine(string lineID) LogErrorMessage = (m) => Log.Error(m), }; + dialogue.Library.RegisterFunction("visited", (string nodeName) => + { + var visitedCountVariableName = Library.GenerateUniqueVisitedVariableForNode(nodeName); + + return storage.TryGetValue(visitedCountVariableName, out var count) + ? count > 0 + : false; + }); + + dialogue.Library.RegisterFunction("visited_count", (string nodeName) => + { + var visitedCountVariableName = Library.GenerateUniqueVisitedVariableForNode(nodeName); + + return storage.TryGetValue(visitedCountVariableName, out var count) + ? count + : 0; + }); + dialogue.SetProgram(program); dialogue.SetNode(startNode); diff --git a/src/YarnSpinner.Console/YarnSpinnerConsole.cs b/src/YarnSpinner.Console/YarnSpinnerConsole.cs index 22496c8..51a4430 100644 --- a/src/YarnSpinner.Console/YarnSpinnerConsole.cs +++ b/src/YarnSpinner.Console/YarnSpinnerConsole.cs @@ -277,6 +277,30 @@ public static CompilationResult CompileProgram(FileInfo[] inputs) var compilationJob = CompilationJob.CreateFromFiles(inputs.Select(fileInfo => fileInfo.FullName)); + // Declare the existence of 'visited' and 'visited_count' + var visitedDecl = new DeclarationBuilder() + .WithName("visited") + .WithType( + new FunctionTypeBuilder() + .WithParameter(Yarn.Types.String) + .WithReturnType(Yarn.Types.Boolean) + .FunctionType) + .Declaration; + + var visitedCountDecl = new DeclarationBuilder() + .WithName("visited_count") + .WithType( + new FunctionTypeBuilder() + .WithParameter(Yarn.Types.String) + .WithReturnType(Yarn.Types.Number) + .FunctionType) + .Declaration; + + compilationJob.VariableDeclarations = (compilationJob.VariableDeclarations ?? Array.Empty()).Concat(new[] { + visitedDecl, + visitedCountDecl, + }); + CompilationResult compilationResult; try