00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00014 00015 #include "seek.h" 00016 00017 Seek::Seek(AICharacter *ai_ch, NodePath target_object, float seek_wt) { 00018 _ai_char = ai_ch; 00019 00020 _seek_position = target_object.get_pos(_ai_char->_window_render); 00021 _seek_weight = seek_wt; 00022 00023 _seek_direction = _seek_position - _ai_char->_ai_char_np.get_pos(_ai_char->_window_render); 00024 _seek_direction.normalize(); 00025 00026 _seek_done = false; 00027 } 00028 00029 Seek::Seek(AICharacter *ai_ch, LVecBase3f pos, float seek_wt) { 00030 _ai_char = ai_ch; 00031 00032 _seek_position = pos; 00033 _seek_weight = seek_wt; 00034 00035 _seek_direction = _seek_position - _ai_char->_ai_char_np.get_pos(_ai_char->_window_render); 00036 _seek_direction.normalize(); 00037 00038 _seek_done = false; 00039 } 00040 00041 Seek::~Seek() { 00042 } 00043 00050 00052 00053 LVecBase3f Seek::do_seek() { 00054 double target_distance = (_seek_position - _ai_char->_ai_char_np.get_pos(_ai_char->_window_render)).length(); 00055 00056 if(int(target_distance) == 0) { 00057 _seek_done = true; 00058 _ai_char->_steering->_steering_force = LVecBase3f(0.0, 0.0, 0.0); 00059 _ai_char->_steering->seek_off(); 00060 return(LVecBase3f(0.0, 0.0, 0.0)); 00061 } 00062 00063 LVecBase3f desired_force = _seek_direction * _ai_char->_movt_force; 00064 return(desired_force); 00065 }