00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "aiCharacter.h"
00017
00018 AICharacter::AICharacter(string model_name, NodePath model_np, double mass, double movt_force, double max_force) {
00019 _name = model_name;
00020 _ai_char_np = model_np;
00021
00022 _mass = mass;
00023 _max_force = max_force;
00024 _movt_force = movt_force;
00025
00026 _velocity = LVecBase3f(0.0, 0.0, 0.0);
00027 _steering_force = LVecBase3f(0.0, 0.0, 0.0);
00028
00029 _steering = new AIBehaviors();
00030 _steering->_ai_char = this;
00031
00032 _pf_guide = false;
00033 }
00034
00035 AICharacter::~AICharacter() {
00036 }
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 void AICharacter::update() {
00048
00049 if(!_steering->is_off(_steering->_none)) {
00050
00051 LVecBase3f old_pos = _ai_char_np.get_pos();
00052
00053 LVecBase3f steering_force = _steering->calculate_prioritized();
00054
00055 LVecBase3f acceleration = steering_force / _mass;
00056
00057 _velocity = acceleration;
00058
00059 LVecBase3f direction = _steering->_steering_force;
00060 direction.normalize();
00061
00062 _ai_char_np.set_pos(old_pos + _velocity) ;
00063
00064 if(steering_force.length() > 0) {
00065 _ai_char_np.look_at(old_pos + (direction * 5));
00066 _ai_char_np.set_h(_ai_char_np.get_h() + 180);
00067 _ai_char_np.set_p(-_ai_char_np.get_p());
00068 _ai_char_np.set_r(-_ai_char_np.get_r());
00069 }
00070 }
00071 else {
00072 _steering->_steering_force = LVecBase3f(0.0, 0.0, 0.0);
00073 _steering->_seek_force = LVecBase3f(0.0, 0.0, 0.0);
00074 _steering->_flee_force = LVecBase3f(0.0, 0.0, 0.0);
00075 _steering->_pursue_force = LVecBase3f(0.0, 0.0, 0.0);
00076 _steering->_evade_force = LVecBase3f(0.0, 0.0, 0.0);
00077 _steering->_arrival_force = LVecBase3f(0.0, 0.0, 0.0);
00078 _steering->_flock_force = LVecBase3f(0.0, 0.0, 0.0);
00079 _steering->_wander_force = LVecBase3f(0.0, 0.0, 0.0);
00080 }
00081 }
00082
00083 LVecBase3f AICharacter::get_velocity() {
00084 return _velocity;
00085 }
00086
00087 void AICharacter::set_velocity(LVecBase3f velocity) {
00088 _velocity = velocity;
00089 }
00090
00091 double AICharacter::get_mass() {
00092 return _mass;
00093 }
00094
00095 void AICharacter::set_mass(double m) {
00096 _mass = m;
00097 }
00098
00099 double AICharacter::get_max_force() {
00100 return _max_force;
00101 }
00102
00103 void AICharacter::set_max_force(double max_force) {
00104 _max_force = max_force;
00105 }
00106
00107 NodePath AICharacter::get_node_path() {
00108 return _ai_char_np;
00109 }
00110
00111 void AICharacter::set_node_path(NodePath np) {
00112 _ai_char_np = np;
00113 }
00114
00115 AIBehaviors * AICharacter::get_ai_behaviors() {
00116 return _steering;
00117 }
00118
00119 void AICharacter::set_char_render(NodePath render) {
00120 _window_render = render;
00121 }
00122
00123 NodePath AICharacter::get_char_render() {
00124 return _window_render;
00125 }
00126
00127 void AICharacter::set_pf_guide(bool pf_guide) {
00128 _pf_guide = pf_guide;
00129 }