public GameObject FindClosetToFollow(FollowerJob newJob, BeliefControler beliefControler, FactionCom factionCom) { var applcableFactions = _factionLst.Values.Where(i => i.Leader.beliefControler.LeftLeaning == beliefControler.LeftLeaning && i.Leader.normalPersonAI.HasJob); if (applcableFactions.Count() == 0) { return(null); } SortedList <float, Faction> canadiets = new SortedList <float, Faction>(); Faction tMin = null; foreach (var go in applcableFactions) { float diff = Mathf.Abs(go.Leaning - beliefControler.TotalLeaning); canadiets.Add(diff, go); } int n = (int)System.Math.Max(canadiets.Count * 0.3f, 1); while (canadiets.Count > n) { canadiets.RemoveAt(canadiets.IndexOfValue(canadiets.Last().Value)); } tMin = Helper.FindClosest(canadiets.Values.Select(i => i.Leader), factionCom.normalPersonAI.Home.door).Faction; factionCom.Faction = tMin; tMin.AddMember(factionCom); return(tMin.Leader.beliefControler.gameObject); }
void GiveFollowerJob() { var newJob = new FollowerJob() { beliefControler = beliefControler, agent = agent, FactionCom = _factionCom, Camera = camera }; var cloest = PeopleInfo.Instance.FindClosetToFollow(newJob, beliefControler, _factionCom); if (cloest == null) { return; } _factionCom.FollowerJob = newJob; newJob.following = cloest.transform; _worker.GiveJob(newJob); }