// 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(); }
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(); }
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]" }); }
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; } }
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); }
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, } }; }
// 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; }
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(); } }
private static WorldModelAsset BuildWorldModelAsset() { var wm = new WorldModelAsset(); return(wm); }
public MainForm(WorldModelAsset asset) { InitializeComponent(); OnAssetDataLoaded(asset); }
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); } }