コード例 #1
0
    public void AddNeighbour(GameObject agent)
    {
        PedestrianBehavior agentBehavior = agent.GetComponent <PedestrianBehavior>();

        if (agentBehavior.mState == PedestrianState.kPedestrianState_Dead)
        {
            return;
        }

        if (agentBehavior.GetLeader() == null && !agentBehavior.IsLeader())
        {
            if (IsLeader() && !mNeighbours.Contains(agent))
            {
                agentBehavior.SetLeader(gameObject);
                mNeighbours.Add(agent);
            }

            //Autogenerate leader of the flocking group
            else if (!IsLeader() && GetLeader() == null)
            {
                ConvertToLeader(true);
                agentBehavior.ConvertToLeader(false);
                agentBehavior.SetLeader(gameObject);
                mNeighbours.Add(agent);
            }
        }
    }
コード例 #2
0
    public void RemoveNeighbour(GameObject agent)
    {
        PedestrianBehavior agentBehavior = agent.GetComponent <PedestrianBehavior>();

        if (IsLeader() && mNeighbours.Contains(agent))
        {
            mNeighbours.Remove(agent);
            agentBehavior.RemoveLeader();

            //If the leader has no neighbours
            if (mNeighbours.Count <= 1)
            {
                ConvertToLeader(false);
            }
        }
        else if (mLeader != null)
        {
            if (mLeader == agent && agentBehavior.IsLeader())
            {
                RemoveLeader();
            }
        }
    }