Blender
V3.3
|
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_kdopbvh.h"
#include "BLI_math.h"
#include "BLI_utildefines.h"
#include "BKE_context.h"
#include "BKE_lib_id.h"
#include "BKE_main.h"
#include "BKE_report.h"
#include "BLT_translation.h"
#include "WM_api.h"
#include "WM_types.h"
#include "ED_screen.h"
#include "ED_space_api.h"
#include "ED_transform_snap_object_context.h"
#include "PIL_time.h"
#include "UI_interface.h"
#include "UI_resources.h"
#include "GPU_immediate.h"
#include "DEG_depsgraph.h"
#include "view3d_intern.h"
#include "view3d_navigate.h"
Go to the source code of this file.
Classes | |
struct | WalkTeleport |
struct | WalkInfo |
Macros | |
#define | USE_TABLET_SUPPORT |
#define | JUMP_SPEED_MIN 1.0f |
#define | JUMP_TIME_MAX 0.2f /* s */ |
#define | JUMP_SPEED_MAX sqrtf(2.0f * walk->gravity * walk->jump_height) |
#define | WALK_ROTATE_TABLET_FAC 8.8f /* Higher is faster, relative to region size. */ |
#define | WALK_ROTATE_CONSTANT_FAC DEG2RAD(0.15f) /* Higher is faster, radians per-pixel. */ |
#define | WALK_TOP_LIMIT DEG2RADF(85.0f) |
#define | WALK_BOTTOM_LIMIT DEG2RADF(-80.0f) |
#define | WALK_MOVE_SPEED base_speed |
#define | WALK_BOOST_FACTOR ((void)0, walk->speed_factor) |
#define | WALK_ZUP_CORRECT_FAC 0.1f /* Amount to correct per step. */ |
#define | WALK_ZUP_CORRECT_ACCEL 0.05f /* Increase upright momentum each step. */ |
Typedefs | |
Internal Walk Structs | |
typedef struct WalkTeleport | WalkTeleport |
typedef struct WalkInfo | WalkInfo |
Functions | |
Internal Walk Drawing | |
static int | walkApply (bContext *C, struct WalkInfo *walk, bool is_confirm) |
static float | getVelocityZeroTime (const float gravity, const float velocity) |
static void | drawWalkPixel (const struct bContext *UNUSED(C), ARegion *region, void *arg) |
Walk Operator | |
static int | walk_invoke (bContext *C, wmOperator *op, const wmEvent *event) |
static void | walk_cancel (bContext *C, wmOperator *op) |
static int | walk_modal (bContext *C, wmOperator *op, const wmEvent *event) |
void | VIEW3D_OT_walk (wmOperatorType *ot) |
Internal Walk Logic | |
enum | { WALK_RUNNING = 0 , WALK_CANCEL = 1 , WALK_CONFIRM = 2 } |
static float | base_speed = -1.0f |
static float | userdef_speed = -1.0f |
static void | walk_navigation_mode_set (WalkInfo *walk, eWalkMethod mode) |
static bool | walk_floor_distance_get (RegionView3D *rv3d, WalkInfo *walk, const float dvec[3], float *r_distance) |
static bool | walk_ray_cast (RegionView3D *rv3d, WalkInfo *walk, float r_location[3], float r_normal[3], float *ray_distance) |
static bool | initWalkInfo (bContext *C, WalkInfo *walk, wmOperator *op, const int mval[2]) |
static int | walkEnd (bContext *C, WalkInfo *walk) |
static void | walkEvent (WalkInfo *walk, const wmEvent *event) |
static void | walkMoveCamera (bContext *C, WalkInfo *walk, const bool do_rotate, const bool do_translate, const bool is_confirm) |
static float | getFreeFallDistance (const float gravity, const float time) |
Interactive walk navigation modal operator (similar to walking around in a first person game).
view3d_navigate_fly.c
changes here may apply there too. Definition in file view3d_navigate_walk.c.
#define JUMP_SPEED_MIN 1.0f |
#define JUMP_TIME_MAX 0.2f /* s */ |
#define USE_TABLET_SUPPORT |
Definition at line 56 of file view3d_navigate_walk.c.
#define WALK_MOVE_SPEED base_speed |
#define WALK_ROTATE_TABLET_FAC 8.8f /* Higher is faster, relative to region size. */ |
#define WALK_ZUP_CORRECT_ACCEL 0.05f /* Increase upright momentum each step. */ |
#define WALK_ZUP_CORRECT_FAC 0.1f /* Amount to correct per step. */ |
typedef enum eWalkGravityState eWalkGravityState |
typedef enum eWalkLockState eWalkLockState |
typedef enum eWalkMethod eWalkMethod |
typedef enum eWalkTeleportState eWalkTeleportState |
typedef struct WalkTeleport WalkTeleport |
anonymous enum |
Definition at line 64 of file view3d_navigate_walk.c.
anonymous enum |
Enumerator | |
---|---|
WALK_BIT_FORWARD | |
WALK_BIT_BACKWARD | |
WALK_BIT_LEFT | |
WALK_BIT_RIGHT | |
WALK_BIT_UP | |
WALK_BIT_DOWN |
Definition at line 92 of file view3d_navigate_walk.c.
anonymous enum |
Enumerator | |
---|---|
WALK_RUNNING | |
WALK_CANCEL | |
WALK_CONFIRM |
Definition at line 471 of file view3d_navigate_walk.c.
enum eWalkGravityState |
Enumerator | |
---|---|
WALK_GRAVITY_STATE_OFF | |
WALK_GRAVITY_STATE_JUMP | |
WALK_GRAVITY_STATE_START | |
WALK_GRAVITY_STATE_ON |
Definition at line 111 of file view3d_navigate_walk.c.
enum eWalkLockState |
Enumerator | |
---|---|
WALK_AXISLOCK_STATE_OFF | |
WALK_AXISLOCK_STATE_ACTIVE | |
WALK_AXISLOCK_STATE_DONE |
Definition at line 119 of file view3d_navigate_walk.c.
enum eWalkMethod |
Enumerator | |
---|---|
WALK_MODE_FREE | |
WALK_MODE_GRAVITY |
Definition at line 106 of file view3d_navigate_walk.c.
enum eWalkTeleportState |
Enumerator | |
---|---|
WALK_TELEPORT_STATE_OFF | |
WALK_TELEPORT_STATE_ON |
Definition at line 101 of file view3d_navigate_walk.c.
Definition at line 314 of file view3d_navigate_walk.c.
References BLI_rctf_size_x(), BLI_rctf_size_y(), WalkInfo::depsgraph, ED_view3d_calc_camera_border(), ED_view3d_cameracontrol_object_get(), GPU_COMP_I32, GPU_FETCH_INT_TO_FLOAT, GPU_PRIM_LINES, GPU_SHADER_2D_UNIFORM_COLOR, GPU_vertformat_attr_add(), immBegin(), immBindBuiltinProgram(), immEnd(), immUnbindProgram(), immUniformThemeColorAlpha(), immVertex2i(), immVertexFormat(), pos, WalkInfo::region, WalkInfo::rv3d, WalkInfo::scene, TH_VIEW_OVERLAY, WalkInfo::v3d, WalkInfo::v3d_camera_control, ARegion::winx, ARegion::winy, rctf::xmin, and rctf::ymin.
Referenced by initWalkInfo().
Definition at line 920 of file view3d_navigate_walk.c.
Referenced by walkEvent().
|
static |
Definition at line 481 of file view3d_navigate_walk.c.
References WalkInfo::active_directions, WalkInfo::anim_playing, base_speed, BKE_id_is_editable(), BKE_report(), C, View3D::camera, Object::constraints, copy_v2_v2_int(), CTX_data_ensure_evaluated_depsgraph(), CTX_data_main(), CTX_data_scene(), CTX_wm_manager(), CTX_wm_region(), CTX_wm_region_view3d(), CTX_wm_view3d(), CTX_wm_window(), WalkInfo::depsgraph, WalkInfo::draw_handle_pixel, drawWalkPixel(), WalkTeleport::duration, WalkInfo::dvec_prev, ED_region_draw_cb_activate(), ED_screen_animation_playing(), ED_transform_snap_object_context_create(), ED_view3d_cameracontrol_acquire(), ED_view3d_offset_lock_check(), fabsf, ListBase::first, PhysicsSettings::flag, WalkInfo::gravity, PhysicsSettings::gravity, WalkInfo::gravity_state, WalkInfo::grid, Object::id, if(), WalkInfo::init_mval, WalkInfo::is_cursor_absolute, WalkInfo::is_fast, WalkInfo::is_reversed, WalkInfo::is_slow, WalkInfo::jump_height, WalkInfo::mouse_speed, WalkInfo::need_rotation_keyframe, WalkInfo::need_translation_keyframe, NULL, RegionView3D::persp, PHYS_GLOBAL_GRAVITY, Scene::physics_settings, PIL_check_seconds_timer(), WalkInfo::prev_mval, WalkInfo::redraw, WalkInfo::region, REGION_DRAW_POST_PIXEL, wmOperator::reports, RegionView3D::rflag, RPT_ERROR, WalkInfo::rv3d, RV3D_CAMOB, RV3D_NAVIGATING, RV3D_PERSP, UnitSettings::scale_length, WalkInfo::scene, WalkInfo::snap_context, WalkInfo::speed, WalkInfo::speed_factor, WalkInfo::state, UnitSettings::system, WalkInfo::teleport, WalkInfo::time_lastdraw, WalkInfo::timer, TIMER, ARegion::type, Scene::unit, USER_UNIT_NONE, USER_WALK_GRAVITY, USER_WALK_MOUSE_REVERSE, userdef_speed, WalkInfo::v3d, WalkInfo::v3d_camera_control, WalkInfo::view_height, WALK_AXISLOCK_STATE_OFF, WALK_GRAVITY_STATE_OFF, WALK_MODE_FREE, WALK_MODE_GRAVITY, walk_navigation_mode_set(), WALK_RUNNING, WM_cursor_grab_enable(), WM_event_add_timer(), zero_v3(), and WalkInfo::zlock.
Referenced by walk_invoke().
void VIEW3D_OT_walk | ( | wmOperatorType * | ot | ) |
Definition at line 1434 of file view3d_navigate_walk.c.
References wmOperatorType::cancel, wmOperatorType::description, ED_operator_region_view3d_active(), wmOperatorType::flag, wmOperatorType::idname, wmOperatorType::invoke, wmOperatorType::modal, wmOperatorType::name, ot, wmOperatorType::poll, walk_cancel(), walk_invoke(), and walk_modal().
Referenced by view3d_operatortypes().
|
static |
Definition at line 1377 of file view3d_navigate_walk.c.
References C, wmOperator::customdata, NULL, WalkInfo::state, WALK_CANCEL, and walkEnd().
Referenced by VIEW3D_OT_walk().
|
static |
r_distance | Distance to the hit point |
Definition at line 385 of file view3d_navigate_walk.c.
References add_v3_v3(), BVH_RAYCAST_DIST_MAX, copy_v3_v3(), WalkInfo::depsgraph, ED_transform_snap_object_project_ray(), WalkInfo::grid, mul_v3_v3fl(), ret, WalkInfo::snap_context, WalkInfo::v3d, and RegionView3D::viewinv.
Referenced by walkApply().
|
static |
Definition at line 1352 of file view3d_navigate_walk.c.
References C, CTX_wm_region_view3d(), wmOperator::customdata, initWalkInfo(), MEM_callocN, MEM_freeN, wmEvent::mval, OPERATOR_CANCELLED, OPERATOR_RUNNING_MODAL, RV3D_LOCK_ANY_TRANSFORM, RV3D_LOCK_FLAGS, walkEvent(), and WM_event_add_modal_handler().
Referenced by VIEW3D_OT_walk().
|
static |
Definition at line 1386 of file view3d_navigate_walk.c.
References C, CTX_wm_region(), wmOperator::customdata, wmEvent::customdata, ED_region_tag_redraw(), ED_view3d_camera_lock_undo_push(), ED_view3d_cameracontrol_object_get(), wmOperatorType::name, NC_OBJECT, ND_TRANSFORM, NDOF_MOTION, OPERATOR_FINISHED, OPERATOR_RUNNING_MODAL, RegionView3D::persp, WalkInfo::redraw, WalkInfo::rv3d, RV3D_CAMOB, WalkInfo::timer, TIMER, wmOperator::type, wmEvent::type, WalkInfo::v3d, WalkInfo::v3d_camera_control, walkApply(), walkEnd(), walkEvent(), and WM_event_add_notifier().
Referenced by VIEW3D_OT_walk().
void walk_modal_keymap | ( | wmKeyConfig * | keyconf | ) |
Definition at line 130 of file view3d_navigate_walk.c.
References wmKeyMap::modal_items, NULL, WALK_MODAL_ACCELERATE, WALK_MODAL_AXIS_LOCK_Z, WALK_MODAL_CANCEL, WALK_MODAL_CONFIRM, WALK_MODAL_DECELERATE, WALK_MODAL_DIR_BACKWARD, WALK_MODAL_DIR_BACKWARD_STOP, WALK_MODAL_DIR_DOWN, WALK_MODAL_DIR_DOWN_STOP, WALK_MODAL_DIR_FORWARD, WALK_MODAL_DIR_FORWARD_STOP, WALK_MODAL_DIR_LEFT, WALK_MODAL_DIR_LEFT_STOP, WALK_MODAL_DIR_RIGHT, WALK_MODAL_DIR_RIGHT_STOP, WALK_MODAL_DIR_UP, WALK_MODAL_DIR_UP_STOP, WALK_MODAL_FAST_DISABLE, WALK_MODAL_FAST_ENABLE, WALK_MODAL_GRAVITY_TOGGLE, WALK_MODAL_JUMP, WALK_MODAL_JUMP_STOP, WALK_MODAL_SLOW_DISABLE, WALK_MODAL_SLOW_ENABLE, WALK_MODAL_TELEPORT, WM_modalkeymap_assign(), WM_modalkeymap_ensure(), and WM_modalkeymap_find().
Referenced by view3d_keymap().
|
static |
Definition at line 370 of file view3d_navigate_walk.c.
References WalkInfo::gravity_state, WalkInfo::navigation_mode, WALK_GRAVITY_STATE_OFF, WALK_GRAVITY_STATE_START, WALK_MODE_FREE, and WALK_MODE_GRAVITY.
Referenced by initWalkInfo(), walkApply(), and walkEvent().
|
static |
ray_distance | Distance to the hit point |
r_location | Location of the hit point |
r_normal | Normal of the hit surface, transformed to always face the camera |
Definition at line 429 of file view3d_navigate_walk.c.
References BVH_RAYCAST_DIST_MAX, copy_v3_v3(), WalkInfo::depsgraph, dot_v3v3(), ED_transform_snap_object_project_ray(), WalkInfo::grid, mul_mat3_m4_v3(), negate_v3(), normalize_v3(), NULL, ret, WalkInfo::snap_context, WalkInfo::v3d, and RegionView3D::viewinv.
Referenced by walkEvent().
Definition at line 925 of file view3d_navigate_walk.c.
References WalkInfo::active_directions, add_v3_v3(), angle(), asinf, axis_angle_to_quat(), axis_angle_to_quat_single(), C, copy_m3_m4(), copy_v2_v2(), copy_v2_v2_int(), copy_v3_fl3(), copy_v3_v3(), WalkTeleport::direction, WalkTeleport::duration, WalkInfo::dvec_prev, ELEM, fabsf, float(), getFreeFallDistance(), WalkInfo::gravity, WalkInfo::gravity_state, WalkInfo::grid, WalkTeleport::initial_time, WalkInfo::is_cursor_absolute, WalkInfo::is_fast, WalkInfo::is_reversed, WalkInfo::is_slow, len_squared_v3(), min_ff(), WalkInfo::moffset, WalkInfo::mouse_speed, mul_m3_v3(), mul_qt_qtqt(), mul_v3_fl(), mul_v3_v3fl(), WalkTeleport::navigation_mode, WalkInfo::navigation_mode, WalkInfo::need_rotation_keyframe, WalkInfo::need_translation_keyframe, normalize_v3(), RegionView3D::ofs, OPERATOR_FINISHED, WalkTeleport::origin, RegionView3D::persp, PIL_check_seconds_timer(), WalkInfo::redraw, WalkInfo::region, ret, WalkInfo::rv3d, RV3D_CAMOB, WalkInfo::speed, WalkInfo::speed_jump, WalkTeleport::state, sub_v3_v3v3(), t, WalkInfo::teleport, WalkInfo::time_lastdraw, WalkInfo::view_height, RegionView3D::viewinv, RegionView3D::viewmat, RegionView3D::viewquat, WALK_AXISLOCK_STATE_ACTIVE, WALK_AXISLOCK_STATE_DONE, WALK_BIT_BACKWARD, WALK_BIT_DOWN, WALK_BIT_FORWARD, WALK_BIT_LEFT, WALK_BIT_RIGHT, WALK_BIT_UP, WALK_BOOST_FACTOR, WALK_BOTTOM_LIMIT, walk_floor_distance_get(), WALK_GRAVITY_STATE_JUMP, WALK_GRAVITY_STATE_OFF, WALK_GRAVITY_STATE_ON, WALK_GRAVITY_STATE_START, WALK_MODE_FREE, WALK_MODE_GRAVITY, WALK_MOVE_SPEED, walk_navigation_mode_set(), WALK_ROTATE_CONSTANT_FAC, WALK_ROTATE_TABLET_FAC, WALK_TELEPORT_STATE_OFF, WALK_TELEPORT_STATE_ON, WALK_TOP_LIMIT, WALK_ZUP_CORRECT_ACCEL, WALK_ZUP_CORRECT_FAC, walkMoveCamera(), ARegion::winx, ARegion::winy, x, y, zero_v3(), WalkInfo::zlock, and WalkInfo::zlock_momentum.
Referenced by walk_modal(), and walkEnd().
Definition at line 602 of file view3d_navigate_walk.c.
References C, CTX_wm_manager(), CTX_wm_window(), WalkInfo::draw_handle_pixel, ED_region_draw_cb_exit(), ED_transform_snap_object_context_destroy(), ED_view3d_cameracontrol_release(), MEM_freeN, NULL, OPERATOR_CANCELLED, OPERATOR_FINISHED, OPERATOR_RUNNING_MODAL, WalkInfo::region, RegionView3D::rflag, WalkInfo::rv3d, RV3D_NAVIGATING, WalkInfo::snap_context, WalkInfo::state, WalkInfo::timer, ARegion::type, WalkInfo::v3d_camera_control, WALK_CANCEL, WALK_CONFIRM, WALK_RUNNING, walkApply(), WM_cursor_grab_enable(), and WM_event_remove_timer().
Referenced by walk_cancel(), and walk_modal().
Definition at line 657 of file view3d_navigate_walk.c.
References WalkInfo::active_directions, add_v3_v3(), base_speed, copy_v2_v2(), copy_v2_v2_int(), copy_v3_v3(), wmEvent::customdata, WalkTeleport::direction, blender::math::distance(), WalkTeleport::duration, WalkInfo::dvec_prev, EVT_MODAL_MAP, float(), getVelocityZeroTime(), WalkInfo::gravity, WalkInfo::gravity_state, WalkTeleport::initial_time, WalkInfo::is_cursor_absolute, WalkInfo::is_fast, wmTabletData::is_motion_absolute, WalkInfo::is_slow, ISMOUSE_MOTION, JUMP_SPEED_MAX, JUMP_SPEED_MIN, JUMP_TIME_MAX, MEM_dupallocN, MEM_freeN, min_ff(), WalkInfo::moffset, wmEvent::mval, WalkTeleport::navigation_mode, WalkInfo::navigation_mode, NDOF_MOTION, nor, normalize_v3_length(), NULL, WalkTeleport::origin, P_FINISHING, P_IN_PROGRESS, P_STARTING, PIL_check_seconds_timer(), WalkInfo::prev_mval, WalkInfo::redraw, ret, WalkInfo::rv3d, WalkInfo::speed_jump, WalkTeleport::state, WalkInfo::state, sub_v3_v3v3(), t, wmEvent::tablet, WalkInfo::teleport, WalkInfo::time_lastdraw, WalkInfo::timer, TIMER, wmEvent::type, wmEvent::val, WalkInfo::view_height, RegionView3D::viewinv, WALK_AXISLOCK_STATE_ACTIVE, WALK_AXISLOCK_STATE_DONE, WALK_BIT_BACKWARD, WALK_BIT_DOWN, WALK_BIT_FORWARD, WALK_BIT_LEFT, WALK_BIT_RIGHT, WALK_BIT_UP, WALK_CANCEL, WALK_CONFIRM, WALK_GRAVITY_STATE_JUMP, WALK_GRAVITY_STATE_OFF, WALK_GRAVITY_STATE_ON, WALK_MODAL_ACCELERATE, WALK_MODAL_AXIS_LOCK_Z, WALK_MODAL_CANCEL, WALK_MODAL_CONFIRM, WALK_MODAL_DECELERATE, WALK_MODAL_DIR_BACKWARD, WALK_MODAL_DIR_BACKWARD_STOP, WALK_MODAL_DIR_DOWN, WALK_MODAL_DIR_DOWN_STOP, WALK_MODAL_DIR_FORWARD, WALK_MODAL_DIR_FORWARD_STOP, WALK_MODAL_DIR_LEFT, WALK_MODAL_DIR_LEFT_STOP, WALK_MODAL_DIR_RIGHT, WALK_MODAL_DIR_RIGHT_STOP, WALK_MODAL_DIR_UP, WALK_MODAL_DIR_UP_STOP, WALK_MODAL_FAST_DISABLE, WALK_MODAL_FAST_ENABLE, WALK_MODAL_GRAVITY_TOGGLE, WALK_MODAL_JUMP, WALK_MODAL_JUMP_STOP, WALK_MODAL_SLOW_DISABLE, WALK_MODAL_SLOW_ENABLE, WALK_MODAL_TELEPORT, WALK_MODE_FREE, WALK_MODE_GRAVITY, walk_navigation_mode_set(), walk_ray_cast(), WALK_TELEPORT_STATE_OFF, WALK_TELEPORT_STATE_ON, WalkInfo::zlock, and WalkInfo::zlock_momentum.
Referenced by walk_invoke(), and walk_modal().
|
static |
Definition at line 898 of file view3d_navigate_walk.c.
References WalkInfo::anim_playing, C, ED_view3d_cameracontrol_update(), WalkInfo::need_rotation_keyframe, WalkInfo::need_translation_keyframe, and WalkInfo::v3d_camera_control.
Referenced by walkApply().
|
static |
Definition at line 478 of file view3d_navigate_walk.c.
Referenced by initWalkInfo(), and walkEvent().
|
static |
Definition at line 479 of file view3d_navigate_walk.c.
Referenced by initWalkInfo().