Exemplo n.º 1
0
        /// <summary>
        /// Calculates Cohesive movement for flock agent by averaging the distances between it
        /// and its neighbors.
        /// </summary>
        /// <param name="flockAgent"></param>
        /// <param name="context"></param>
        /// <param name="contextCount"></param>
        /// <param name="flock"></param>
        /// <returns></returns>
        public override Vector2 CalculateMove(FlockAgent flockAgent, Transform[] context, int contextCount, Flock flock)
        {
            if (contextCount == 0)
            {
                return(Vector2.zero);
            }

            _cohesionMove = Vector2.zero;

            for (int i = 0; i < contextCount; ++i)
            {
                _cohesionMove += (Vector2)context[i].position;
            }

            _cohesionMove /= contextCount;
            _cohesionMove -= flockAgent.Position;

            return(_cohesionMove);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Instantiates all flocking agents and populates the agents list.
        /// </summary>
        private void InstantiateAgents()
        {
            Agents = new FlockAgent[_numberOfAgents];

            for (int i = 0; i < _numberOfAgents; ++i)
            {
                _tempAgentPosition = Random.insideUnitSphere * _numberOfAgents * AgentsDensityInverse;
                _tempAgentRotation = Quaternion.Euler(transform.forward * Random.Range(0, 360));

                _tempFlockAgent = Instantiate(
                    _agentPrefab.gameObject,
                    _tempAgentPosition,
                    _tempAgentRotation,
                    _transform
                    ).GetComponent <FlockAgent>();

                _tempFlockAgent.Name = "Agent " + i;

                Agents[i] = _tempFlockAgent;
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Calculates movement for flocking agents.
 /// </summary>
 /// <param name="flockAgent"></param>
 /// <param name="context"></param>
 /// <param name="flock"></param>
 /// <returns></returns>
 public abstract Vector2 CalculateMove(FlockAgent flockAgent, Transform[] context, int contextCount, Flock flock);