Exemplo n.º 1
0
        private IDialog createQuestionsDialog(IGameFactory factory)
        {
            IDialogOption option1 = factory.Dialog.GetDialogOption("Where are you from?");

            option1.AddText(Characters.Beman, "I'm from Sweden.");

            IDialogOption option2 = factory.Dialog.GetDialogOption("What do you do?");

            option2.AddText(Characters.Beman, "I'm a hobbyist game developer.");

            IDialogOption option3 = factory.Dialog.GetDialogOption("Can I start a scene?");

            option3.ExitDialogWhenFinished = true;
            option3.AddText(Characters.Beman, "Go for it, though remember that the user can skip the scene by pressing any key on the keyboard");
            option3.AddAsyncConditionalActions(startAScene);

            IDialogOption option4 = factory.Dialog.GetDialogOption("That's all I have...");

            option4.ChangeDialogWhenFinished = StartDialog;

            IDialog dialog = factory.Dialog.GetDialog("Dialog: Beman- Questions");

            dialog.AddOptions(option1, option2, option3, option4);

            return(dialog);
        }
Exemplo n.º 2
0
        public IDialogOption GetDialogOption(string text, ITextConfig config = null, ITextConfig hoverConfig = null,
                                             ITextConfig hasBeenChosenConfig = null, bool speakOption        = true, bool showOnce = false)
        {
            var game = _resolver.Container.Resolve <IGame>();

            config              = config ?? _defaults.Idle;
            hoverConfig         = hoverConfig ?? _defaults.Hovered;
            hasBeenChosenConfig = hasBeenChosenConfig ?? _defaults.Chosen;
            ILabel label = _ui.GetLabel($"Dialog option: {text}", text, game.Settings.VirtualResolution.Width, 20f, 0f, 0f,
                                        config: config, addToUi: false);

            label.RenderLayer = _defaults.RenderLayer;
            label.Enabled     = true;
            TypedParameter labelParam         = new TypedParameter(typeof(ILabel), label);
            NamedParameter speakParam         = new NamedParameter("speakOption", speakOption);
            NamedParameter showOnceParam      = new NamedParameter("showOnce", showOnce);
            NamedParameter hoverParam         = new NamedParameter("hoverConfig", hoverConfig);
            NamedParameter wasChosenParam     = new NamedParameter("hasBeenChosenConfig", hasBeenChosenConfig);
            TypedParameter playerParam        = new TypedParameter(typeof(ICharacter), _gameState.Player);
            IDialogActions dialogActions      = _resolver.Container.Resolve <IDialogActions>(playerParam);
            TypedParameter dialogActionsParam = new TypedParameter(typeof(IDialogActions), dialogActions);
            IDialogOption  option             = _resolver.Container.Resolve <IDialogOption>(labelParam, speakParam, showOnceParam, hoverParam,
                                                                                            wasChosenParam, playerParam, dialogActionsParam);

            return(option);
        }
Exemplo n.º 3
0
        private void createStartDialog(IGameFactory factory, IDialog questionsDialog, IDialog shadersDialog)
        {
            StartDialog.StartupActions.AddPlayerText("Hello there!");
            StartDialog.StartupActions.AddText(Characters.Beman, "Hello yourself!");
            StartDialog.StartupActions.AddConditionalActions(() => Repeat.OnceOnly("BemanStartDialog"));
            StartDialog.StartupActions.AddText(Characters.Beman, "God, that's a relief.", "It's good to see I'm not alone in this place.");

            IDialogOption option1 = factory.Dialog.GetDialogOption("Who are you?", showOnce: true);

            option1.AddText(Characters.Beman, "I am Beman, and you are?");
            option1.AddPlayerText("I am Cris.");

            IDialogOption option2 = factory.Dialog.GetDialogOption("What is this place?");

            option2.AddText(Characters.Beman, "I have no idea. I just woke up here.");
            option2.AddPlayerText("Wow, seems like we share a similar story.");

            IDialogOption option3 = factory.Dialog.GetDialogOption("Tell me a little bit about yourself.", speakOption: false);

            option3.AddText(Characters.Beman, "What do you want to know?");
            option3.ChangeDialogWhenFinished = questionsDialog;

            IDialogOption option4 = factory.Dialog.GetDialogOption("Can I set a shader?");

            option4.AddText(Characters.Beman, "Sure, choose a shader...");
            option4.ChangeDialogWhenFinished = shadersDialog;

            IDialogOption option5 = factory.Dialog.GetDialogOption("I'll be going now.");

            option5.AddText(Characters.Beman, "Ok, see you around.");
            option5.ExitDialogWhenFinished = true;

            StartDialog.AddOptions(option1, option2, option3, option4, option5);
        }
Exemplo n.º 4
0
        private IDialog createShadersDialog(IGameFactory factory)
        {
            IDialogOption option1 = factory.Dialog.GetDialogOption("Normal");
            IDialogOption option2 = factory.Dialog.GetDialogOption("Grayscale");
            IDialogOption option3 = factory.Dialog.GetDialogOption("Sepia");
            IDialogOption option4 = factory.Dialog.GetDialogOption("Soft Sepia");
            IDialogOption option5 = factory.Dialog.GetDialogOption("Vignette");
            IDialogOption option6 = factory.Dialog.GetDialogOption("Blur me!");
            IDialogOption option7 = factory.Dialog.GetDialogOption("Shake the screen!");
            IDialogOption option8 = factory.Dialog.GetDialogOption("Actually, I don't want a shader!");

            setShaderOption(option1, () => Shaders.SetStandardShader());
            setShaderOption(option2, () => Shaders.SetGrayscaleShader());
            setShaderOption(option3, () => Shaders.SetSepiaShader());
            setShaderOption(option4, () => Shaders.SetSoftSepiaShader());
            setShaderOption(option5, () => Shaders.SetVignetteShader());
            setShaderOption(option6, () => Shaders.SetBlurShader());
            setShaderOption(option7, () => Shaders.SetShakeShader());
            setShaderOption(option8, () => Shaders.TurnOffShader());

            IDialog dialog = factory.Dialog.GetDialog("Dialog: Beman- Shaders");

            dialog.AddOptions(option1, option2, option3, option4, option5, option6, option7, option8);

            return(dialog);
        }
Exemplo n.º 5
0
        public async Task LayoutAsync(IObject dialogGraphics, IList <IDialogOption> options)
        {
            float y = 0f;

            for (int index = options.Count - 1; index >= 0; index--)
            {
                IDialogOption option = options[index];
                _game.State.UI.Add(option.Label);
                if (!option.Label.Visible)
                {
                    continue;
                }
                option.Label.Y = y;

                int retries = 1000;
                while (option.Label.TextHeight <= 5f && retries > 0)
                {
                    await Task.Delay(1); //todo: find a better way (we need to wait at least one render loop for the text height to be correct)

                    retries--;
                }
                y += option.Label.TextHeight;
            }
            if (dialogGraphics.Image == null)
            {
                dialogGraphics.Image = new EmptyImage(_game.Settings.VirtualResolution.Width, y);
            }

            dialogGraphics.Animation.Sprite.ScaleTo(_game.Settings.VirtualResolution.Width, y);
        }
Exemplo n.º 6
0
        private void CreateDataWindowButtonForDialog(IDialogOption option)
        {
            DataWindowButton btn = null;

            if (option.IsApplyBehavior)
            {
                btn = DataWindowButton.FromAsync(option.Caption, async() => await OnApplyExecuteAsync(), OnApplyCanExecute);

                btn.IsDefault = option.IsDefault;
            }

            if (option.IsOkBehavior)
            {
                btn = DataWindowButton.FromAsync(option.Caption, async() => await OnOkExecuteAsync(), OnOkCanExecute);

                btn.IsDefault = option.IsDefault;
            }

            if (option.IsCancelBehavior)
            {
                btn          = DataWindowButton.FromAsync(option.Caption, async() => await OnCancelExecuteAsync(), OnCancelCanExecute);
                btn.IsCancel = true;
            }

            AddCustomButton(btn);
        }
        //Main Method
        /// <summary>
        /// </summary>
        /// <param name="parentViewModel"></param>
        /// <param name="dialogOption"></param>
        /// <param name="dialogCallback"></param>
        public void ShowDialog(object parentViewModel, IDialogOption dialogOption,
                               Action <IDialogResult> dialogCallback = null)
        {
            Guard.ArgumentIsNotNull(parentViewModel, nameof(parentViewModel));
            if (parentViewModel.GetType().IsStringOrValueType())
            {
                throw new AggregateException("parentViewModel object cant be an string or value type");
            }

            var busyIndicator = parentViewModel as IBusyIndicator;

            try
            {
                if (busyIndicator != null && !busyIndicator.IsBusy)
                {
                    busyIndicator.ShowBusy();
                }

                var window      = GetOrCreateDialog(parentViewModel, dialogOption.View, dialogOption.DialogType);
                var dialogAware = dialogOption.View.CastAs <IDialogAware>();
                var activeAware = dialogOption.View.CastAs <IActiveAware>();

                window.Title = dialogOption.Title;
                window.DialogCommands.Clear();

                window.Shown += (s, e) =>
                {
                    dialogAware?.DialogActivating(dialogOption.Parameters, dialogOption.CustomCommands);
                    if (activeAware != null && !activeAware.IsActive)
                    {
                        activeAware.IsActive = true;
                    }

                    window.DialogCommands.AddRange(dialogOption.CustomCommands);
                };

                window.Closing += (s, e) =>
                {
                    var closingResult = new DialogClosingResult(window.MessageBoxResult);
                    dialogAware?.DialogClosing(closingResult);
                    e.Cancel = closingResult.Cancel;
                };
                window.Closed += (s, e) =>
                {
                    RemoveFromCache(parentViewModel, (IDialogWindow)s);

                    var closedResult = new DialogResult(window.MessageBoxResult, dialogOption.Parameters);
                    dialogAware?.DialogClosed(closedResult);
                    dialogCallback?.Invoke(closedResult);
                };

                window.ShowDialog();
            }
            finally
            {
                busyIndicator.HideBusy();
            }
        }
Exemplo n.º 8
0
        private async Task OnExecuteWithDialogOptionActionAsync(IDialogOption dialogOption)
        {
            if (DialogCommand is not null)
            {
                Log.Info("User pressed dialog option, executing command");

                // Not everyone is using the ICatelCommand, make sure to check if execution is allowed
                if (DialogCommand.CanExecute(dialogOption))
                {
                    DialogCommand.Execute(dialogOption);
                }
            }
        }
Exemplo n.º 9
0
        private async Task dialogLoop()
        {
            TaskCompletionSource <IDialogOption>          selectedOptionTask = new TaskCompletionSource <IDialogOption> (null);
            List <Action <object, MouseButtonEventArgs> > callbacks          =
                new List <Action <object, MouseButtonEventArgs> > (Options.Count);

            foreach (var option in Options)
            {
                Action <object, MouseButtonEventArgs> callback = (sender, args) => selectedOptionTask.TrySetResult(option);
                callbacks.Add(callback);
                option.Label.MouseClicked.Subscribe(callback);
            }
            Graphics.Visible = true;
            await _dialogLayout.LayoutAsync(Graphics, Options);

            if (!Options.Any(o => o.Label.Visible))
            {
                Graphics.Visible = false;
                return;
            }

            IDialogOption selectedOption = await selectedOptionTask.Task;

            for (int index = 0; index < Options.Count; index++)
            {
                Options[index].Label.MouseClicked.Unsubscribe(callbacks[index]);
            }
            if (!ShowWhileOptionsAreRunning)
            {
                Graphics.Visible = false;
            }
            await selectedOption.RunAsync();

            await Task.Delay(300);             //This delay is to avoid player clicks for skipping speech to accidentally trigger a new dialog option

            Graphics.Visible = !selectedOption.ExitDialogWhenFinished && selectedOption.ChangeDialogWhenFinished == null;

            if (selectedOption.ChangeDialogWhenFinished != null)
            {
                await selectedOption.ChangeDialogWhenFinished.RunAsync();
            }
            else if (!selectedOption.ExitDialogWhenFinished)
            {
                await dialogLoop();
            }
        }
Exemplo n.º 10
0
        public override void SetResult(IDialogOption result)
        {
            try
            {
                Argument.IsNotNull(() => result);

                if (result is IDialogOption <T> )
                {
                    Result = (result as IDialogOption <T>).DialogCallback();
                }
                else
                {
                    throw new InvalidCastException();
                }
            }
            catch (InvalidCastException ex)
            {
                Log.Error(ex, $"Cannot set result value, expected type {typeof(T)} was {result.GetType()}");
            }
        }
Exemplo n.º 11
0
        public IDialogOption GetDialogOption(string text, ITextConfig config = null, ITextConfig hoverConfig = null,
                                             ITextConfig hasBeenChosenConfig = null, bool speakOption        = true, bool showOnce = false)
        {
            var game = _resolver.Container.Resolve <IGame>();

            if (config == null)
            {
                config = new AGSTextConfig(autoFit: AutoFit.TextShouldWrapAndLabelShouldFitHeight,
                                           brush: _brushLoader.LoadSolidBrush(Colors.White), font: _fontLoader.LoadFont(null, 10f));
            }
            if (hoverConfig == null)
            {
                hoverConfig = new AGSTextConfig(autoFit: AutoFit.TextShouldWrapAndLabelShouldFitHeight,
                                                brush: _brushLoader.LoadSolidBrush(Colors.Yellow), font: _fontLoader.LoadFont(null, 10f));
            }
            if (hasBeenChosenConfig == null)
            {
                hasBeenChosenConfig = new AGSTextConfig(autoFit: AutoFit.TextShouldWrapAndLabelShouldFitHeight,
                                                        brush: _brushLoader.LoadSolidBrush(Colors.Gray), font: _fontLoader.LoadFont(null, 10f));
            }
            ILabel label = _ui.GetLabel($"Dialog option: {text}", text, game.Settings.VirtualResolution.Width, 20f, 0f, 0f,
                                        config: config, addToUi: false);

            label.Enabled = true;
            TypedParameter labelParam         = new TypedParameter(typeof(ILabel), label);
            NamedParameter speakParam         = new NamedParameter("speakOption", speakOption);
            NamedParameter showOnceParam      = new NamedParameter("showOnce", showOnce);
            NamedParameter hoverParam         = new NamedParameter("hoverConfig", hoverConfig);
            NamedParameter wasChosenParam     = new NamedParameter("hasBeenChosenConfig", hasBeenChosenConfig);
            TypedParameter playerParam        = new TypedParameter(typeof(ICharacter), _gameState.Player);
            IDialogActions dialogActions      = _resolver.Container.Resolve <IDialogActions>(playerParam);
            TypedParameter dialogActionsParam = new TypedParameter(typeof(IDialogActions), dialogActions);
            IDialogOption  option             = _resolver.Container.Resolve <IDialogOption>(labelParam, speakParam, showOnceParam, hoverParam,
                                                                                            wasChosenParam, playerParam, dialogActionsParam);

            return(option);
        }
Exemplo n.º 12
0
 private void setShaderOption(IDialogOption option, Action setShader)
 {
     option.AddText(Characters.Beman, "Your wish is my command.");
     option.AddActions(setShader);
     option.ExitDialogWhenFinished = true;
 }
Exemplo n.º 13
0
 public static DialogNode <TContent> CreateExitNode(TContent content, IDialogOption <TContent> endOption)
 {
     return(new DialogNode <TContent>(content, new List <IDialogOption <TContent> > {
         endOption
     }));
 }
 private async Task RunOptionExecuteAsync(IDialogOption option)
 {
     Result.SetResult(option);
 }
Exemplo n.º 15
0
		private void setShaderOption(IDialogOption option, Action setShader)
		{
			option.AddText(Characters.Beman, "Your wish is my command.");
			option.AddActions(setShader);
			option.ExitDialogWhenFinished = true;
		}
Exemplo n.º 16
0
 private async Task WrapDialogOptionAsync(Func <Task> commonButtonTask, IDialogOption dialogOption)
 {
     await OnExecuteWithDialogOptionActionAsync(dialogOption);
     await commonButtonTask();
 }