Panda3D
Loading...
Searching...
No Matches
aiCharacter.cxx
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file aiCharacter.cxx
10 * @author Deepak, John, Navin
11 * @date 2009-09-08
12 */
13
14#include "aiCharacter.h"
15
16AICharacter::AICharacter(std::string model_name, NodePath model_np, double mass, double movt_force, double max_force) {
17 _name = model_name;
18 _ai_char_np = model_np;
19
20 _mass = mass;
21 _max_force = max_force;
22 _movt_force = movt_force;
23
24 _velocity = LVecBase3(0.0, 0.0, 0.0);
25 _steering_force = LVecBase3(0.0, 0.0, 0.0);
26
27 _world = nullptr;
28
29 _steering = new AIBehaviors();
30 _steering->_ai_char = this;
31
32 _pf_guide = false;
33}
34
35AICharacter::~AICharacter() {
36 nassertv(_world == nullptr);
37}
38
39/**
40 * Each character's update will update its AI and physics based on his
41 * resultant steering force. This also makes the character look in the
42 * direction of the force.
43 */
45update() {
46 if (!_steering->is_off(_steering->_none)) {
47 LVecBase3 old_pos = _ai_char_np.get_pos();
48 LVecBase3 steering_force = _steering->calculate_prioritized();
49 LVecBase3 acceleration = steering_force / _mass;
50
51 _velocity = acceleration;
52
53 LVecBase3 direction = _steering->_steering_force;
54 direction.normalize();
55
56 _ai_char_np.set_pos(old_pos + _velocity) ;
57
58 if (steering_force.length() > 0) {
59 _ai_char_np.look_at(old_pos + (direction * 5));
60 _ai_char_np.set_h(_ai_char_np.get_h() + 180);
61 _ai_char_np.set_p(-_ai_char_np.get_p());
62 _ai_char_np.set_r(-_ai_char_np.get_r());
63 }
64 } else {
65 _steering->_steering_force = LVecBase3(0.0, 0.0, 0.0);
66 _steering->_seek_force = LVecBase3(0.0, 0.0, 0.0);
67 _steering->_flee_force = LVecBase3(0.0, 0.0, 0.0);
68 _steering->_pursue_force = LVecBase3(0.0, 0.0, 0.0);
69 _steering->_evade_force = LVecBase3(0.0, 0.0, 0.0);
70 _steering->_arrival_force = LVecBase3(0.0, 0.0, 0.0);
71 _steering->_flock_force = LVecBase3(0.0, 0.0, 0.0);
72 _steering->_wander_force = LVecBase3(0.0, 0.0, 0.0);
73 }
74}
75
76LVecBase3 AICharacter::get_velocity() {
77 return _velocity;
78}
79
80void AICharacter::set_velocity(LVecBase3 velocity) {
81 _velocity = velocity;
82}
83
84double AICharacter::get_mass() {
85 return _mass;
86}
87
88void AICharacter::set_mass(double m) {
89 _mass = m;
90}
91
92double AICharacter::get_max_force() {
93 return _max_force;
94}
95
96void AICharacter::set_max_force(double max_force) {
97 _max_force = max_force;
98}
99
100NodePath AICharacter::get_node_path() {
101 return _ai_char_np;
102}
103
104void AICharacter::set_node_path(NodePath np) {
105 _ai_char_np = np;
106}
107
108AIBehaviors * AICharacter::get_ai_behaviors() {
109 return _steering;
110}
111
112void AICharacter::set_char_render(NodePath render) {
113 _window_render = render;
114}
115
116NodePath AICharacter::get_char_render() {
117 return _window_render;
118}
119
120std::string AICharacter::get_name() {
121 return _name;
122}
123
124void AICharacter::set_pf_guide(bool pf_guide) {
125 _pf_guide = pf_guide;
126}
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This class implements all the steering behaviors of the AI framework, such as seek,...
Definition aiBehaviors.h:44
void update()
Each character's update will update its AI and physics based on his resultant steering force.
NodePath is the fundamental system for disambiguating instances, and also provides a higher-level int...
Definition nodePath.h:159