public static CodeSnippetStatement AddInteraction(this CodeStatementCollection statements, string sceneName, string interactionName, CodeMethodInvokeExpression method, bool whenCandidate = false) { if (whenCandidate) { var snippet = new CodeSnippetStatement( $"\t\t\tcase \"{interactionName}\" when Navigation.IsCandidate(request,\"{interactionName}\"):"); statements.AddBeforeReturn(snippet, method, new CodeSnippetExpression("\t\t\tbreak") ); return(snippet); } else { var snippet = new CodeSnippetStatement($"\t\t\tcase \"{interactionName}\":"); statements.AddBeforeReturn( snippet, CodeGeneration_Navigation.NotTrackedSceneNames.SelectMany(s => new[] { s, CodeGeneration_Scene.SceneClassName(s) }).Contains(sceneName) ? null : new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("Navigation"), "ClearCandidates", CodeConstants.RequestVariableRef), method, new CodeSnippetExpression("\t\t\tbreak") ); return(snippet); } }
private static void AddFallback(CodeStatementCollection newStatements) { newStatements.AddBeforeReturn(new CodeConditionStatement( new CodeBinaryOperatorExpression(new CodeVariableReferenceExpression("handled"), CodeBinaryOperatorType.ValueEquality, new CodePrimitiveExpression(false)), new CodeExpressionStatement(new CodeMethodInvokeExpression( new CodeTypeReferenceExpression("await Output"), "Fallback", new CodeVariableReferenceExpression("request"))))); }