public override async UniTask ExecuteAsync(CancellationToken cancellationToken = default) { var printer = await GetOrAddPrinterAsync(); if (cancellationToken.IsCancellationRequested) { return; } var printerMeta = PrinterManager.Configuration.GetMetadataOrDefault(printer.Id); if (!printer.Visible) { var showDuration = Assigned(ChangeVisibilityDuration) ? ChangeVisibilityDuration.Value : printerMeta.ChangeVisibilityDuration; printer.ChangeVisibilityAsync(true, showDuration).Forget(); } if ((!Assigned(DefaultPrinter) && printerMeta.AutoDefault) || (Assigned(DefaultPrinter) && DefaultPrinter.Value)) { if (PrinterManager.DefaultPrinterId != printer.Id) { PrinterManager.DefaultPrinterId = printer.Id; } foreach (var otherPrinter in PrinterManager.GetAllActors()) { if (otherPrinter.Id != printer.Id && otherPrinter.Visible) { var otherPrinterMeta = PrinterManager.Configuration.GetMetadataOrDefault(otherPrinter.Id); var otherPrinterHideDuration = Assigned(ChangeVisibilityDuration) ? ChangeVisibilityDuration.Value : otherPrinterMeta.ChangeVisibilityDuration; otherPrinter.ChangeVisibilityAsync(false, otherPrinterHideDuration).Forget(); } } } if (PlayAutoVoice) { if (AudioManager.Configuration.VoiceOverlapPolicy == VoiceOverlapPolicy.PreventCharacterOverlap && printer.AuthorId == AuthorId && !string.IsNullOrEmpty(AudioManager.GetPlayedVoicePath())) { AudioManager.StopVoice(); } AudioManager.PlayVoiceAsync(AutoVoicePath).Forget(); } var shouldReset = (!Assigned(ResetPrinter) && printerMeta.AutoReset) || (Assigned(ResetPrinter) && ResetPrinter.Value); var shouldAddBacklog = shouldReset || string.IsNullOrEmpty(printer.Text); if (shouldReset) { printer.Text = string.Empty; printer.RevealProgress = 0f; } if ((Assigned(LineBreaks) && LineBreaks > 0) || (!Assigned(LineBreaks) && printerMeta.AutoLineBreak > 0 && !string.IsNullOrWhiteSpace(printer.Text))) { await new AppendLineBreak { PrinterId = printer.Id, AuthorId = AuthorId, Count = Assigned(LineBreaks) ? LineBreaks.Value : printerMeta.AutoLineBreak } }
public override async UniTask ExecuteAsync(CancellationToken cancellationToken = default) { if (MakeDefault && !string.IsNullOrEmpty(AssignedPrinterId)) { PrinterManager.DefaultPrinterId = AssignedPrinterId; } if (HideOther) { foreach (var prntr in PrinterManager.GetAllActors()) { if (prntr.Id != (AssignedPrinterId ?? PrinterManager.DefaultPrinterId) && prntr.Visible) { prntr.ChangeVisibilityAsync(false, Duration).Forget(); } } } var printer = default(ITextPrinterActor); var appearance = Assigned(IdAndAppearance) ? IdAndAppearance.NamedValue : null; if (!string.IsNullOrEmpty(appearance)) { if (printer is null) { printer = await GetOrAddPrinterAsync(); } await printer.ChangeAppearanceAsync(appearance, Duration, cancellationToken : cancellationToken); } if (Assigned(ScenePosition)) { if (printer is null) { printer = await GetOrAddPrinterAsync(); } var position = new Vector3( ScenePosition.ElementAtOrNull(0) != null ? ScenePosition[0].Value / 100f : printer.Position.x, ScenePosition.ElementAtOrNull(1) != null ? ScenePosition[1].Value / 100f : printer.Position.y, ScenePosition.ElementAtOrNull(2) ?? printer.Position.z ); await printer.ChangePositionAsync(position, Duration, cancellationToken : cancellationToken); } if (Assigned(Visible) || Configuration.AutoShowOnModify) { if (printer is null) { printer = await GetOrAddPrinterAsync(); } await printer.ChangeVisibilityAsync(Visible, Duration, cancellationToken : cancellationToken); } }
private void SetDefaultPrinter(ITextPrinterActor defaultPrinter, CancellationToken cancellationToken) { if (PrinterManager.DefaultPrinterId != defaultPrinter.Id) { PrinterManager.DefaultPrinterId = defaultPrinter.Id; } foreach (var printer in PrinterManager.GetAllActors()) { if (printer.Id != defaultPrinter.Id && printer.Visible) { HideOtherPrinter(printer); } } void HideOtherPrinter(ITextPrinterActor other) { var otherMeta = PrinterManager.Configuration.GetMetadataOrDefault(other.Id); var otherHideDuration = Assigned(ChangeVisibilityDuration) ? ChangeVisibilityDuration.Value : otherMeta.ChangeVisibilityDuration; other.ChangeVisibilityAsync(false, otherHideDuration, cancellationToken: cancellationToken).Forget(); } }