00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00014 00015 #include "pursue.h" 00016 00017 Pursue::Pursue(AICharacter *ai_ch, NodePath target_object, float pursue_wt) { 00018 _ai_char = ai_ch; 00019 00020 _pursue_target = target_object; 00021 _pursue_weight = pursue_wt; 00022 00023 _pursue_done = false; 00024 } 00025 00026 Pursue::~Pursue() { 00027 } 00028 00036 00038 00039 LVecBase3f Pursue::do_pursue() { 00040 assert(_pursue_target && "pursue target not assigned"); 00041 00042 LVecBase3f present_pos = _ai_char->_ai_char_np.get_pos(_ai_char->_window_render); 00043 double target_distance = (_pursue_target.get_pos(_ai_char->_window_render) - present_pos).length(); 00044 00045 if(int(target_distance) == 0) { 00046 _pursue_done = true; 00047 _ai_char->_steering->_steering_force = LVecBase3f(0.0, 0.0, 0.0); 00048 _ai_char->_steering->_pursue_force = LVecBase3f(0.0, 0.0, 0.0); 00049 return(LVecBase3f(0.0, 0.0, 0.0)); 00050 } 00051 else { 00052 _pursue_done = false; 00053 } 00054 00055 _pursue_direction = _pursue_target.get_pos(_ai_char->_window_render) - present_pos; 00056 _pursue_direction.normalize(); 00057 00058 LVecBase3f desired_force = _pursue_direction * _ai_char->_movt_force; 00059 return(desired_force); 00060 }