// Use this for initialization
    void Start()
    {
        // Loading Storage json with the Rules, files must be in the Streaming Assets Folder
        var storagetPath = Application.streamingAssetsPath + "/MultiCharacterv4.0/multicharstorage.json";
        var storage      = AssetStorage.FromJson(File.ReadAllText(storagetPath));

        //Loading Scenario information with data regarding characters and dialogue
        var iatPath = Application.streamingAssetsPath + "/MultiCharacterv4.0/scenario.json";

        _iat = IntegratedAuthoringToolAsset.FromJson(File.ReadAllText(iatPath), storage);


        var currentState = IATConsts.INITIAL_DIALOGUE_STATE;


        // Getting a list of all the Characters
        _rpcList = _iat.Characters.ToList();

        //Saving the World Model
        _worldModel = _iat.WorldModel;



        ChooseCharacterMenu();
    }
Example #2
0
        public AddOrEditActionTemplateForm(WorldModelAsset asset, Name eventTemplate = null, int priority = 0)
        {
            InitializeComponent();

            _eventTemplate = eventTemplate;
            _asset         = asset;

            //validationRules
            textBoxSubject.AllowNil          = false;
            textBoxSubject.AllowComposedName = false;

            //defaultValues
            textBoxSubject.Value   = WellFormedNames.Name.UNIVERSAL_SYMBOL;
            textBoxObject.Value    = WellFormedNames.Name.UNIVERSAL_SYMBOL;
            textBoxTarget.Value    = WellFormedNames.Name.UNIVERSAL_SYMBOL;
            priorityFieldBox.Value = priority;

            if (eventTemplate != null)
            {
                this.Text = "Update";
                this.addOrEditButton.Text = "Update";
                textBoxSubject.Value      = eventTemplate.GetNTerm(2);
                textBoxObject.Value       = eventTemplate.GetNTerm(3);
                textBoxTarget.Value       = eventTemplate.GetNTerm(4);
            }
        }
 public IntegratedAuthoringToolAsset()
 {
     m_dialogues   = new DialogActionDictionary();
     Characters    = new List <RolePlayCharacterAsset>();
     WorldModel    = new WorldModelAsset();
     eventTriggers = new EventTriggers();
 }
Example #4
0
        private void AddEffects(WorldModelAsset wm)
        {
            var a1 = EventHelper.ActionEnd("John", "Speak([x],[y],*,*)", "Sarah");
            var a2 = EventHelper.ActionEnd("John", "Shoot", "Sarah");
            var a3 = (Name)"Event(Action-End , [s], *, John)";
            var a4 = (Name)"Event(Action-End , [s], Surf, [t])";

            wm.addActionTemplate(a1, 1);
            wm.addActionTemplate(a2, 1);
            wm.addActionTemplate(a3, 1);
            wm.addActionTemplate(a4, 1);

            wm.AddActionEffect(a1, new EffectDTO()
            {
                PropertyName = (Name)"Has(Floor)", NewValue = (Name)"Player"
            });
            wm.AddActionEffect(a2, new EffectDTO()
            {
                PropertyName = (Name)"DialogueState(Player)", NewValue = (Name)"Start"
            });
            wm.AddActionEffect(a3, new EffectDTO()
            {
                PropertyName = (Name)"Has(Floor)", NewValue = (Name)"False"
            });
            wm.AddActionEffect(a4, new EffectDTO()
            {
                PropertyName = (Name)"DialogueState([t])", NewValue = (Name)"[s]"
            });
        }
Example #5
0
        protected void OnAssetDataLoaded(WorldModelAsset asset)
        {
            _wmAsset = asset;

            DataSet DS = new DataSet();

            DataTable table = new DataTable();

            table.TableName = "Table";
            table.Columns.Add("Action");
            table.Columns.Add("Subject");
            table.Columns.Add("Target");
            table.Columns.Add("Priority");

            foreach (var a in asset.GetAllActions())
            {
                var aName = a.Item1;
                table.Rows.Add(aName.GetNTerm(3), aName.GetNTerm(2), aName.GetNTerm(4), a.Item2);
            }

            DS.Tables.Add(table);

            dataGridViewEventTemplates.DataSource = DS;

            this.dataGridViewEventTemplates.DataMember = "Table";

            dataGridViewEventTemplates.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;

            if (asset.GetAllActions().FirstOrDefault() != null)
            {
                dataGridViewEffects.DataSource          = asset.GetAllEventEffects()[asset.GetAllActions().FirstOrDefault().Item1];
                dataGridViewEffects.Columns[0].Visible  = false;
                dataGridViewEffects.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            }

            if (asset.GetAllEventEffects().Count == 0)
            {
                button1.Enabled             = false;
                button2.Enabled             = false;
                buttonRemoveAttRule.Enabled = false;
                buttonEditAttRule.Enabled   = false;
                button4.Enabled             = false;
                addEffectDTO.Enabled        = false;
            }
            else
            {
                button1.Enabled             = true;
                button2.Enabled             = true;
                buttonRemoveAttRule.Enabled = true;
                buttonEditAttRule.Enabled   = true;
                button4.Enabled             = true;
                addEffectDTO.Enabled        = true;
            }
        }
Example #6
0
        private void LoadWorldModelForm()
        {
            var wm = WorldModelAsset.LoadFromFile(LoadedAsset.m_worldModelSource.Source);

            _wmForm             = new WorldModelWF.MainForm();
            _wmForm.LoadedAsset = wm;

            this.pathTextBoxWorldModel.Text = LoadableAsset <WorldModelAsset> .ToRelativePath(LoadedAsset.AssetFilePath, this.LoadedAsset.m_worldModelSource.Source);

            _wmForm.Refresh();
            FormHelper.ShowFormInContainerControl(groupBox7, _wmForm);
        }
Example #7
0
    void LoadedScenario()
    {
        var currentState = IATConsts.INITIAL_DIALOGUE_STATE;

        // Getting a list of all the Characters
        _rpcList = _iat.Characters.ToList();

        //Saving the World Model
        _worldModel = _iat.WorldModel;

        Debug.Log("Loading has finished");

        isReady = true;
        ChooseCharacterMenu();
    }
    private IEnumerator LoadScenario(ScenarioData data)
    {
        ClearButtons();

        _iat = data.IAT;

        _introPanel.SetActive(true);
        _introText.text = string.Format("<b>{0}</b>\n\n\n{1}", _iat.ScenarioName, _iat.ScenarioDescription);
        previousState   = "";
        var characterSources = _iat.GetAllCharacterSources().ToList();
        var addedDialogs     = new List <string>();

        _wm = WorldModelAsset.LoadFromFile(_iat.GetWorldModelSource().Source);
        foreach (var source in characterSources)
        {
            var rpc = RolePlayCharacterAsset.LoadFromFile(source.Source);
            rpc.LoadAssociatedAssets();
            if (rpc.CharacterName.ToString() == "Player")
            {
                Player = rpc;
                _iat.BindToRegistry(Player.DynamicPropertiesRegistry);
                continue;
            }
            _iat.BindToRegistry(rpc.DynamicPropertiesRegistry);
            AddButton(characterSources.Count <= 2 ? "Start" : rpc.CharacterName.ToString(),
                      () =>
            {
                Debug.Log("Interacted with the start button");
                var body         = m_bodies.FirstOrDefault(b => b.BodyName == rpc.BodyName);
                _agentController = new AgentControler(data, rpc, _iat, body.CharaterArchtype, m_characterAnchor, m_dialogController);
                StopAllCoroutines();
                _agentController.storeFinalScore(_finalScore);
                _agentController.Start(this, VersionMenu);
                _agentController.startingTime = this.startingTime;

                InstantiateScore();
            });
        }
        if (m_scenarios.Length > 1)
        {
            AddButton("Back to Scenario Selection Menu", () =>
            {
                _iat = null;
                LoadScenarioMenu();
            });
        }
        yield return(nextframe);
    }
        public AddorEditEffect(WorldModelAsset wm, Name eventTemplate, int _index, EffectDTO effectToEdit = null)
        {
            InitializeComponent();

            this._wm       = wm;
            _eventTemplate = eventTemplate;

            //DefaultValues
            newValue.Value     = WellFormedNames.Name.BuildName("True");
            propertyName.Value = WellFormedNames.Name.BuildName("Bel(A)");
            observerName.Value = WellFormedNames.Name.BuildName("*");

            //Restrictions
            index = _index;
            newValue.AllowUniversal = false;


            _subject = eventTemplate.GetNTerm(2);

            propertyName.AllowNil       = false;
            propertyName.AllowUniversal = false;
            propertyName.AllowLiteral   = false;

            _effectToEdit = effectToEdit;

            if (effectToEdit != null)
            {
                this.Text           = "Edit Effect";
                this.addEffect.Text = "Update";

                newValue.Value     = effectToEdit.NewValue;
                propertyName.Value = effectToEdit.PropertyName;
                observerName.Value = effectToEdit.ObserverAgent;
            }
            else
            {
                _effectToEdit = new EffectDTO()
                {
                    NewValue      = newValue.Value,
                    PropertyName  = propertyName.Value,
                    ObserverAgent = observerName.Value,
                }
            };
        }
Example #10
0
    // Use this for initialization
    void Start()
    {
        // Loading Storage json with the Rules, files must be in the Streaming Assets Folder
        var storagetPath = Application.streamingAssetsPath + "/SingleCharacterv4.0/storage.json";
        var storage      = AssetStorage.FromJson(File.ReadAllText(storagetPath));

        //Loading Scenario information with data regarding characters and dialogue
        var iatPath = Application.streamingAssetsPath + "/SingleCharacterv4.0/scenario.json";

        _iat = IntegratedAuthoringToolAsset.FromJson(File.ReadAllText(iatPath), storage);

        var currentState = IATConsts.INITIAL_DIALOGUE_STATE;

        // Getting a list of all the Characters
        _rpcList = _iat.Characters.ToList();

        //Saving the World Model
        _worldModel = _iat.WorldModel;

        _playerRpc          = _rpcList.Find(x => x.CharacterName.ToString().Contains("Player"));
        _playerRpc.IsPlayer = true;
    }
Example #11
0
        static void Main(string[] args)
        {
            var iat = IntegratedAuthoringToolAsset.LoadFromFile("../../../Examples/CiF-Tutorial/JobInterview.iat");

            rpcList = new List <RolePlayCharacterAsset>();
            var wm = new WorldModelAsset();

            wm.AddActionEffect((Name)"Event(Action-End, *, Speak(*,*,*,*), [t])", new EffectDTO()
            {
                PropertyName  = (Name)"Has(Floor)",
                NewValue      = (Name)"[t]",
                ObserverAgent = (Name)"*"
            });

            wm.AddActionEffect((Name)"Event(Action-End, [i], Speak([cs],[ns],*,*), SELF)", new EffectDTO()
            {
                PropertyName  = (Name)"DialogueState([i])",
                NewValue      = (Name)"[ns]",
                ObserverAgent = (Name)"[t]"
            });


            wm.AddActionEffect((Name)"Event(Action-End, SELF, Speak([cs],[ns],*,*), [t])", new EffectDTO()
            {
                PropertyName  = (Name)"DialogueState([t])",
                NewValue      = (Name)"[ns]",
                ObserverAgent = (Name)"[i]"
            });

            wm.SaveToFile("../../../Examples/WM-Tutorial/WorldModel.wm");
            foreach (var source in iat.GetAllCharacterSources())
            {
                var rpc = RolePlayCharacterAsset.LoadFromFile(source.Source);


                //rpc.DynamicPropertiesRegistry.RegistDynamicProperty(Name.BuildName("Volition"),cif.VolitionPropertyCalculator);
                rpc.LoadAssociatedAssets();

                iat.BindToRegistry(rpc.DynamicPropertiesRegistry);

                rpcList.Add(rpc);
            }


            foreach (var actor in rpcList)
            {
                foreach (var anotherActor in rpcList)
                {
                    if (actor != anotherActor)
                    {
                        var changed = new[] { EventHelper.ActionEnd(anotherActor.CharacterName.ToString(), "Enters", "Room") };
                        actor.Perceive(changed);
                    }
                }
                //         actor.SaveToFile("../../../Examples/" + actor.CharacterName + "-output1" + ".rpc");
            }



            List <Name>    _events  = new List <Name>();
            List <IAction> _actions = new List <IAction>();

            IAction action = null;

            while (true)
            {
                _actions.Clear();
                foreach (var rpc in rpcList)
                {
                    rpc.Tick++;

                    Console.WriteLine("Character perceiving: " + rpc.CharacterName + " its mood: " + rpc.Mood);

                    rpc.Perceive(_events);
                    var decisions = rpc.Decide();
                    _actions.Add(decisions.FirstOrDefault());

                    foreach (var act in decisions)
                    {
                        Console.WriteLine(rpc.CharacterName + " has this action: " + act.Name);
                    }
                    rpc.SaveToFile("../../../Examples/WM-Tutorial/" + rpc.CharacterName + "-output" + ".rpc");
                }

                _events.Clear();

                var randomGen = new Random(Guid.NewGuid().GetHashCode());

                var pos = randomGen.Next(rpcList.Count);
                int i   = 0;

                var initiator = rpcList[pos];


                action = _actions.ElementAt(pos);

                Console.WriteLine();
                if (action == null)
                {
                    Console.WriteLine(initiator.CharacterName + " does not have any action to do ");
                }

                if (action != null)
                {
                    var initiatorName = initiator.CharacterName.ToString();
                    var targetName    = action.Target.ToString();
                    var nextState     = action.Parameters[1].ToString();
                    var currentState  = action.Parameters[0].ToString();

                    Console.WriteLine("Action: " + initiatorName + " does " + action.Name + " to " +
                                      targetName + "\n" + action.Parameters[1]);

                    _events.Add(EventHelper.ActionEnd(initiatorName, action.Name.ToString(),
                                                      action.Target.ToString()));



                    Console.WriteLine();
                    Console.WriteLine("Dialogue:");
                    Console.WriteLine("Current State: " + currentState);
                    if (iat.GetDialogueActions(action.Parameters[0], action.Parameters[1], action.Parameters[2], action.Parameters[3]).FirstOrDefault() != null)
                    {
                        Console.WriteLine(initiator.CharacterName + " says: ''" +
                                          iat.GetDialogueActions(action.Parameters[0], action.Parameters[1], action.Parameters[2], action.Parameters[3]).FirstOrDefault().Utterance + "'' to " + targetName);
                    }
                    else
                    {
                        Console.WriteLine(initiator.CharacterName + " says: " + "there is no dialogue suited for this action");
                    }


                    // WORLD MODEL
                    var effects = wm.Simulate(_events.ToArray());
                    foreach (var ef in effects)
                    {
                        if (ef.ObserverAgent == (Name)"*")
                        {
                            foreach (var rpc in rpcList)
                            {
                                var proChange =
                                    EventHelper.PropertyChange(ef.PropertyName.ToString(), ef.NewValue.ToString(), "World");
                                rpc.Perceive(proChange);
                            }
                        }

                        else
                        {
                            var proChange =
                                EventHelper.PropertyChange(ef.PropertyName.ToString(), ef.NewValue.ToString(), "World");
                            rpcList.Find(x => x.CharacterName == ef.ObserverAgent).Perceive(proChange);
                        }
                    }

                    Console.WriteLine("Next State: " + nextState);
                }
                Console.WriteLine();
                Console.ReadKey();
            }
        }
Example #12
0
        private static WorldModelAsset BuildWorldModelAsset()
        {
            var wm = new WorldModelAsset();

            return(wm);
        }
Example #13
0
 public MainForm(WorldModelAsset asset)
 {
     InitializeComponent();
     OnAssetDataLoaded(asset);
 }
Example #14
0
        private void HandleEffects(IAction action, RolePlayCharacterAsset actor, DialogueStateActionDTO dialog)
        {
            if (LoadedAsset.m_worldModelSource == null)
            {
                return;
            }

            if (LoadedAsset.m_worldModelSource.Source == null)
            {
                return;
            }

            if (LoadedAsset.m_worldModelSource.Source == "")
            {
                return;
            }

            var wm = WorldModelAsset.LoadFromFile(LoadedAsset.m_worldModelSource.Source);

            var target = action.Target;

            var toString = "Speak(" + dialog.CurrentState + "," + dialog.NextState + "," + dialog.Meaning + "," + dialog.Style + ")";
            var ev       = EventHelper.ActionEnd(actor.CharacterName.ToString(), toString, target.ToString());

            foreach (var a in agentsInChat)
            {
                a.Perceive(ev);
            }
            var    effects = wm.Simulate(new[] { ev });
            string toWrite = "";

            toWrite += "Effects: \n";

            Dictionary <string, List <string> > observerAgents = new Dictionary <string, List <string> >();

            foreach (var eff in effects)
            {
                var evt = EventHelper.PropertyChange(eff.PropertyName.ToString(), eff.NewValue.ToString(), actor.CharacterName.ToString());
                foreach (var a in agentsInChat)
                {
                    if (eff.ObserverAgent == a.CharacterName || eff.ObserverAgent.ToString() == "*")
                    {
                        if (!observerAgents.ContainsKey(a.CharacterName.ToString()))
                        {
                            observerAgents.Add(a.CharacterName.ToString(), new List <string>()
                            {
                                evt.GetNTerm(3).ToString()
                            });
                        }
                        else
                        {
                            observerAgents[a.CharacterName.ToString()].Add(evt.GetNTerm(3).ToString());
                        }

                        a.Perceive(evt);
                    }
                }
            }
            foreach (var o in observerAgents)
            {
                toWrite += o.Key + ": ";

                foreach (var e in o.Value)
                {
                    var value = agentsInChat.Find(x => x.CharacterName.ToString() == o.Key).GetBeliefValue(e);

                    toWrite += e + " = " + value + ", ";
                }
                toWrite  = toWrite.Substring(0, toWrite.Length - 2);
                toWrite += "\n";
            }

            if (effects.Any())
            {
                textBoxBelChat_TextChanged(null, null);
            }

            if (effectTickBox.Checked)
            {
                EditorTools.WriteText(richTextBoxChat,
                                      toWrite, Color.Black, true);
            }
        }