コード例 #1
0
        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
                }
            }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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();
            }
        }