void CCoverEvaluator::evaluate_cover(const CCoverPoint *cover_point, float weight) { #ifdef DEBUG //DBG().level_info(this).add_item(cover_point->position(), D3DCOLOR_XRGB(0,255,0)); #endif CMonsterSquad *squad = monster_squad().get_squad(m_object); if (squad->is_locked_cover(cover_point->level_vertex_id())) return; if (fis_zero(weight)) return; float dest_distance = m_dest_position.distance_to(cover_point->position()); if ((dest_distance <= m_min_distance) && (m_current_distance > dest_distance)) return; if((dest_distance >= m_max_distance) && (m_current_distance < dest_distance)) return; Fvector direction; float y,p; direction.sub (m_dest_position,cover_point->position()); direction.getHP (y,p); float high_cover_value = ai().level_graph().high_cover_in_direction(y,cover_point->level_vertex_id()); float low_cover_value = ai().level_graph().low_cover_in_direction(y,cover_point->level_vertex_id()); float cover_value = _min(high_cover_value, low_cover_value); float value = cover_value; if (ai().level_graph().neighbour_in_direction(direction,cover_point->level_vertex_id())) value += 10.f; value /= weight; if (value >= m_best_value) return; m_selected = cover_point; m_best_value = value; }