/** * PANDA 3D SOFTWARE * Copyright (c) Carnegie Mellon University. All rights reserved. * * All use of this software is subject to the terms of the revised BSD * license. You should have received a copy of this license along * with this source code in a file named "LICENSE." * * @file driveInterface.I * @author drose * @date 2002-03-12 */ /** * Sets the speed of full forward motion, when the mouse is at the very top of * the window. This is in units (e.g. feet) per second. */ INLINE void DriveInterface:: set_forward_speed(PN_stdfloat speed) { _forward_speed = speed; } /** * Returns the speed of full forward motion, when the mouse is at the very top * of the window. This is in units (e.g. feet) per second. */ INLINE PN_stdfloat DriveInterface:: get_forward_speed() const { return _forward_speed; } /** * Sets the speed of full reverse motion, when the mouse is at the very bottom * of the window. This is in units (e.g. feet) per second. */ INLINE void DriveInterface:: set_reverse_speed(PN_stdfloat speed) { _reverse_speed = speed; } /** * Returns the speed of full reverse motion, when the mouse is at the very * bottom of the window. This is in units (e.g. feet) per second. */ INLINE PN_stdfloat DriveInterface:: get_reverse_speed() const { return _reverse_speed; } /** * Sets the maximum rate at which the user can rotate left or right, when the * mouse is at the very edge of the window. This is in degrees per second. */ INLINE void DriveInterface:: set_rotate_speed(PN_stdfloat speed) { _rotate_speed = speed; } /** * Returns the maximum rate at which the user can rotate left or right, when * the mouse is at the very edge of the window. This is in degrees per * second. */ INLINE PN_stdfloat DriveInterface:: get_rotate_speed() const { return _rotate_speed; } /** * Sets the size of the horizontal bar in the center of the screen that * represents the "dead zone" of vertical motion: the region in which the * mouse does not report vertical motion. This is in a fraction of the window * height, so 0.5 will set a dead zone as large as half the screen. */ INLINE void DriveInterface:: set_vertical_dead_zone(PN_stdfloat speed) { _vertical_dead_zone = speed; } /** * Returns the size of the horizontal bar in the center of the screen that * represents the "dead zone" of vertical motion: the region in which the * mouse does not report vertical motion. This is in a fraction of the window * height, so 0.5 will set a dead zone as large as half the screen. */ INLINE PN_stdfloat DriveInterface:: get_vertical_dead_zone() const { return _vertical_dead_zone; } /** * Sets the size of the vertical bar in the center of the screen that * represents the "dead zone" of horizontal motion: the region in which the * mouse does not report horizontal motion. This is in a fraction of the * window width, so 0.5 will set a dead zone as large as half the screen. */ INLINE void DriveInterface:: set_horizontal_dead_zone(PN_stdfloat speed) { _horizontal_dead_zone = speed; } /** * Returns the size of the vertical bar in the center of the screen that * represents the "dead zone" of horizontal motion: the region in which the * mouse does not report horizontal motion. This is in a fraction of the * window width, so 0.5 will set a dead zone as large as half the screen. */ INLINE PN_stdfloat DriveInterface:: get_horizontal_dead_zone() const { return _horizontal_dead_zone; } /** * Sets the amount of time, in seconds, it takes between the time an up or * down arrow key is pressed and the time it registers full forward or * backward motion. */ INLINE void DriveInterface:: set_vertical_ramp_up_time(PN_stdfloat ramp_up_time) { _vertical_ramp_up_time = ramp_up_time; } /** * Returns the amount of time, in seconds, it takes between the time an up or * down arrow key is pressed and the time it registers full forward or * backward motion. */ INLINE PN_stdfloat DriveInterface:: get_vertical_ramp_up_time() const { return _vertical_ramp_up_time; } /** * Sets the amount of time, in seconds, it takes between the time an up or * down arrow key is released and the time it registers no motion. */ INLINE void DriveInterface:: set_vertical_ramp_down_time(PN_stdfloat ramp_down_time) { _vertical_ramp_down_time = ramp_down_time; } /** * Returns the amount of time, in seconds, it takes between the time an up or * down arrow key is released and the time it registers no motion. */ INLINE PN_stdfloat DriveInterface:: get_vertical_ramp_down_time() const { return _vertical_ramp_down_time; } /** * Sets the amount of time, in seconds, it takes between the time a left or * right arrow key is pressed and the time it registers full rotation. */ INLINE void DriveInterface:: set_horizontal_ramp_up_time(PN_stdfloat ramp_up_time) { _horizontal_ramp_up_time = ramp_up_time; } /** * Returns the amount of time, in seconds, it takes between the time a left or * right arrow key is pressed and the time it registers full rotation. */ INLINE PN_stdfloat DriveInterface:: get_horizontal_ramp_up_time() const { return _horizontal_ramp_up_time; } /** * Sets the amount of time, in seconds, it takes between the time a left or * right arrow key is released and the time it registers no motion. */ INLINE void DriveInterface:: set_horizontal_ramp_down_time(PN_stdfloat ramp_down_time) { _horizontal_ramp_down_time = ramp_down_time; } /** * Returns the amount of time, in seconds, it takes between the time a left or * right arrow key is released and the time it registers no motion. */ INLINE PN_stdfloat DriveInterface:: get_horizontal_ramp_down_time() const { return _horizontal_ramp_down_time; } /** * Returns the speed of the previous update in units/sec */ INLINE PN_stdfloat DriveInterface:: get_speed() const { return _speed; } /** * Returns the rot_speed of the previous update in units/sec */ INLINE PN_stdfloat DriveInterface:: get_rot_speed() const { return _rot_speed; } /** * Returns the driver's position. */ INLINE const LPoint3 &DriveInterface:: get_pos() const { return _xyz; } INLINE PN_stdfloat DriveInterface:: get_x() const { return _xyz[0]; } INLINE PN_stdfloat DriveInterface:: get_y() const { return _xyz[1]; } INLINE PN_stdfloat DriveInterface:: get_z() const { return _xyz[2]; } /** * Directly sets the driver's position. */ INLINE void DriveInterface:: set_pos(const LVecBase3 &vec) { _xyz = vec; } INLINE void DriveInterface:: set_pos(PN_stdfloat x, PN_stdfloat y, PN_stdfloat z) { _xyz.set(x, y, z); } INLINE void DriveInterface:: set_x(PN_stdfloat x) { _xyz[0] = x; } INLINE void DriveInterface:: set_y(PN_stdfloat y) { _xyz[1] = y; } INLINE void DriveInterface:: set_z(PN_stdfloat z) { _xyz[2] = z; } /** * Returns the driver's orientation. */ INLINE const LVecBase3 &DriveInterface:: get_hpr() const { return _hpr; } INLINE PN_stdfloat DriveInterface:: get_h() const { return _hpr[0]; } INLINE PN_stdfloat DriveInterface:: get_p() const { return _hpr[1]; } INLINE PN_stdfloat DriveInterface:: get_r() const { return _hpr[2]; } /** * Directly sets the driver's orientation. */ INLINE void DriveInterface:: set_hpr(const LVecBase3 &hpr) { set_hpr(hpr[0], hpr[1], hpr[2]); } INLINE void DriveInterface:: set_hpr(PN_stdfloat h, PN_stdfloat p, PN_stdfloat r) { set_h(h); set_p(p); set_r(r); } INLINE void DriveInterface:: set_h(PN_stdfloat h) { _hpr[0] = _hpr_quantize * floor(h / _hpr_quantize + 0.5f); } INLINE void DriveInterface:: set_p(PN_stdfloat p) { _hpr[1] = _hpr_quantize * floor(p / _hpr_quantize + 0.5f); } INLINE void DriveInterface:: set_r(PN_stdfloat r) { _hpr[2] = _hpr_quantize * floor(r / _hpr_quantize + 0.5f); } /** * Changes the state of the ignore_mouse flag. If this flag is true, the * DriveInterface will ignore mouse down button events (but still recognize * mouse up button events); the user will not be able to start the * DriveInterface going again if it is stopped, but if the user is currently * holding down a mouse button it will not stop immediately until the user * eventually releases the button. */ INLINE void DriveInterface:: set_ignore_mouse(bool ignore_mouse) { _ignore_mouse = ignore_mouse; } /** * Returns the current setting of the ignore_mouse flag. See * set_ignore_mouse(). */ INLINE bool DriveInterface:: get_ignore_mouse() const { return _ignore_mouse; } /** * Changes the state of the force_mouse flag. If this flag is true, the mouse * button need not be held down in order to drive the avatar around. */ INLINE void DriveInterface:: set_force_mouse(bool force_mouse) { _force_mouse = force_mouse; } /** * Returns the current setting of the force_mouse flag. See * set_force_mouse(). */ INLINE bool DriveInterface:: get_force_mouse() const { return _force_mouse; } /** * If stop_this_frame is true, the next time the frame is computed no motion * will be allowed, and then the flag is reset to false. This can be used to * prevent too much movement when we know a long time has artificially * elapsed, for instance when we take a screenshot, without munging the clock * for everything else. */ INLINE void DriveInterface:: set_stop_this_frame(bool stop_this_frame) { _stop_this_frame = stop_this_frame; } /** * Returns the current setting of the stop_this_frame flag. See * set_stop_this_frame(). */ INLINE bool DriveInterface:: get_stop_this_frame() const { return _stop_this_frame; }