source: Swollen/swollen/keyboardeventhandler.cpp @ 33

Last change on this file since 33 was 13, checked in by darran, 20 years ago
  • culling 'c' now loops through CULLNONE, CULLNEARZERO, CULLSTEEPANGLE, CULLALL
  • scaling of datasets now done in swwreader by scaling vertices on load
  • method in watersurface for adjustable zoffset from bedslope
  • need state machine for current mode and adjustment bindings
File size: 2.3 KB
Line 
1
2#include <keyboardeventhandler.h>
3
4
5KeyboardEventHandler::KeyboardEventHandler( int nTimesteps, float tps)
6{
7  _paused = DEF_PAUSED_START;
8  _direction = 1;
9  _ntimesteps = nTimesteps;
10  _tps = tps;
11  _tpsorig = tps;
12  _timestepchanged = false;
13  _timestep = 0;
14  _prevtime = 0;
15  _togglewireframe = false;
16  _togglecullsetting = false;
17}
18
19
20bool KeyboardEventHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter&)
21{
22    bool handled = false;
23
24    if( ea.getEventType() == osgGA::GUIEventAdapter::KEYDOWN )
25    {
26                switch( ea.getKey() )
27                {
28                        case osgGA::GUIEventAdapter::KEY_Space:
29                                _paused = _paused ? false : true;
30                                handled = true;
31                                break;
32
33                        case osgGA::GUIEventAdapter::KEY_Up:
34                                if( !_paused ) _tps *= 1.5;
35                                handled = true;
36                                break;
37
38                        case osgGA::GUIEventAdapter::KEY_Down:
39                                if( !_paused ) _tps /= 1.5;
40                                handled = true;
41                                break;
42
43                        case 'r':
44                                _paused = DEF_PAUSED_START;
45                                _tps = _tpsorig;
46                                _timestep = 0;
47                                _timestepchanged = true;
48                                handled = true;
49                                break;
50
51                        case osgGA::GUIEventAdapter::KEY_Right:
52                                if( _paused )
53                                {
54                                        _timestep = (_timestep+1) % _ntimesteps;
55                                        _timestepchanged = true;
56                                }
57                                else
58                                        _direction = +1;
59                                handled = true;
60                                break;
61
62                        case osgGA::GUIEventAdapter::KEY_Left:
63                                if( _paused ) 
64                                {
65                                        _timestep = _timestep-1;
66                                        if( _timestep < 0 ) _timestep = _ntimesteps-1;
67                                        _timestepchanged = true;
68                                }
69                                else
70                                        _direction = -1;
71                                handled = true;
72                                break;
73
74                        case 'w':
75                          _togglewireframe = true;
76                          handled = true;
77                          break;
78
79                case 'c':
80                  _togglecullsetting = true;
81                  handled = true;
82                  break;
83                }
84
85        }
86    return handled;
87}
88
89
90void KeyboardEventHandler::setTime( float time)
91{
92        if( !isPaused()  &&  time - _prevtime > 1.0/_tps )
93        {
94                _prevtime = time;
95                _timestep = _timestep + _direction;
96                if( _timestep == _ntimesteps ) 
97                        _timestep = 0;
98                else if( _timestep < 0 ) 
99                        _timestep = _ntimesteps-1;
100                _timestepchanged = true;
101        }
102}
103
104
105bool KeyboardEventHandler::timestepChanged()
106{
107        if( _timestepchanged )
108        {
109                _timestepchanged = false;
110                return true;
111        }
112        return false;
113}
114
115
116bool KeyboardEventHandler::toggleWireframe()
117{
118        if( _togglewireframe )
119        {
120                _togglewireframe = false;
121                return true;
122        }
123        return false;
124}
125
126
127bool KeyboardEventHandler::toggleCullSetting()
128{
129        if( _togglecullsetting )
130        {
131                _togglecullsetting = false;
132                return true;
133        }
134        return false;
135}
136
Note: See TracBrowser for help on using the repository browser.