Code/Systems/Effects/Effects.cs
using System;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace VNBase;
/// <summary>
/// Contains all the base effects that can be used.
/// </summary>
public static class Effects
{
public interface ITextEffect
{
public Task<bool> Play( string text, int delay, Action<string> callback, CancellationToken cancellationToken );
}
/// <summary>
/// A simple typewriter effect.
/// </summary>
public class Typewriter : ITextEffect
{
public async Task<bool> Play( string text, int delay, Action<string> callback, CancellationToken cancellationToken )
{
var newText = new StringBuilder();
foreach ( var character in text )
{
if ( cancellationToken.IsCancellationRequested )
{
return false;
}
newText.Append( character );
callback( newText.ToString() );
await Task.Delay( delay, cancellationToken );
}
return true;
}
}
}