public void GetCharacterResponse() { CurrentCharacter.Perceive(_events); var possibleActions = CurrentCharacter.Decide(); var action = RolePlayCharacterAsset.TakeBestActions(possibleActions).FirstOrDefault(); _events.Clear(); CurrentCharacter.Update(); if (action != null) { var actionKey = action.Key.ToString(); if (actionKey == "Speak") { var nextState = action.Parameters[1]; var dialogues = _integratedAuthoringTool.GetDialogueActionsByState(action.Parameters[0].ToString()); var characterDialogue = dialogues.FirstOrDefault(dto => string.Equals(dto.Meaning.ToString(), action.Parameters[2].ToString(), StringComparison.CurrentCultureIgnoreCase) && string.Equals(dto.Style.ToString(), action.Parameters[3].ToString(), StringComparison.CurrentCultureIgnoreCase)); if (characterDialogue != null) { UpdateFeedbackScores(characterDialogue, "Client"); _events.Add((Name)string.Format("Event(Property-Change,{0},DialogueState(Player),{1})", CurrentCharacter.CharacterName, nextState)); UpdateCurrentState(); PlayDialogueAudio(characterDialogue.FileName); GetCharacterDialogueSuccessEvent?.Invoke(Localization.GetAndFormat(characterDialogue.FileName, false, ScenarioCode)); } } } GetCharacterStrongestEmotion(); }
public void Test_EA_AppraiseEvent() { var asset = BuildTestAsset(); var rpc = new RolePlayCharacterAsset(); asset.AddOrUpdateAppraisalRule(new AppraisalRuleDTO() { EventMatchingTemplate = (Name)"Event(Action-End,*,*,*)", AppraisalVariables = new AppraisalVariables(new List <AppraisalVariableDTO>() { new AppraisalVariableDTO() { Name = OCCAppraisalVariables.PRAISEWORTHINESS, Value = (Name)"5" } }) }); var m_kb = new KB((Name)"Matt"); asset.AppraiseEvents(new List <Name>() { EventHelper.ActionEnd("Matt", "Speak(*,*,*,*)", "Sarah") }, new ConcreteEmotionalState(), new AM(), m_kb); Assert.IsNotNull(asset.DefaultEmotionDisposition); }
public MultiCharacterAgentController(SingleCharacterDemo.ScenarioData scenarioData, RolePlayCharacterAsset rpc, IntegratedAuthoringToolAsset iat, UnityBodyImplement archetype, Transform anchor, DialogController dialogCrt) { m_scenarioData = scenarioData; m_iat = iat; m_rpc = rpc; m_dialogController = dialogCrt; _body = GameObject.Instantiate(archetype); UnityEngine.Random.InitState((int)System.DateTime.Now.Ticks); var r = UnityEngine.Random.Range(0, 600); _body.GetComponentInChildren <Animator>().Play(0, -1, r); _body.tag = rpc.CharacterName.ToString(); just_talked = false; lastAction = null; var t = _body.transform; t.SetParent(anchor, false); t.localPosition = Vector3.zero; t.localRotation = Quaternion.identity; t.localScale = Vector3.one; HeadLookController head = _body.GetComponentInChildren <HeadLookController>(); head._target = GameObject.FindGameObjectWithTag("MainCamera"); m_dialogController.SetCharacterLabel(m_rpc.CharacterName.ToString()); // m_rpc.Perceive(new Name[] { EventHelper.PropertyChange("DialogueState(Player)", "Start", "world") }); lastDialog = new DialogueStateActionDTO(); }
public MainForm() { InitializeComponent(); string[] args = Environment.GetCommandLineArgs(); if (args.Length <= 1) { Reset(true); } else { _saveFileName = args[1]; try { _rpcAsset = RolePlayCharacterAsset.LoadFromFile((args[1])); if (_rpcAsset.ErrorOnLoad != null) { MessageBox.Show(_rpcAsset.ErrorOnLoad, Resources.ErrorDialogTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); } Reset(false); } catch (Exception ex) { MessageBox.Show(ex.Message, Resources.ErrorDialogTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); Reset(true); } } }
private void DeleteEntity(RolePlayCharacterAsset rpc) { /* * This entity has been destroy by the agent, delete it from the KB * */ rpc.RemoveBelief("Entity(" + Value + ")", "SELF"); rpc.RemoveBelief("Quantity(" + Value + ")", "SELF"); rpc.RemoveBelief("IsCollectable(" + Value + ")", "SELF"); rpc.RemoveBelief("IsCooker(" + Value + ")", "SELF"); rpc.RemoveBelief("IsCookable(" + Value + ")", "SELF"); rpc.RemoveBelief("IsEdible(" + Value + ")", "SELF"); rpc.RemoveBelief("IsEquippable(" + Value + ")", "SELF"); rpc.RemoveBelief("IsFuel(" + Value + ")", "SELF"); rpc.RemoveBelief("IsFueled(" + Value + ")", "SELF"); rpc.RemoveBelief("IsGrower(" + Value + ")", "SELF"); rpc.RemoveBelief("IsHarvestable(" + Value + ")", "SELF"); rpc.RemoveBelief("IsPickable(" + Value + ")", "SELF"); rpc.RemoveBelief("IsStewer(" + Value + ")", "SELF"); rpc.RemoveBelief("IsChoppable(" + Value + ")", "SELF"); rpc.RemoveBelief("IsHammerable(" + Value + ")", "SELF"); rpc.RemoveBelief("IsDiggable(" + Value + ")", "SELF"); rpc.RemoveBelief("IsMineable(" + Value + ")", "SELF"); rpc.RemoveBelief("PosX(" + Value + ")", "SELF"); rpc.RemoveBelief("PosZ(" + Value + ")", "SELF"); }
private void PerceiveActionEnd(RolePlayCharacterAsset rpc) { var e = EventHelper.ActionEnd(Subject, Name, Value); Debug.WriteLine(e.ToString()); rpc.Perceive(e); }
private void buttonCreateCharacter_Click(object sender, EventArgs e) { _rpcForm = new RolePlayCharacterWF.MainForm(); var asset = _rpcForm.CreateAndSaveEmptyAsset(false); if (asset == null) { return; } var rpcAsset = RolePlayCharacterAsset.LoadFromFile(asset.AssetFilePath); FormHelper.ShowFormInContainerControl(this.tabControlIAT.TabPages[1], _rpcForm); this.tabControlIAT.SelectTab(1); this.currentRPCTabIndex = 1; _rpcForm.LoadedAsset = rpcAsset; LoadedAsset.AddNewCharacterSource(new CharacterSourceDTO() { Source = asset.AssetFilePath }); _characterSources.DataSource = LoadedAsset.GetAllCharacterSources().ToList(); _characterSources.Refresh(); SetModified(); }
public void Test_RPC_AssetSources() { var kb = new KB((Name)"Matt"); var rpc = new RolePlayCharacterAsset { BodyName = "Male", VoiceName = "Male", CharacterName = (Name)"Matt", m_kb = kb, }; var edmPath = "Tests/EmptyEDM"; var cifPath = "Tests/EmptyCIF"; var siPath = "Tests/EmtpySI"; var eaPath = "Tests/EmptyEA"; rpc.CommeillFautAssetSource = cifPath; rpc.EmotionalDecisionMakingSource = edmPath; rpc.SocialImportanceAssetSource = siPath; rpc.EmotionalAppraisalAssetSource = eaPath; Assert.IsNotNull(rpc.DynamicPropertiesRegistry); Assert.IsNotEmpty(rpc.CommeillFautAssetSource); Assert.IsNotEmpty(rpc.EmotionalDecisionMakingSource); Assert.IsNotEmpty(rpc.SocialImportanceAssetSource); Assert.IsNotEmpty(rpc.EmotionalAppraisalAssetSource); }
public static IntegratedAuthoringToolAsset LoadFromFile(string filename) { IntegratedAuthoringToolAsset iat; using (var f = File.Open(filename, FileMode.Open, FileAccess.Read)) { var serializer = new JSONSerializer(); iat = serializer.Deserialize <IntegratedAuthoringToolAsset>(f); } iat.Characters = new List <RolePlayCharacterAsset>(); try { foreach (var source in iat.CharacterSources) { iat.CurrentRpcSource = source; var character = RolePlayCharacterAsset.LoadFromFile(source.Source); iat.Characters.Add(character); } } catch (Exception ex) { iat.ErrorOnLoad = "An error occured when trying to load the RPC " + iat.CurrentRpcSource.Name + " at " + iat.CurrentRpcSource.Source + ". Please check if the path is correct."; return(iat); } return(iat); }
public void UpdatePerception(RolePlayCharacterAsset rpc) { string b = rpc.GetBeliefValue("Entity(" + GUID + "," + Prefab + ")"); if (b == null || !(b.Equals(Quantity.ToString()))) { rpc.Perceive(EventHelper.PropertyChange("Entity(" + GUID + "," + Prefab + ")", Quantity.ToString(), rpc.CharacterName.ToString())); } b = rpc.GetBeliefValue("ChopWorkable(" + GUID + ")"); if (b == null || !(b.Equals(ChopWorkable.ToString()))) { rpc.Perceive(EventHelper.PropertyChange("ChopWorkable(" + GUID + ")", ChopWorkable.ToString(), rpc.CharacterName.ToString())); } b = rpc.GetBeliefValue("HammerWorkable(" + GUID + ")"); if (b == null || !(b.Equals(HammerWorkable.ToString()))) { rpc.Perceive(EventHelper.PropertyChange("HammerWorkable(" + GUID + ")", HammerWorkable.ToString(), rpc.CharacterName.ToString())); } b = rpc.GetBeliefValue("DigWorkable(" + GUID + ")"); if (b == null || !(b.Equals(DigWorkable.ToString()))) { rpc.Perceive(EventHelper.PropertyChange("DigWorkable(" + GUID + ")", DigWorkable.ToString(), rpc.CharacterName.ToString())); } b = rpc.GetBeliefValue("MineWorkable(" + GUID + ")"); if (b == null || !(b.Equals(MineWorkable.ToString()))) { rpc.Perceive(EventHelper.PropertyChange("MineWorkable(" + GUID + ")", MineWorkable.ToString(), rpc.CharacterName.ToString())); } b = rpc.GetBeliefValue("Pickable(" + GUID + ")"); if (b == null || !(b.Equals(Pickable.ToString()))) { rpc.Perceive(EventHelper.PropertyChange("Pickable(" + GUID + ")", Pickable.ToString(), rpc.CharacterName.ToString())); } b = rpc.GetBeliefValue("PosX(" + GUID + ")"); if (b == null || !(b.Equals(X.ToString()))) { rpc.Perceive(EventHelper.PropertyChange("PosX(" + GUID + ")", X.ToString(), rpc.CharacterName.ToString())); } /* * The Y-axis is always equal to zero, no need to save it in the knowledge base * */ //b = rpc.GetBeliefValue("PosY(" + GUID + ")"); //if ( b == null || !(b.Equals(Y.ToString()))) // rpc.Perceive(EventHelper.PropertyChange("PosY(" + GUID + ")", Y.ToString(), rpc.CharacterName.ToString())); b = rpc.GetBeliefValue("PosZ(" + GUID + ")"); if (b == null || !(b.Equals(Z.ToString()))) { rpc.Perceive(EventHelper.PropertyChange("PosZ(" + GUID + ")", Z.ToString(), rpc.CharacterName.ToString())); } }
private void LoadGame(RolePlayCharacterAsset rpc) { _playerRpc = rpc; _playerRpc.IsPlayer = true; // Turn off the choose your character panel initialCanvas.gameObject.SetActive(false); //Turning on the Dialogue canvas GameCanvas.gameObject.SetActive(true); // Update character's name in the Game although I'm overcomplicating things a bit. var otherRPCsList = _rpcList; otherRPCsList.Remove(rpc); _agentBodyControlers = new List <UnityBodyImplement>(); foreach (var agent in otherRPCsList) { // Initializing textual for each different character var charName = agent.CharacterName.ToString(); var rand = UnityEngine.Random.Range(0, CharacterBodies.Count); nameToBody.Add(charName, CharacterBodies[rand]); CharacterBodies.RemoveAt(rand); var body = nameToBody[charName]; //Initializing and saving into a list the Body Controller of the First Character var unityBodyImplement = body.GetComponent <UnityBodyImplement>(); body.name = charName; body.GetComponentInChildren <TextMesh>().text = charName; _agentBodyControlers.Add(unityBodyImplement); } _rpcList.Add(_playerRpc); if (introduceAgents) { List <Name> events = new List <Name>(); foreach (var r in _rpcList) { events.Add(EventHelper.ActionEnd(r.CharacterName, (Name)"Enters", (Name)"-")); } foreach (var r in _rpcList) { r.Perceive(events); r.Update(); } } initialized = true; }
public void AddNewCharacter(Name characterName) { if (this.Characters.Any(c => c.CharacterName == characterName)) { throw new Exception("A character with the given name already exists"); } var rpc = new RolePlayCharacterAsset(); rpc.CharacterName = characterName; this.Characters = this.Characters.Concat(new[] { rpc }); }
private void LoadGame(RolePlayCharacterAsset rpc) { Debug.Log("Player chose " + rpc.CharacterName + " number of rpcs " + _rpcList.Count); _playerRpc = rpc; _playerRpc.IsPlayer = true; // Turn off the choose your character panel initialCanvas.gameObject.SetActive(false); //Turning on the Dialogue canvas GameCanvas.gameObject.SetActive(true); // Update character's name in the Game although I'm overcomplicating things a bit. var otherRPCsList = _rpcList; otherRPCsList.Remove(rpc); _agentBodyControlers = new List <UnityBodyImplement>(); // Initializing textual information of first character var firstCharacterName = otherRPCsList.FirstOrDefault().CharacterName.ToString(); CharacterBodies.FirstOrDefault().GetComponentInChildren <TextMesh>().text = firstCharacterName; //Initializing and saving into a list the Body Controller of the First Character var unityBodyImplement = CharacterBodies.FirstOrDefault().GetComponent <UnityBodyImplement>(); unityBodyImplement.gameObject.tag = firstCharacterName; _agentBodyControlers.Add(unityBodyImplement); // Initializing textual information of second character var secondCharacterName = otherRPCsList[otherRPCsList.Count - 1].CharacterName.ToString(); CharacterBodies[CharacterBodies.Count - 1].GetComponentInChildren <TextMesh>().text = secondCharacterName; //Initializing and saving into a list the Body Controller of the second Character unityBodyImplement = CharacterBodies[CharacterBodies.Count - 1].GetComponentInChildren <UnityBodyImplement>(); unityBodyImplement.gameObject.tag = secondCharacterName; _agentBodyControlers.Add(unityBodyImplement); foreach (var e in _agentBodyControlers) { Debug.Log(e.Body); } // This sequence could've been much more generic, I'm just lazy otherRPCsList.Add(rpc); initialized = true; }
/// <summary> /// Base constructor for creating a CrewMember /// </summary> internal CrewMember(RolePlayCharacterAsset rpc = null) : base(rpc) { Skills = new Dictionary <Skill, int>(); RevealedSkills = new Dictionary <Skill, int>(); foreach (Skill skill in Enum.GetValues(typeof(Skill))) { Skills.Add(skill, 0); RevealedSkills.Add(skill, 0); } CrewOpinions = new Dictionary <string, int>(); RevealedCrewOpinions = new Dictionary <string, int>(); }
private void PerceivePropertyChanged(RolePlayCharacterAsset rpc) { /* * Update the KB with the new belief if it is different from the current belief * */ string bv = rpc.GetBeliefValue(Name); if (bv == null || !bv.Equals(Value.ToString())) { Debug.WriteLine(Name + ": " + bv + " -> " + Value.ToString()); rpc.Perceive(EventHelper.PropertyChange(Name, Value, Subject)); } }
/// <summary> /// Adds a new role-play character asset to the scenario. /// </summary> /// <param name="character">The instance of the Role Play Character asset</param> public void AddNewCharacterSource(CharacterSourceDTO dto) { string errorsOnLoad; var asset = RolePlayCharacterAsset.LoadFromFile(dto.Source, out errorsOnLoad); if (errorsOnLoad != null) { throw new Exception(errorsOnLoad); } dto.Id = m_characterSources.Count; dto.Source = ToRelativePath(dto.Source); m_characterSources.Add(dto); }
private void ChooseCharacterMenu(SingleCharacterDemo.ScenarioData data) { ClearButtons(); foreach (var agent in data.IAT.GetAllCharacterSources()) { var rpc = RolePlayCharacterAsset.LoadFromFile(agent.Source); AddButton(rpc.CharacterName.ToString(), () => { _chosenCharacter = rpc.CharacterName; LoadScenario(data); }); } }
/// <summary> /// Constructor for creating a Person /// </summary> internal Person(RolePlayCharacterAsset rpc = null) { if (rpc != null) { RolePlayCharacter = rpc; SetRelations(); SocialImportance.RegisterKnowledgeBase(RolePlayCharacter.m_kb); Name = RolePlayCharacter.BodyName; Age = Convert.ToInt32(LoadBelief(NPCBelief.Age)); Gender = LoadBelief(NPCBelief.Gender); Nationality = LoadBelief(NPCBelief.Nationality); } }
// Use this for initialization private void Start() { AssetManager.Instance.Bridge = new AssetManagerBridge(); var streamingAssetsPath = Application.streamingAssetsPath; #if UNITY_EDITOR || UNITY_STANDALONE streamingAssetsPath = "file://" + streamingAssetsPath; #endif if (string.IsNullOrEmpty(IATScenario)) { Debug.LogError("Please specify an IAT scenario file!"); return; } iat = IntegratedAuthoringToolAsset.LoadFromFile(IATScenario); var characterSources = iat.GetAllCharacterSources().ToList(); //AGENT 1 agent1RPC = RolePlayCharacterAsset.LoadFromFile(characterSources[1].Source); agent1RPC.LoadAssociatedAssets(); iat.BindToRegistry(agent1RPC.DynamicPropertiesRegistry); //AGENT 2 agent2RPC = RolePlayCharacterAsset.LoadFromFile(characterSources[2].Source); agent2RPC.LoadAssociatedAssets(); iat.BindToRegistry(agent2RPC.DynamicPropertiesRegistry); //PLAYER playerRPC = RolePlayCharacterAsset.LoadFromFile(characterSources[0].Source); playerRPC.LoadAssociatedAssets(); iat.BindToRegistry(playerRPC.DynamicPropertiesRegistry); playerDialogues = DeterminePlayerDialogues(); UpdatePlayerDialogOptions(true); AgentUtterance.text = String.Empty; StartCoroutine(UpdateEmotionalState(1f)); StartCoroutine(DetermineAgentDialogue(0.2f)); NextPageButton.onClick.RemoveAllListeners(); NextPageButton.onClick.AddListener(() => OnNextPage()); PreviousPageButton.onClick.RemoveAllListeners(); PreviousPageButton.onClick.AddListener(() => OnPreviousPage()); RestartButton.onClick.RemoveAllListeners(); RestartButton.onClick.AddListener(() => RestartScene()); }
private void LoadScenario(SingleCharacterDemo.ScenarioData data) { ClearButtons(); _iat = data.IAT; _introPanel.SetActive(true); _introText.text = string.Format("<b>{0}</b>\n\n\n{1}", _iat.ScenarioName, _iat.ScenarioDescription); var characterSources = _iat.GetAllCharacterSources().ToList(); int CharacterCount = 0; foreach (var source in characterSources) { var rpc = RolePlayCharacterAsset.LoadFromFile(source.Source); rpc.LoadAssociatedAssets(); _iat.BindToRegistry(rpc.DynamicPropertiesRegistry); rpcList.Add(rpc); var body = m_bodies.FirstOrDefault(b => b.BodyName == rpc.BodyName); _agentController = new MultiCharacterAgentController(data, rpc, _iat, body.CharaterArchtype, m_characterAnchors[CharacterCount], m_dialogController); StopAllCoroutines(); _agentControllers.Add(_agentController); CharacterCount++; } AddButton("Back to Scenario Selection Menu", () => { _iat = null; LoadScenarioMenu(); }); 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); } } } RandomizeNext(); SetCamera(); }
internal ConfigStore(Platform platform = Platform.Windows) { Platform = platform; ConfigValues = new Dictionary <ConfigKey, float>(); var configText = Templates.ResourceManager.GetString("config"); var contractResolver = new PrivatePropertyResolver(); var settings = new JsonSerializerSettings { ContractResolver = contractResolver }; ConfigValues = JsonConvert.DeserializeObject <Dictionary <ConfigKey, float> >(configText, settings); foreach (var key in (ConfigKey[])Enum.GetValues(typeof(ConfigKey))) { if (!ConfigValues.ContainsKey(key)) { throw new Exception("Config key " + key + " not included in config!"); } } BoatTypes = new Dictionary <string, List <Position> >(); var boatText = Templates.ResourceManager.GetString("boat_config"); BoatTypes = JsonConvert.DeserializeObject <Dictionary <string, List <Position> > >(boatText); GameConfig = new GameConfig().GetConfig(); NameConfig = new NameConfig().GetConfig(); Avatar.Config = new AvatarGeneratorConfig().GetConfig(); AssetManager.Instance.Bridge = new TemplateBridge(); RolePlayCharacter = RolePlayCharacterAsset.LoadFromFile("template_rpc"); EmotionalAppraisal = EmotionalAppraisalAsset.LoadFromFile("template_ea"); EmotionalDecisionMaking = EmotionalDecisionMakingAsset.LoadFromFile("template_edm"); SocialImportance = SocialImportanceAsset.LoadFromFile("template_si"); IntegratedAuthoringTool = IntegratedAuthoringToolAsset.LoadFromFile("template_iat"); switch (Platform) { case Platform.Android: AssetManager.Instance.Bridge = new AndroidBaseBridge(); break; case Platform.iOS: AssetManager.Instance.Bridge = new IOSBaseBridge(); break; case Platform.Windows: AssetManager.Instance.Bridge = new BaseBridge(); break; } }
private static RolePlayCharacterAsset BuildRPCAsset2() { var kb = new KB((Name)"Sarah"); var rpc = new RolePlayCharacterAsset { BodyName = "Female", VoiceName = "Female", CharacterName = (Name)"Sarah", m_kb = kb, }; return(rpc); }
private static RolePlayCharacterAsset BuildRPCAsset3() { var kb = new KB((Name)"Tom"); var rpc = new RolePlayCharacterAsset { BodyName = "Male", VoiceName = "Male", CharacterName = (Name)"Tom", m_kb = kb, }; // rpc.LoadAssociatedAssets(); return(rpc); }
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); }
private static RolePlayCharacterAsset BuildRPCAsset() { var kb = new KB((Name)"Matt"); var rpc = new RolePlayCharacterAsset { BodyName = "Male", VoiceName = "Male", CharacterName = (Name)"Matt", m_kb = kb, }; rpc.LoadAssociatedAssets(new GAIPS.Rage.AssetStorage()); return(rpc); }
public RolePlayCharacterAsset AddCharacter(string filename) { var character = RolePlayCharacterAsset.LoadFromFile(filename); if (this.Characters.Any(c => c.CharacterName == character.CharacterName)) { throw new Exception("A character with the same name already exists."); } this.Characters.Add(character); this.CharacterSources.Add(new CharacterSourceDTO { Name = character.CharacterName, Source = filename }); return(character); }
static void Main(string[] args) { //Loading the asset var rpc = RolePlayCharacterAsset.LoadFromFile("../../../Examples/MCTS-Tutorial/RPC-MCTS.rpc"); rpc.LoadAssociatedAssets(); Console.WriteLine("Starting Mood: " + rpc.Mood); var actions = rpc.Decide(); var action = actions.FirstOrDefault(); foreach (var a in actions) { Console.WriteLine(a.Name.ToString() + " p: " + a.Utility); } Console.ReadKey(); }
public void NextLevel() { CurrentLevel++; _feedbackScores.Clear(); GetFeedbackEvent?.Invoke(_feedbackScores, FeedbackLevel); if (_scenarios.Any(data => data.LevelId.Equals(CurrentLevel))) { CurrentScenario = _scenarios.First(data => data.LevelId.Equals(CurrentLevel)); } else { var validPaths = _allScenarioPaths.Where(p => p.Contains('#')).ToArray(); var prefixes = validPaths.Select(p => p.Substring(0, p.IndexOf('-', p.IndexOf('-') + 1) + 1)).ToList(); var character = new List <string> { "Positive", "Neutral", "Negative" }.OrderBy(dto => random.Next()).First(); var prefix = _isDemo ? _demoScenarioPrefix + _demoUtterance : prefixes.OrderBy(dto => random.Next()).First(); // MaxPoints currently hardcoded to 8 for random scenarios. // TODO Review validity/balance of MaxPoints = 8 CurrentScenario = new ScenarioData(CurrentLevel, _allScenarioPaths.Where(x => x.Contains(prefix)).ToArray(), character, 8, prefix); } if (CurrentScenario != null) { var index = random.Next(CurrentScenario.ScenarioPaths.Length); Debug.Log(CurrentScenario.ScenarioPaths[index]); string error; ScenarioCode = _isDemo ? _demoUtterance.Split('#')[0] : CurrentScenario.ScenarioPaths[index].Replace(CurrentScenario.Prefix, string.Empty).Split('#')[0]; _integratedAuthoringTool = IntegratedAuthoringToolAsset.LoadFromFile(Path.Combine("Scenarios", CurrentScenario.ScenarioPaths[index]), out error); if (!string.IsNullOrEmpty(error)) { Debug.LogError(error); } CurrentCharacter = RolePlayCharacterAsset.LoadFromFile(_integratedAuthoringTool.GetAllCharacterSources().First(c => c.Source.Contains(CurrentScenario.Character)).Source); CurrentCharacter.LoadAssociatedAssets(); _integratedAuthoringTool.BindToRegistry(CurrentCharacter.DynamicPropertiesRegistry); CurrentCharacter.BodyName = random.NextDouble() >= 0.5 ? "Male" : "Female"; } }
private void Reset(bool newFile) { if (newFile) { this.Text = Resources.MainFormTitle; this._rpcAsset = new RolePlayCharacterAsset(); } else { this.Text = Resources.MainFormTitle + " - " + _saveFileName; } textBoxCharacterName.Text = _rpcAsset.CharacterName; textBoxCharacterBody.Text = _rpcAsset.BodyName; textBoxEmotionalAppraisalSource.Text = _rpcAsset.EmotionalAppraisalAssetSource; textBoxEmotionalDecisionMakingSource.Text = _rpcAsset.EmotionalDecisionMakingSource; }
public void NextQuestionnaire() { // Pilot logic to set level id to match CurrentLevel divided by 5, as questionnaires occur every 5 levels. Needs changing if occurance rate of questionnaires change CurrentScenario = new ScenarioData(CurrentLevel / 5, _allScenarioPaths.Where(x => x.Contains("Questions")).ToArray(), "Neutral", 0, "Questionnaire"); string error; // Pilot logic to set different questionnaire depending on how many levels have been played. Needs changing if expected appearence of questionnaire changes ScenarioCode = (CurrentLevel < LevelMax && LevelMax > 0 ? 1 : 2).ToString(); _integratedAuthoringTool = IntegratedAuthoringToolAsset.LoadFromFile(Path.Combine("Scenarios", _allScenarioPaths.First(x => x.Contains("Questions" + ScenarioCode))), out error); if (!string.IsNullOrEmpty(error)) { Debug.LogError(error); } CurrentCharacter = RolePlayCharacterAsset.LoadFromFile(_integratedAuthoringTool.GetAllCharacterSources().First(c => c.Source.Contains("Neutral")).Source); CurrentCharacter.LoadAssociatedAssets(); _integratedAuthoringTool.BindToRegistry(CurrentCharacter.DynamicPropertiesRegistry); }
protected override void OnAssetDataLoaded(RolePlayCharacterAsset asset) { textBoxCharacterName.Text = asset.CharacterName; textBoxCharacterBody.Text = asset.BodyName; eaAssetControl1.SetAsset(asset.EmotionalAppraisalAssetSource, () => { RequestAssetReload(); return EditorTools.GetFieldValue<EmotionalAppraisal.EmotionalAppraisalAsset>(CurrentAsset, "_emotionalAppraisalAsset"); }); edmAssetControl1.SetAsset(asset.EmotionalDecisionMakingSource,() => { RequestAssetReload(); return EditorTools.GetFieldValue<EmotionalDecisionMaking.EmotionalDecisionMakingAsset>(CurrentAsset, "_emotionalDecisionMakingAsset"); }); siAssetControl1.SetAsset(asset.SocialImportanceAssetSource, () => { RequestAssetReload(); return EditorTools.GetFieldValue<SocialImportance.SocialImportanceAsset>(CurrentAsset, "_socialImportanceAsset"); }); }