示例#1
0
        public static void UpdateAppraisalAvatar(Vector2 appraisalAction, GameObject actor, GameObject target)
        {
            float r = 0.05f;

            Vector2 appraisalActor  = new Vector2();
            Vector2 appraisalTarget = new Vector2();

            for (int i = 0; i < DamagedBotBehavior.Avatars.Length; i++)
            {
                if (DamagedBotBehavior.Avatars[i].GameObjectAvatar.Equals(actor))
                {
                    DamagedBotBehavior.Avatars[i].DictionaryAppraisalActor.TryGetValue(target, out appraisalActor);

                    appraisalActor = (1 - r) * appraisalActor + (r * AI_behaviour.ComplexConjugate(appraisalAction));

                    DamagedBotBehavior.Avatars[i].DictionaryAppraisalActor.Remove(target);
                    DamagedBotBehavior.Avatars[i].DictionaryAppraisalActor.Add(target, appraisalActor);
                }

                if (DamagedBotBehavior.Avatars[i].GameObjectAvatar.Equals(target))
                {
                    DamagedBotBehavior.Avatars[i].DictionaryAppraisalActor.TryGetValue(actor, out appraisalTarget);

                    appraisalTarget = (1 - r) * appraisalTarget + (r * appraisalAction);

                    DamagedBotBehavior.Avatars[i].DictionaryAppraisalActor.Remove(actor);
                    DamagedBotBehavior.Avatars[i].DictionaryAppraisalActor.Add(actor, appraisalTarget);
                }
            }
        }
示例#2
0
        /*Method to update actor's appraisals
         * to another actors*/
        public void UpdateAppraisalActor(Vector2 appraisalAction, GameObject actor, GameObject target)
        {
            Actor[] actorsInScene = actorGameObject.GetComponent <AI_behaviour>().actors;

            //Magic number
            float r = 0.05f;

            /*First appraisal vector
             * for actor who take action
             * second for the target of this action
             */
            Vector2 appraisalActor  = new Vector2();
            Vector2 appraisalTarget = new Vector2();

            //Foreach actor in scene
            for (int i = 0; i < actorsInScene.Length; i++)
            {
                //for actor
                if (actorsInScene[i].actorGameObject.Equals(actor))
                {
                    //try to get old appraisal for target actor and write it to this actor's appraisal
                    actorsInScene[i].DictionaryAppraisalActor.TryGetValue(target, out appraisalActor);

                    //some computation to redefine appraisal of actor based on action's appraisal value
                    appraisalActor = (1 - r) * appraisalActor + (r * AI_behaviour.ComplexConjugate(appraisalAction));

                    //Redefine field in appraisals data storage of this actor to target actor
                    actorsInScene[i].DictionaryAppraisalActor.Remove(target);
                    actorsInScene[i].DictionaryAppraisalActor.Add(target, appraisalActor);
                }

                //for target
                if (actorsInScene[i].actorGameObject.Equals(target))
                {
                    actorsInScene[i].DictionaryAppraisalActor.TryGetValue(actor, out appraisalTarget);

                    appraisalTarget = (1 - r) * appraisalTarget + (r * appraisalAction);

                    actorsInScene[i].DictionaryAppraisalActor.Remove(actor);
                    actorsInScene[i].DictionaryAppraisalActor.Add(actor, appraisalTarget);
                }
            }
        }