示例#1
0
    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();
    }
示例#2
0
        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);
        }
示例#3
0
    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();
    }
示例#4
0
 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);
         }
     }
 }
示例#5
0
 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");
 }
示例#6
0
        private void PerceiveActionEnd(RolePlayCharacterAsset rpc)
        {
            var e = EventHelper.ActionEnd(Subject, Name, Value);

            Debug.WriteLine(e.ToString());
            rpc.Perceive(e);
        }
示例#7
0
        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();
        }
示例#8
0
        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);
        }
示例#10
0
        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()));
            }
        }
示例#11
0
    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;
    }
示例#14
0
 /// <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>();
 }
示例#15
0
        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));
            }
        }
示例#16
0
        /// <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);
         });
     }
 }
示例#18
0
 /// <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);
     }
 }
示例#19
0
    // 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();
    }
示例#21
0
        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;
            }
        }
示例#22
0
        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);
        }
示例#23
0
        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);
    }
示例#25
0
        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);
        }
示例#27
0
        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();
        }
示例#28
0
    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";
        }
    }
示例#29
0
        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;
        }
示例#30
0
    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);
    }
示例#31
0
        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");
            });
        }