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); } } }
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(); } } }