*** empty log message ***

This commit is contained in:
David Rose 2001-10-20 07:49:20 +00:00
parent 982eea6f49
commit 73dfaaf6ca
3 changed files with 102 additions and 0 deletions

View File

@ -17,6 +17,20 @@
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
// Function: SmoothMover::set_scale
// Access: Published
// Description: Specifies the current scale that should be applied to
// the transform. This is not smoothed along with pos
// and hpr, but rather takes effect immediately; it is
// only here at all so we can return a complete matrix
// in get_smooth_mat().
////////////////////////////////////////////////////////////////////
INLINE bool SmoothMover::
set_scale(const LVecBase3f &scale) {
return set_sx(scale[0]) | set_sy(scale[1]) | set_sz(scale[2]);
}
////////////////////////////////////////////////////////////////////
// Function: SmoothMover::set_scale
// Access: Published
@ -70,6 +84,26 @@ set_sz(float sz) {
return result;
}
////////////////////////////////////////////////////////////////////
// Function: SmoothMover::set_pos
// Access: Published
// Description: Specifies the position of the SmoothMover at a
// particular time in the past. When mark_position() is
// called, this will be recorded (along with hpr and
// timestamp) in a position report, which will then be
// used along with all other position reports to
// determine the smooth position at any particular
// instant.
//
// The return value is true if any parameter has changed
// since the last call to set_pos(), or false if they
// are the same.
////////////////////////////////////////////////////////////////////
INLINE bool SmoothMover::
set_pos(const LVecBase3f &pos) {
return set_x(pos[0]) | set_y(pos[1]) | set_z(pos[2]);
}
////////////////////////////////////////////////////////////////////
// Function: SmoothMover::set_pos
// Access: Published
@ -126,6 +160,26 @@ set_z(float z) {
return result;
}
////////////////////////////////////////////////////////////////////
// Function: SmoothMover::set_hpr
// Access: Published
// Description: Specifies the orientation of the SmoothMover at a
// particular time in the past. When mark_position() is
// called, this will be recorded (along with hpr and
// timestamp) in a position report, which will then be
// used along with all other position reports to
// determine the smooth position at any particular
// instant.
//
// The return value is true if any parameter has changed
// since the last call to set_hpr(), or false if they
// are the same.
////////////////////////////////////////////////////////////////////
INLINE bool SmoothMover::
set_hpr(const LVecBase3f &hpr) {
return set_h(hpr[0]) | set_p(hpr[1]) | set_r(hpr[2]);
}
////////////////////////////////////////////////////////////////////
// Function: SmoothMover::set_hpr
// Access: Published

View File

@ -62,6 +62,23 @@ SmoothMover::
~SmoothMover() {
}
////////////////////////////////////////////////////////////////////
// Function: SmoothMover::set_mat
// Access: Published
// Description: Specifies the scale, hpr, and pos for the SmoothMover
// at some particular point, based on the matrix.
////////////////////////////////////////////////////////////////////
bool SmoothMover::
set_mat(const LMatrix4f &mat) {
bool result = false;
LVecBase3f scale, hpr, pos;
if (decompose_matrix(mat, scale, hpr, pos)) {
result = set_scale(scale) | set_hpr(hpr) | set_pos(pos);
}
return result;
}
////////////////////////////////////////////////////////////////////
// Function: SmoothMover::mark_position
// Access: Published
@ -247,6 +264,31 @@ compute_smooth_position(double timestamp) {
}
}
////////////////////////////////////////////////////////////////////
// Function: SmoothMover::get_latest_position
// Access: Published
// Description: Updates the smooth_pos (and smooth_hpr, etc.) members
// to reflect the absolute latest position known for
// this avatar. This may result in a pop to the most
// recent position.
//
// Returns true if the latest position is known, false
// otherwise.
////////////////////////////////////////////////////////////////////
bool SmoothMover::
get_latest_position() {
if (_points.empty()) {
// Nothing to do if there are no points.
return false;
}
const SamplePoint &point = _points.back();
set_smooth_pos(point._pos, point._hpr, point._timestamp);
_smooth_forward_velocity = 0.0;
_smooth_rotational_velocity = 0.0;
return true;
}
////////////////////////////////////////////////////////////////////
// Function: SmoothMover::output
// Access: Published

View File

@ -52,6 +52,7 @@ PUBLISHED:
// This method is just used to specify a scale which is only used
// when composing the matrix for return by get_smooth_mat(). It
// might change from time to time, but it is not smoothed.
INLINE bool set_scale(const LVecBase3f &scale);
INLINE bool set_scale(float sx, float sy, float sz);
INLINE bool set_sx(float sx);
INLINE bool set_sy(float sy);
@ -62,16 +63,20 @@ PUBLISHED:
// mark_position(). The return value of each function is true if
// the parameter value has changed, or false if it remains the same
// as last time.
INLINE bool set_pos(const LVecBase3f &pos);
INLINE bool set_pos(float x, float y, float z);
INLINE bool set_x(float x);
INLINE bool set_y(float y);
INLINE bool set_z(float z);
INLINE bool set_hpr(const LVecBase3f &hpr);
INLINE bool set_hpr(float h, float p, float r);
INLINE bool set_h(float h);
INLINE bool set_p(float p);
INLINE bool set_r(float r);
bool set_mat(const LMatrix4f &mat);
INLINE void set_timestamp();
INLINE void set_timestamp(double timestamp);
@ -80,6 +85,7 @@ PUBLISHED:
INLINE void compute_smooth_position();
void compute_smooth_position(double timestamp);
bool get_latest_position();
INLINE const LPoint3f &get_smooth_pos() const;
INLINE const LVecBase3f &get_smooth_hpr() const;