diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2013-12-03 09:14:09 +0400 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2013-12-03 09:14:09 +0400 |
commit | ab494379586034a6844c858324815e3b1ff3cbb2 (patch) | |
tree | 88ee6a460649f4488d72ad0e97e6d8839cc6132f /source/blender/makesdna | |
parent | 2e4601c35629f6b221a9e9fd2eaa2efb4fd092ab (diff) |
View Navigation: Walk and Fly modes
This is a addtion to the dynamic fly mode.
It behaves as the first person navigation system available in most 3d world games nowadays.
You can alternate between the old mode (Fly) and the new mode (Walk) in User Preferences > Inputs
Manual:
-------
http://wiki.blender.org/index.php/Doc:2.6/Manual/3D_interaction/Navigating/3D_View#View_Navigation
http://wiki.blender.org/index.php/Doc:2.6/Manual/3D_interaction/Navigating/3D_View/Navigation_Modes
Shortcuts:
----------
WASD (hold) - Move forward/backward and straft left/right
QE (hold) - Move up and down
Tab - Alternate between Walk and Fly modes
Shift (hold) - Speed up movement
Alt (hold) - Slow down movement
Space or MMB - Teleport
V - Jump
+/- or mouse wheel - speed increase/decrease speed for this Blender session
User Preferences Options:
-------------------------
Navigation Mode - fly/walk navigation systems (fly is the old, walk is the new, next options are for walk mode only)
Gravity - alternate between free navigation and walk with gravity modes
Mouse Sensitivity - sensitivity factor to mouse influence to look around
Teleport Duration - how long the teleport lasts
Camera Height - camera height to use in gravity mode
Jump Height - maximum jump speed in m/s
Move Speed - base move speed in m/s
Boost Factor - multiplication factor when running or going slow (1/boost)
Development Notes:
------------------
* The initial code was based on view3d_fly.c.
* The NDoF code was not touched, so it most likely is not working.
Pending Issues:
---------------
* Draw in the UI the shortcut options, and current values (e.g., Mode: Fly/Walk)
(we need a proper API for that)
* OSX seems to present issues if we re-center the mouse every time. We implemented a workaround for that, but a real fix would be welcome.
Code reviewed and with collaborations from Campbell Barton - @campbellbarton
Differential Revision: http://developer.blender.org/D30
Diffstat (limited to 'source/blender/makesdna')
-rw-r--r-- | source/blender/makesdna/DNA_userdef_types.h | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index 37d5f313dfb..c2f159356b3 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -374,6 +374,17 @@ typedef struct SolidLight { float col[4], spec[4], vec[4]; } SolidLight; +typedef struct WalkNavigation { + float mouse_speed; /* speed factor for look around */ + float walk_speed; + float walk_speed_factor; + float view_height; + float jump_height; + float teleport_time; /* duration to use for teleporting */ + short flag; + short pad[3]; +} WalkNavigation; + typedef struct UserDef { /* UserDef has separate do-version handling, and can be read from other files */ int versionfile, subversionfile; @@ -477,7 +488,7 @@ typedef struct UserDef { float gpencil_new_layer_col[4]; /* default color for newly created Grease Pencil layers */ short tweak_threshold; - short pad3; + char navigation_mode, pad; char author[80]; /* author name for file formats supporting it */ @@ -486,6 +497,8 @@ typedef struct UserDef { float fcu_inactive_alpha; /* opacity of inactive F-Curves in F-Curve Editor */ float pixelsize; /* private, set by GHOST, to multiply DPI with */ + + struct WalkNavigation walk_navigation; } UserDef; extern UserDef U; /* from blenkernel blender.c */ @@ -552,6 +565,18 @@ typedef enum eViewZoom_Style { USER_ZOOM_DOLLY = 2 } eViewZoom_Style; +/* navigation_mode */ +typedef enum eViewNavigation_Method { + VIEW_NAVIGATION_WALK = 0, + VIEW_NAVIGATION_FLY = 1, +} eViewNavigation_Method; + +/* flag */ +typedef enum eWalkNavigation_Flag { + USER_WALK_GRAVITY = (1 << 0), + USER_WALK_MOUSE_REVERSE = (1 << 1), +} eWalkNavigation_Flag; + /* uiflag */ typedef enum eUserpref_UI_Flag { /* flags 0 and 1 were old flags (for autokeying) that aren't used anymore */ |