1 /****************************************************************************
2 **
3 ** Benutzerschnittstelle.cpp Stefan Disch, Tobias Nopper, Martina Welte 2001
4 **
5 *****************************************************************************/
6
7 #include <GL/glut.h>
8 #include <math.h>
9 #include <stdlib.h>
10 #include <stdio.h>
11 #include "BillardGL.h"
12
13 #include "Kugel.h"
14 #include "Kamera.h"
15 #include "Anzeige.h"
16 #include "Schild.h"
17 #include "Textfeld.h"
18 #include "Menu.h"
19 #include "Schiedsrichter.h"
20
21 #include "Namen.h"
22 #include "Zeit.h"
23 #include "SpielfeldAufbau.h"
24 #include "Handling.h"
25 #include "Einsetzen.h"
26
27 #include "Benutzerschnittstelle.h"
28
29 GLint Maustaste=0;
30
31 //Callback Funktion: Reaktion auf Mausclicks
Maus(int button,int state,int x,int y)32 void Maus(int button, int state, int x, int y)
33 {
34
35 if (Menu.Maustaste(button,state,x,y)!=0) {
36 MausTasteAbgefangen=1;
37 //printf("Abgefangen\n");
38 } else {
39 MausTasteAbgefangen=0;
40 //printf("AbgefangenAus\n");
41 MouseLookLast_x=x;
42 MouseLookLast_y=y;
43
44 // Kamera.FahrtAus();
45
46 /*
47 if (button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) {
48 switch (StateMaschin) {
49 case START:
50 StateMaschin=BETRACHTEN;
51 Menu.NeuerMenuZustand();
52 break;
53 case BETRACHTEN: {
54 if (LageVerbesserungKopffeld|LageVerbesserung) {
55 StateMaschin=WEISSNEU;
56 Menu.NeuerMenuZustand();
57 }
58 } break;
59 case ZIELEN:
60 StateMaschin=BETRACHTEN;
61 Menu.NeuerMenuZustand();
62 break;
63 case AUSHOLEN:
64 StateMaschin=ZIELEN;
65 Menu.NeuerMenuZustand();
66 Anzeige.setzeStossStaerke(0);
67 break;
68 case STOSS: {
69 if (xnor) {
70 StateMaschin=BETRACHTEN;
71 Menu.NeuerMenuZustand();
72 for (int i=1;i<16;i++) {
73 if (KugelnImSpiel[i] && !KugelnVersenkt[i] && (Kugel[i].Pos_x()==3000)) {
74 KugelnVersenkt[i]=1;
75 }
76 }
77 Menu.NeuerMenuZustand();
78 Anzeige.setzeStossStaerke(0);
79 }
80 } break;
81 }
82 }
83 */
84
85 if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) Maustaste=GLUT_LEFT_BUTTON;
86 if (button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) Maustaste=GLUT_RIGHT_BUTTON;
87
88 if (button == GLUT_MIDDLE_BUTTON && state == GLUT_DOWN) {
89 Maustaste=GLUT_LEFT_BUTTON;
90 switch (StateMaschin) {
91 case BETRACHTEN: {
92 StateMaschin=ZIELEN;
93 Menu.NeuerMenuZustand();
94 Kamera.BlickeAuf(Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());
95 } break;
96 case ZIELEN: {
97 AusholStartzeit=Zeit();
98 StateMaschin=AUSHOLEN;
99 Menu.NeuerMenuZustand();
100 } break;
101 case STOSS: {
102 if (xnor) {
103 for (int Kugelnr=0;Kugelnr<16;Kugelnr++) { // Alle Kugeln ans Ziel
104 Kugel[Kugelnr].neuePositionD(Bewegungstabelle[Stossdauer][Kugelnr]);
105 if (KugelnImSpiel[Kugelnr] && !KugelnVersenkt[Kugelnr] && (Kugel[Kugelnr].Pos_x()==3000)) {
106 KugelnVersenkt[Kugelnr]=1;
107 }
108 Menu.NeuerMenuZustand();
109 }
110 if (Kugel[0].Pos_x()==3000) {
111 StateMaschin=WEISSNEU;
112 WeisseEinsetzen();
113 } else {
114 StateMaschin=BETRACHTEN;
115 Menu.NeuerMenuZustand();
116 }
117 Anzeige.setzeStossStaerke(0);
118 }
119 } break;
120 case WEISSNEU: {
121 StateMaschin=BETRACHTEN;
122 Menu.NeuerMenuZustand();
123 } break;
124 case SCHIEDSRICHTER: {
125 if (LageVerbesserungKopffeld|LageVerbesserung) {
126 WeisseEinsetzen();
127 StateMaschin=WEISSNEU;
128 Menu.NeuerMenuZustand();
129 } else {
130 StateMaschin=BETRACHTEN;
131 Menu.NeuerMenuZustand();
132 }
133 } break;
134 }
135 }
136
137 if (button == GLUT_MIDDLE_BUTTON && state == GLUT_UP && StateMaschin==AUSHOLEN) {
138 GLfloat dx=Kugel[0].Pos_xCM()-Kamera.Pos_xCM();
139 GLfloat dy=Kugel[0].Pos_yCM()-Kamera.Pos_yCM();
140 GLfloat Abstand=sqrt(dx*dx+dy*dy);
141 Stoss(dx*AusholStaerke/Abstand,dy*AusholStaerke/Abstand);
142 StateMaschin=STOSS;
143 Menu.NeuerMenuZustand();
144 //Kamera.Verfolge(0);
145 Kamera.BlickeAuf2(Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());
146 // Kamera.FahrtEin();
147 DelayAusgleich=1;
148 }
149
150 }
151 }
152 //Callback Funktion: Reaktion auf Mausbewegung
Bewegung(int x,int y)153 void Bewegung(int x, int y) {
154 if (MausTasteAbgefangen) return;
155 if (StateMaschin==START) return;
156 if (Maustaste==GLUT_LEFT_BUTTON) {
157 if ((StateMaschin==ZIELEN)||(StateMaschin==AUSHOLEN)) {
158 if (InvertX) {
159 Kamera.Schwenk_Rechts(MouseSpeed*(x-MouseLookLast_x),Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());
160 } else {
161 Kamera.Schwenk_Links(MouseSpeed*(x-MouseLookLast_x),Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());
162 }
163 if (InvertY) {
164 Kamera.Schwenk_Hoch(MouseSpeed*(y-MouseLookLast_y),Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());
165 } else {
166 Kamera.Schwenk_Runter(MouseSpeed*(y-MouseLookLast_y),Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());
167 }
168 } else {
169 if (InvertX) {
170 Kamera.Dreh_Links(MouseSpeed*(x-MouseLookLast_x));
171 } else {
172 Kamera.Dreh_Rechts(MouseSpeed*(x-MouseLookLast_x));
173 }
174 if (InvertY) {
175 Kamera.Dreh_Hoch(MouseSpeed*(y-MouseLookLast_y));
176 } else {
177 Kamera.Dreh_Runter(MouseSpeed*(y-MouseLookLast_y));
178 }
179 }
180 } else if (Maustaste==GLUT_RIGHT_BUTTON) {
181 if ((StateMaschin==ZIELEN)||(StateMaschin==AUSHOLEN)) {
182 if (InvertX) {
183 Kamera.Schwenk_Rechts(MouseSpeed*(x-MouseLookLast_x),Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());
184 } else {
185 Kamera.Schwenk_Links(MouseSpeed*(x-MouseLookLast_x),Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());
186 }
187 if (InvertY) {
188 Kamera.Beweg_Rein(MouseSpeed*(y-MouseLookLast_y));
189 } else {
190 Kamera.Beweg_Raus(MouseSpeed*(y-MouseLookLast_y));
191 }
192 } else {
193 if (InvertX) {
194 Kamera.Beweg_Links(MouseSpeed*(x-MouseLookLast_x));
195 } else {
196 Kamera.Beweg_Rechts(MouseSpeed*(x-MouseLookLast_x));
197 }
198 if (InvertY) {
199 Kamera.Beweg_Rein(MouseSpeed*(y-MouseLookLast_y));
200 } else {
201 Kamera.Beweg_Raus(MouseSpeed*(y-MouseLookLast_y));
202 }
203 }
204 }
205
206 MouseLookLast_x=x;
207 MouseLookLast_y=y;
208 }
209
210 //Callback Funktion: Reaktion auf Tastendruck
Taste(unsigned char keyPressed,int x,int y)211 void Taste( unsigned char keyPressed, int x, int y )
212 {
213 //printf("%c: %i\n",keyPressed,keyPressed);
214
215 if (!Menu.KeyboardTaste(keyPressed,x,y)) {
216 switch( keyPressed ) {
217 case 'h': {
218 if (xnor==4) {
219 Hintergrundfarbe=1-Hintergrundfarbe;
220 glClearColor(Hintergrundfarbe,Hintergrundfarbe,Hintergrundfarbe,0);
221 }
222 } break; //h: Hintergrundfarbe invertieren
223 case 'v': {
224 if (xnor==4) {
225 switch (PolygonMode_view) { //v: Vorne/Hinten/Beides
226 case GL_FRONT:
227 PolygonMode_view=GL_BACK;
228 break;
229 case GL_BACK:
230 PolygonMode_view=GL_FRONT_AND_BACK;
231 break;
232 case GL_FRONT_AND_BACK:
233 PolygonMode_view=GL_FRONT;
234 break;
235 }
236 glPolygonMode(PolygonMode_view,PolygonMode_mode);
237 }
238 } break;
239 case 'w': {
240 if (xnor==4) {
241 switch (PolygonMode_mode) { //w: Punkte/Linien/Fl"achen
242 case GL_FILL: PolygonMode_mode=GL_POINT;break;
243 case GL_POINT: PolygonMode_mode=GL_LINE;break;
244 case GL_LINE: PolygonMode_mode=GL_FILL;break;
245 }
246 glPolygonMode(PolygonMode_view,PolygonMode_mode);
247 }
248 } break;
249
250 case '1': Kamera.speicherePosition(0);break; //1
251 case '2': Kamera.speicherePosition(1);break; //2
252 case '3': Kamera.speicherePosition(2);break; //3
253 case '4': Kamera.speicherePosition(3);break; //4
254 case '5': Kamera.speicherePosition(4);break; //5
255 case '6': Kamera.speicherePosition(5);break; //6
256 case '7': Kamera.speicherePosition(6);break; //7
257 case '8': Kamera.speicherePosition(7);break; //8
258
259 case '\b': {
260 switch (StateMaschin) {
261 case START:
262 StateMaschin=BETRACHTEN;
263 Menu.NeuerMenuZustand();
264 break;
265 case BETRACHTEN: {
266 if (LageVerbesserungKopffeld|LageVerbesserung) {
267 StateMaschin=WEISSNEU;
268 Menu.NeuerMenuZustand();
269 }
270 } break;
271 case ZIELEN:
272 StateMaschin=BETRACHTEN;
273 Menu.NeuerMenuZustand();
274 break;
275 case AUSHOLEN:
276 StateMaschin=ZIELEN;
277 Menu.NeuerMenuZustand();
278 Anzeige.setzeStossStaerke(0);
279 break;
280 case STOSS: {
281 if (xnor) {
282 StateMaschin=BETRACHTEN;
283 Menu.NeuerMenuZustand();
284 for (int i=1;i<16;i++) {
285 if (KugelnImSpiel[i] && !KugelnVersenkt[i] && (Kugel[i].Pos_x()==3000)) {
286 KugelnVersenkt[i]=1;
287 }
288 }
289 Menu.NeuerMenuZustand();
290 Anzeige.setzeStossStaerke(0);
291 }
292 } break;
293 }
294 } break;
295
296 case 'r': {
297 if (xnor==3) {
298 xnor=4;
299 } else if (!AllerersterStoss) {
300 Startzeit=Zeit();
301 //Frames=0;
302 StateMaschin=STOSS;
303 Menu.NeuerMenuZustand();
304 for (int Kugelnr=0;Kugelnr<16;Kugelnr++) {
305 Kugel[Kugelnr].neuePositionD(Bewegungstabelle[0][Kugelnr]);
306 }
307 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
308 }
309 } break; //r
310
311
312 case 'c': {
313 if (xnor==4) {
314 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
315 }
316 } break; //c
317
318 case 27 : {
319 Menu.SetzeMenuZustand(AUSSPIEL);
320 } break;
321
322 case 'q': {
323 if (xnor==4) {
324 StateMaschin=START;
325 Menu.SetzeMenuZustand(STARTBILDSCHIRM);
326 }
327 } break;
328
329 case 'f': {
330 /*
331 (FullScreen=1-FullScreen);
332 if (FullScreen) {
333 glutFullScreen();
334 } else {
335 glutReshapeWindow(800, 600);
336 }
337 */
338 } break;
339 /*
340 // if (xnor==4) {
341 (FullScreen=1-FullScreen);
342 if (FullScreen) {
343 glutFullScreen();
344 //glutGameModeString("640x480:16@60");
345 //glutEnterGameMode();
346 //AktuellesFenster=glutGetWindow();
347 //glutIgnoreKeyRepeat(1);
348 //glutMouseFunc(Maus);
349 //glutMotionFunc(Bewegung);
350 //glutKeyboardFunc(Taste);
351 //glutKeyboardUpFunc(TasteLos);
352 //glutSpecialFunc(Sondertaste);
353 //glutSpecialUpFunc(SondertasteLos);
354 //glutIdleFunc(timerEvent);
355 //glutDisplayFunc(updateGL);
356 //glutVisibilityFunc(Sichtbar);
357 // CreateMenu();
358 } else {
359 glutReshapeWindow(800, 600);
360 if (OriginalFenster != 0 && AktuellesFenster != OriginalFenster) {
361 glutLeaveGameMode();
362 AktuellesFenster=OriginalFenster;
363 }
364 }
365 }
366 } break;
367 */
368 case 127: {
369 Taste_Strg=1;
370 } break;
371 case 'x': {
372 if (xnor==0) {
373 xnor=1;
374 }
375 } break;
376 case 'o': {
377 if (xnor==2) {
378 xnor=3;
379 }
380 } break;
381 case 'z': {
382 if (xnor==4) {
383 Spiel=ZUFALL;
384 SpielfeldAufbau();
385 }
386 } break;//z
387 case 'a': {
388 if (xnor==4) {
389 Spiel=ACHTBALL;
390 SpielfeldAufbau();
391 Schiedsrichter.NeuesSpiel(Spiel);
392 }
393 } break;//a
394 case 'n': {
395 if (xnor==1) {
396 xnor=2;
397 }
398 if (xnor==4) {
399 Spiel=NEUNBALL;
400 SpielfeldAufbau();
401 Schiedsrichter.NeuesSpiel(Spiel);
402 }
403 } break;//n
404 case '9': {
405 if (xnor==4) {
406 Spiel=NEUNBALL;
407 SpielfeldAufbau();
408 Schiedsrichter.NeuesSpiel(Spiel);
409 }
410 } break;//9
411 case 's': {
412 if (xnor==4) {
413 Spiel=ZWEIBAELLE;
414 SpielfeldAufbau();
415 }
416 } break;//s
417 case 'l': {
418 if (xnor==4) {
419 Spiel=LEER;
420 SpielfeldAufbau();
421 }
422 } break;//l
423 case 'd': {
424 if (xnor==4) {
425 GLfloat dx=Kugel[0].Pos_xCM()-Kamera.Pos_xCM();
426 GLfloat dy=Kugel[0].Pos_yCM()-Kamera.Pos_yCM();
427 GLfloat Abstand=sqrt(dx*dx+dy*dy);
428 Stoss(dx*80.0/Abstand,dy*80.0/Abstand);
429 }
430 } break;//d
431 case 'e': {
432 if (xnor==4) {
433 GLfloat dx=Kugel[0].Pos_xCM()-Kamera.Pos_xCM();
434 GLfloat dy=Kugel[0].Pos_yCM()-Kamera.Pos_yCM();
435 GLfloat Abstand=sqrt(dx*dx+dy*dy);
436 Stoss(dx*80.0/Abstand,dy*80.0/Abstand);
437 StateMaschin=STOSS;
438 Menu.NeuerMenuZustand();
439 Kamera.BlickeAuf2(Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());
440 //Kamera.Verfolge(0);
441 DelayAusgleich=1;
442 }
443 } break;//e
444 case ' ': {
445 switch (StateMaschin) {
446 case BETRACHTEN:
447 StateMaschin=ZIELEN;
448 Menu.NeuerMenuZustand();
449 Kamera.BlickeAuf(Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());
450 break;
451 case ZIELEN:
452 AusholStartzeit=Zeit();
453 StateMaschin=AUSHOLEN;
454 Menu.NeuerMenuZustand();
455 break;
456 case STOSS: {
457 if (xnor) {
458 for (int Kugelnr=0;Kugelnr<16;Kugelnr++) { // Alle Kugeln ans Ziel
459 Kugel[Kugelnr].neuePositionD(Bewegungstabelle[Stossdauer][Kugelnr]);
460 }
461 if (Kugel[0].Pos_x()==3000) {
462 StateMaschin=WEISSNEU;
463 WeisseEinsetzen();
464 Menu.NeuerMenuZustand();
465 } else {
466 StateMaschin=BETRACHTEN;
467 Menu.NeuerMenuZustand();
468 }
469 }
470 } break;
471 case WEISSNEU: {
472 StateMaschin=BETRACHTEN;
473 Menu.NeuerMenuZustand();
474 } break;
475 case SCHIEDSRICHTER: {
476 if (LageVerbesserungKopffeld|LageVerbesserung) {
477 WeisseEinsetzen();
478 StateMaschin=WEISSNEU;
479 Menu.NeuerMenuZustand();
480 } else {
481 StateMaschin=BETRACHTEN;
482 Menu.NeuerMenuZustand();
483 }
484 } break;
485 }
486 }
487 }
488 }
489 }
490
491
TasteLos(unsigned char keyPressed,int,int)492 void TasteLos( unsigned char keyPressed, int,int) {
493
494 if ((keyPressed==' ')&&
495 (StateMaschin==AUSHOLEN)) {
496 GLfloat dx=Kugel[0].Pos_xCM()-Kamera.Pos_xCM();
497 GLfloat dy=Kugel[0].Pos_yCM()-Kamera.Pos_yCM();
498 GLfloat Abstand=sqrt(dx*dx+dy*dy);
499 Stoss(dx*AusholStaerke/Abstand,dy*AusholStaerke/Abstand);
500 StateMaschin=STOSS;
501 Menu.NeuerMenuZustand();
502 Kamera.BlickeAuf2(Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());
503 //Kamera.Verfolge(0);
504 DelayAusgleich=1;
505 }
506 if (keyPressed==127) {
507 Taste_Strg=0;
508 }
509
510 }
511
512
Sondertaste(int Taste,int x,int y)513 void Sondertaste(int Taste,int x, int y) {
514
515 x=y;
516
517 //printf("%i\n",Taste);
518
519 // Kamera.FahrtAus();
520
521 if (StateMaschin!=START) {
522
523 switch (Taste) {
524 case GLUT_KEY_F1:
525 if (StateMaschin!=AUSHOLEN) {
526 if (StateMaschin!=STOSS && StateMaschin!=WEISSNEU && StateMaschin!=SCHIEDSRICHTER) {
527 StateMaschin=BETRACHTEN;
528 Menu.NeuerMenuZustand();
529 }
530 Kamera.ladePosition(0);
531 }
532 break;
533 case GLUT_KEY_F2:
534 if (StateMaschin!=AUSHOLEN) {
535 if (StateMaschin!=STOSS && StateMaschin!=WEISSNEU && StateMaschin!=SCHIEDSRICHTER) {
536 StateMaschin=BETRACHTEN;
537 Menu.NeuerMenuZustand();
538 }
539 Kamera.ladePosition(1);
540 }
541 break;
542 case GLUT_KEY_F3:
543 if (StateMaschin!=AUSHOLEN) {
544 if (StateMaschin!=STOSS && StateMaschin!=WEISSNEU && StateMaschin!=SCHIEDSRICHTER) {
545 StateMaschin=BETRACHTEN;
546 Menu.NeuerMenuZustand();
547 }
548 Kamera.ladePosition(2);
549 }
550 break;
551 case GLUT_KEY_F4:
552 if (StateMaschin!=AUSHOLEN) {
553 if (StateMaschin!=STOSS && StateMaschin!=WEISSNEU && StateMaschin!=SCHIEDSRICHTER) {
554 StateMaschin=BETRACHTEN;
555 Menu.NeuerMenuZustand();
556 }
557 Kamera.ladePosition(3);
558 }
559 break;
560 case GLUT_KEY_F5:
561 if (StateMaschin!=AUSHOLEN) {
562 if (StateMaschin!=STOSS && StateMaschin!=WEISSNEU && StateMaschin!=SCHIEDSRICHTER) {
563 StateMaschin=BETRACHTEN;
564 Menu.NeuerMenuZustand();
565 }
566 Kamera.ladePosition(4);
567 }
568 break;
569 case GLUT_KEY_F6:
570 if (StateMaschin!=AUSHOLEN) {
571 if (StateMaschin!=STOSS && StateMaschin!=WEISSNEU && StateMaschin!=SCHIEDSRICHTER) {
572 StateMaschin=BETRACHTEN;
573 Menu.NeuerMenuZustand();
574 }
575 Kamera.ladePosition(5);
576 }
577 break;
578 case GLUT_KEY_F7:
579 if (StateMaschin!=AUSHOLEN) {
580 if (StateMaschin!=STOSS && StateMaschin!=WEISSNEU && StateMaschin!=SCHIEDSRICHTER) {
581 StateMaschin=BETRACHTEN;
582 Menu.NeuerMenuZustand();
583 }
584 Kamera.ladePosition(6);
585 }
586 break;
587 case GLUT_KEY_F8:
588 if (StateMaschin!=AUSHOLEN) {
589 if (StateMaschin!=STOSS && StateMaschin!=WEISSNEU && StateMaschin!=SCHIEDSRICHTER) {
590 StateMaschin=BETRACHTEN;
591 Menu.NeuerMenuZustand();
592 }
593 Kamera.ladePosition(7);
594 }
595 break;
596
597 case 108: {
598 Taste_Shift=1;
599 } break;
600 case GLUT_KEY_UP:
601 Taste_Pfeil_Oben=1;
602 break;
603 case GLUT_KEY_DOWN:
604 Taste_Pfeil_Unten=1;
605 break;
606 case GLUT_KEY_RIGHT:
607 Taste_Pfeil_Rechts=1;
608 break;
609 case GLUT_KEY_LEFT:
610 Taste_Pfeil_Links=1;
611 break;
612 case GLUT_KEY_PAGE_UP:
613 Taste_Bild_Auf=1;
614 break;
615 case GLUT_KEY_PAGE_DOWN:
616 Taste_Bild_Ab=1;
617 break;
618 case GLUT_KEY_HOME:
619 if (xnor) Taste_Pos1=1;
620 break;
621 case GLUT_KEY_END:
622 if (xnor) Taste_Ende=1;
623 break;
624 }
625 }
626 }
627
628
SondertasteLos(int Taste,int x,int y)629 void SondertasteLos(int Taste,int x, int y) {
630
631 x=y;
632
633 if (StateMaschin!=START) {
634
635 switch (Taste) {
636 case 108: {
637 Taste_Shift=0;
638 } break;
639 case GLUT_KEY_UP:
640 Taste_Pfeil_Oben=0;
641 break;
642 case GLUT_KEY_DOWN:
643 Taste_Pfeil_Unten=0;
644 break;
645 case GLUT_KEY_RIGHT:
646 Taste_Pfeil_Rechts=0;
647 break;
648 case GLUT_KEY_LEFT:
649 Taste_Pfeil_Links=0;
650 break;
651 case GLUT_KEY_PAGE_UP:
652 Taste_Bild_Auf=0;
653 break;
654 case GLUT_KEY_PAGE_DOWN:
655 Taste_Bild_Ab=0;
656 break;
657 case GLUT_KEY_HOME:
658 Taste_Pos1=0;
659 break;
660 case GLUT_KEY_END:
661 Taste_Ende=0;
662 break;
663 }
664 }
665 }
666