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); } } }
/*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); } } }