Exemple #1
0
    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);
    }