コード例 #1
0
        public override int _FindNeighbors(Func <SteeringAgent, bool> _callback)
        {
            var  agent_count    = agents.Count;
            var  neighbor_count = 0;
            long current_frame  = _scene_tree != null?_scene_tree.GetFrame() : -_last_frame;

            if (current_frame != _last_frame)
            {
                _last_frame = current_frame;
                var owner_position = agent.position;

                foreach (var current_agent in agents)
                {
                    if (current_agent != agent)
                    {
                        var distance_squared = owner_position.DistanceSquaredTo(current_agent.position);
                        var range_to         = radius + current_agent.bounding_radius;
                        if (distance_squared > range_to * range_to)
                        {
                            if (_callback(current_agent))
                            {
                                current_agent.is_tagged = true;
                                neighbor_count++;
                                continue;
                            }
                        }
                    }
                    current_agent.is_tagged = false;
                }
            }
            else
            {
                foreach (var current_agent in agents)
                {
                    if (current_agent != agent && current_agent.is_tagged)
                    {
                        if (_callback(current_agent))
                        {
                            neighbor_count++;
                        }
                    }
                }
            }
            return(neighbor_count);
        }