/[hegemonie]/hegemonie/MapEditor/MapView.m
ViewVC logotype

Diff of /hegemonie/MapEditor/MapView.m

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by gabby, Tue Jul 15 09:25:14 2003 UTC revision 1.4 by gabby, Fri Jul 18 14:57:55 2003 UTC
# Line 31  Line 31 
31    
32  #include "Common/Camera.h"  #include "Common/Camera.h"
33  #include "Map/MapDisplay.h"  #include "Map/MapDisplay.h"
34    #include "MapController.h"
35    
36  #include "MapView.h"  #include "MapView.h"
37    
38  @implementation MapView  @implementation MapView
39    
40  static int _nbRay = 70;  int _nbRay = 70;
41  static double _lastStep = 4.0;  double _lastStep = 4.0;
42  static int _mode = 1;  int _mode = 1;
43  static int _view = 0;  int _viewTop = 1;
44    double _camZFar = 255.0;
45  static const GLfloat lightAmbient[] = { 0.75f, 0.75f, 0.75f, 1.0f };  
46  static const GLfloat lightDiffuse[] = { 0.7f, 0.7f, 0.7f, 1.0f };  const GLfloat lightAmbient[] = { 0.75f, 0.75f, 0.75f, 1.0f };
47  static const GLfloat lightPosition[] = { 10.0f, 350.0f, 10.0f};  const GLfloat lightDiffuse[] = { 0.7f, 0.7f, 0.7f, 1.0f };
48    const GLfloat lightPosition[] = { 10.0f, 350.0f, 10.0f};
49    
50    
51  - (id) initWithFrame: (NSRect)frameRect  - (id) initWithFrame: (NSRect)frameRect
# Line 54  static const GLfloat lightPosition[] = { Line 56  static const GLfloat lightPosition[] = {
56    if (self != nil)    if (self != nil)
57      {      {
58        _init = NO;        _init = NO;
59        _camera = [[Camera alloc] initWithFovy: 50.0        _display = NO;
60                                        aspect: 1.0      }  
                                        zNear: 5.0  
                                         zFar: 250.0  
                                          eye: MakeCoord (0.0, 150.0, 0.0)  
                                       center: MakeCoord (0.0, 150.0, 30.0)  
                                           up: MakeCoord (0.0, 1.0, 0.0)];  
       
       _map = [[MapDisplay alloc] initWithImageName: @"carte.tiff"  
                                    colorsImageName: @"land.tiff"  
                                          mapShadow: nil  
                                      textureLoader: nil];  
     }  
     
61    return self;    return self;
62  }  }
63    
 -(void) setCamera: (Camera *)camera  
 {  
   _camera = camera;  
 }  
   
64  - (void) dealloc  - (void) dealloc
65  {  {
66    RELEASE(_camera);    RELEASE(_camera);
# Line 105  static const GLfloat lightPosition[] = { Line 90  static const GLfloat lightPosition[] = {
90    
91    glShadeModel (GL_SMOOTH);    glShadeModel (GL_SMOOTH);
92    
93      glFogi(GL_FOG_MODE, GL_LINEAR);
94      glFogf(GL_FOG_START, _camZFar - 10.0);
95      glFogf(GL_FOG_END, _camZFar + 1.0);
96      GLfloat fog_c[] = {0.5f, 0.5f, 0.5f, 1.0f};
97      glFogfv(GL_FOG_COLOR, fog_c);
98      if (!_viewTop)
99        glEnable(GL_FOG);
100    
101      //glHint (GL_POLYGON_SMOOTH_HINT, GL_NICEST);
102      glHint (GL_POLYGON_SMOOTH_HINT, GL_FASTEST);
103      //glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
104      glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
105    
106    [NSTimer scheduledTimerWithTimeInterval: 0.001    [NSTimer scheduledTimerWithTimeInterval: 0.001
107                                     target: self                                     target: self
108                                   selector: @selector(display)                                   selector: @selector(display)
# Line 149  static const GLfloat lightPosition[] = { Line 147  static const GLfloat lightPosition[] = {
147    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
148    glLoadIdentity();    glLoadIdentity();
149    
150    glLightfv( GL_LIGHT0, GL_POSITION, lightPosition );    if (_display)
151        {
152          glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
153    
154          gluLookAt ((GLdouble)[_camera eye].x,
155                     (GLdouble)[_camera eye].y,
156                     (GLdouble)[_camera eye].z,
157                     (GLdouble)[_camera center].x,
158                     (GLdouble)[_camera center].y,
159                     (GLdouble)[_camera center].z,
160                     (GLdouble)[_camera up].x,
161                     (GLdouble)[_camera up].y,
162                     (GLdouble)[_camera up].z);
163    
164          if (_viewTop)
165            [_map displayWithCamera: _camera
166                        numberOfRay: _nbRay];
167          else
168            [_map displayWithCamera: _camera
169                        numberOfRay: _nbRay
170                           lastStep: _lastStep];
171    
172    gluLookAt ((GLdouble)[_camera eye].x,      }
              (GLdouble)[_camera eye].y,  
              (GLdouble)[_camera eye].z,  
              (GLdouble)[_camera center].x,  
              (GLdouble)[_camera center].y,  
              (GLdouble)[_camera center].z,  
              (GLdouble)[_camera up].x,  
              (GLdouble)[_camera up].y,  
              (GLdouble)[_camera up].z);  
   
   if (_view)  
     [_map displayWithCamera: _camera  
                 numberOfRay: _nbRay];  
   else  
     [_map displayWithCamera: _camera  
                 numberOfRay: _nbRay  
                    lastStep: _lastStep];  
173    
174     [self update];     [self update];
175    [[self openGLContext] flushBuffer];    [[self openGLContext] flushBuffer];
176  }  }
177    
178  - (BOOL)performKeyEquivalent:(NSEvent *)theEvent  - (void) setCamera: (Camera *)camera
179    {
180      if (_camera)
181        RELEASE (_camera);
182    
183      _camera = RETAIN (camera);
184    }
185    
186    - (void) setTerrain: (MapDisplay *)map
187    {
188      if (_map)
189        RELEASE (_map);
190    
191      _map = RETAIN (map);
192    }
193    
194    - (void) displayTerrain: (BOOL)display
195    {
196      _display = display;
197    }
198    
199    - (BOOL) performKeyEquivalent: (NSEvent *)theEvent
200  {  {
201    NSString *keyString;    NSString *keyString;
202    unichar keyChar;    unichar keyChar;
203    double f = 3.0;    double f = 3.0;
204    double h = 0.01;    double h = 1.0;
205    double p = 0.1;    double p = 1.0;
206    double l = 0.2;    double l = 0.2;
207    
208    keyString = [theEvent charactersIgnoringModifiers];    if (_display)
   keyChar = [keyString characterAtIndex:0];  
   
   switch(keyChar)  
209      {      {
210      case NSUpArrowFunctionKey:        keyString = [theEvent charactersIgnoringModifiers];
211      case 'z':        keyChar = [keyString characterAtIndex:0];
       [_camera forward: f];  
       break;  
   
     case NSDownArrowFunctionKey:  
     case 's':  
       [_camera backward: f];  
        break;  
   
     case NSLeftArrowFunctionKey:  
     case 'q':  
       [_camera strafLeft: f];  
       break;  
   
     case NSRightArrowFunctionKey:  
     case 'd':  
       [_camera strafRight: f];  
        break;  
   
     case NSPageUpFunctionKey:  
     case 'a':  
       [_camera moveUp: f];  
        break;  
   
     case NSPageDownFunctionKey:  
     case 'e':  
       [_camera moveDown: f];  
        break;  
   
     case '4':  
       [_camera rotatePitch: p];  
       break;  
     case '6':  
       [_camera rotatePitch: -p];  
       break;  
     case '8':  
       [_camera rotateHeading: h];  
       break;  
     case '2':  
       [_camera rotateHeading: -h];  
       break;  
   
     case 'f':  
       _mode = 1 - _mode;  
       if (_mode)  
         glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);  
       else  
         glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);  
       break;  
   
     case '+':  
       _nbRay++;  
       printf("nbRay: %d\n", _nbRay);  
       break;  
     case '-':  
       _nbRay--;  
       if (_nbRay == 2)  
         _nbRay = 3;  
       printf("nbRay: %d\n", _nbRay);  
       break;      
   
     case 'P':  
       _lastStep += l;  
       printf("step: %lf\n", _lastStep);  
       break;  
     case 'p':  
       _lastStep -= l;  
       if (_lastStep < 1.0)  
         _lastStep = 1.0;  
       printf("lastStep: %lf\n", _lastStep);  
       break;  
   
     case 'v':  
       _view = 1 - _view;  
       coord_t eye = [_camera eye];  
       if (_view)  
         [_camera initWithFovy: 45.0  
                        aspect: 1.0  
                         zNear: 5.0  
                          zFar: 855.0  
                           eye: eye  
                        center: MakeCoord (eye.x, eye.y - 10.0, eye.z)  
                            up: MakeCoord (0.0, 0.0, 1.0)];  
       else  
         [_camera initWithFovy: 45.0  
                        aspect: 1.0  
                         zNear: 5.0  
                          zFar: 255.0  
                           eye: eye  
                        center: MakeCoord (eye.x, eye.y, eye.z + 30.0)  
                            up: MakeCoord (0.0, 1.0, 0.0)];  
       [self reshape];  
       break;  
212    
213      default:        switch(keyChar)
214        break;          {
215            case NSUpArrowFunctionKey:
216            case 'z':
217              [_camera forward: f];
218              break;
219              
220            case NSDownArrowFunctionKey:
221            case 's':
222              [_camera backward: f];
223              break;
224              
225            case NSLeftArrowFunctionKey:
226            case 'q':
227              [_camera strafLeft: f];
228              break;
229              
230            case NSRightArrowFunctionKey:
231            case 'd':
232              [_camera strafRight: f];
233              break;
234              
235            case NSPageUpFunctionKey:
236            case 'a':
237              [_camera moveUp: f];
238              break;
239              
240            case NSPageDownFunctionKey:
241            case 'e':
242              [_camera moveDown: f];
243              break;
244              
245            case '4':
246              [_camera rotateHeading: h];
247              break;
248            case '6':
249              [_camera rotateHeading: -h];
250              break;
251            case '8':
252              [_camera rotatePitch: p];
253              break;
254            case '2':
255              [_camera rotatePitch: -p];
256              break;
257              
258            case 'f':
259              _mode = 1 - _mode;
260              if (_mode)
261                glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
262              else
263                glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
264              break;
265    
266            case '+':
267              _nbRay++;
268              printf("nbRay: %d\n", _nbRay);
269              break;
270            case '-':
271              _nbRay--;
272              if (_nbRay == 2)
273                _nbRay = 3;
274              printf("nbRay: %d\n", _nbRay);
275              break;        
276              
277            case 'P':
278              _lastStep += l;
279              printf("step: %lf\n", _lastStep);
280              break;
281            case 'p':
282              _lastStep -= l;
283              if (_lastStep < 1.0)
284                _lastStep = 1.0;
285              printf("lastStep: %lf\n", _lastStep);
286              break;
287              
288            case 'v':
289              _viewTop = 1 - _viewTop;
290              coord_t eye = [_camera eye];
291    
292              if (_viewTop)
293                glDisable (GL_FOG);
294              else
295                glEnable (GL_FOG);
296    
297              if (_viewTop)
298                [_camera initWithFovy: 45.0
299                               aspect: 1.0
300                                zNear: 5.0
301                                 zFar: 855.0
302                                  eye: eye
303                               center: MakeCoord (eye.x, eye.y - 10.0, eye.z)
304                                   up: MakeCoord (0.0, 0.0, 1.0)];
305              else
306                [_camera initWithFovy: 45.0
307                               aspect: 1.0
308                                zNear: 5.0
309                                 zFar: 255.0
310                                  eye: eye
311                               center: MakeCoord (eye.x, eye.y, eye.z + 30.0)
312                                   up: MakeCoord (0.0, 1.0, 0.0)];
313              [self reshape];
314              break;
315              
316            default:
317              [_mapController keyStroke: keyChar];
318              break;
319            }
320      }      }
321    return YES;    return YES;
322  }  }

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26