コード例 #1
0
    public IEnumerator StartConversation(TextAsset dialog, bool withPortraits)
    {
        List <string> dialogEntries = DialogEngine.CreateDialogComponents(dialog.text);

        ConversationController.instance.StartConversation(dialogEntries);
        yield return(null);
    }
コード例 #2
0
    IEnumerator IntroSequence()
    {
        if (PlayOpeningBanter)
        {
            ChapterHud.instance.StartLevel();
            while (!ChapterHud.instance.AnimationFinished())
            {
                yield return(null);
            }

            BgmController.instance.PlayBGM(levelBgm);

            List <string> dialogEntries = DialogEngine.CreateDialogComponents(openingBanter.text);
            ShmupGameManager.instance.PauseGameplay();
            ConversationController.instance.StartConversation(dialogEntries);
            yield return(null);

            while (ShmupGameManager.instance.Paused)
            {
                yield return(null);
            }
        }

        ShmupGameManager.instance.ResumeGameplay();
        ShmupGameManager.instance.player.gameObject.SetActive(true);
        ShmupGameManager.instance.RespawnPlayer();
    }
コード例 #3
0
        protected void OnRatingClick(object sender, EventArgs e)
        {
            string[] ratingInfo = ((LinkButton)sender).CommandArgument.Split(new char[] { '_' });
            if (ratingInfo.Length == 2)
            {
                int rating = int.Parse(ratingInfo[1]);

                DataObject.AddRating(Udc, ratingInfo[0].ToNullableGuid(), dataObject.ObjectType, rating);

                _4screen.CSB.Extensions.Business.IncentivePointsManager.AddIncentivePointEvent(string.Format("{0}_RATE", Helper.GetObjectType(dataObject.ObjectType).Id.ToUpper()), Udc, ratingInfo[0]);
            }
            DrawRating();

            List <string> pageNames = new List <string>();

            pageNames.Add("RatingUpload");
            List <Dialog> dialogs = DialogEngine.GetDialogByPageName(pageNames, UserProfile.Current.UserId);

            if (dialogs.Count > 0)
            {
                StringBuilder sb = new StringBuilder();
                foreach (Dialog dialog in dialogs)
                {
                    sb.AppendFormat("<div><b>{0}</b><br/>{1}</div>", dialog.Title, dialog.Content);
                    sb.AppendFormat("<div style=\"margin-top:10px;margin-bottom:10px;height:1px;background-color:#CCCCCC;\"></div>");
                }
                string content = Regex.Replace(sb.ToString(), "<(.*?)>", "&lt;$1&gt;"); // Ugly, but safari needs it
                ScriptManager.RegisterStartupScript((Control)this.objVp, this.objVp.GetType(), "DialogWin", "SetPopupWindow('" + this.ClientID + string.Format("', 700, 0, 200, '{0}', '", language.GetString("TitleRating").StripForScript()) + content + "', true);", true);
            }
        }
コード例 #4
0
    public IEnumerator StartConversation(TextAsset dialog, bool withPortraits)
    {
        if (pauseGameplay)
        {
            ShmupGameManager.instance.PauseGameplay();
        }

        List <string> dialogEntries = DialogEngine.CreateDialogComponents(dialog.text);

        ConversationController.instance.StartConversation(dialogEntries);
        yield return(new WaitForEndOfFrame());

        while (!ConversationController.instance.IsConversationFinished())
        {
            yield return(null);
        }

        if (pauseGameplay)
        {
            ShmupGameManager.instance.ResumeGameplay();
        }

        conversationOver = true;
        yield return(null);
    }
コード例 #5
0
        public void SimpleEngineConMath()
        {
            var player = new Actor();

            player.Ammo = 3;

            var rules = new DialogRule[]
            {
                new DialogRule()
                {
                    Name       = "I have more than half health",
                    Conditions = new DialogRule.DialogCondition[]
                    {
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.health",
                            Op    = ">",
                            Right = "(/ player.maxHealth 2)"
                        }
                    }
                },
                new DialogRule()
                {
                    Name       = "I am the king of health and ammo",
                    Conditions = new DialogRule.DialogCondition[]
                    {
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.health",
                            Op    = "=",
                            Right = "player.maxHealth"
                        },
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.ammo",
                            Op    = ">",
                            Right = "25"
                        }
                    }
                }
            };

            var attributes = new ObjectDialogAttribute[]
            {
                new ObjectDialogAttribute(player, "player", "health"),
                new ObjectDialogAttribute(player, "player", "maxHealth"),
                new ObjectDialogAttribute(player, "player", "ammo"),
            };

            var engine = new DialogEngine();

            rules.ToList().ForEach(r => engine.AddRule(r));
            attributes.ToList().ForEach(a => engine.AddAttribute(a));

            var best = engine.GetBestValidDialog();

            Assert.IsNotNull(best);
            Assert.AreEqual("I have more than half health", best.Name);
        }
コード例 #6
0
        public void SimpleTemplateInterp()
        {
            var player = new Actor();

            var rules = new DialogRule[]
            {
                new DialogRule()
                {
                    Name       = "I have full health!",
                    Conditions = new DialogRule.DialogCondition[]
                    {
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.health",
                            Op    = "=",
                            Right = "player.maxHealth"
                        }
                    },
                    Dialog = new DialogRule.DialogPart[]
                    {
                        new DialogRule.DialogPart()
                        {
                            Speaker      = "player",
                            Content      = "I have health of {player health} which and {player maxHealth + player health}",
                            ContentParts = new string[]
                            {
                                "'I have health of '",
                                "player.health",
                                "' which and '",
                                "(+ player.maxHealth player.health)"
                            }
                        }
                    }
                },
            };

            var attributes = new ObjectDialogAttribute[]
            {
                new ObjectDialogAttribute(player, "player", "health"),
                new ObjectDialogAttribute(player, "player", "maxHealth"),
                new ObjectDialogAttribute(player, "player", "ammo"),
            };

            var engine = new DialogEngine();

            rules.ToList().ForEach(r => engine.AddRule(r));
            attributes.ToList().ForEach(a => engine.AddAttribute(a));

            var best = engine.GetBestValidDialog();

            Assert.IsNotNull(best);
            Assert.AreEqual("I have full health!", best.Name);

            var dialogs = engine.ExecuteRuleDialogs(best);

            Assert.AreEqual(1, dialogs.Length);
            Assert.AreEqual("I have health of 50 which and 100", dialogs[0]);
        }
コード例 #7
0
        public void BoolBag2()
        {
            var player = new
            {
                health = 10,
                flags  = new BagBoolElement[]
                {
                    new BagBoolElement()
                    {
                        name  = "a.part",
                        value = true
                    }
                }.ToList()
            };

            var rules = new DialogRule[]
            {
                new DialogRule()
                {
                    Name       = "I have full health!",
                    Conditions = new DialogRule.DialogCondition[]
                    {
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.flags.a.part",
                            Op    = "=",
                            Right = "true"
                        },
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.flags.b",
                            Op    = "=",
                            Right = "false"
                        }
                    }
                },
            };

            var engine = new DialogEngine()
                         .AddHandler(new BagBoolHandler());
            var attributes = new DialogAttribute[]
            {
                new ObjectDialogAttribute(player, "player", "health"),
                DialogAttribute.New("player.flags", false, player.flags).UpdateElements(engine)
                //new BagDialogAttribute<bool>("player.flags", player.flags).UpdateElements(engine)
            };

            attributes.ToList().ForEach(a => engine.AddAttribute(a));



            rules.ToList().ForEach(r => engine.AddRule(r));

            var best = engine.GetBestValidDialog();

            Assert.IsNotNull(best);
            Assert.AreEqual("I have full health!", best.Name);
        }
コード例 #8
0
        public void SimpleEngineOutcomeSetter()
        {
            var player = new Actor();

            player.MaxHealth = 100;
            player.Health    = 100;
            var rules = new DialogRule[]
            {
                new DialogRule()
                {
                    Name       = "I have full health!",
                    Conditions = new DialogRule.DialogCondition[]
                    {
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.health",
                            Op    = "=",
                            Right = "player.maxHealth"
                        }
                    },
                    Outcomes = new DialogRule.DialogOutcome[]
                    {
                        new DialogRule.DialogOutcome()
                        {
                            Command   = "set",
                            Target    = "player.health",
                            Arguments = new Dictionary <string, string>()
                            {
                                { "", "(/ player.maxHealth 2)" }
                            }
                        }
                    }
                }
            };

            var attributes = new ObjectDialogAttribute[]
            {
                new ObjectDialogAttribute(player, "player", "health"),
                new ObjectDialogAttribute(player, "player", "maxHealth"),
                new ObjectDialogAttribute(player, "player", "ammo"),
            };

            var engine = new DialogEngine();

            rules.ToList().ForEach(r => engine.AddRule(r));
            attributes.ToList().ForEach(a => engine.AddAttribute(a));

            var best = engine.GetBestValidDialog();

            Assert.IsNotNull(best);
            Assert.AreEqual("I have full health!", best.Name);

            engine.ExecuteRuleOutcomes(best);

            Assert.AreEqual(50, player.Health);
        }
コード例 #9
0
        public void TemplateInterpStrings()
        {
            var player = new Actor();

            var rules = new DialogRule[]
            {
                new DialogRule()
                {
                    Name       = "I have full health!",
                    Conditions = new DialogRule.DialogCondition[]
                    {
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.health",
                            Op    = "=",
                            Right = "player.maxHealth"
                        }
                    },
                    Dialog = new DialogRule.DialogPart[]
                    {
                        new DialogRule.DialogPart()
                        {
                            Speaker      = "player",
                            Content      = "my health is <color='red'> great </color>",
                            ContentParts = new string[]
                            {
                                "'my health is <color='red'> great </color>'",
                            }
                        }
                    }
                },
            };

            var attributes = new ObjectDialogAttribute[]
            {
                new ObjectDialogAttribute(player, "player", "health"),
                new ObjectDialogAttribute(player, "player", "maxHealth"),
                new ObjectDialogAttribute(player, "player", "ammo"),
            };

            var engine = new DialogEngine();

            rules.ToList().ForEach(r => engine.AddRule(r));
            attributes.ToList().ForEach(a => engine.AddAttribute(a));

            var best = engine.GetBestValidDialog();

            Assert.IsNotNull(best);
            Assert.AreEqual("I have full health!", best.Name);

            var dialogs = engine.ExecuteRuleDialogs(best);

            Assert.AreEqual(1, dialogs.Length);
            Assert.AreEqual("my health is <color='red'> great </color>", dialogs[0]);
        }
コード例 #10
0
ファイル: DialogEngine.cs プロジェクト: MarkMendell/GGJ2018
 public void Awake()
 {
     if (instance == null)
     {
         instance = this;
     }
     else if (this != instance)
     {
         Destroy(this.gameObject);
     }
 }
コード例 #11
0
        public void IntBag()
        {
            var player = new
            {
                health = 10,
                ints   = new BagIntElement[]
                {
                }.ToList()
            };

            var rules = new DialogRule[]
            {
                new DialogRule()
                {
                    Name       = "I have full health!",
                    Conditions = new DialogRule.DialogCondition[]
                    {
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.ints.a",
                            Op    = "=",
                            Right = "10"
                        },
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.ints.hidaldo.rep",
                            Op    = ">",
                            Right = "6"
                        }
                    }
                },
            };

            var engine = new DialogEngine()
                         .AddHandler(new BagIntHandler());
            var attributes = new DialogAttribute[]
            {
                new ObjectDialogAttribute(player, "player", "health"),
                DialogAttribute.New("player.ints", 10, player.ints).UpdateElements(engine)
                //new BagDialogAttribute<bool>("player.flags", player.flags).UpdateElements(engine)
            };

            attributes.ToList().ForEach(a => engine.AddAttribute(a));



            rules.ToList().ForEach(r => engine.AddRule(r));

            var best = engine.GetBestValidDialog();

            Assert.IsNotNull(best);
            Assert.AreEqual("I have full health!", best.Name);
        }
コード例 #12
0
 private void Update()
 {
     if (spaceInvaderWave.started && !spaceInvaderDialogStarted)
     {
         spaceInvaderDialogStarted = true;
         List <string> dialogEntries = DialogEngine.CreateDialogComponents(spaceInvaderBanter.text);
         ConversationController.instance.StartConversation(dialogEntries);
     }
     if (mainEncounter.IsCompleted())
     {
         EndLevel();
     }
 }
コード例 #13
0
    public IEnumerator PlayCutscene(TextAsset dialog, bool withPortraits, float autoPlay = 0.0f)
    {
        CutscenePause();

        List <string> dialogEntries = DialogEngine.CreateDialogComponents(dialog.text);

        CutsceneDialogController.instance.StartCutscene(dialogEntries, autoPlay);

        while (!CutsceneDialogController.instance.IsCutsceneFinished())
        {
            yield return(null);
        }

        CutsceneUnpause();
        yield return(null);
    }
コード例 #14
0
        private void ShowDialog()
        {
            List <string> pageNames = new List <string>();

            pageNames.Add("ProfileEditWidget");
            List <Dialog> dialogs = DialogEngine.GetDialogByPageName(pageNames, UserProfile.Current.UserId);

            if (dialogs.Count > 0)
            {
                StringBuilder sb = new StringBuilder();
                foreach (Dialog dialog in dialogs)
                {
                    sb.AppendFormat("<div><b>{0}</b><br/>{1}</div>", dialog.Title, dialog.Content);
                    sb.AppendFormat("<div style=\"margin-top:10px;margin-bottom:10px;height:1px;background-color:#CCCCCC;\"></div>");
                }
                string content = Regex.Replace(sb.ToString(), "<(.*?)>", "&lt;$1&gt;"); // Ugly, but safari needs it
                ScriptManager.RegisterStartupScript((Control)this, this.GetType(), "DialogWin", "SetPopupWindow('" + this.ClientID + string.Format("', 700, 0, 200, '{0}', '", language.GetString("LableWidgetMessages").StripForScript()) + content + "', true);", true);
            }
        }
コード例 #15
0
    IEnumerator EndSequence()
    {
        List <string> dialogEntries = DialogEngine.CreateDialogComponents(closingBanter.text);

        ShmupGameManager.instance.PauseGameplay();
        ConversationController.instance.StartConversation(dialogEntries);
        yield return(null);

        while (ShmupGameManager.instance.Paused)
        {
            yield return(null);
        }

        BgmController.instance.StopBGM();

        ChapterHud.instance.EndLevel();
        while (!ChapterHud.instance.AnimationFinished())
        {
            yield return(null);
        }
        SceneManager.LoadScene(3);
    }
コード例 #16
0
        public void SimpleEngineTransform()
        {
            var player = new Actor();

            var rules = new DialogRule[]
            {
                new DialogRule()
                {
                    Name       = "I have full health!",
                    Conditions = new DialogRule.DialogCondition[]
                    {
                        new DialogRule.DialogCondition()
                        {
                            Left  = "dialog.target.health",
                            Op    = "=",
                            Right = "player.maxHealth"
                        }
                    }
                }
            };

            var attributes = new ObjectDialogAttribute[]
            {
                new ObjectDialogAttribute(player, "player", "health"),
                new ObjectDialogAttribute(player, "player", "maxHealth"),
                new ObjectDialogAttribute(player, "player", "ammo"),
            };

            var engine = new DialogEngine()
                         .AddTransform("dialog.target", () => "player");

            rules.ToList().ForEach(r => engine.AddRule(r));
            attributes.ToList().ForEach(a => engine.AddAttribute(a));

            var best = engine.GetBestValidDialog();

            Assert.IsNotNull(best);
            Assert.AreEqual("I have full health!", best.Name);
        }
コード例 #17
0
    IEnumerator IntroSequence()
    {
        AudioManager.instance.OnPhase3LevelFadeIn();
        ChapterHud.instance.StartLevel();
        while (!ChapterHud.instance.AnimationFinished())
        {
            yield return(null);
        }

        if (PlayOpeningBanter)
        {
            List <string> dialogEntries = DialogEngine.CreateDialogComponents(openingBanter.text);
            ShmupGameManager.instance.PauseGameplay();
            ConversationController.instance.StartConversation(dialogEntries);
            yield return(null);

            while (ShmupGameManager.instance.Paused)
            {
                yield return(null);
            }
        }

        ShmupGameManager.instance.player.gameObject.SetActive(true);
        ShmupGameManager.instance.RespawnPlayer();
        ShmupGameManager.instance.ResumeGameplay();

        yield return(new WaitForSeconds(2.0f));

        List <string> lockEntries = DialogEngine.CreateDialogComponents(lockBanter.text);

        ConversationController.instance.StartConversation(lockEntries);
        yield return(null);

        while (ShmupGameManager.instance.Paused)
        {
            yield return(null);
        }
    }
コード例 #18
0
    IEnumerator EndSequence()
    {
        AudioManager.instance.OnNextLevelUnlock();
        AudioManager.instance.OnPhaseAnyLevelFadeOut();

        List <string> dialogEntries = DialogEngine.CreateDialogComponents(closingBanter.text);

        ShmupGameManager.instance.PauseGameplay();
        ConversationController.instance.StartConversation(dialogEntries);
        yield return(null);

        while (ShmupGameManager.instance.Paused)
        {
            yield return(null);
        }

        ChapterHud.instance.EndLevel();
        while (!ChapterHud.instance.AnimationFinished())
        {
            yield return(null);
        }
        SceneManager.LoadScene(2);
    }
コード例 #19
0
    IEnumerator IntroSequence()
    {
        AudioManager.instance.OnPhase1LevelFadeIn();
        if (PlayOpeningCutscene)
        {
            ChapterHud.instance.StartLevel();
            while (!ChapterHud.instance.AnimationFinished())
            {
                yield return(null);
            }
            //TextAsset dialog = ProgressManager.instance.GetStartDialog();
            StartCoroutine(ShmupGameManager.instance.PlayCutscene(openingCutscene, true));
            yield return(null);

            while (ShmupGameManager.instance.Paused)
            {
                yield return(null);
            }
        }

        if (PlayOpeningBanter)
        {
            List <string> dialogEntries = DialogEngine.CreateDialogComponents(openingBanter.text);
            ShmupGameManager.instance.PauseGameplay();
            ConversationController.instance.StartConversation(dialogEntries);
            yield return(null);

            while (ShmupGameManager.instance.Paused)
            {
                yield return(null);
            }
        }

        ShmupGameManager.instance.player.gameObject.SetActive(true);
        ShmupGameManager.instance.RespawnPlayer();
        ShmupGameManager.instance.ResumeGameplay();
    }
コード例 #20
0
        public void SimpleEngineOutcomeRunner()
        {
            var player = new Actor();

            player.MaxHealth = 100;
            player.Health    = 100;
            var rules = new DialogRule[]
            {
                new DialogRule()
                {
                    Name       = "I have full health!",
                    Conditions = new DialogRule.DialogCondition[]
                    {
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.health",
                            Op    = "=",
                            Right = "player.maxHealth"
                        }
                    },
                    Outcomes = new DialogRule.DialogOutcome[]
                    {
                        new DialogRule.DialogOutcome()
                        {
                            Command   = "run",
                            Target    = "player.sampleFunc",
                            Arguments = new Dictionary <string, string>()
                            {
                                { "h", "(/ player.maxHealth 2)" },

                                { "ammo", "55" }
                            }
                        }
                    }
                }
            };

            // new OFDA(player, "setAll", new Dictionary<string, string>(){

            var attributes = new DialogAttribute[]
            {
                new ObjectDialogAttribute(player, "player", "health"),
                new ObjectDialogAttribute(player, "player", "maxHealth"),
                new ObjectDialogAttribute(player, "player", "ammo"),
                new ObjectFunctionDialogAttribute("player.sampleFunc", new Action <Dictionary <string, object> >(vars =>
                {
                    var health    = (int)vars["h"];
                    var maxHealth = (int)vars["mx"];
                    var ammo      = (int)vars["ammo"];

                    player.SetAll(health, maxHealth, ammo);
                }), new Dictionary <string, object> {
                    { "mx", 200 }
                })
            };

            var engine = new DialogEngine();

            rules.ToList().ForEach(r => engine.AddRule(r));
            attributes.ToList().ForEach(a => engine.AddAttribute(a));

            var best = engine.GetBestValidDialog();

            Assert.IsNotNull(best);
            Assert.AreEqual("I have full health!", best.Name);

            engine.ExecuteRuleOutcomes(best);

            Assert.AreEqual(50, player.Health);
            Assert.AreEqual(200, player.MaxHealth);
            Assert.AreEqual(55, player.Ammo);
        }
コード例 #21
0
        public void StringAndIntBags()
        {
            var player = new
            {
                health = 10,
                nums   = new BagIntElement[]
                {
                    new BagIntElement()
                    {
                        name  = "a",
                        value = 5
                    }
                }.ToList(),
                strs = new BagStringElement[]
                {
                    new BagStringElement()
                    {
                        name  = "a",
                        value = "tuna"
                    }
                }.ToList()
            };

            var rules = new DialogRule[]
            {
                new DialogRule()
                {
                    Name       = "I have full health!",
                    Conditions = new DialogRule.DialogCondition[]
                    {
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.nums.a",
                            Op    = "=",
                            Right = "5"
                        },
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.nums.b",
                            Op    = ">",
                            Right = "6"
                        },
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.strs.a",
                            Op    = "=!",
                            Right = "player.strs.b"
                        }
                    }
                },
            };

            var engine = new DialogEngine()
                         .AddHandler(new BagIntHandler())
                         .AddHandler(new BagStringHandler());
            var attributes = new DialogAttribute[]
            {
                new ObjectDialogAttribute(player, "player", "health"),
                DialogAttribute.New("player.nums", 10, player.nums).UpdateElements(engine),
                DialogAttribute.New("player.strs", "eggs", player.strs).UpdateElements(engine)
                //new BagDialogAttribute<bool>("player.flags", player.flags).UpdateElements(engine)
            };

            attributes.ToList().ForEach(a => engine.AddAttribute(a));



            rules.ToList().ForEach(r => engine.AddRule(r));

            var best = engine.GetBestValidDialog();

            Assert.IsNotNull(best);
            Assert.AreEqual("I have full health!", best.Name);
        }
コード例 #22
0
        public void SimpleEngineWithConditionSetLoopDetected()
        {
            var player = new Actor();

            player.Health = player.MaxHealth;
            var sets = new DialogConditionSet[]
            {
                new DialogConditionSet()
                {
                    Name       = "test",
                    Conditions = new DialogConditionSet.DialogCondition[]
                    {
                        new DialogConditionSet.DialogCondition()
                        {
                            Left  = "player.health",
                            Op    = ">",
                            Right = "1"
                        },
                        new DialogConditionSet.DialogCondition()
                        {
                            Left  = "__.conditions.egg",
                            Op    = "=",
                            Right = "true"
                        }
                    }
                },
                new DialogConditionSet()
                {
                    Name       = "egg",
                    Conditions = new DialogConditionSet.DialogCondition[]
                    {
                        new DialogConditionSet.DialogCondition()
                        {
                            Left  = "__.conditions.test",
                            Op    = "=",
                            Right = "true"
                        },
                        new DialogConditionSet.DialogCondition()
                        {
                            Left  = "player.ammo",
                            Op    = ">",
                            Right = "5"
                        }
                    }
                }
            };

            var rules = new DialogRule[]
            {
                new DialogRule()
                {
                    Name       = "I have full health!",
                    Conditions = new DialogRule.DialogCondition[]
                    {
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.health",
                            Op    = "=",
                            Right = "player.maxHealth"
                        },
                        new DialogRule.DialogCondition()
                        {
                            Left  = "__.conditions.egg",
                            Op    = "=",
                            Right = "true"
                        }
                    }
                },
                new DialogRule()
                {
                    Name       = "I am less specific",
                    Conditions = new DialogRule.DialogCondition[]
                    {
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.health",
                            Op    = "=",
                            Right = "player.maxHealth"
                        },
                        new DialogRule.DialogCondition()
                        {
                            Left  = "player.health",
                            Op    = "=",
                            Right = "player.maxHealth"
                        }
                    }
                },
            };

            var attributes = new ObjectDialogAttribute[]
            {
                new ObjectDialogAttribute(player, "player", "health"),
                new ObjectDialogAttribute(player, "player", "maxHealth"),
                new ObjectDialogAttribute(player, "player", "ammo"),
            };

            var engine = new DialogEngine().AddHandler(new ConditionSetEvalHandler());

            sets.ToList().ForEach(r => engine.AddConditionSet(r));
            rules.ToList().ForEach(r => engine.AddRule(r));
            attributes.ToList().ForEach(a => engine.AddAttribute(a));

            var best = engine.GetBestValidDialog();

            Assert.IsNotNull(best);
            Assert.AreEqual("I have full health!", best.Name);
        }
コード例 #23
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!isReadOnly)
            {
                ScriptManager.GetCurrent(this).Services.Add(new ServiceReference("/Services/WidgetService.asmx"));
            }

            // Show customization bar
            if (!string.IsNullOrEmpty(Request.QueryString["edit"]) && !isReadOnly)
            {
                if (Request.QueryString["edit"] == "content")
                {
                    CustomizationBarContent customizationBar = (CustomizationBarContent)LoadControl("~/UserControls/CustomizationBarContent.ascx");
                    customizationBar.ID          = "cb";
                    customizationBar.CommunityID = PageInfo.EffectiveCommunityId.Value;
                    PhCB.Controls.Add(customizationBar);
                }
                else if (Request.QueryString["edit"] == "style")
                {
                    CustomizationBarStyle customizationBar = (CustomizationBarStyle)LoadControl("~/UserControls/CustomizationBarStyle.ascx");
                    customizationBar.ID          = "cb";
                    customizationBar.CommunityID = PageInfo.EffectiveCommunityId.Value;
                    PhCB.Controls.Add(customizationBar);
                }

                // Show dialogs
                if (pageOrCommunity.ObjectType == Helper.GetObjectTypeNumericID("ProfileCommunity"))
                {
                    List <string> pageNames = new List <string>();
                    pageNames.Add("ProfileEditStyle");
                    List <Dialog> dialogs = DialogEngine.GetDialogByPageName(pageNames, UserProfile.Current.UserId);
                    if (dialogs.Count > 0)
                    {
                        StringBuilder sb = new StringBuilder();
                        foreach (Dialog dialog in dialogs)
                        {
                            sb.AppendFormat("<div><b>{0}</b><br/>{1}</div>", dialog.Title, dialog.Content);
                            sb.AppendFormat("<div style=\"margin-top:10px;margin-bottom:10px;height:1px;background-color:#CCCCCC;\"></div>");
                        }
                        string content = Regex.Replace(sb.ToString(), "<(.*?)>", "&lt;$1&gt;"); // Ugly, but safari needs it
                        ScriptManager.RegisterStartupScript(this, this.GetType(), "DialogWin", "SetPopupWindow('" + this.ClientID + "', 700, 0, 200, 'Mitteilungen', '" + content + "', true);", true);
                    }
                }
            }

            // Load tabbar
            if (pageOrCommunity.ObjectType == Helper.GetObjectTypeNumericID("Community") || pageOrCommunity.ObjectType == Helper.GetObjectTypeNumericID("ProfileCommunity"))
            {
                TabBar tabBar = (TabBar)LoadControl("~/UserControls/TabBar.ascx");
                tabBar.ID              = "tb";
                tabBar.WDC             = wdc;
                tabBar.Pages           = pages;
                tabBar.CurrentPage     = currentPage;
                tabBar.IsOwner         = isOwner;
                tabBar.IsMember        = isMember;
                tabBar.PageOrCommunity = pageOrCommunity;
                tabBar.Community       = community;
                Ph.Controls.Add(tabBar);
            }

            // Load layout
            Layout layout = Layouts.GetLayout(community.CTY_Layout);

            if (layout == null)
            {
                layout = Layouts.GetLayout("Default");
                community.CTY_Layout = "Default";
                wdc.SubmitChanges();
                wdc.hisp_WidgetInstance_ReorderColumns(PageInfo.EffectiveCommunityId.Value, layout.NumberDropZones);
            }
            if (isReadOnly)
            {
                Ph2.Controls.Add(Page.ParseControl(layout.DisplayTemplate));
            }
            else
            {
                Ph2.Controls.Add(Page.ParseControl(layout.DragDropTemplate));
            }
            columnWidths = layout.ColumnWidths;
            columnPanels = new Panel[layout.NumberDropZones];
            for (int i = 0; i < columnPanels.Length; i++)
            {
                columnPanels[i] = (Panel)Ph2.FindControl("WCP" + i);
                if (!isReadOnly)
                {
                    columnPanels[i].Attributes["PageId"] = currentPage.PAG_ID.ToString();
                }
            }

            LoadWidgets();
        }
コード例 #24
0
        public static async Task Process(IDialogContext context)
        {
            var activity = context.Activity as Activity;

            Sesion sesion = context.UserData.GetValue <Sesion>("sesion");

            context.UserData.SetValue("Usuario", sesion.Nombre);

            var container = new Container();

            UnityConfig.RegisterTypes(container);

            /* 4.1.4   El Sistema crea una nueva Solicitud Académica con los datos indicados líneas abajo
             *  en la entidad[GSAV_SolicitudAcadémica], generando un código único */

            Solicitud solicitud = new Solicitud();

            if (context.UserData.ContainsKey("solicitud"))
            {
                solicitud = LeerSolicitud(sesion, context, activity, container);

                if (solicitud.Estado != "P")
                {
                    solicitud = CrearNuevaSolicitud(sesion, context, activity, container);
                }
            }
            else
            {
                solicitud = CrearNuevaSolicitud(sesion, context, activity, container);
            }

            try
            {
                DialogEngine handler = container.GetInstance <DialogEngine>();

                Result receivedResult = await handler.GetSpeechAsync(activity, sesion, context);

                IIntencion intencionManager = container.GetInstance <IIntencion>();

                /*
                 * 4.1.5   El Sistema valida si existe una “Intención de Consulta” para la pregunta
                 * ingresada por el alumno a través del Agente de Procesamiento de Lenguaje Natural.
                 * GSAV _RN013 – Tipos de Consultas Académicas
                 */
                if (receivedResult.ExistIntent)
                {
                    /*
                     * 4.1.6   El Sistema valida si la “Intención de Consulta” obtenida tiene una probabilidad
                     * mayor o igual al 80 %.GSAV _RN018– Porcentaje para respuestas certera
                     */

                    var intentScore = receivedResult.Intents.FirstOrDefault().Score;

                    if (receivedResult.ExistValidIntent)
                    {
                        string    intent    = receivedResult.GetValidIntent();
                        Intencion intencion = intencionManager.ObtenerCategoria(intent);

                        context.UserData.SetValue("result", receivedResult);

                        if (string.IsNullOrEmpty(intencion.NombreBase))
                        {
                            intencion.NombreBase = intent;
                        }

                        context.UserData.SetValue("intencion", intencion);

                        if (!string.IsNullOrEmpty(intent))
                        {
                            string dfParams  = receivedResult.Intents[0].Parameters;
                            string dfContext = receivedResult.OutputContexts;
                            Dictionary <string, string> listParams = JsonConvert.DeserializeObject <Dictionary <string, string> >(dfParams);
                            string course     = string.Empty;
                            string assignment = string.Empty;
                            int    number     = 0;

                            if (listParams.Count > 0)
                            {
                                if (listParams.ContainsKey("Curso"))
                                {
                                    course = listParams["Curso"];
                                    context.UserData.SetValue("Curso", course);
                                }

                                if (listParams.ContainsKey("Tarea"))
                                {
                                    assignment = listParams["Tarea"];
                                    context.UserData.SetValue("Tarea", assignment);
                                }

                                if (listParams.ContainsKey("number"))
                                {
                                    int.TryParse(listParams["number"], out number);
                                    context.UserData.SetValue("number", number);
                                }
                            }

                            var message = context.MakeMessage();

                            switch (intencion.NombreBase)
                            {
                            case "ActividadAcademica":
                                message.Text = $"Esta es una consulta de: {intent}";

                                context.PrivateConversationData.SetValue("custom", message.Text);

                                await context.PostAsync(message);

                                await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.ATENDIDO);

                                context.Wait(MenuDialog.MessageReceivedAsync);
                                break;

                            case AppConstant.Intencion.PROGRAMACION:

                                if (receivedResult.Intents[0].AllRequiredParamsPresent)
                                {
                                    string fechaActividad = string.Empty;
                                    int    numberSelected = context.UserData.GetValue <int>("number");

                                    var actividadManager = container.GetInstance <IActividad>();

                                    List <ActivitiesByCourseViewModel> activities = actividadManager.GetActivitiesByCourse(solicitud.IdAlumno);

                                    var filtered = activities.Where(o => o.Curso == course && o.Actividad == assignment);

                                    ActivitiesByCourseViewModel a = new ActivitiesByCourseViewModel();

                                    if (filtered.Count() == 0)
                                    {
                                        //context.Call(new NoRespuestaDialog(), MenuDialog.ResumeAfterDerivedAcademicIntent);

                                        await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.DERIVADA);

                                        context.Wait(MenuDialog.MessageReceivedAsync);

                                        return;
                                    }

                                    if (numberSelected > 0)
                                    {
                                        a = filtered.Where(o => o.NumeroActividad == numberSelected).FirstOrDefault();

                                        fechaActividad = a?.FechaActividad.ToString("dd MMMM yyyy");
                                    }
                                    else
                                    {
                                        a = filtered.Where(o => o.FechaActividad >= DateTime.Now).FirstOrDefault();

                                        fechaActividad = a?.FechaActividad.ToString("dd MMMM yyyy");
                                    }

                                    if (a == null)
                                    {
                                        a = new ActivitiesByCourseViewModel();
                                    }

                                    context.UserData.SetValue("Actividad", a);


                                    if (!string.IsNullOrEmpty(fechaActividad))
                                    {
                                        if (string.IsNullOrEmpty(receivedResult.Speech))
                                        {
                                            string tareaConNumero = assignment;

                                            if (number > 0)
                                            {
                                                tareaConNumero = $"{assignment} {number}";
                                            }

                                            receivedResult.Speech = $"La fecha de actividad de la {tareaConNumero} del Curso {course} es: {fechaActividad}";
                                        }
                                        else
                                        {
                                            receivedResult.Speech = receivedResult.Speech + " " + fechaActividad;
                                        }


                                        context.UserData.SetValue("result", receivedResult);

                                        await context.PostAsync(receivedResult.Speech);

                                        //await context.Forward(new MenuDialog(), MenuDialog.ResumeAfterSuccessAcademicIntent, context, CancellationToken.None);
                                        //context.Wait(MenuDialog.ResumeAfterSuccessAcademicIntent);
                                        //context.Call(new MenuDialog(), MenuDialog.ResumeAfterSuccessAcademicIntent);

                                        await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.ATENDIDO);

                                        context.Wait(MenuDialog.MessageReceivedAsync);
                                    }
                                    else
                                    {
                                        //context.Wait(MenuDialog.ResumeAfterFailedAcademicIntent);
                                        //await context.PostAsync(receivedResult.Speech);
                                        await context.PostAsync("La información ingresada es invalida, ingrese nuevamente su consulta");

                                        //context.Call(new NoRespuestaDialog(), MenuDialog.ResumeAfterDerivedAcademicIntent);

                                        //await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.FALTAINFORMACION);

                                        //context.Wait(MenuDialog.MessageReceivedAsync);

                                        //context.Call(new ProgramacionActividadesDialog(), MenuDialog.ResumeAfterSuccessAcademicIntent);

                                        await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.INVALIDO);

                                        context.Wait(MenuDialog.MessageReceivedAsync);
                                    }
                                }
                                else
                                {
                                    if (string.IsNullOrEmpty(course))
                                    {
                                        var cursoManager = container.GetInstance <ICurso>();

                                        List <CourseByModuleViewModel> studentActiveCourses = cursoManager.GetCourseByModuleActive(solicitud.IdAlumno);

                                        var questions = studentActiveCourses.Select(x => x.Curso).ToList();;

                                        string QuestionPrompt     = "Por favor seleccione el curso?";
                                        string invalidCourseInput = "La información ingresada es invalida, ingrese nuevamente su consulta";

                                        PromptOptions <string> options = new PromptOptions <string>(QuestionPrompt, "", invalidCourseInput, questions, 0);   // Overrided the PromptOptions Constructor.
                                        PromptDialog.Choice(context, MenuDialog.OnCourseSelected, options);
                                    }
                                    else
                                    {
                                        await context.PostAsync(receivedResult.Speech);
                                    }

                                    context.Wait(MenuDialog.MessageReceivedAsync);
                                }

                                break;

                            case AppConstant.Intencion.CREDITOSCUSTOM:
                                if (receivedResult.Intents[0].AllRequiredParamsPresent)
                                {
                                    var actividadManager = container.GetInstance <IActividad>();

                                    List <ActivitiesByCourseViewModel> activities = actividadManager.GetActivitiesByCourse(solicitud.IdAlumno);

                                    var filtered = activities.Where(o => o.Curso == course);


                                    await context.PostAsync(receivedResult.Speech + " " + 0);

                                    //context.Wait(MenuDialog.ResumeAfterSuccessAcademicIntent);
                                    //context.Call(new MenuDialog(), MenuDialog.ResumeAfterSuccessAcademicIntent);
                                    context.Wait(MenuDialog.MessageReceivedAsync);
                                }
                                else
                                {
                                    if (string.IsNullOrEmpty(course))
                                    {
                                        var cursoManager = container.GetInstance <ICurso>();

                                        List <CourseByModuleViewModel> studentActiveCourses = cursoManager.GetCourseByModuleActive(solicitud.IdAlumno);

                                        var questions = studentActiveCourses.Select(x => x.Curso).ToList();;

                                        string QuestionPrompt     = "Por favor seleccione el curso?";
                                        string invalidCourseInput = "La información ingresada es invalida, ingrese nuevamente su consulta";

                                        PromptOptions <string> options = new PromptOptions <string>(QuestionPrompt, "", invalidCourseInput, questions, 0);   // Overrided the PromptOptions Constructor.
                                        PromptDialog.Choice(context, MenuDialog.OnCourseSelected, options);
                                    }
                                    else
                                    {
                                        await context.PostAsync(receivedResult.Speech);
                                    }

                                    context.Wait(MenuDialog.MessageReceivedAsync);
                                }

                                break;

                            case AppConstant.Intencion.CREDITOS:
                            case AppConstant.Intencion.ORGANIZACION:
                            case AppConstant.Intencion.CALENDARIO:
                                //case "OrganizacionAulaVirtual1":
                                //context.Call(new CalendarioDialog(), ResumeAfterSuccessAcademicIntent);
                                message      = context.MakeMessage();
                                message.Text = $"Esta es una consulta de: {intent}";

                                //receivedResult.Speech = message.Text;
                                context.PrivateConversationData.SetValue("custom", message.Text);

                                await context.PostAsync(message);

                                //context.Wait(MenuDialog.MessageReceivedAsync);
                                //context.Call(new MenuDialog(), ResumeAfterSuccessAcademicIntent);
                                //context.Wait(MenuDialog.ResumeAfterSuccessAcademicIntent);
                                //context.Call(new MenuDialog(), MenuDialog.ResumeAfterSuccessAcademicIntent);

                                await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.ATENDIDO);

                                context.Wait(MenuDialog.MessageReceivedAsync);
                                break;

                            //case AppConstant.Intencion.ORGANIZACION:
                            //    context.Call(new OrganizacionDialog(), ResumeAfterSuccessAcademicIntent);
                            //    break;

                            case AppConstant.Intencion.MATRICULA:
                            case AppConstant.Intencion.ASISTENCIA:
                            case AppConstant.Intencion.RETIRO:
                            case AppConstant.Intencion.PROMEDIO:
                                //context.Call(new PreguntasFrecuentesDialog(), MenuDialog.ResumeAfterSuccessAcademicIntent);

                                //if (receivedResult.Speech.Equals(string.Empty))
                                //{
                                //    receivedResult.Speech = "Por favor, canalice su consulta vía Contacto UPC: http://www.upc.edu.pe/servicios/contacto-upc";
                                //}

                                await context.PostAsync(receivedResult.Speech);

                                await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.ATENDIDO);

                                context.Wait(MenuDialog.MessageReceivedAsync);

                                break;

                            //case AppConstant.Intencion.CREDITOS:
                            //    context.Call(new CreditosDialog(), ResumeAfterSuccessAcademicIntent);
                            //    break;
                            case AppConstant.Intencion.DEFAULT:

                                if (receivedResult.Speech.Equals(string.Empty))
                                {
                                    receivedResult.Speech = "Por favor, canalice su consulta vía Contacto UPC: http://www.upc.edu.pe/servicios/contacto-upc";
                                }

                                await context.PostAsync(receivedResult.Speech);

                                await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.INVALIDO);

                                context.Wait(MenuDialog.MessageReceivedAsync);

                                //context.Call(new NoRespuestaDialog(), MenuDialog.ResumeAfterFailedAcademicIntent);
                                break;


                            default:
                                //context.Call(new NoRespuestaDialog(), MenuDialog.ResumeAfterDerivedAcademicIntent);

                                await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.DERIVADA);

                                context.Wait(MenuDialog.MessageReceivedAsync);
                                break;
                            }
                        }
                        else
                        {
                            var userName = context.UserData.GetValue <Sesion>("sesion").Nombre;
                            var message  = context.MakeMessage();
                            message.Text = $"Uhmmm... {userName} estoy entrenándome para ayudarte más adelante con este tipo de dudas.{Environment.NewLine} Pero recuerda que vía Contacto UPC:  http://www.upc.edu.pe/servicios/contacto-upc puedes resolver tus dudas o consultas.";

                            context.PrivateConversationData.SetValue("custom", message.Text);

                            await context.PostAsync(message);

                            await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.INVALIDO);

                            //context.Wait(MenuDialog.ResumeGetAcademicIntent);
                            context.Wait(MenuDialog.MessageReceivedAsync);
                        }
                    }
                    else
                    {
                        //ExistValidIntent = false

                        //context.Call(new SinScoreDialog(), MenuDialog.ResumeAfterDerivedAcademicIntent);

                        var userName = context.UserData.GetValue <Sesion>("sesion").NombreApePaterno;

                        var message = context.MakeMessage();
                        message.Text = $"Uhmmm... {userName} estoy entrenándome para ayudarte más adelante con este tipo de dudas.{Environment.NewLine} Pero recuerda que vía Contacto UPC:  http://www.upc.edu.pe/servicios/contacto-upc puedes resolver tus dudas o consultas.";

                        context.PrivateConversationData.SetValue("custom", message.Text);

                        await context.PostAsync(message);

                        //context.Call(new MenuDialog(), MenuDialog.ResumeAfterUnknownAcademicIntent);
                        await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.INVALIDO);

                        context.Wait(MenuDialog.MessageReceivedAsync);
                    }
                }
                else
                { //ExistIntent = false
                  //await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.INVALIDO);
                  //context.Call(new SinScoreDialog(), MenuDialog.ResumeAfterUnknownAcademicIntent);
                    var userName = context.UserData.GetValue <Sesion>("sesion").NombreApePaterno;

                    string sinScoreDialogSpeech =
                        $"Uhmmm... {userName} estoy entrenándome para ayudarte más adelante con este tipo de dudas.{Environment.NewLine}. Pero recuerda que vía Contacto UPC: http://www.upc.edu.pe/servicios/contacto-upc puedes resolver tus dudas o consultas";

                    await context.PostAsync(sinScoreDialogSpeech);

                    //context.Call(new MenuDialog(), MenuDialog.ResumeAfterUnknownAcademicIntent);

                    await ActualizarSolicitud(context, AppConstant.EstadoSolicitud.INVALIDO);

                    context.Wait(MenuDialog.MessageReceivedAsync);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                BaseData.LogError(ex);
            }
        }