1 /****************************************************************************
2 **
3 **  Menu.cpp   Stefan Disch, Tobias Nopper, Martina Welte 2001
4 **
5 *****************************************************************************/
6 
7 #include <math.h>
8 #include <stdlib.h>
9 #include <stdio.h> //2CHANGE wieder raus wenn kein printf mehr drin
10 #include <GL/glut.h>
11 
12 #include "LA.h"                // Zum Handling von .bmp-Files bzw. Matrix-Bildern
13 #include "bmp.h"
14 #include "Kamera.h"
15 #include "Kugel.h"
16 #include "Tisch.h"
17 #include "Anzeige.h"
18 #include "Schiedsrichter.h"
19 #include "Schild.h"
20 #include "Textfeld.h"
21 #include "Beleuchtung.h"
22 
23 #include "SpielfeldAufbau.h"
24 #include "KommandoZeilenParameter.h"
25 #include "Einsetzen.h"
26 #include "kugeltabellen.h"
27 #include "Benutzerschnittstelle.h"
28 #include "BillardGL.h"
29 
30 #include "Menu.h"
31 
32 #include "Namen.h"
33 
34 //#include "createTexture.h"   // Funktion zum Generieren einer Textur aus einem
35                                // Matrix-Bild (aus "Ubungen)
36 
37 
38 /* --------- Konstruktor ---------- */
Menu()39 Menu::Menu() {
40   //
41   for (GLint TextfeldNr=0; TextfeldNr < 1000 ; TextfeldNr++ ) {
42     TextfeldArray[TextfeldNr] = 0;
43   }
44 
45   TDL=0;
46 }
47 
Update(GLint Faktor)48 void Menu::Update(GLint Faktor) {
49 
50   if (!InAnimation) {
51     return;
52   } else {
53 
54     Animationszeit+=Faktor;
55     if (Animationszeit>=ANIMATIONSDAUER) {
56       Animationszeit=ANIMATIONSDAUER;
57       InAnimation=0;
58     }
59 
60     for (GLint SchildNr=0;SchildNr<SchildAnzahl;SchildNr++) {
61       SchildArray[SchildNr]->Animiere(Faktor);
62     }
63 
64     for (GLint TextfeldNr=0;TextfeldNr<1000;TextfeldNr++) {
65       if( TextfeldArray[TextfeldNr] )
66 	TextfeldArray[TextfeldNr]->Animiere(Faktor);
67     }
68 
69   }
70 }
71 
male()72 void Menu::male() {
73 
74   glMatrixMode(GL_PROJECTION);
75   glLoadIdentity();
76   gluOrtho2D(0.0,16.0,0.0,12.0);
77   glMatrixMode(GL_MODELVIEW);
78   glLoadIdentity();
79 
80   for (GLint SchildNr=0;SchildNr<SchildAnzahl;SchildNr++) {
81     SchildArray[SchildNr]->male();
82   }
83 
84   for (GLint TextfeldNr=0;TextfeldNr<1000;TextfeldNr++) {
85     if( TextfeldArray[TextfeldNr] )
86       TextfeldArray[TextfeldNr]->male();
87   }
88 
89 }
90 
ladeSprache(GLint Sprache)91 void Menu::ladeSprache(GLint Sprache) {
92   char wort[2000];
93   char temp[2000];
94   int index;
95 
96   FILE *f;
97   char dateiname[1000];
98 #ifndef _WIN32
99   sprintf(dateiname,"%slang/%i.lang",PFAD,Sprache);
100   f=fopen(dateiname,"r");
101 #endif
102 #ifdef _WIN32
103   sprintf(dateiname,"lang/%i.lang",Sprache);
104   f=fopen(dateiname,"rb");
105 #endif
106   if (f) {
107     GLint nummer;
108     while (!feof(f)) {
109       for (int j=0 ; j<2000 ; j++ ) {
110 	temp[j]=0;
111 	wort[j]=0;
112       }
113       fgets(temp,2000,f);
114       int i=0;
115       while (temp[i]) i++;
116       while ((temp[--i]==10 || temp[i]==13 || temp[i]==32) && i) temp[i]=0;
117       if (sscanf(temp,"%d %n",&nummer,&index)<1) continue;
118 
119       //printf("."); fflush(stdout);
120 
121       i=0;
122       while (temp[index+i]) {
123 	wort[i]=temp[index+i];
124 	i++;
125       }
126       wort[index+i]=0;
127 
128       if (temp[0]) {
129         if (TextfeldArray[nummer]) {
130 	  TextfeldArray[nummer]->SetzeTextKDL(wort);
131 	} else {
132 	  TextfeldArray[nummer] = new Textfeld();
133 	  TextfeldArray[nummer]->InitialisiereKDL(TDL,wort);
134 	}
135       }
136     }
137     fclose(f);
138   }
139 }
140 
Initialisiere(GLint Texturgroesse)141 void Menu::Initialisiere(GLint Texturgroesse) {
142 
143   if (!TDL) {
144     TDL=dummyTextfeld.dummyInitialisiere(Texturgroesse);
145     return;
146   }
147 
148   //printf(" Loading languages\n");
149   ladeSprache(900); //Deutsch zuerst
150   ladeSprache(901); //drueber Englisch als default
151   ladeSprache(999); //Sprachenuebersicht
152 
153   if (Sprache) ladeSprache(Sprache);
154 
155   //Tutorial-Texta auf Breite 31.2
156   for (GLint tf=640 ; tf < 700 ; tf++ ) {
157     if (!TextfeldArray[tf]) continue;
158     TextfeldArray[tf]->SetzeMaxBreite(31.2);
159   }
160 
161   //Regeln-Text auf Breite 24
162   for (GLint tf2=700 ; tf2 < 800 ; tf2++ ) {
163     if (!TextfeldArray[tf2]) continue;
164     TextfeldArray[tf2]->SetzeMaxBreite(26);
165   }
166 
167   //printf("\n\n Generating Menu Display Lists\n");
168 
169   for (GLint dl=0 ; dl < 1000 ; dl++ ) {
170     if (!TextfeldArray[dl]) continue;
171     TextfeldArray[dl]->GeneriereDisplayList();
172     //printf("."); fflush(stdout);
173   }
174 
175   //printf("\n\n");
176 
177   TextfeldArray[T_SPIELER1NAME]->SetzeText(Spieler1);
178 
179   TextfeldArray[T_SPIELER2NAME]->SetzeText(Spieler2);
180 
181   if (TextfeldArray[T_FPS])
182     TextfeldArray[T_FPS]->SetzeText("0 fps");
183   else {
184     TextfeldArray[T_FPS] = new Textfeld();
185     TextfeldArray[T_FPS]->Initialisiere(TDL,"0 fps");
186   }
187 
188   SchildAnzahl=0;
189 
190   menuhintergrund.Initialisiere();
191   SchildArray[SchildAnzahl++]=&menuhintergrund;
192 
193   logo.InitialisiereLogo();
194   SchildArray[SchildAnzahl++]=&logo;
195 
196   ball[0].Initialisiere(1,"a00","aalpha");
197   SchildArray[SchildAnzahl++]=&ball[0];
198   ball[1].Initialisiere(1,"a1","aalpha");
199   SchildArray[SchildAnzahl++]=&ball[1];
200   ball[2].Initialisiere(1,"a2","aalpha");
201   SchildArray[SchildAnzahl++]=&ball[2];
202   ball[3].Initialisiere(1,"a3","aalpha");
203   SchildArray[SchildAnzahl++]=&ball[3];
204   ball[4].Initialisiere(1,"a4","aalpha");
205   SchildArray[SchildAnzahl++]=&ball[4];
206   ball[5].Initialisiere(1,"a5","aalpha");
207   SchildArray[SchildAnzahl++]=&ball[5];
208   ball[6].Initialisiere(1,"a6","aalpha");
209   SchildArray[SchildAnzahl++]=&ball[6];
210   ball[7].Initialisiere(1,"a7","aalpha");
211   SchildArray[SchildAnzahl++]=&ball[7];
212   ball[8].Initialisiere(1,"a8","aalpha");
213   SchildArray[SchildAnzahl++]=&ball[8];
214   ball[9].Initialisiere(1,"a9","aalpha");
215   SchildArray[SchildAnzahl++]=&ball[9];
216   ball[10].Initialisiere(1,"a10","aalpha");
217   SchildArray[SchildAnzahl++]=&ball[10];
218   ball[11].Initialisiere(1,"a11","aalpha");
219   SchildArray[SchildAnzahl++]=&ball[11];
220   ball[12].Initialisiere(1,"a12","aalpha");
221   SchildArray[SchildAnzahl++]=&ball[12];
222   ball[13].Initialisiere(1,"a13","aalpha");
223   SchildArray[SchildAnzahl++]=&ball[13];
224   ball[14].Initialisiere(1,"a14","aalpha");
225   SchildArray[SchildAnzahl++]=&ball[14];
226   ball[15].Initialisiere(1,"a15","aalpha");
227   SchildArray[SchildAnzahl++]=&ball[15];
228 
229   volle.Initialisiere(Texturgroesse,"volle","aalpha2");
230   SchildArray[SchildAnzahl++]=&volle;
231   halbe.Initialisiere(Texturgroesse,"halbe","aalpha2");
232   SchildArray[SchildAnzahl++]=&halbe;
233 
234   //GameStar.Initialisiere(1,"gamestar",1); //Gamestar
235   //SchildArray[SchildAnzahl++]=&GameStar;
236 
237 
238   if (!MenuZustand) {MenuZustand=STARTBILDSCHIRM;}
239 
240   NeuerMenuZustand();
241   StarteAnimation();
242 
243   MenuGesperrt=0;
244 
245 }
246 
Maustaste(int Taste,int Richtung,int x,int y)247 GLint Menu::Maustaste(int Taste,int Richtung,int x,int y){
248 
249   StarteAnimation();
250 
251   GLint Signal=0;
252   GLint SchildNr=0;
253   GLint TextfeldNr=0;
254 
255   while (!Signal && SchildNr<SchildAnzahl) {
256     Signal=SchildArray[SchildNr++]->Maustaste(Taste,Richtung,x,y);
257   }
258 
259   for (TextfeldNr=0 ; TextfeldNr<1000; TextfeldNr++) {
260     if (Signal) break;
261     if (TextfeldArray[TextfeldNr])
262       Signal=TextfeldArray[TextfeldNr]->Maustaste(Taste,Richtung,x,y);
263   }
264 
265   if (Signal>0) {
266     SignalAusfuehrung(Signal);
267   }
268 
269   if (MenuZustand==STARTBILDSCHIRM &&
270       Richtung==GLUT_UP) {
271     if (Sprache) SetzeMenuZustand(HAUPTMENU);
272     else SetzeMenuZustand(SPRACHAUSWAHL);
273     return 1;
274   }
275 
276   if (MenuGesperrt ||
277       MenuZustand!=SPIEL) {
278     return 1;
279   }
280 
281   return Signal;
282 }
283 
StarteAnimation()284 void Menu::StarteAnimation() {
285   InAnimation=1;
286   Animationszeit=0;
287 }
288 
SetzeMenuZustand(GLint NeuerZustand)289 void Menu::SetzeMenuZustand(GLint NeuerZustand) {
290   MenuZustand=NeuerZustand;
291   NeuerMenuZustand();
292 }
293 
NeuerMenuZustand()294 void Menu::NeuerMenuZustand(){
295 
296   for (GLint SchildNr=0;SchildNr<SchildAnzahl;SchildNr++) {
297     SchildArray[SchildNr]->Desaktiviere();
298   }
299 
300   for (GLint TextfeldNr=0;TextfeldNr<1000;TextfeldNr++) {
301     if( TextfeldArray[TextfeldNr] )
302       TextfeldArray[TextfeldNr]->Desaktiviere();
303   }
304 
305   if (ZeigeFPS) TextfeldArray[T_FPS]->Positioniere(0,11.7,.3,A_LINKS);
306 
307   switch (MenuZustand) {
308 
309   case STARTBILDSCHIRM: {
310 
311     //GameStar.Positioniere(6,5,10,6);
312     //GameStar.Positioniere(6,5,10,6);
313 
314     logo.PositioniereFix(4,6,12,8);
315     //logo.Positioniere(4,6,12,8);
316 
317 	//TextfeldArray[790]->Positioniere(3.8,5,1,A_RECHTS);
318 	//TextfeldArray[790]->Positioniere(3.8,5,1,A_RECHTS);
319 	//TextfeldArray[791]->Positioniere(10.2,5,1,A_LINKS);
320 	//TextfeldArray[791]->Positioniere(10.2,5,1,A_LINKS);
321 
322     TextfeldArray[T_NAMEN1]->Positioniere(8,1.4,.5,A_MITTE);
323     TextfeldArray[T_NAMEN2]->Positioniere(8,1.0,.5,A_MITTE);
324     TextfeldArray[T_NOWARRANTY]->Positioniere(8,0,.5,A_MITTE);
325     TextfeldArray[T_HOMEPAGE]->Positioniere(15.9,0,.5,A_RECHTS);
326     TextfeldArray[T_VERSION]->Positioniere(.1,0,.5,A_LINKS);
327 
328   } break;
329 
330   case SPRACHAUSWAHL: {
331 
332     menuhintergrund.Positioniere(2,2.5,14,8.5);
333     logo.Positioniere(5,9,11,11);
334     logo.VollSichtbar();
335 
336     TextfeldArray[T_SPRACHAUSWAHL]->Positioniere(8,8,1,A_MITTE);
337     TextfeldArray[T_SPRACHAUSWAHL]->VollSichtbar();
338     GLfloat Pos_y=7;
339     for (GLint TextfeldNr=900;TextfeldNr<1000;TextfeldNr++) {
340       if ( TextfeldArray[TextfeldNr] ) {
341 	TextfeldArray[TextfeldNr]->Positioniere(8,Pos_y,.71,A_MITTE);
342 	TextfeldArray[TextfeldNr]->SetzeSignal(TextfeldNr);
343 	Pos_y-=.5;
344       }
345     }
346 
347     if (Sprache) {
348       TextfeldArray[T_ZURUECK]->Positioniere(8,1,1,A_MITTE);
349       TextfeldArray[T_ZURUECK]->SetzeSignal(S_HM_EINSTELLUNGEN);
350     }
351     TextfeldArray[T_HOMEPAGE]->Positioniere(15.9,0,.5,A_RECHTS);
352     TextfeldArray[T_VERSION]->Positioniere(.1,0,.5,A_LINKS);
353   } break;
354 
355   case HAUPTMENU: {
356 
357     menuhintergrund.Positioniere(2,2.5,14,8.5);
358 
359     logo.Positioniere(5,9,11,11);
360     logo.VollSichtbar();
361     logo.SetzeSignal(S_LOGO);
362 
363     TextfeldArray[T_HAUPTMENU]->Positioniere(8,8,1,A_MITTE);
364     TextfeldArray[T_HAUPTMENU]->VollSichtbar();
365 
366     TextfeldArray[T_TRAINING]->Positioniere(5.5,6,1,A_MITTE);
367     TextfeldArray[T_TRAINING]->SetzeSignal(S_HM_TRAINING);
368 
369     TextfeldArray[T_ZWEISPIELER]->Positioniere(10.5,6,1,A_MITTE);
370     TextfeldArray[T_ZWEISPIELER]->SetzeSignal(S_HM_ZWEISPIELER);
371 
372     TextfeldArray[T_HILFE]->Positioniere(5.5,4,1,A_MITTE);
373     TextfeldArray[T_HILFE]->SetzeSignal(S_HM_HILFE);
374 
375     TextfeldArray[T_EINSTELLUNGEN]->Positioniere(10.5,4,1,A_MITTE);
376     TextfeldArray[T_EINSTELLUNGEN]->SetzeSignal(S_HM_EINSTELLUNGEN);
377 
378     TextfeldArray[T_BEENDEN]->Positioniere(8,1,1,A_MITTE);
379     TextfeldArray[T_BEENDEN]->SetzeSignal(S_HM_BEENDEN);
380 
381     TextfeldArray[T_HOMEPAGE]->Positioniere(15.9,0,.5,A_RECHTS);
382     TextfeldArray[T_VERSION]->Positioniere(.1,0,.5,A_LINKS);
383   } break;
384 
385   case TRAINING: {
386 
387     menuhintergrund.Positioniere(4,5,12,8.5);
388 
389     logo.Positioniere(4,9,12,11);
390     logo.VollSichtbar();
391 
392     TextfeldArray[T_TRAINING]->Positioniere(8,8,1,A_MITTE);
393     TextfeldArray[T_TRAINING]->VollSichtbar();
394 
395     TextfeldArray[T_ACHTBALL]->Positioniere(6.5,6,1,A_MITTE);
396     TextfeldArray[T_ACHTBALL]->SetzeSignal(S_TR_ACHTBALL);
397 
398     TextfeldArray[T_NEUNBALL]->Positioniere(9.5,6,1,A_MITTE);
399     TextfeldArray[T_NEUNBALL]->SetzeSignal(S_TR_NEUNBALL);
400 
401     TextfeldArray[T_ZURUECK]->Positioniere(8,1,1,A_MITTE);
402     TextfeldArray[T_ZURUECK]->SetzeSignal(S_TR_ZURUECK);
403 
404     TextfeldArray[T_HOMEPAGE]->Positioniere(15.9,0,.5,A_RECHTS);
405     TextfeldArray[T_VERSION]->Positioniere(.1,0,.5,A_LINKS);
406   } break;
407 
408   case ZWEISPIELER: {
409     menuhintergrund.Positioniere(3,2.5,13,8.5);
410     logo.Positioniere(4,9,12,11);
411     logo.VollSichtbar();
412     TextfeldArray[T_ZWEISPIELER]->Positioniere(8,8,1,A_MITTE);
413     TextfeldArray[T_ZWEISPIELER]->VollSichtbar();
414     TextfeldArray[T_SPIELER1]->Positioniere(8,6,1,A_RECHTS);
415     TextfeldArray[T_SPIELER1]->SetzeSignal(S_SPIELER1HERHOEREN);
416     TextfeldArray[T_SPIELER1NAME]->Positioniere(8.2,6,1,A_LINKS);
417     TextfeldArray[T_SPIELER1NAME]->SetzeSignal(S_SPIELER1HERHOEREN);
418     TextfeldArray[T_SPIELER2]->Positioniere(8,5,1,A_RECHTS);
419     TextfeldArray[T_SPIELER2]->SetzeSignal(S_SPIELER2HERHOEREN);
420     TextfeldArray[T_SPIELER2NAME]->Positioniere(8.2,5,1,A_LINKS);
421     TextfeldArray[T_SPIELER2NAME]->SetzeSignal(S_SPIELER2HERHOEREN);
422     TextfeldArray[T_ACHTBALL]->Positioniere(5,3,1,A_MITTE);
423     TextfeldArray[T_ACHTBALL]->SetzeSignal(S_ZW_ACHTBALL);
424     TextfeldArray[T_NEUNBALL]->Positioniere(11,3,1,A_MITTE);
425     TextfeldArray[T_NEUNBALL]->SetzeSignal(S_ZW_NEUNBALL);
426     TextfeldArray[T_ZURUECK]->Positioniere(8,1,1,A_MITTE);
427     TextfeldArray[T_ZURUECK]->SetzeSignal(S_ZW_ZURUECK);
428 
429     TextfeldArray[T_HOMEPAGE]->Positioniere(15.9,0,.5,A_RECHTS);
430     TextfeldArray[T_VERSION]->Positioniere(.1,0,.5,A_LINKS);
431   } break;
432 
433   case EINSTELLUNGEN: {
434     menuhintergrund.Positioniere(4,2.5,12,8.5);
435     logo.Positioniere(4,9,12,11);
436     logo.VollSichtbar();
437     TextfeldArray[T_EINSTELLUNGEN]->Positioniere(8,8,1,A_MITTE);
438     TextfeldArray[T_EINSTELLUNGEN]->VollSichtbar();
439     TextfeldArray[T_STEUERUNG]->Positioniere(8,6.5,1,A_MITTE);
440     TextfeldArray[T_STEUERUNG]->SetzeSignal(S_EI_STEUERUNG);
441     TextfeldArray[T_GRAFIK]->Positioniere(8,5.5,1,A_MITTE);
442     TextfeldArray[T_GRAFIK]->SetzeSignal(S_EI_GRAFIK);
443     TextfeldArray[T_AUDIO]->Positioniere(8,4.5,1,A_MITTE);
444     TextfeldArray[T_SPRACHE]->Positioniere(8,3.5,1,A_MITTE);
445     TextfeldArray[T_SPRACHE]->SetzeSignal(S_EI_SPRACHE);
446     TextfeldArray[T_ZURUECK]->Positioniere(8,1,1,A_MITTE);
447     if (AusSpiel) {
448       TextfeldArray[T_ZURUECK]->SetzeSignal(S_EI_ZURUECK_AS);
449     } else {
450       TextfeldArray[T_ZURUECK]->SetzeSignal(S_EI_ZURUECK);
451     }
452 
453     TextfeldArray[T_HOMEPAGE]->Positioniere(15.9,0,.5,A_RECHTS);
454     TextfeldArray[T_VERSION]->Positioniere(.1,0,.5,A_LINKS);
455 
456   } break;
457 
458   case EINSTELLUNGENSTEUERUNG: {
459     menuhintergrund.Positioniere(2,3.5,14,8.5);
460     logo.Positioniere(4,9,12,11);
461     logo.VollSichtbar();
462     TextfeldArray[T_EINSTELLUNGEN]->Positioniere(4,8,1,A_LINKS);
463     TextfeldArray[T_EINSTELLUNGEN]->VollSichtbar();
464     TextfeldArray[T_STEUERUNG]->Positioniere(12,8,1,A_RECHTS);
465     TextfeldArray[T_STEUERUNG]->VollSichtbar();
466 
467     TextfeldArray[T_MAUSGESCHWINDIGKEIT]->Positioniere(8,6,.71,A_RECHTS);
468     TextfeldArray[T_MAUSGESCHWINDIGKEIT]->SetzeSignal(S_EI_MOUSESPEED);
469     TextfeldArray[T_XACHSEINVERTIERT]->Positioniere(8,5.5,.71,A_RECHTS);
470     TextfeldArray[T_XACHSEINVERTIERT]->SetzeSignal(S_EI_XINVERT);
471     TextfeldArray[T_YACHSEINVERTIERT]->Positioniere(8,5,.71,A_RECHTS);
472     TextfeldArray[T_YACHSEINVERTIERT]->SetzeSignal(S_EI_YINVERT);
473 
474     if (E_InvertX) {
475       TextfeldArray[T_X_AN]->Positioniere(8.2,5.5,.71,A_LINKS);
476       TextfeldArray[T_X_AN]->SetzeSignal(S_EI_XINVERT);
477     } else {
478       TextfeldArray[T_X_AUS]->Positioniere(8.2,5.5,.71,A_LINKS);
479       TextfeldArray[T_X_AUS]->SetzeSignal(S_EI_XINVERT);
480     }
481     if (E_InvertY) {
482       TextfeldArray[T_Y_AN]->Positioniere(8.2,5,.71,A_LINKS);
483       TextfeldArray[T_Y_AN]->SetzeSignal(S_EI_YINVERT);
484     } else {
485       TextfeldArray[T_Y_AUS]->Positioniere(8.2,5,.71,A_LINKS);
486       TextfeldArray[T_Y_AUS]->SetzeSignal(S_EI_YINVERT);
487     }
488     if (E_MouseSpeed<=.293) {
489       TextfeldArray[T_MG_LANGSAM]->Positioniere(8.2,6,.71,A_LINKS);
490       TextfeldArray[T_MG_LANGSAM]->SetzeSignal(S_EI_MOUSESPEED);
491     } else if (E_MouseSpeed<=.41) {
492       TextfeldArray[T_MG_NORMAL]->Positioniere(8.2,6,.71,A_LINKS);
493       TextfeldArray[T_MG_NORMAL]->SetzeSignal(S_EI_MOUSESPEED);
494     } else if (E_MouseSpeed<=.575) {
495       TextfeldArray[T_MG_SCHNELL]->Positioniere(8.2,6,.71,A_LINKS);
496       TextfeldArray[T_MG_SCHNELL]->SetzeSignal(S_EI_MOUSESPEED);
497     } else {
498       TextfeldArray[T_MG_SEHRSCHNELL]->Positioniere(8.2,6,.71,A_LINKS);
499       TextfeldArray[T_MG_SEHRSCHNELL]->SetzeSignal(S_EI_MOUSESPEED);
500     }
501     if( E_MouseSpeed==MouseSpeed &&
502 	E_InvertX==InvertX &&
503 	E_InvertY==InvertY) {
504       TextfeldArray[T_ZURUECK]->Positioniere(8,1,1,A_MITTE);
505       TextfeldArray[T_ZURUECK]->SetzeSignal(S_EI_STEUERUNGZURUECK);
506     } else {
507       TextfeldArray[T_UEBERNEHMEN]->Positioniere(12,1,1,A_RECHTS);
508       TextfeldArray[T_UEBERNEHMEN]->SetzeSignal(S_EI_STEUERUNGUEBERNEHMEN);
509       TextfeldArray[T_ABBRECHEN]->Positioniere(4,1,1,A_LINKS);
510       TextfeldArray[T_ABBRECHEN]->SetzeSignal(S_EI_STEUERUNGZURUECK);
511     }
512 
513     TextfeldArray[T_HOMEPAGE]->Positioniere(15.9,0,.5,A_RECHTS);
514     TextfeldArray[T_VERSION]->Positioniere(.1,0,.5,A_LINKS);
515   } break;
516 
517   case EINSTELLUNGENGRAFIK: {
518     if (E_KugelAufloesung==3 &&
519 	E_Texturgroesse==8 &&
520 	E_TischTexturgroesse==0 &&
521 	E_AnzeigeTexturgroesse==2 &&
522 	E_Reflektionen==0 &&
523 	E_BildschirmAufloesung==640 &&
524 	E_Farbtiefe==16 &&
525 	E_Schatten==0 &&
526 	E_TischLampen==1 &&
527 	E_TexMMM==0 &&
528 	E_GrueneLampe==0) {Qualitaet=1;}
529     else if (E_KugelAufloesung==5 &&
530 	     E_Texturgroesse==4 &&
531 	     E_TischTexturgroesse==4 &&
532 	     E_AnzeigeTexturgroesse==2 &&
533 	     E_Reflektionen==0 &&
534 	     E_BildschirmAufloesung==640 &&
535 	     E_Farbtiefe==16 &&
536 	     E_Schatten==1 &&
537 	     E_TischLampen==1 &&
538 	     E_TexMMM==2 &&
539 	     E_GrueneLampe==0) {Qualitaet=2;}
540     else if (E_KugelAufloesung==7 &&
541 	     E_Texturgroesse==2 &&
542 	     E_TischTexturgroesse==2 &&
543 	     E_AnzeigeTexturgroesse==1 &&
544 	     E_Reflektionen==0 &&
545 	     E_BildschirmAufloesung==800 &&
546 	     E_Farbtiefe==16 &&
547 	     E_Schatten==1 &&
548 	     E_TischLampen==2 &&
549 	     E_TexMMM==3 &&
550 	     E_GrueneLampe==0) {Qualitaet=3;}
551     else if (E_KugelAufloesung==7 &&
552 	     E_Texturgroesse==2 &&
553 	     E_TischTexturgroesse==1 &&
554 	     E_AnzeigeTexturgroesse==1 &&
555 	     E_Reflektionen==1 &&
556 	     E_BildschirmAufloesung==1024 &&
557 	     E_Farbtiefe==16 &&
558 	     E_Schatten==1 &&
559 	     E_TischLampen==2 &&
560 	     E_TexMMM==7 &&
561 	     E_GrueneLampe==1) {Qualitaet=4;}
562     else if (E_KugelAufloesung==11 &&
563 	     E_Texturgroesse==1 &&
564 	     E_TischTexturgroesse==1 &&
565 	     E_AnzeigeTexturgroesse==1 &&
566 	     E_Reflektionen==1 &&
567 	     E_BildschirmAufloesung==1024 &&
568 	     E_Farbtiefe==32 &&
569 	     E_Schatten==1 &&
570 	     E_TischLampen==3 &&
571 	     E_TexMMM==7 &&
572 	     E_GrueneLampe==1) {Qualitaet=5;}
573     else Qualitaet=0;
574 
575     menuhintergrund.Positioniere(2,1.7,14,8.5);
576     logo.Positioniere(4,9,12,11);
577     logo.VollSichtbar();
578     TextfeldArray[T_EINSTELLUNGEN]->Positioniere(4,8,1,A_LINKS);
579     TextfeldArray[T_EINSTELLUNGEN]->VollSichtbar();
580     TextfeldArray[T_GRAFIK]->Positioniere(12,8,1,A_RECHTS);
581     TextfeldArray[T_GRAFIK]->VollSichtbar();
582 
583     TextfeldArray[T_QUALITAET]->Positioniere(8,7,1,A_RECHTS);
584     TextfeldArray[T_QUALITAET]->SetzeSignal(S_EI_QUALITAET);
585 
586     TextfeldArray[T_BALLGEOMETRIE]->Positioniere(8,6.5,.6,A_RECHTS);
587     TextfeldArray[T_BALLGEOMETRIE]->SetzeSignal(S_EI_BALLGEOMETRIE);
588     TextfeldArray[T_BALLTEXTUREN]->Positioniere(8,6.1,.6,A_RECHTS);
589     TextfeldArray[T_BALLTEXTUREN]->SetzeSignal(S_EI_BALLTEXTUREN);
590     TextfeldArray[T_TISCHTEXTUREN]->Positioniere(8,5.7,.6,A_RECHTS);
591     TextfeldArray[T_TISCHTEXTUREN]->SetzeSignal(S_EI_TISCHTEXTUREN);
592     TextfeldArray[T_MENUTEXTUREN]->Positioniere(8,5.3,.6,A_RECHTS);
593     TextfeldArray[T_MENUTEXTUREN]->SetzeSignal(S_EI_ANZEIGETEXTUREN);
594     TextfeldArray[T_REFLEKTIONEN]->Positioniere(8,4.9,.6,A_RECHTS);
595     TextfeldArray[T_REFLEKTIONEN]->SetzeSignal(S_EI_REFLEKTIONEN);
596     TextfeldArray[T_AUFLOESUNG]->Positioniere(8,4.5,.6,A_RECHTS);
597     TextfeldArray[T_AUFLOESUNG]->SetzeSignal(S_EI_AUFLOESUNG);
598     TextfeldArray[T_FARBTIEFE]->Positioniere(8,4.1,.6,A_RECHTS);
599     TextfeldArray[T_FARBTIEFE]->SetzeSignal(S_EI_FARBTIEFE);
600     TextfeldArray[T_SCHATTEN]->Positioniere(8,3.7,.6,A_RECHTS);
601     TextfeldArray[T_SCHATTEN]->SetzeSignal(S_EI_SCHATTEN);
602     TextfeldArray[T_TEXTURINTERPOLATION]->Positioniere(8,3.3,.6,A_RECHTS);
603     TextfeldArray[T_TEXTURINTERPOLATION]->SetzeSignal(S_EI_TEXTURINTERPOLATION);
604     //TextfeldArray[T_AMBIENTESLICHT]->Positioniere(8,2.9,.6,A_RECHTS);
605     //TextfeldArray[T_AMBIENTESLICHT]->SetzeSignal(S_EI_AMBIENTESLICHT);
606     TextfeldArray[T_TISCHLAMPEN]->Positioniere(8,2.9,.6,A_RECHTS);
607     TextfeldArray[T_TISCHLAMPEN]->SetzeSignal(S_EI_TISCHLAMPEN);
608     TextfeldArray[T_TISCHCOLORBLEEDING]->Positioniere(8,2.5,.6,A_RECHTS);
609     TextfeldArray[T_TISCHCOLORBLEEDING]->SetzeSignal(S_EI_GRUENELAMPE);
610     TextfeldArray[T_FRAMERATE]->Positioniere(8,2.1,.6,A_RECHTS);
611     TextfeldArray[T_FRAMERATE]->SetzeSignal(S_EI_FPS);
612 
613     //switch (E_AmbientesLicht) {
614     //case 1: {
615     //  TextfeldArray[T_AMBIENTESLICHTEIN]->Positioniere(8.2,2.9,.6,A_LINKS);
616     //  TextfeldArray[T_AMBIENTESLICHTEIN]->SetzeSignal(S_EI_AMBIENTESLICHT);
617     //} break;
618     //case 0: {
619     //  TextfeldArray[T_AMBIENTESLICHTAUS]->Positioniere(8.2,2.9,.6,A_LINKS);
620     //  TextfeldArray[T_AMBIENTESLICHTAUS]->SetzeSignal(S_EI_AMBIENTESLICHT);
621     //} break;
622     //}
623 
624     switch (E_TischLampen) {
625     case 1: {
626       TextfeldArray[T_TISCHLAMPEN1]->Positioniere(8.2,2.9,.6,A_LINKS);
627       TextfeldArray[T_TISCHLAMPEN1]->SetzeSignal(S_EI_TISCHLAMPEN);
628     } break;
629     case 2: {
630       TextfeldArray[T_TISCHLAMPEN2]->Positioniere(8.2,2.9,.6,A_LINKS);
631       TextfeldArray[T_TISCHLAMPEN2]->SetzeSignal(S_EI_TISCHLAMPEN);
632     } break;
633     case 3: {
634       TextfeldArray[T_TISCHLAMPEN3]->Positioniere(8.2,2.9,.6,A_LINKS);
635       TextfeldArray[T_TISCHLAMPEN3]->SetzeSignal(S_EI_TISCHLAMPEN);
636     } break;
637     }
638 
639     switch (E_GrueneLampe) {
640     case 1: {
641       TextfeldArray[T_TISCHCOLORBLEEDINGEIN]->Positioniere(8.2,2.5,.6,A_LINKS);
642       TextfeldArray[T_TISCHCOLORBLEEDINGEIN]->SetzeSignal(S_EI_GRUENELAMPE);
643     } break;
644     case 0: {
645       TextfeldArray[T_TISCHCOLORBLEEDINGAUS]->Positioniere(8.2,2.5,.6,A_LINKS);
646       TextfeldArray[T_TISCHCOLORBLEEDINGAUS]->SetzeSignal(S_EI_GRUENELAMPE);
647     } break;
648     }
649 
650     switch (E_ZeigeFPS) {
651     case 1: {
652       TextfeldArray[T_FRAMERATEEIN]->Positioniere(8.2,2.1,.6,A_LINKS);
653       TextfeldArray[T_FRAMERATEEIN]->SetzeSignal(S_EI_FPS);
654     } break;
655     case 0: {
656       TextfeldArray[T_FRAMERATEAUS]->Positioniere(8.2,2.1,.6,A_LINKS);
657       TextfeldArray[T_FRAMERATEAUS]->SetzeSignal(S_EI_FPS);
658     } break;
659     }
660 
661     switch (E_Schatten) {
662     case 1: {
663       TextfeldArray[T_S_EIN]->Positioniere(8.2,3.7,.6,A_LINKS);
664       TextfeldArray[T_S_EIN]->SetzeSignal(S_EI_SCHATTEN);
665     } break;
666     case 0: {
667       TextfeldArray[T_S_AUS]->Positioniere(8.2,3.7,.6,A_LINKS);
668       TextfeldArray[T_S_AUS]->SetzeSignal(S_EI_SCHATTEN);
669     } break;
670     }
671 
672 
673     switch (E_TexMMM) {
674     case 0: {
675       TextfeldArray[T_TI_AUS]->Positioniere(8.2,3.3,.6,A_LINKS);
676       TextfeldArray[T_TI_AUS]->SetzeSignal(S_EI_TEXTURINTERPOLATION);
677     } break;
678     case 2: {
679       TextfeldArray[T_TI_NIEDRIG]->Positioniere(8.2,3.3,.6,A_LINKS);
680       TextfeldArray[T_TI_NIEDRIG]->SetzeSignal(S_EI_TEXTURINTERPOLATION);
681     } break;
682     case 7: {
683       TextfeldArray[T_TI_HOCH]->Positioniere(8.2,3.3,.6,A_LINKS);
684       TextfeldArray[T_TI_HOCH]->SetzeSignal(S_EI_TEXTURINTERPOLATION);
685     } break;
686     default: {
687       TextfeldArray[T_TI_NORMAL]->Positioniere(8.2,3.3,.6,A_LINKS);
688       TextfeldArray[T_TI_NORMAL]->SetzeSignal(S_EI_TEXTURINTERPOLATION);
689     } break;
690     }
691 
692     switch (Qualitaet) {
693     case 1: {
694       TextfeldArray[T_Q_SEHRSCHNELL]->Positioniere(8.2,7,1,A_LINKS);
695       TextfeldArray[T_Q_SEHRSCHNELL]->SetzeSignal(S_EI_QUALITAET);
696     }break;
697     case 2: {
698       TextfeldArray[T_Q_SCHNELL]->Positioniere(8.2,7,1,A_LINKS);
699       TextfeldArray[T_Q_SCHNELL]->SetzeSignal(S_EI_QUALITAET);
700     }break;
701     case 3: {
702       TextfeldArray[T_Q_NORMAL]->Positioniere(8.2,7,1,A_LINKS);
703       TextfeldArray[T_Q_NORMAL]->SetzeSignal(S_EI_QUALITAET);
704     }break;
705     case 4: {
706       TextfeldArray[T_Q_HOCH]->Positioniere(8.2,7,1,A_LINKS);
707       TextfeldArray[T_Q_HOCH]->SetzeSignal(S_EI_QUALITAET);
708     }break;
709     case 5: {
710       TextfeldArray[T_Q_SEHRHOCH]->Positioniere(8.2,7,1,A_LINKS);
711       TextfeldArray[T_Q_SEHRHOCH]->SetzeSignal(S_EI_QUALITAET);
712     }break;
713     default: {
714       TextfeldArray[T_Q_BENUTZER]->Positioniere(8.2,7,1,A_LINKS);
715       TextfeldArray[T_Q_BENUTZER]->SetzeSignal(S_EI_QUALITAET);
716     }break;
717     }
718 
719     switch (E_BildschirmAufloesung) {
720     case 640: {
721       TextfeldArray[T_AUF_640x480]->Positioniere(8.2,4.5,.6,A_LINKS);
722       TextfeldArray[T_AUF_640x480]->SetzeSignal(S_EI_AUFLOESUNG);
723     }break;
724     case 1024: {
725       TextfeldArray[T_AUF_1024x768]->Positioniere(8.2,4.5,.6,A_LINKS);
726       TextfeldArray[T_AUF_1024x768]->SetzeSignal(S_EI_AUFLOESUNG);
727     }break;
728     case 1280: {
729       TextfeldArray[T_AUF_1280x960]->Positioniere(8.2,4.5,.6,A_LINKS);
730       TextfeldArray[T_AUF_1280x960]->SetzeSignal(S_EI_AUFLOESUNG);
731     }break;
732     case 1600: {
733       TextfeldArray[T_AUF_1600x1200]->Positioniere(8.2,4.5,.6,A_LINKS);
734       TextfeldArray[T_AUF_1600x1200]->SetzeSignal(S_EI_AUFLOESUNG);
735     }break;
736      default: {
737       TextfeldArray[T_AUF_800x600]->Positioniere(8.2,4.5,.6,A_LINKS);
738       TextfeldArray[T_AUF_800x600]->SetzeSignal(S_EI_AUFLOESUNG);
739     }break;
740     }
741 
742     switch (E_Reflektionen) {
743     case 1: {
744       TextfeldArray[T_REF_EIN]->Positioniere(8.2,4.9,.6,A_LINKS);
745       TextfeldArray[T_REF_EIN]->SetzeSignal(S_EI_REFLEKTIONEN);
746     }break;
747     default: {
748       TextfeldArray[T_REF_AUS]->Positioniere(8.2,4.9,.6,A_LINKS);
749       TextfeldArray[T_REF_AUS]->SetzeSignal(S_EI_REFLEKTIONEN);
750     }break;
751     }
752 
753     switch (E_Farbtiefe) {
754     case 32: {
755       TextfeldArray[T_FT_32]->Positioniere(8.2,4.1,.6,A_LINKS);
756       TextfeldArray[T_FT_32]->SetzeSignal(S_EI_FARBTIEFE);
757     }break;
758     default: {
759       TextfeldArray[T_FT_16]->Positioniere(8.2,4.1,.6,A_LINKS);
760       TextfeldArray[T_FT_16]->SetzeSignal(S_EI_FARBTIEFE);
761     }break;
762     }
763     switch (E_AnzeigeTexturgroesse) {
764     case 1: {
765       TextfeldArray[T_MT_NORMAL]->Positioniere(8.2,5.3,.6,A_LINKS);
766       TextfeldArray[T_MT_NORMAL]->SetzeSignal(S_EI_ANZEIGETEXTUREN);
767     }break;
768     case 2: {
769       TextfeldArray[T_MT_NIEDRIG]->Positioniere(8.2,5.3,.6,A_LINKS);
770       TextfeldArray[T_MT_NIEDRIG]->SetzeSignal(S_EI_ANZEIGETEXTUREN);
771     }break;
772     }
773     switch (E_Texturgroesse) {
774     case 1: {
775       TextfeldArray[T_BT_HOCH]->Positioniere(8.2,6.1,.6,A_LINKS);
776       TextfeldArray[T_BT_HOCH]->SetzeSignal(S_EI_BALLTEXTUREN);
777     }break;
778     case 2: {
779       TextfeldArray[T_BT_NORMAL]->Positioniere(8.2,6.1,.6,A_LINKS);
780       TextfeldArray[T_BT_NORMAL]->SetzeSignal(S_EI_BALLTEXTUREN);
781     }break;
782     case 4: {
783       TextfeldArray[T_BT_NIEDRIG]->Positioniere(8.2,6.1,.6,A_LINKS);
784       TextfeldArray[T_BT_NIEDRIG]->SetzeSignal(S_EI_BALLTEXTUREN);
785     }break;
786     case 8: {
787       TextfeldArray[T_BT_SEHRNIEDRIG]->Positioniere(8.2,6.1,.6,A_LINKS);
788       TextfeldArray[T_BT_SEHRNIEDRIG]->SetzeSignal(S_EI_BALLTEXTUREN);
789     }break;
790     }
791     switch (E_TischTexturgroesse) {
792     case 1: {
793       TextfeldArray[T_TT_HOCH]->Positioniere(8.2,5.7,.6,A_LINKS);
794       TextfeldArray[T_TT_HOCH]->SetzeSignal(S_EI_TISCHTEXTUREN);
795     }break;
796     case 2: {
797       TextfeldArray[T_TT_NORMAL]->Positioniere(8.2,5.7,.6,A_LINKS);
798       TextfeldArray[T_TT_NORMAL]->SetzeSignal(S_EI_TISCHTEXTUREN);
799     }break;
800     case 4: {
801       TextfeldArray[T_TT_NIEDRIG]->Positioniere(8.2,5.7,.6,A_LINKS);
802       TextfeldArray[T_TT_NIEDRIG]->SetzeSignal(S_EI_TISCHTEXTUREN);
803     }break;
804     case 8: {
805       TextfeldArray[T_TT_SEHRNIEDRIG]->Positioniere(8.2,5.7,.6,A_LINKS);
806       TextfeldArray[T_TT_SEHRNIEDRIG]->SetzeSignal(S_EI_TISCHTEXTUREN);
807     }break;
808     case 0: {
809       TextfeldArray[T_TT_AUS]->Positioniere(8.2,5.7,.6,A_LINKS);
810       TextfeldArray[T_TT_AUS]->SetzeSignal(S_EI_TISCHTEXTUREN);
811     }break;
812     }
813 
814     switch (E_KugelAufloesung) {
815     case 3: {
816       TextfeldArray[T_BG_SEHRNIEDRIG]->Positioniere(8.2,6.5,.6,A_LINKS);
817       TextfeldArray[T_BG_SEHRNIEDRIG]->SetzeSignal(S_EI_BALLGEOMETRIE);
818     }break;
819     case 5: {
820       TextfeldArray[T_BG_NIEDRIG]->Positioniere(8.2,6.5,.6,A_LINKS);
821       TextfeldArray[T_BG_NIEDRIG]->SetzeSignal(S_EI_BALLGEOMETRIE);
822     }break;
823     case 7: {
824       TextfeldArray[T_BG_NORMAL]->Positioniere(8.2,6.5,.6,A_LINKS);
825       TextfeldArray[T_BG_NORMAL]->SetzeSignal(S_EI_BALLGEOMETRIE);
826     }break;
827     case 11: {
828       TextfeldArray[T_BG_HOCH]->Positioniere(8.2,6.5,.6,A_LINKS);
829       TextfeldArray[T_BG_HOCH]->SetzeSignal(S_EI_BALLGEOMETRIE);
830     }break;
831     }
832 
833     if( E_Texturgroesse==Texturgroesse &&
834 	E_AnzeigeTexturgroesse==AnzeigeTexturgroesse &&
835 	E_TischTexturgroesse==TischTexturgroesse &&
836 	E_KugelAufloesung==KugelAufloesung &&
837 	E_BildschirmAufloesung==BildschirmAufloesung &&
838 	E_Farbtiefe==Farbtiefe &&
839 	E_Reflektionen==Reflektionen &&
840 	E_Schatten==Schatten &&
841 	E_AmbientesLicht==AmbientesLicht &&
842 	E_TischLampen==TischLampen &&
843 	E_TexMMM==TexMMM &&
844 	E_GrueneLampe==GrueneLampe) {
845       TextfeldArray[T_ZURUECK]->Positioniere(8,.7,1,A_MITTE);
846       TextfeldArray[T_ZURUECK]->SetzeSignal(S_EI_GRAFIKZURUECK);
847     } else {
848       TextfeldArray[T_UEBERNEHMEN]->Positioniere(4,0.7,1,A_LINKS);
849       TextfeldArray[T_UEBERNEHMEN]->SetzeSignal(S_EI_GRAFIKUEBERNEHMEN);
850       TextfeldArray[T_ABBRECHEN]->Positioniere(12,0.7,1,A_RECHTS);
851       TextfeldArray[T_ABBRECHEN]->SetzeSignal(S_EI_GRAFIKZURUECK);
852     }
853     TextfeldArray[T_HOMEPAGE]->Positioniere(15.9,0,.5,A_RECHTS);
854     TextfeldArray[T_VERSION]->Positioniere(.1,0,.5,A_LINKS);
855   } break;
856 
857   case EINSTELLUNGENGRAFIKHINWEIS: {
858     menuhintergrund.Positioniere(2,3.5,14,8.5);
859     logo.Positioniere(4,9,12,11);
860     logo.VollSichtbar();
861     TextfeldArray[T_HINWEIS]->Positioniere(8,8,1,A_MITTE);
862     TextfeldArray[T_HINWEIS]->VollSichtbar();
863 
864     TextfeldArray[T_HINWEIS1]->Positioniere(8,6,.7,A_MITTE);
865     TextfeldArray[T_HINWEIS2]->Positioniere(8,5.5,.7,A_MITTE);
866 
867     TextfeldArray[T_OK]->Positioniere(8,1,1,A_MITTE);
868     TextfeldArray[T_OK]->SetzeSignal(S_EI_GRAFIKUEBERNEHMEN);
869 
870     TextfeldArray[T_HOMEPAGE]->Positioniere(15.9,0,.5,A_RECHTS);
871     TextfeldArray[T_VERSION]->Positioniere(.1,0,.5,A_LINKS);
872   } break;
873 
874   case HILFE: {
875     menuhintergrund.Positioniere(4.5,3.5,11.5,8.5);
876     logo.Positioniere(4,9,12,11);
877     logo.VollSichtbar();
878     TextfeldArray[T_HILFE]->Positioniere(8,8,1,A_MITTE);
879     TextfeldArray[T_HILFE]->VollSichtbar();
880 
881     TextfeldArray[T_H_TUTORIAL]->Positioniere(8,6.5,1,A_MITTE);
882     TextfeldArray[T_H_TUTORIAL]->SetzeSignal(S_H_TUTORIAL);
883 
884     TextfeldArray[T_H_TASTENBELEGUNGEN]->Positioniere(8,5.5,1,A_MITTE);
885     TextfeldArray[T_H_TASTENBELEGUNGEN]->SetzeSignal(S_H_TASTENBELEGUNGEN);
886 
887     TextfeldArray[T_H_BILLARDREGELN]->Positioniere(8,4.5,1,A_MITTE);
888     TextfeldArray[T_H_BILLARDREGELN]->SetzeSignal(S_H_BILLARDREGELN);
889 
890     TextfeldArray[T_ZURUECK]->Positioniere(8,1,1,A_MITTE);
891     if (AusSpiel) {
892       TextfeldArray[T_ZURUECK]->SetzeSignal(S_BE_ZURUECK_AS);
893     } else {
894       TextfeldArray[T_ZURUECK]->SetzeSignal(S_BE_ZURUECK);
895     }
896 
897     TextfeldArray[T_HOMEPAGE]->Positioniere(15.9,0,.5,A_RECHTS);
898     TextfeldArray[T_VERSION]->Positioniere(.1,0,.5,A_LINKS);
899 
900   } break;
901 
902   case HILFETASTENBELEGUNGEN: {
903     menuhintergrund.Positioniere(.5,1,15.5,10.5);
904     logo.Positioniere(0,11,4,12);
905     logo.VollSichtbar();
906     TextfeldArray[T_HILFE]->Positioniere(4,11.4,.6,A_LINKS);
907     TextfeldArray[T_HILFE]->VollSichtbar();
908     TextfeldArray[T_H_TASTENBELEGUNGEN]->Positioniere(4,11,.6,A_LINKS);
909     TextfeldArray[T_H_TASTENBELEGUNGEN]->VollSichtbar();
910 
911     TextfeldArray[600]->Positioniere(1.25,9.5,.7,A_LINKS);
912     TextfeldArray[601]->Positioniere(1.5,9.166666,.5,A_LINKS);
913     TextfeldArray[602]->Positioniere(1.25,8.5,.7,A_LINKS);
914     TextfeldArray[603]->Positioniere(1.5,8.166666,.5,A_LINKS);
915     TextfeldArray[604]->Positioniere(1.25,7.5,.7,A_LINKS);
916     TextfeldArray[605]->Positioniere(1.5,7.166666,.5,A_LINKS);
917 
918     TextfeldArray[606]->Positioniere(1.25,5.5,.7,A_LINKS);
919     TextfeldArray[607]->Positioniere(1.5,5.166666,.5,A_LINKS);
920     TextfeldArray[608]->Positioniere(1.25,4.5,.7,A_LINKS);
921     TextfeldArray[609]->Positioniere(1.5,4.166666,.5,A_LINKS);
922     TextfeldArray[610]->Positioniere(1.25,3.5,.7,A_LINKS);
923     TextfeldArray[611]->Positioniere(1.5,3.166666,.5,A_LINKS);
924     TextfeldArray[612]->Positioniere(1.25,2.5,.7,A_LINKS);
925     TextfeldArray[613]->Positioniere(1.5,2.166666,.5,A_LINKS);
926 
927     TextfeldArray[614]->Positioniere(8.25,5.5,.7,A_LINKS);
928     TextfeldArray[615]->Positioniere(8.5,5.166666,.5,A_LINKS);
929     TextfeldArray[616]->Positioniere(8.25,4.5,.7,A_LINKS);
930     TextfeldArray[617]->Positioniere(8.5,4.166666,.5,A_LINKS);
931     TextfeldArray[618]->Positioniere(8.25,3.5,.7,A_LINKS);
932     TextfeldArray[619]->Positioniere(8.5,3.166666,.5,A_LINKS);
933     TextfeldArray[620]->Positioniere(8.25,2.5,.7,A_LINKS);
934     TextfeldArray[621]->Positioniere(8.5,2.166666,.5,A_LINKS);
935 
936     TextfeldArray[T_ZURUECK]->Positioniere(8,.1,1,A_MITTE);
937     TextfeldArray[T_ZURUECK]->SetzeSignal(S_H_ZUHILFE);
938   } break;
939 
940   case HILFEREGELN1: {
941     menuhintergrund.Positioniere(.5,.7,15.5,11);
942     logo.Positioniere(0,11,4,12);
943     logo.VollSichtbar();
944     TextfeldArray[T_HILFE]->Positioniere(4,11.4,.6,A_LINKS);
945     TextfeldArray[T_HILFE]->VollSichtbar();
946     TextfeldArray[T_H_BILLARDREGELN]->Positioniere(4,11,.6,A_LINKS);
947     TextfeldArray[T_H_BILLARDREGELN]->VollSichtbar();
948 
949     TextfeldArray[710]->Positioniere(1,10,1,A_LINKS);
950 
951     TextfeldArray[711]->Positioniere(1.25,9.5,.7,A_LINKS);
952     TextfeldArray[712]->Positioniere(1.5,9.166666,.5,A_LINKS);
953     TextfeldArray[713]->Positioniere(1.25,8.5,.7,A_LINKS);
954     TextfeldArray[714]->Positioniere(1.5,8.166666,.5,A_LINKS);
955     TextfeldArray[715]->Positioniere(1.25,7.5,.7,A_LINKS);
956     TextfeldArray[716]->Positioniere(1.5,7.166666,.5,A_LINKS);
957     TextfeldArray[717]->Positioniere(1.25,6.5,.7,A_LINKS);
958     TextfeldArray[718]->Positioniere(1.5,6.166666,.5,A_LINKS);
959     TextfeldArray[719]->Positioniere(1.25,5.5,.7,A_LINKS);
960     TextfeldArray[720]->Positioniere(1.5,5.166666,.5,A_LINKS);
961     TextfeldArray[721]->Positioniere(1.25,4.5,.7,A_LINKS);
962     TextfeldArray[722]->Positioniere(1.5,4.166666,.5,A_LINKS);
963     TextfeldArray[723]->Positioniere(1.25,3.5,.7,A_LINKS);
964     TextfeldArray[724]->Positioniere(1.5,3.166666,.5,A_LINKS);
965     TextfeldArray[725]->Positioniere(1.25,2.5,.7,A_LINKS);
966     TextfeldArray[726]->Positioniere(1.5,2.166666,.5,A_LINKS);
967     TextfeldArray[727]->Positioniere(1.25,1.5,.7,A_LINKS);
968     TextfeldArray[728]->Positioniere(1.5,1.166666,.5,A_LINKS);
969 
970     TextfeldArray[T_ZURUECK]->Positioniere(8,0,.7,A_MITTE);
971     TextfeldArray[T_ZURUECK]->SetzeSignal(S_H_ZUHILFE);
972     TextfeldArray[T_H_NAECHSTESEITE]->Positioniere(15.8,0,.7,A_RECHTS);
973     TextfeldArray[T_H_NAECHSTESEITE]->SetzeSignal(S_H_R1_N);
974     //TextfeldArray[T_H_LETZTESEITE]->Positioniere(.2,0,.7,A_LINKS);
975     //TextfeldArray[T_H_LETZTESEITE]->SetzeSignal(S_H_R1_L);
976   } break;
977 
978   case HILFEREGELN2: {
979     menuhintergrund.Positioniere(.5,.7,15.5,11);
980     logo.Positioniere(0,11,4,12);
981     logo.VollSichtbar();
982     TextfeldArray[T_HILFE]->Positioniere(4,11.4,.6,A_LINKS);
983     TextfeldArray[T_HILFE]->VollSichtbar();
984     TextfeldArray[T_H_BILLARDREGELN]->Positioniere(4,11,.6,A_LINKS);
985     TextfeldArray[T_H_BILLARDREGELN]->VollSichtbar();
986 
987     GLfloat ypos=10;
988     TextfeldArray[740]->Positioniere(1,ypos,1,A_LINKS);
989     ypos-=.7*TextfeldArray[740]->TextfeldHoehe();
990     TextfeldArray[741]->Positioniere(1.25,ypos,.7,A_LINKS);
991     ypos-=.5*TextfeldArray[741]->TextfeldHoehe();
992     TextfeldArray[742]->Positioniere(1.5,ypos,.5,A_LINKS);
993     ypos-=.5*TextfeldArray[742]->TextfeldHoehe()+.5;
994     TextfeldArray[743]->Positioniere(1.25,ypos,.7,A_LINKS);
995     ypos-=.5*TextfeldArray[743]->TextfeldHoehe();
996     TextfeldArray[744]->Positioniere(1.5,ypos,.5,A_LINKS);
997     ypos-=.5*TextfeldArray[744]->TextfeldHoehe()+.5;
998     TextfeldArray[745]->Positioniere(1.25,ypos,.7,A_LINKS);
999     ypos-=.5*TextfeldArray[745]->TextfeldHoehe();
1000     TextfeldArray[746]->Positioniere(1.5,ypos,.5,A_LINKS);
1001     ypos-=.5*TextfeldArray[746]->TextfeldHoehe()+.5;
1002 
1003     TextfeldArray[T_ZURUECK]->Positioniere(8,0,.7,A_MITTE);
1004     TextfeldArray[T_ZURUECK]->SetzeSignal(S_H_ZUHILFE);
1005     TextfeldArray[T_H_NAECHSTESEITE]->Positioniere(15.8,0,.7,A_RECHTS);
1006     TextfeldArray[T_H_NAECHSTESEITE]->SetzeSignal(S_H_R2_N);
1007     TextfeldArray[T_H_LETZTESEITE]->Positioniere(.2,0,.7,A_LINKS);
1008     TextfeldArray[T_H_LETZTESEITE]->SetzeSignal(S_H_R2_L);
1009   } break;
1010 
1011   case HILFEREGELN3: {
1012     menuhintergrund.Positioniere(.5,.7,15.5,11);
1013     logo.Positioniere(0,11,4,12);
1014     logo.VollSichtbar();
1015     TextfeldArray[T_HILFE]->Positioniere(4,11.4,.6,A_LINKS);
1016     TextfeldArray[T_HILFE]->VollSichtbar();
1017     TextfeldArray[T_H_BILLARDREGELN]->Positioniere(4,11,.6,A_LINKS);
1018     TextfeldArray[T_H_BILLARDREGELN]->VollSichtbar();
1019 
1020     GLfloat ypos=10;
1021     TextfeldArray[747]->Positioniere(1,ypos,1,A_LINKS);
1022     ypos-=.7*TextfeldArray[747]->TextfeldHoehe();
1023     TextfeldArray[748]->Positioniere(1.25,ypos,.7,A_LINKS);
1024     ypos-=.5*TextfeldArray[748]->TextfeldHoehe();
1025     TextfeldArray[749]->Positioniere(1.5,ypos,.5,A_LINKS);
1026     ypos-=.5*TextfeldArray[749]->TextfeldHoehe()+.5;
1027     TextfeldArray[750]->Positioniere(1.25,ypos,.7,A_LINKS);
1028     ypos-=.5*TextfeldArray[750]->TextfeldHoehe();
1029     TextfeldArray[751]->Positioniere(1.5,ypos,.5,A_LINKS);
1030     ypos-=.5*TextfeldArray[751]->TextfeldHoehe()+.2;
1031     TextfeldArray[752]->Positioniere(1.5,ypos,.5,A_LINKS);
1032     ypos-=.5*TextfeldArray[752]->TextfeldHoehe()+.2;
1033     TextfeldArray[753]->Positioniere(1.5,ypos,.5,A_LINKS);
1034     ypos-=.5*TextfeldArray[753]->TextfeldHoehe()+.2;
1035     TextfeldArray[754]->Positioniere(1.5,ypos,.5,A_LINKS);
1036     ypos-=.5*TextfeldArray[754]->TextfeldHoehe()+.5;
1037 
1038     TextfeldArray[T_ZURUECK]->Positioniere(8,0,.7,A_MITTE);
1039     TextfeldArray[T_ZURUECK]->SetzeSignal(S_H_ZUHILFE);
1040     TextfeldArray[T_H_NAECHSTESEITE]->Positioniere(15.8,0,.7,A_RECHTS);
1041     TextfeldArray[T_H_NAECHSTESEITE]->SetzeSignal(S_H_R3_N);
1042     TextfeldArray[T_H_LETZTESEITE]->Positioniere(.2,0,.7,A_LINKS);
1043     TextfeldArray[T_H_LETZTESEITE]->SetzeSignal(S_H_R3_L);
1044   } break;
1045 
1046   case HILFEREGELN4: {
1047     menuhintergrund.Positioniere(.5,.7,15.5,11);
1048     logo.Positioniere(0,11,4,12);
1049     logo.VollSichtbar();
1050     TextfeldArray[T_HILFE]->Positioniere(4,11.4,.6,A_LINKS);
1051     TextfeldArray[T_HILFE]->VollSichtbar();
1052     TextfeldArray[T_H_BILLARDREGELN]->Positioniere(4,11,.6,A_LINKS);
1053     TextfeldArray[T_H_BILLARDREGELN]->VollSichtbar();
1054 
1055     GLfloat ypos=10;
1056     TextfeldArray[747]->Positioniere(1,ypos,1,A_LINKS);
1057     ypos-=.7*TextfeldArray[747]->TextfeldHoehe();
1058     TextfeldArray[755]->Positioniere(1.25,ypos,.7,A_LINKS);
1059     ypos-=.5*TextfeldArray[755]->TextfeldHoehe();
1060     TextfeldArray[756]->Positioniere(1.5,ypos,.5,A_LINKS);
1061     ypos-=.5*TextfeldArray[756]->TextfeldHoehe()+.5;
1062     TextfeldArray[757]->Positioniere(1.25,ypos,.7,A_LINKS);
1063     ypos-=.5*TextfeldArray[757]->TextfeldHoehe();
1064     TextfeldArray[758]->Positioniere(1.5,ypos,.5,A_LINKS);
1065     ypos-=.5*TextfeldArray[758]->TextfeldHoehe()+.5;
1066     TextfeldArray[759]->Positioniere(1.25,ypos,.7,A_LINKS);
1067     ypos-=.5*TextfeldArray[759]->TextfeldHoehe();
1068     TextfeldArray[760]->Positioniere(1.5,ypos,.5,A_LINKS);
1069     ypos-=.5*TextfeldArray[760]->TextfeldHoehe()+.5;
1070     TextfeldArray[761]->Positioniere(1.25,ypos,.7,A_LINKS);
1071     ypos-=.5*TextfeldArray[761]->TextfeldHoehe();
1072     TextfeldArray[762]->Positioniere(1.5,ypos,.5,A_LINKS);
1073     ypos-=.5*TextfeldArray[762]->TextfeldHoehe()+.5;
1074 
1075     TextfeldArray[T_ZURUECK]->Positioniere(8,0,.7,A_MITTE);
1076     TextfeldArray[T_ZURUECK]->SetzeSignal(S_H_ZUHILFE);
1077     TextfeldArray[T_H_NAECHSTESEITE]->Positioniere(15.8,0,.7,A_RECHTS);
1078     TextfeldArray[T_H_NAECHSTESEITE]->SetzeSignal(S_H_R4_N);
1079     TextfeldArray[T_H_LETZTESEITE]->Positioniere(.2,0,.7,A_LINKS);
1080     TextfeldArray[T_H_LETZTESEITE]->SetzeSignal(S_H_R4_L);
1081   } break;
1082 
1083   case HILFEREGELN5: {
1084     menuhintergrund.Positioniere(.5,.7,15.5,11);
1085     logo.Positioniere(0,11,4,12);
1086     logo.VollSichtbar();
1087     TextfeldArray[T_HILFE]->Positioniere(4,11.4,.6,A_LINKS);
1088     TextfeldArray[T_HILFE]->VollSichtbar();
1089     TextfeldArray[T_H_BILLARDREGELN]->Positioniere(4,11,.6,A_LINKS);
1090     TextfeldArray[T_H_BILLARDREGELN]->VollSichtbar();
1091 
1092     GLfloat ypos=10;
1093     TextfeldArray[770]->Positioniere(1,ypos,1,A_LINKS);
1094     ypos-=.7*TextfeldArray[770]->TextfeldHoehe();
1095     TextfeldArray[771]->Positioniere(1.25,ypos,.7,A_LINKS);
1096     ypos-=.5*TextfeldArray[771]->TextfeldHoehe();
1097     TextfeldArray[772]->Positioniere(1.5,ypos,.5,A_LINKS);
1098     ypos-=.5*TextfeldArray[772]->TextfeldHoehe()+.5;
1099     TextfeldArray[773]->Positioniere(1.25,ypos,.7,A_LINKS);
1100     ypos-=.5*TextfeldArray[773]->TextfeldHoehe();
1101     TextfeldArray[774]->Positioniere(1.5,ypos,.5,A_LINKS);
1102     ypos-=.5*TextfeldArray[774]->TextfeldHoehe()+.2;
1103     TextfeldArray[775]->Positioniere(1.5,ypos,.5,A_LINKS);
1104     ypos-=.5*TextfeldArray[775]->TextfeldHoehe();
1105 
1106 
1107     TextfeldArray[T_ZURUECK]->Positioniere(8,0,.7,A_MITTE);
1108     TextfeldArray[T_ZURUECK]->SetzeSignal(S_H_ZUHILFE);
1109     TextfeldArray[T_H_NAECHSTESEITE]->Positioniere(15.8,0,.7,A_RECHTS);
1110     TextfeldArray[T_H_NAECHSTESEITE]->SetzeSignal(S_H_R5_N);
1111     TextfeldArray[T_H_LETZTESEITE]->Positioniere(.2,0,.7,A_LINKS);
1112     TextfeldArray[T_H_LETZTESEITE]->SetzeSignal(S_H_R5_L);
1113   } break;
1114 
1115   case HILFEREGELN6: {
1116     menuhintergrund.Positioniere(.5,.7,15.5,11);
1117     logo.Positioniere(0,11,4,12);
1118     logo.VollSichtbar();
1119     TextfeldArray[T_HILFE]->Positioniere(4,11.4,.6,A_LINKS);
1120     TextfeldArray[T_HILFE]->VollSichtbar();
1121     TextfeldArray[T_H_BILLARDREGELN]->Positioniere(4,11,.6,A_LINKS);
1122     TextfeldArray[T_H_BILLARDREGELN]->VollSichtbar();
1123 
1124     GLfloat ypos=10;
1125     TextfeldArray[770]->Positioniere(1,ypos,1,A_LINKS);
1126     ypos-=.7*TextfeldArray[770]->TextfeldHoehe();
1127     TextfeldArray[776]->Positioniere(1.25,ypos,.7,A_LINKS);
1128     ypos-=.5*TextfeldArray[776]->TextfeldHoehe();
1129     TextfeldArray[777]->Positioniere(1.5,ypos,.5,A_LINKS);
1130     ypos-=.5*TextfeldArray[777]->TextfeldHoehe()+.5;
1131     TextfeldArray[778]->Positioniere(1.25,ypos,.7,A_LINKS);
1132     ypos-=.5*TextfeldArray[778]->TextfeldHoehe();
1133     TextfeldArray[779]->Positioniere(1.5,ypos,.5,A_LINKS);
1134     ypos-=.5*TextfeldArray[779]->TextfeldHoehe()+.5;
1135     TextfeldArray[780]->Positioniere(1.25,ypos,.7,A_LINKS);
1136     ypos-=.5*TextfeldArray[780]->TextfeldHoehe();
1137     TextfeldArray[781]->Positioniere(1.5,ypos,.5,A_LINKS);
1138     ypos-=.5*TextfeldArray[781]->TextfeldHoehe()+.5;
1139     TextfeldArray[782]->Positioniere(1.25,ypos,.7,A_LINKS);
1140     ypos-=.5*TextfeldArray[782]->TextfeldHoehe();
1141     TextfeldArray[783]->Positioniere(1.5,ypos,.5,A_LINKS);
1142     ypos-=.5*TextfeldArray[783]->TextfeldHoehe()+.5;
1143 
1144     TextfeldArray[T_ZURUECK]->Positioniere(8,0,.7,A_MITTE);
1145     TextfeldArray[T_ZURUECK]->SetzeSignal(S_H_ZUHILFE);
1146     //TextfeldArray[T_H_NAECHSTESEITE]->Positioniere(15.8,0,.7,A_RECHTS);
1147     //TextfeldArray[T_H_NAECHSTESEITE]->SetzeSignal(S_H_R5_N);
1148     TextfeldArray[T_H_LETZTESEITE]->Positioniere(.2,0,.7,A_LINKS);
1149     TextfeldArray[T_H_LETZTESEITE]->SetzeSignal(S_H_R6_L);
1150   } break;
1151 
1152   case BEENDEN: {
1153     menuhintergrund.Positioniere(4.5,4.5,11.5,8.5);
1154     logo.Positioniere(4,9,12,11);
1155     logo.VollSichtbar();
1156     TextfeldArray[T_BEENDEN]->Positioniere(8,8,1,A_MITTE);
1157     TextfeldArray[T_BEENDEN]->VollSichtbar();
1158     TextfeldArray[T_JABEENDEN]->Positioniere(8,6,1,A_MITTE);
1159     TextfeldArray[T_JABEENDEN]->SetzeSignal(S_BE_JABEENDEN);
1160     TextfeldArray[T_ZURUECK]->Positioniere(8,1,1,A_MITTE);
1161     if (AusSpiel) {
1162       TextfeldArray[T_ZURUECK]->SetzeSignal(S_BE_ZURUECK_AS);
1163     } else {
1164       TextfeldArray[T_ZURUECK]->SetzeSignal(S_BE_ZURUECK);
1165     }
1166 
1167     TextfeldArray[T_HOMEPAGE]->Positioniere(15.9,0,.5,A_RECHTS);
1168     TextfeldArray[T_VERSION]->Positioniere(.1,0,.5,A_LINKS);
1169 
1170   } break;
1171 
1172   case AUSSPIEL: {
1173     menuhintergrund.Positioniere(3.5,0.5,12.5,8.5);
1174     logo.Positioniere(4,9,12,11);
1175     logo.VollSichtbar();
1176     TextfeldArray[T_WEITERSPIELEN]->Positioniere(8,7,1,A_MITTE);
1177     TextfeldArray[T_WEITERSPIELEN]->SetzeSignal(S_AS_WEITERSPIELEN);
1178     TextfeldArray[T_HILFE]->Positioniere(8,5.5,1,A_MITTE);
1179     TextfeldArray[T_HILFE]->SetzeSignal(S_AS_HILFE);
1180     TextfeldArray[T_TISCHVERLASSEN]->Positioniere(8,4,1,A_MITTE);
1181     TextfeldArray[T_TISCHVERLASSEN]->SetzeSignal(S_AS_HAUPTMENU);
1182     TextfeldArray[T_EINSTELLUNGEN]->Positioniere(8,2.5,1,A_MITTE);
1183     TextfeldArray[T_EINSTELLUNGEN]->SetzeSignal(S_AS_EINSTELLUNGEN);
1184     TextfeldArray[T_BEENDEN]->Positioniere(8,1,1,A_MITTE);
1185     TextfeldArray[T_BEENDEN]->SetzeSignal(S_AS_BEENDEN);
1186 
1187     TextfeldArray[T_HOMEPAGE]->Positioniere(15.9,0,.5,A_RECHTS);
1188     TextfeldArray[T_VERSION]->Positioniere(.1,0,.5,A_LINKS);
1189 
1190   } break;
1191 
1192   case SPIEL: {
1193     //    menuhintergrund.Positioniere(0,11,16,12);
1194 
1195     if (SpielModus==TRAININGSSPIEL) {
1196       logo.Positioniere(0,11,4,12);
1197     } else if (SpielModus==TUTORIAL) {
1198       logo.Positioniere(12,0,16,1);
1199     } else {
1200       logo.Positioniere(6,11,10,12);
1201     }
1202     logo.SetzeSignal(S_SP_LOGO);
1203 
1204     switch (SpielModus) {
1205     case TUTORIAL: {
1206       GLfloat posy=11.5;
1207       GLint Bereich=0;
1208       //TextfeldArray[T_H_TUTORIAL]->Positioniere(15.75,0,1,A_RECHTS);//
1209       switch (StateMaschin) {
1210       case BETRACHTEN: {
1211 	if (AllerersterStoss)
1212 	  Bereich=640;
1213 	else
1214 	  Bereich=690;
1215       } break;
1216       case ZIELEN: {
1217 	Bereich=650;
1218       } break;
1219       case AUSHOLEN: {
1220 	Bereich=660;
1221       } break;
1222       case STOSS: {
1223 	Bereich=670;
1224       } break;
1225       case WEISSNEU: {
1226 	Bereich=680;
1227       } break;
1228       }
1229       for (GLint i=Bereich;i<Bereich+10;i++) {
1230 	if (TextfeldArray[i]) {
1231 	  TextfeldArray[i]->Positioniere(0.2,posy,.5,A_LINKS);
1232 	  TextfeldArray[i]->VollSichtbar();
1233 	  posy-=.5*TextfeldArray[i]->TextfeldHoehe()+.2;
1234 	}
1235       }
1236     menuhintergrund.Positioniere(0,posy+.5,16,12);
1237     } break;
1238 
1239     case TRAININGSSPIEL: {
1240       TextfeldArray[T_TRAINING]->Positioniere(15.75,0,1,A_RECHTS);//
1241       TextfeldArray[T_NEUEACHTBALLAUFSTELLUNG]->Positioniere(15.75,11.5,.5,A_RECHTS);
1242       TextfeldArray[T_NEUEACHTBALLAUFSTELLUNG]->SetzeSignal(S_SP_NEUEACHTBALLAUFSTELLUNG);
1243       TextfeldArray[T_NEUENEUNBALLAUFSTELLUNG]->Positioniere(15.75,11.2,.5,A_RECHTS);
1244       TextfeldArray[T_NEUENEUNBALLAUFSTELLUNG]->SetzeSignal(S_SP_NEUENEUNBALLAUFSTELLUNG);
1245     } break;
1246     case ZWEISPIELERSPIEL: {
1247       TextfeldArray[T_ZWEISPIELER]->Positioniere(15.75,0,1,A_RECHTS);//12,11,16,12);
1248       if (Schiedsrichter.FrageNachSpielerAmStoss()==0) {
1249 	TextfeldArray[T_SPIELER1NAME]->Positioniere(0.2,11,1,A_LINKS);
1250 	TextfeldArray[T_SPIELER2NAME]->Positioniere(15.9,11.5,.5,A_RECHTS);
1251 	if (Spiel==ACHTBALL) {
1252 	  if (Schiedsrichter.FrageNachGruppenVerteilung()==1) {
1253 	    volle.Positioniere(0.2,10,1.2,11);
1254 	    halbe.Positioniere(15.4,11,15.9,11.5);
1255 	  }
1256 	  if (Schiedsrichter.FrageNachGruppenVerteilung()==2) {
1257 	    halbe.Positioniere(0.2,10,1.2,11);
1258 	    volle.Positioniere(15.4,11,15.9,11.5);
1259 	  }
1260 	}
1261  	if (Spiel==NEUNBALL) {
1262 	  if (Schiedsrichter.FrageNachFouls(0)==1) {
1263 	    TextfeldArray[T_ZUSATZTEXTLINKS]->SetzeText("1 Foul");
1264 	    TextfeldArray[T_ZUSATZTEXTLINKS]->Positioniere(.2,10,1,A_LINKS);
1265 	  }
1266 	  if (Schiedsrichter.FrageNachFouls(0)==2) {
1267  	    TextfeldArray[T_ZUSATZTEXTLINKS]->SetzeText("2 Fouls");
1268 	    TextfeldArray[T_ZUSATZTEXTLINKS]->Positioniere(.2,10,1,A_LINKS);
1269 	  }
1270 	  if (Schiedsrichter.FrageNachFouls(0)==3) {
1271  	    TextfeldArray[T_ZUSATZTEXTLINKS]->SetzeText("3 Fouls");
1272 	    TextfeldArray[T_ZUSATZTEXTLINKS]->Positioniere(.2,10,1,A_LINKS);
1273 	  }
1274 	  if (Schiedsrichter.FrageNachFouls(1)==1) {
1275  	    TextfeldArray[T_ZUSATZTEXTRECHTS]->SetzeText("1 Foul");
1276 	    TextfeldArray[T_ZUSATZTEXTRECHTS]->Positioniere(15.9,11,.5,A_RECHTS);
1277 	  }
1278  	  if (Schiedsrichter.FrageNachFouls(1)==2) {
1279  	    TextfeldArray[T_ZUSATZTEXTRECHTS]->SetzeText("2 Fouls");
1280 	    TextfeldArray[T_ZUSATZTEXTRECHTS]->Positioniere(15.9,11,.5,A_RECHTS);
1281 	  }
1282  	  if (Schiedsrichter.FrageNachFouls(1)==3) {
1283  	    TextfeldArray[T_ZUSATZTEXTRECHTS]->SetzeText("3 Fouls");
1284 	    TextfeldArray[T_ZUSATZTEXTRECHTS]->Positioniere(15.9,11,.5,A_RECHTS);
1285  	  }
1286 	}
1287       } else {
1288 	TextfeldArray[T_SPIELER1NAME]->Positioniere(0.1,11.5,.5,A_LINKS);
1289 	TextfeldArray[T_SPIELER2NAME]->Positioniere(15.8,11,1,A_RECHTS);
1290 	if (Spiel==ACHTBALL) {
1291 	  if (Schiedsrichter.FrageNachGruppenVerteilung()==1) {
1292 	    volle.Positioniere(0.1,11,.5,11.5);
1293 	    halbe.Positioniere(14.8,10,15.8,11);
1294 	  }
1295 	  if (Schiedsrichter.FrageNachGruppenVerteilung()==2) {
1296 	    halbe.Positioniere(0.1,11,.5,11.5);
1297 	    volle.Positioniere(14.8,10,15.8,11);
1298 	  }
1299 	}
1300  	if (Spiel==NEUNBALL) {
1301 	  if (Schiedsrichter.FrageNachFouls(0)==1) {
1302 	    TextfeldArray[T_ZUSATZTEXTLINKS]->SetzeText("1 Foul");
1303 	    TextfeldArray[T_ZUSATZTEXTLINKS]->Positioniere(.1,11,.5,A_LINKS);
1304 	  }
1305 	  if (Schiedsrichter.FrageNachFouls(0)==2) {
1306 	    TextfeldArray[T_ZUSATZTEXTLINKS]->SetzeText("2 Fouls");
1307 	    TextfeldArray[T_ZUSATZTEXTLINKS]->Positioniere(.1,11,.5,A_LINKS);
1308 	  }
1309 	  if (Schiedsrichter.FrageNachFouls(0)==3) {
1310 	    TextfeldArray[T_ZUSATZTEXTLINKS]->SetzeText("3 Fouls");
1311 	    TextfeldArray[T_ZUSATZTEXTLINKS]->Positioniere(.1,11,.5,A_LINKS);
1312 	  }
1313 	  if (Schiedsrichter.FrageNachFouls(1)==1) {
1314 	    TextfeldArray[T_ZUSATZTEXTRECHTS]->SetzeText("1 Foul");
1315 	    TextfeldArray[T_ZUSATZTEXTRECHTS]->Positioniere(15.8,10,1,A_RECHTS);
1316 	  }
1317  	  if (Schiedsrichter.FrageNachFouls(1)==2) {
1318 	    TextfeldArray[T_ZUSATZTEXTRECHTS]->SetzeText("2 Fouls");
1319 	    TextfeldArray[T_ZUSATZTEXTRECHTS]->Positioniere(15.8,10,1,A_RECHTS);
1320 	  }
1321  	  if (Schiedsrichter.FrageNachFouls(1)==3) {
1322 	    TextfeldArray[T_ZUSATZTEXTRECHTS]->SetzeText("3 Fouls");
1323 	    TextfeldArray[T_ZUSATZTEXTRECHTS]->Positioniere(15.8,10,1,A_RECHTS);
1324  	  }
1325 	}
1326       }
1327     } break;
1328 
1329     /*
1330       case NETZWERKSPIEL: {
1331       netzwerkspiel.Positioniere(12,0,16,1);//12,11,16,12);
1332       if (Schiedsrichter.FrageNachSpielerAmStoss()==0) {
1333       spieler1.Positioniere(0,11,4,12);
1334       spieler2.Positioniere(14,11.25,16,11.75);
1335       } else {
1336       spieler1.Positioniere(0,11.25,2,11.75);
1337       spieler2.Positioniere(12,11,16,12);
1338       }
1339       } break;
1340     */
1341     }
1342 
1343 
1344     switch (StateMaschin) {
1345     case BETRACHTEN: {
1346       TextfeldArray[T_BETRACHTEN]->Positioniere(0.25,0,1,A_LINKS);
1347     } break;
1348     case ZIELEN: {
1349       TextfeldArray[T_ZIELEN]->Positioniere(0.25,0,1,A_LINKS);
1350     } break;
1351     case AUSHOLEN: {
1352       TextfeldArray[T_AUSHOLEN]->Positioniere(0.25,0,1,A_LINKS);
1353     } break;
1354     case STOSS: {
1355       TextfeldArray[T_STOSS]->Positioniere(0.25,0,1,A_LINKS);
1356     } break;
1357     case WEISSNEU: {
1358       TextfeldArray[T_WEISSENEUSETZEN]->Positioniere(0.25,0,1,A_LINKS);
1359     } break;
1360     case SCHIEDSRICHTER: {
1361       TextfeldArray[T_STOSS]->Positioniere(0.25,0,1,A_LINKS);
1362       if (Foul) {
1363 	TextfeldArray[T_FOUL]->Positioniere(8,9,1.5,A_MITTE);
1364 	if (Schiedsrichter.FrageNachBegruendung())
1365 	  TextfeldArray[Schiedsrichter.FrageNachBegruendung()]->Positioniere(8,8.5,.75,A_MITTE);
1366       }
1367       if (!Spieler1Gewonnen && !Spieler2Gewonnen) {
1368 	TextfeldArray[T_ISTAMTISCH]->Positioniere(8,5,1,A_MITTE);
1369 	if (Schiedsrichter.FrageNachSpielerAmStoss()==0) {
1370 	  TextfeldArray[T_SPIELER1NAME]->Positioniere(8,6,1.5,A_MITTE);
1371 	  TextfeldArray[T_SPIELER1NAME]->VollSichtbar();
1372 	} else {
1373 	  TextfeldArray[T_SPIELER2NAME]->Positioniere(8,6,1.5,A_MITTE);
1374 	  TextfeldArray[T_SPIELER2NAME]->VollSichtbar();
1375 	}
1376 	if (!NeuAufbauenOderWeiterspielen &&
1377 	    !NeuAufbauenOderAchtEinsetzen) {
1378 	  if (LageVerbesserungKopffeld) {
1379 	    TextfeldArray[T_IMKOPFFELD]->Positioniere(8,3,1,A_MITTE);
1380 	  }
1381 	  if (LageVerbesserung|LageVerbesserungKopffeld) {
1382 	    TextfeldArray[T_UNDHATLAGEVERBESSERUNG]->Positioniere(8,4,1,A_MITTE);
1383 	  }
1384 	} else if (NeuAufbauenOderAchtEinsetzen) {
1385 	  MenuGesperrt=1;
1386 	  if (Foul) {
1387 	    TextfeldArray[T_FOUL]->Positioniere(8,9,1.5,A_MITTE);
1388 	    if (Schiedsrichter.FrageNachBegruendung())
1389 	      TextfeldArray[Schiedsrichter.FrageNachBegruendung()]->Positioniere(8,8.5,.75,A_MITTE);
1390 	  }
1391 	  TextfeldArray[T_ISTAMTISCH]->Positioniere(8,6,1,A_MITTE);
1392 	  if (Schiedsrichter.FrageNachSpielerAmStoss()==0) {
1393 	    TextfeldArray[T_SPIELER1NAME]->Positioniere(8,7,1.5,A_MITTE);
1394 	    TextfeldArray[T_SPIELER1NAME]->VollSichtbar();
1395 	  } else {
1396 	    TextfeldArray[T_SPIELER2NAME]->Positioniere(8,7,1.5,A_MITTE);
1397 	    TextfeldArray[T_SPIELER2NAME]->VollSichtbar();
1398 	  }
1399 	  TextfeldArray[T_WOLLENSIE]->Positioniere(8,4,1,A_MITTE);
1400 	  TextfeldArray[T_NEUAUFBAUEN]->Positioniere(5.5,2.5,1,A_MITTE);
1401 	  TextfeldArray[T_NEUAUFBAUEN]->SetzeSignal(S_SP_NEUAUFBAUEN);
1402 	  TextfeldArray[T_DIEACHTEINSETZEN]->Positioniere(10.5,2.5,1,A_MITTE);
1403 	  TextfeldArray[T_DIEACHTEINSETZEN]->SetzeSignal(S_SP_ACHTEINSETZEN);
1404 	} else if (NeuAufbauenOderWeiterspielen) {
1405 	  MenuGesperrt=1;
1406 	  if (Foul) {
1407 	    TextfeldArray[T_FOUL]->Positioniere(8,9,1.5,A_MITTE);
1408 	    if (Schiedsrichter.FrageNachBegruendung())
1409 	      TextfeldArray[Schiedsrichter.FrageNachBegruendung()]->Positioniere(8,8.5,.75,A_MITTE);
1410 	  }
1411 	  TextfeldArray[T_ISTAMTISCH]->Positioniere(8,6,1,A_MITTE);
1412 	  if (Schiedsrichter.FrageNachSpielerAmStoss()==0) {
1413 	    TextfeldArray[T_SPIELER1NAME]->Positioniere(8,7,1.5,A_MITTE);
1414 	    TextfeldArray[T_SPIELER1NAME]->VollSichtbar();
1415 	  } else {
1416 	    TextfeldArray[T_SPIELER2NAME]->Positioniere(8,7,1.5,A_MITTE);
1417 	    TextfeldArray[T_SPIELER2NAME]->VollSichtbar();
1418 	  }
1419 	  TextfeldArray[T_WOLLENSIE]->Positioniere(8,4,1,A_MITTE);
1420 	  TextfeldArray[T_NEUAUFBAUEN]->Positioniere(5.5,2.5,1,A_MITTE);
1421 	  TextfeldArray[T_NEUAUFBAUEN]->SetzeSignal(S_SP_NEUAUFBAUEN);
1422 	  TextfeldArray[T_WEITERSPIELEN]->Positioniere(10.5,2.5,1,A_MITTE);
1423 	  TextfeldArray[T_WEITERSPIELEN]->SetzeSignal(S_SP_WEITERSPIELEN);
1424 	}
1425       }
1426       if (Spieler1Gewonnen||Spieler2Gewonnen) {
1427 	MenuGesperrt=1;
1428 	TextfeldArray[T_HATGEWONNEN]->Positioniere(8,5,1,A_MITTE);
1429 
1430 	TextfeldArray[T_NEUESSPIEL]->Positioniere(5.5,3,1,A_MITTE);
1431 	TextfeldArray[T_NEUESSPIEL]->SetzeSignal(S_SP_NEUESSPIEL);
1432 	TextfeldArray[T_TISCHVERLASSEN]->Positioniere(10.5,3,1,A_MITTE);
1433 	TextfeldArray[T_TISCHVERLASSEN]->SetzeSignal(S_SP_HAUPTMENU);
1434 
1435 	if (Spieler1Gewonnen) {
1436 	    TextfeldArray[T_SPIELER1NAME]->Positioniere(8,6,1.5,A_MITTE);
1437 	    TextfeldArray[T_SPIELER1NAME]->VollSichtbar();
1438 	}
1439 	if (Spieler2Gewonnen) {
1440 	    TextfeldArray[T_SPIELER2NAME]->Positioniere(8,6,1.5,A_MITTE);
1441 	    TextfeldArray[T_SPIELER2NAME]->VollSichtbar();
1442 	}
1443       }
1444     } break;
1445     }
1446 
1447     GLint i;
1448     if (Spiel==ACHTBALL) {
1449       for (i=0;i<8;i++) {
1450 	if (!KugelnVersenkt[i]&&KugelnImSpiel[i]) {
1451 	  ball[i].Positioniere(6+.5*i,.5,6+.5*(i+1),1);
1452 	  ball[i].SetzeSignal(S_SP_BALL+i);
1453 	}
1454       }
1455       for (i=8;i<16;i++) {
1456 	if (!KugelnVersenkt[i]&&KugelnImSpiel[i]) {
1457 	  ball[i].Positioniere(6+.5*(i-8),0,6+.5*(i-7),.5);
1458 	  ball[i].SetzeSignal(S_SP_BALL+i);
1459 	}
1460       }
1461     } else {
1462       for (i=0;i<5;i++) {
1463 	if (!KugelnVersenkt[i]&&KugelnImSpiel[i]) {
1464 	  ball[i].Positioniere(6.75+.5*i,.5,6.75+.5*(i+1),1);
1465 	  ball[i].SetzeSignal(S_SP_BALL+i);
1466 	}
1467       }
1468       for (i=5;i<10;i++) {
1469 	if (!KugelnVersenkt[i]&&KugelnImSpiel[i]) {
1470 	  ball[i].Positioniere(6.75+.5*(i-5),0,6.75+.5*(i-4),.5);
1471 	  ball[i].SetzeSignal(S_SP_BALL+i);
1472 	}
1473       }
1474     }
1475   } break;
1476 
1477   }
1478   StarteAnimation();
1479 }
1480 
SignalAusfuehrung(GLint Signal)1481 void Menu::SignalAusfuehrung(GLint Signal) {
1482   DelayAusgleich=1;
1483   switch (Signal) {
1484   case S_LOGO: {
1485     SetzeMenuZustand(STARTBILDSCHIRM);
1486   } break;
1487   case S_HM_TRAINING: {
1488     SetzeMenuZustand(TRAINING);
1489   } break;
1490   case S_HM_ZWEISPIELER: {
1491     SetzeMenuZustand(ZWEISPIELER);
1492   } break;
1493   case S_HM_NETZWERKSPIEL: {
1494     SetzeMenuZustand(NETZWERKHAUPT);
1495   } break;
1496   case S_HM_EINSTELLUNGEN: {
1497     AusSpiel=0;
1498     SetzeMenuZustand(EINSTELLUNGEN);
1499   } break;
1500   case S_HM_HILFE: {
1501     AusSpiel=0;
1502     SetzeMenuZustand(HILFE);
1503   } break;
1504   case S_HM_BEENDEN: {
1505     AusSpiel=0;
1506     SetzeMenuZustand(BEENDEN);
1507   } break;
1508   case S_TR_ACHTBALL: {
1509     Foul=0;
1510     LageVerbesserungKopffeld=1;
1511     LageVerbesserung=0;
1512     NeuAufbauenOderWeiterspielen=0;
1513     NeuAufbauenOderAchtEinsetzen=0;
1514     Spieler1Gewonnen=0;
1515     Spieler2Gewonnen=0;
1516     MenuGesperrt=0;
1517     SpielModus=TRAININGSSPIEL;
1518     StateMaschin=WEISSNEU;
1519     Spiel=ACHTBALL;
1520     SpielfeldAufbau();
1521     Schiedsrichter.NeuesSpiel(Spiel);
1522     SchiedsrichterEntscheidung=0;
1523     Kamera.ladePosition(4);
1524     SetzeMenuZustand(SPIEL);
1525   } break;
1526   case S_TR_NEUNBALL: {
1527     Foul=0;
1528     LageVerbesserungKopffeld=1;
1529     LageVerbesserung=0;
1530     NeuAufbauenOderWeiterspielen=0;
1531     NeuAufbauenOderAchtEinsetzen=0;
1532     Spieler1Gewonnen=0;
1533     Spieler2Gewonnen=0;
1534     MenuGesperrt=0;
1535     SpielModus=TRAININGSSPIEL;
1536     StateMaschin=WEISSNEU;
1537     Spiel=NEUNBALL;
1538     SpielfeldAufbau();
1539     Schiedsrichter.NeuesSpiel(Spiel);
1540     SchiedsrichterEntscheidung=0;
1541     Kamera.ladePosition(4);
1542     SetzeMenuZustand(SPIEL);
1543   } break;
1544   case S_TR_VIERZEHNPLUSEINS: {
1545   } break;
1546   case S_TR_ZURUECK: {
1547     SetzeMenuZustand(HAUPTMENU);
1548   } break;
1549   case S_ZW_ACHTBALL: {
1550     sprintf(Spieler1,"%s",TextfeldArray[T_SPIELER1NAME]->Text());
1551     sprintf(Spieler2,"%s",TextfeldArray[T_SPIELER2NAME]->Text());
1552     SchreibeKonfiguration();
1553     Foul=0;
1554     LageVerbesserungKopffeld=1;
1555     LageVerbesserung=0;
1556     NeuAufbauenOderWeiterspielen=0;
1557     NeuAufbauenOderAchtEinsetzen=0;
1558     Spieler1Gewonnen=0;
1559     Spieler2Gewonnen=0;
1560     MenuGesperrt=0;
1561     SpielModus=ZWEISPIELERSPIEL;
1562     StateMaschin=SCHIEDSRICHTER;
1563     Spiel=ACHTBALL;
1564     SpielfeldAufbau();
1565     Schiedsrichter.NeuesSpiel(Spiel);
1566     SchiedsrichterEntscheidung=0;
1567     Kamera.ladePosition(4);
1568     SetzeMenuZustand(SPIEL);
1569   } break;
1570   case S_ZW_NEUNBALL: {
1571     sprintf(Spieler1,"%s",TextfeldArray[T_SPIELER1NAME]->Text());
1572     sprintf(Spieler2,"%s",TextfeldArray[T_SPIELER2NAME]->Text());
1573     SchreibeKonfiguration();
1574     Foul=0;
1575     LageVerbesserungKopffeld=1;
1576     LageVerbesserung=0;
1577     NeuAufbauenOderWeiterspielen=0;
1578     NeuAufbauenOderAchtEinsetzen=0;
1579     Spieler1Gewonnen=0;
1580     Spieler2Gewonnen=0;
1581     MenuGesperrt=0;
1582     SpielModus=ZWEISPIELERSPIEL;
1583     StateMaschin=SCHIEDSRICHTER;
1584     Spiel=NEUNBALL;
1585     SpielfeldAufbau();
1586     Schiedsrichter.NeuesSpiel(Spiel);
1587     SchiedsrichterEntscheidung=0;
1588     Kamera.ladePosition(4);
1589     SetzeMenuZustand(SPIEL);
1590   } break;
1591   case S_ZW_VIERZEHNPLUSEINS: {
1592   } break;
1593   case S_ZW_ZURUECK: {
1594     SetzeMenuZustand(HAUPTMENU);
1595   } break;
1596   case S_NE_BEGINNEN: {
1597     SetzeMenuZustand(NETZWERKNEU);
1598   } break;
1599   case S_NE_TEILNEHMEN: {
1600     SetzeMenuZustand(NETZWERKBEITRETEN);
1601   } break;
1602   case S_NE_ZURUECK: {
1603     SetzeMenuZustand(HAUPTMENU);
1604   } break;
1605   case S_NB_ACHTBALL: {
1606   } break;
1607   case S_NB_NEUNBALL: {
1608   } break;
1609   case S_NB_VIERZEHNPLUSEINS: {
1610   } break;
1611   case S_NB_ZURUECK: {
1612   } break;
1613   case S_NT_IPADRESSE: {
1614   } break;
1615   case S_NT_VERBINDEN: {
1616   } break;
1617   case S_NT_ZURUECK: {
1618   } break;
1619   case S_EI_STEUERUNG: {
1620     E_MouseSpeed=MouseSpeed;
1621     E_InvertX=InvertX;
1622     E_InvertY=InvertY;
1623     SetzeMenuZustand(EINSTELLUNGENSTEUERUNG);
1624   } break;
1625   case S_EI_SPRACHE: {
1626     SetzeMenuZustand(SPRACHAUSWAHL);
1627   } break;
1628   case S_EI_GRAFIK: {
1629     E_Texturgroesse=Texturgroesse;
1630     E_AnzeigeTexturgroesse=AnzeigeTexturgroesse;
1631     E_TischTexturgroesse=TischTexturgroesse;
1632     E_KugelAufloesung=KugelAufloesung;
1633     E_BildschirmAufloesung=BildschirmAufloesung;
1634     E_Farbtiefe=Farbtiefe;
1635     E_Reflektionen=Reflektionen;
1636     E_Schatten=Schatten;
1637     E_AmbientesLicht=AmbientesLicht;
1638     E_TischLampen=TischLampen;
1639     E_GrueneLampe=GrueneLampe;
1640     E_ZeigeFPS=ZeigeFPS;
1641     E_TexMMM=TexMMM;
1642     SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1643   } break;
1644   case S_EI_BALLTEXTUREN: {
1645     switch (E_Texturgroesse) {
1646     case 1: E_Texturgroesse=2; break;
1647     case 2: E_Texturgroesse=4; break;
1648     case 4: E_Texturgroesse=8; break;
1649     case 8: E_Texturgroesse=1; break;
1650     }
1651     SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1652   } break;
1653   case S_EI_TISCHTEXTUREN: {
1654     switch (E_TischTexturgroesse) {
1655     case 1: E_TischTexturgroesse=2; break;
1656     case 2: E_TischTexturgroesse=4; break;
1657     case 4: E_TischTexturgroesse=8; break;
1658     case 8: E_TischTexturgroesse=0; break;
1659     case 0: E_TischTexturgroesse=1; break;
1660     default: E_TischTexturgroesse=4; break;
1661     }
1662     SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1663   } break;
1664   case S_EI_ANZEIGETEXTUREN: {
1665     switch (E_AnzeigeTexturgroesse) {
1666     case 1: E_AnzeigeTexturgroesse=2; break;
1667     case 2: E_AnzeigeTexturgroesse=1; break;
1668     default: E_AnzeigeTexturgroesse=1; break;
1669     }
1670     SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1671   } break;
1672   case S_EI_AUFLOESUNG: {
1673     switch (E_BildschirmAufloesung) {
1674     case 640: E_BildschirmAufloesung=1600; break;
1675     case 800: E_BildschirmAufloesung=640; break;
1676     case 1024: E_BildschirmAufloesung=800; break;
1677     case 1280: E_BildschirmAufloesung=1024; break;
1678     case 1600: E_BildschirmAufloesung=1280; break;
1679     default: E_BildschirmAufloesung=800; break;
1680     }
1681     SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1682   } break;
1683   case S_EI_FARBTIEFE: {
1684     switch (E_Farbtiefe) {
1685     case 16: E_Farbtiefe=32; break;
1686     default: E_Farbtiefe=16; break;
1687     }
1688     SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1689   } break;
1690   case S_EI_REFLEKTIONEN: {
1691     switch (E_Reflektionen) {
1692     case 0: E_Reflektionen=1; break;
1693     default:  E_Reflektionen=0; break;
1694     }
1695     SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1696   } break;
1697   case S_EI_SCHATTEN: {
1698     switch (E_Schatten) {
1699     case 0: E_Schatten=1; break;
1700     default:  E_Schatten=0; break;
1701     }
1702     SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1703   } break;
1704   case S_EI_TEXTURINTERPOLATION: {
1705     switch (E_TexMMM) {
1706     case 0: E_TexMMM=7; break;
1707     case 2: E_TexMMM=0; break;
1708     case 3: E_TexMMM=2; break;
1709     default:  E_TexMMM=3; break;
1710     }
1711     SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1712     } break;
1713   case S_EI_AMBIENTESLICHT: {
1714     switch (E_AmbientesLicht) {
1715     case 1: E_AmbientesLicht=0; break;
1716     default:  E_AmbientesLicht=1; break;
1717     }
1718     SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1719   } break;
1720   case S_EI_TISCHLAMPEN: {
1721     switch (E_TischLampen) {
1722     case 1: E_TischLampen=2; break;
1723     case 2: E_TischLampen=3; break;
1724     case 3: E_TischLampen=1; break;
1725     default:  E_TischLampen=1; break;
1726     }
1727     SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1728   } break;
1729   case S_EI_GRUENELAMPE: {
1730     switch (E_GrueneLampe) {
1731     case 1: E_GrueneLampe=0; break;
1732     default:  E_GrueneLampe=1; break;
1733     }
1734     SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1735   } break;
1736   case S_EI_FPS: {
1737     switch (E_ZeigeFPS) {
1738     case 1: ZeigeFPS=E_ZeigeFPS=0; break;
1739     default: ZeigeFPS=E_ZeigeFPS=1; break;
1740     }
1741     SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1742   } break;
1743   case S_EI_BALLGEOMETRIE: {
1744     switch (E_KugelAufloesung) {
1745     case 1: {
1746       E_KugelAufloesung=7;
1747     } break;
1748     case 2: {
1749       E_KugelAufloesung=7;
1750     } break;
1751     case 3: {
1752       E_KugelAufloesung=11;
1753     } break;
1754     case 5: {
1755       E_KugelAufloesung=3;
1756     } break;
1757     case 7: {
1758       E_KugelAufloesung=5;
1759     } break;
1760     case 9: {
1761       E_KugelAufloesung=7;
1762     } break;
1763     case 11: {
1764       E_KugelAufloesung=7;
1765     } break;
1766     default: {
1767       E_KugelAufloesung=7;
1768     } break;
1769     }
1770     SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1771   } break;
1772   case S_EI_MOUSESPEED: {
1773     if (E_MouseSpeed<=.21) {
1774       E_MouseSpeed=.8;
1775     } else if (E_MouseSpeed<=.29) {
1776       E_MouseSpeed=.8;
1777     } else if (E_MouseSpeed<=.41) {
1778       E_MouseSpeed=.28;
1779     } else if (E_MouseSpeed<=.575) {
1780       E_MouseSpeed=.4;
1781     } else {
1782       E_MouseSpeed=.565;
1783     }
1784     SetzeMenuZustand(EINSTELLUNGENSTEUERUNG);
1785   } break;
1786   case S_EI_XINVERT: {
1787     if (E_InvertX) {
1788       E_InvertX=0;
1789     } else {
1790       E_InvertX=1;
1791     }
1792     SetzeMenuZustand(EINSTELLUNGENSTEUERUNG);
1793   } break;
1794   case S_EI_YINVERT: {
1795     if (E_InvertY) {
1796       E_InvertY=0;
1797     } else {
1798       E_InvertY=1;
1799     }
1800     SetzeMenuZustand(EINSTELLUNGENSTEUERUNG);
1801   } break;
1802 
1803 
1804   case S_EI_QUALITAET: {
1805     switch(Qualitaet) {
1806     case 1: {
1807       E_KugelAufloesung=11;
1808       E_Texturgroesse=1;
1809       E_TischTexturgroesse=1;
1810       E_AnzeigeTexturgroesse=1;
1811       E_Reflektionen=1;
1812       E_BildschirmAufloesung=1024;
1813       E_Farbtiefe=32;
1814       E_Schatten=1;
1815       E_TischLampen=3;
1816       E_GrueneLampe=1;
1817       E_TexMMM=7;
1818     } break;
1819     case 2: {
1820       E_KugelAufloesung=3;
1821       E_Texturgroesse=8;
1822       E_TischTexturgroesse=0;
1823       E_AnzeigeTexturgroesse=2;
1824       E_Reflektionen=0;
1825       E_BildschirmAufloesung=640;
1826       E_Farbtiefe=16;
1827       E_Schatten=0;
1828       E_TischLampen=1;
1829       E_GrueneLampe=0;
1830       E_TexMMM=0;
1831     } break;
1832     case 3: {
1833       E_KugelAufloesung=5;
1834       E_Texturgroesse=4;
1835       E_TischTexturgroesse=4;
1836       E_AnzeigeTexturgroesse=2;
1837       E_Reflektionen=0;
1838       E_BildschirmAufloesung=640;
1839       E_Farbtiefe=16;
1840       E_Schatten=1;
1841       E_TischLampen=1;
1842       E_GrueneLampe=0;
1843       E_TexMMM=2;
1844     } break;
1845     case 4: {
1846       E_KugelAufloesung=7;
1847       E_Texturgroesse=2;
1848       E_TischTexturgroesse=2;
1849       E_AnzeigeTexturgroesse=1;
1850       E_Reflektionen=0;
1851       E_BildschirmAufloesung=800;
1852       E_Farbtiefe=16;
1853       E_Schatten=1;
1854       E_TischLampen=2;
1855       E_GrueneLampe=0;
1856       E_TexMMM=3;
1857     } break;
1858     case 5: {
1859       E_KugelAufloesung=7;
1860       E_Texturgroesse=2;
1861       E_TischTexturgroesse=1;
1862       E_AnzeigeTexturgroesse=1;
1863       E_Reflektionen=1;
1864       E_BildschirmAufloesung=1024;
1865       E_Farbtiefe=16;
1866       E_Schatten=1;
1867       E_TischLampen=2;
1868       E_GrueneLampe=1;
1869       E_TexMMM=7;
1870     } break;
1871     default: {
1872       E_KugelAufloesung=7;
1873       E_Texturgroesse=2;
1874       E_TischTexturgroesse=2;
1875       E_AnzeigeTexturgroesse=1;
1876       E_Reflektionen=0;
1877       E_BildschirmAufloesung=800;
1878       E_Farbtiefe=16;
1879       E_Schatten=1;
1880       E_TischLampen=2;
1881       E_GrueneLampe=0;
1882       E_TexMMM=3;
1883     } break;
1884     }
1885     SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1886   } break;
1887 
1888   case S_EI_GRAFIKUEBERNEHMEN: {
1889 
1890     GLint TexMMMgeaendert=0;
1891 
1892     if (TexMMM!=E_TexMMM) {
1893       TexMMMgeaendert=1;
1894       TexMMM=E_TexMMM;
1895     }
1896 
1897     if (Texturgroesse!=E_Texturgroesse ||
1898 	KugelAufloesung!=E_KugelAufloesung ||
1899 	TexMMMgeaendert ||
1900 	Schatten!=E_Schatten) {
1901 
1902       initialisiereKugelTabellen(E_KugelAufloesung);
1903 
1904       for (GLint j=0;j<16;j++) {  // Initialisierung der Baelle + Laden der Texturen
1905 	Kugel[j].Initialisiere(j,E_Texturgroesse,E_KugelAufloesung,E_Schatten);
1906       }
1907     }
1908 
1909     if (TischTexturgroesse!=E_TischTexturgroesse ||
1910 	TexMMMgeaendert){
1911       Tisch.Initialisiere(E_TischTexturgroesse);
1912     }
1913 
1914     if (Reflektionen!=E_Reflektionen ||
1915 	AmbientesLicht!=E_AmbientesLicht ||
1916 	TischLampen!=E_TischLampen ||
1917 	GrueneLampe!=E_GrueneLampe) {
1918       Beleuchtung.Initialisiere(E_AmbientesLicht,E_TischLampen,E_GrueneLampe,E_Reflektionen);
1919     }
1920 
1921     if (AnzeigeTexturgroesse!=E_AnzeigeTexturgroesse||
1922 	TexMMMgeaendert){
1923       Initialisiere(E_AnzeigeTexturgroesse);
1924     }
1925 
1926     GLint NeueAufloesung=0;
1927     if (Farbtiefe!=E_Farbtiefe || BildschirmAufloesung!=E_BildschirmAufloesung)
1928       NeueAufloesung=1;
1929 
1930     KugelAufloesung=E_KugelAufloesung;
1931     Texturgroesse=E_Texturgroesse;
1932     AnzeigeTexturgroesse=E_AnzeigeTexturgroesse;
1933     TischTexturgroesse=E_TischTexturgroesse;
1934     Reflektionen=E_Reflektionen;
1935     BildschirmAufloesung=E_BildschirmAufloesung;
1936     Farbtiefe=E_Farbtiefe;
1937     Schatten=E_Schatten;
1938     TischTexturgroesse=E_TischTexturgroesse;
1939     AmbientesLicht=E_AmbientesLicht;
1940     TischLampen=E_TischLampen;
1941     GrueneLampe=E_GrueneLampe;
1942     ZeigeFPS=E_ZeigeFPS;
1943 
1944     SchreibeKonfiguration();
1945 
1946     if (NeueAufloesung)
1947       SetzeMenuZustand(EINSTELLUNGENGRAFIKHINWEIS);
1948     else
1949       SetzeMenuZustand(EINSTELLUNGENGRAFIK);
1950 
1951   } break;
1952   case S_EI_GRAFIKZURUECK: {
1953     SetzeMenuZustand(EINSTELLUNGEN);
1954   } break;
1955   case S_EI_STEUERUNGUEBERNEHMEN: {
1956     InvertX=E_InvertX;
1957     InvertY=E_InvertY;
1958     MouseSpeed=E_MouseSpeed;
1959     SchreibeKonfiguration();
1960     SetzeMenuZustand(EINSTELLUNGEN);
1961   } break;
1962   case S_EI_STEUERUNGZURUECK: {
1963     SetzeMenuZustand(EINSTELLUNGEN);
1964   } break;
1965   case S_EI_ZURUECK: {
1966     SetzeMenuZustand(HAUPTMENU);
1967   } break;
1968   case S_EI_ZURUECK_AS: {
1969     SetzeMenuZustand(AUSSPIEL);
1970   } break;
1971   case S_BE_JABEENDEN: {
1972     exit(0);
1973   } break;
1974   case S_BE_ZURUECK: {
1975     SetzeMenuZustand(HAUPTMENU);
1976   } break;
1977   case S_BE_ZURUECK_AS: {
1978     SetzeMenuZustand(AUSSPIEL);
1979   } break;
1980   case S_AS_WEITERSPIELEN: {
1981     SetzeMenuZustand(SPIEL);
1982   } break;
1983   case S_AS_HAUPTMENU: {
1984     AusSpiel=0;
1985     StateMaschin=START;
1986     SetzeMenuZustand(HAUPTMENU);
1987   } break;
1988   case S_AS_HILFE: {
1989     AusSpiel=1;
1990     SetzeMenuZustand(HILFE);
1991   } break;
1992   case S_AS_EINSTELLUNGEN: {
1993     AusSpiel=1;
1994     SetzeMenuZustand(EINSTELLUNGEN);
1995   } break;
1996   case S_AS_BEENDEN: {
1997     AusSpiel=1;
1998     SetzeMenuZustand(BEENDEN);
1999   } break;
2000   case S_SP_LOGO: {
2001     AusSpiel=1;
2002     SetzeMenuZustand(AUSSPIEL);
2003   } break;
2004   case S_SP_BALL+0: {
2005     if (StateMaschin==BETRACHTEN ||
2006 	StateMaschin==WEISSNEU) {
2007       Kamera.BlickeAuf3(Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());
2008     } else if (StateMaschin==STOSS) {
2009       Kamera.Verfolge(0);
2010     }
2011   } break;
2012   case S_SP_BALL+1: {
2013     if (StateMaschin==BETRACHTEN ||
2014 	StateMaschin==WEISSNEU) {
2015       Kamera.BlickeAuf3(Kugel[1].Pos_xCM(),Kugel[1].Pos_yCM());
2016     } else if (StateMaschin==STOSS) {
2017       Kamera.Verfolge(1);
2018     }
2019   } break;
2020   case S_SP_BALL+2: {
2021     if (StateMaschin==BETRACHTEN ||
2022 	StateMaschin==WEISSNEU) {
2023       Kamera.BlickeAuf3(Kugel[2].Pos_xCM(),Kugel[2].Pos_yCM());
2024     } else if (StateMaschin==STOSS) {
2025       Kamera.Verfolge(2);
2026     }
2027   } break;
2028   case S_SP_BALL+3: {
2029     if (StateMaschin==BETRACHTEN ||
2030 	StateMaschin==WEISSNEU) {
2031       Kamera.BlickeAuf3(Kugel[3].Pos_xCM(),Kugel[3].Pos_yCM());
2032     } else if (StateMaschin==STOSS) {
2033       Kamera.Verfolge(3);
2034     }
2035   } break;
2036   case S_SP_BALL+4: {
2037     if (StateMaschin==BETRACHTEN ||
2038 	StateMaschin==WEISSNEU) {
2039       Kamera.BlickeAuf3(Kugel[4].Pos_xCM(),Kugel[4].Pos_yCM());
2040     } else if (StateMaschin==STOSS) {
2041       Kamera.Verfolge(4);
2042     }
2043   } break;
2044   case S_SP_BALL+5: {
2045     if (StateMaschin==BETRACHTEN ||
2046 	StateMaschin==WEISSNEU) {
2047       Kamera.BlickeAuf3(Kugel[5].Pos_xCM(),Kugel[5].Pos_yCM());
2048     } else if (StateMaschin==STOSS) {
2049       Kamera.Verfolge(5);
2050     }
2051   } break;
2052   case S_SP_BALL+6: {
2053     if (StateMaschin==BETRACHTEN ||
2054 	StateMaschin==WEISSNEU) {
2055       Kamera.BlickeAuf3(Kugel[6].Pos_xCM(),Kugel[6].Pos_yCM());
2056     } else if (StateMaschin==STOSS) {
2057       Kamera.Verfolge(6);
2058     }
2059   } break;
2060   case S_SP_BALL+7: {
2061     if (StateMaschin==BETRACHTEN ||
2062 	StateMaschin==WEISSNEU) {
2063       Kamera.BlickeAuf3(Kugel[7].Pos_xCM(),Kugel[7].Pos_yCM());
2064     } else if (StateMaschin==STOSS) {
2065       Kamera.Verfolge(7);
2066     }
2067   } break;
2068   case S_SP_BALL+8: {
2069     if (StateMaschin==BETRACHTEN ||
2070 	StateMaschin==WEISSNEU) {
2071       Kamera.BlickeAuf3(Kugel[8].Pos_xCM(),Kugel[8].Pos_yCM());
2072     } else if (StateMaschin==STOSS) {
2073       Kamera.Verfolge(8);
2074     }
2075   } break;
2076   case S_SP_BALL+9: {
2077     if (StateMaschin==BETRACHTEN ||
2078 	StateMaschin==WEISSNEU) {
2079       Kamera.BlickeAuf3(Kugel[9].Pos_xCM(),Kugel[9].Pos_yCM());
2080     } else if (StateMaschin==STOSS) {
2081       Kamera.Verfolge(9);
2082     }
2083   } break;
2084   case S_SP_BALL+10: {
2085     if (StateMaschin==BETRACHTEN ||
2086 	StateMaschin==WEISSNEU) {
2087       Kamera.BlickeAuf3(Kugel[10].Pos_xCM(),Kugel[10].Pos_yCM());
2088     } else if (StateMaschin==STOSS) {
2089       Kamera.Verfolge(10);
2090     }
2091   } break;
2092   case S_SP_BALL+11: {
2093     if (StateMaschin==BETRACHTEN ||
2094 	StateMaschin==WEISSNEU) {
2095       Kamera.BlickeAuf3(Kugel[11].Pos_xCM(),Kugel[11].Pos_yCM());
2096     } else if (StateMaschin==STOSS) {
2097       Kamera.Verfolge(11);
2098     }
2099   } break;
2100   case S_SP_BALL+12: {
2101     if (StateMaschin==BETRACHTEN ||
2102 	StateMaschin==WEISSNEU) {
2103       Kamera.BlickeAuf3(Kugel[12].Pos_xCM(),Kugel[12].Pos_yCM());
2104     } else if (StateMaschin==STOSS) {
2105       Kamera.Verfolge(12);
2106     }
2107   } break;
2108   case S_SP_BALL+13: {
2109     if (StateMaschin==BETRACHTEN ||
2110 	StateMaschin==WEISSNEU) {
2111       Kamera.BlickeAuf3(Kugel[13].Pos_xCM(),Kugel[13].Pos_yCM());
2112     } else if (StateMaschin==STOSS) {
2113       Kamera.Verfolge(13);
2114     }
2115   } break;
2116   case S_SP_BALL+14: {
2117     if (StateMaschin==BETRACHTEN ||
2118 	StateMaschin==WEISSNEU) {
2119       Kamera.BlickeAuf3(Kugel[14].Pos_xCM(),Kugel[14].Pos_yCM());
2120     } else if (StateMaschin==STOSS) {
2121       Kamera.Verfolge(14);
2122     }
2123   } break;
2124   case S_SP_BALL+15: {
2125     if (StateMaschin==BETRACHTEN ||
2126 	StateMaschin==WEISSNEU) {
2127       Kamera.BlickeAuf3(Kugel[15].Pos_xCM(),Kugel[15].Pos_yCM());
2128     } else if (StateMaschin==STOSS) {
2129       Kamera.Verfolge(15);
2130     }
2131   } break;
2132   case S_SP_WEITERSPIELEN: {
2133     NeuAufbauenOderWeiterspielen=0;
2134     NeuAufbauenOderAchtEinsetzen=0;
2135     MenuGesperrt=0;
2136     NeuerMenuZustand();
2137   } break;
2138   case S_SP_ACHTEINSETZEN: {
2139     NeuAufbauenOderWeiterspielen=0;
2140     NeuAufbauenOderAchtEinsetzen=0;
2141     MenuGesperrt=0;
2142     AchtEinsetzen();
2143     NeuerMenuZustand();
2144   } break;
2145   case S_SP_NEUAUFBAUEN: {
2146     Foul=0;
2147     LageVerbesserungKopffeld=1;
2148     LageVerbesserung=0;
2149     NeuAufbauenOderWeiterspielen=0;
2150     NeuAufbauenOderAchtEinsetzen=0;
2151     Spieler1Gewonnen=0;
2152     Spieler2Gewonnen=0;
2153     MenuGesperrt=0;
2154     StateMaschin=SCHIEDSRICHTER;
2155     GLint Spieler=Schiedsrichter.FrageNachSpielerAmStoss();
2156     GLint Fouls0=Schiedsrichter.FrageNachFouls(0);
2157     GLint Fouls1=Schiedsrichter.FrageNachFouls(1);
2158     Schiedsrichter.NeuesSpiel(Spiel);
2159     //SchiedsrichterEntscheidung=0; nur nicht!
2160     Schiedsrichter.SetzeSpielerAmStoss(Spieler);
2161     Schiedsrichter.SetzeFouls(0,Fouls0);
2162     Schiedsrichter.SetzeFouls(1,Fouls1);
2163     SpielfeldAufbau();
2164     Kamera.ladePosition(4);
2165     NeuerMenuZustand();
2166   } break;
2167   case S_SP_HAUPTMENU:{
2168     AusSpiel=0;
2169     StateMaschin=START;
2170     SetzeMenuZustand(HAUPTMENU);
2171   } break;
2172   case S_SP_NEUESSPIEL:{
2173     Foul=0;
2174     LageVerbesserungKopffeld=1;
2175     LageVerbesserung=0;
2176     NeuAufbauenOderWeiterspielen=0;
2177     NeuAufbauenOderAchtEinsetzen=0;
2178     Spieler1Gewonnen=0;
2179     Spieler2Gewonnen=0;
2180     NeuAufbauenOderWeiterspielen=0;
2181     NeuAufbauenOderAchtEinsetzen=0;
2182     MenuGesperrt=0;
2183     StateMaschin=SCHIEDSRICHTER;
2184     GLint Spieler=Schiedsrichter.FrageNachSpielerAmStoss();
2185     Schiedsrichter.NeuesSpiel(Spiel);
2186     SchiedsrichterEntscheidung=0;
2187     Schiedsrichter.SetzeSpielerAmStoss(1-Spieler);
2188     SpielfeldAufbau();
2189     Kamera.ladePosition(4);
2190     NeuerMenuZustand();
2191   } break;
2192   case S_SP_NEUEACHTBALLAUFSTELLUNG:{
2193    if (StateMaschin==BETRACHTEN||
2194        StateMaschin==WEISSNEU) {
2195      Spiel=ACHTBALL;
2196      SpielfeldAufbau();
2197    }
2198   } break;
2199   case S_SP_NEUENEUNBALLAUFSTELLUNG:{
2200    if (StateMaschin==BETRACHTEN||
2201        StateMaschin==WEISSNEU) {
2202      Spiel=NEUNBALL;
2203      SpielfeldAufbau();
2204    }
2205   } break;
2206   case S_SPIELER1HERHOEREN:{
2207     for (GLint TextfeldNr=0;TextfeldNr<1000;TextfeldNr++) {
2208       if (TextfeldArray[TextfeldNr])
2209 	TextfeldArray[TextfeldNr]->Weghoeren();
2210     }
2211     TextfeldArray[T_SPIELER1NAME]->Herhoeren();
2212   } break;
2213   case S_SPIELER2HERHOEREN:{
2214     for (GLint TextfeldNr=0;TextfeldNr<1000;TextfeldNr++) {
2215       if (TextfeldArray[TextfeldNr])
2216 	TextfeldArray[TextfeldNr]->Weghoeren();
2217     }
2218     TextfeldArray[T_SPIELER2NAME]->Herhoeren();
2219   } break;
2220   case S_NETZWERKSPIELERHERHOEREN:{
2221     //for (GLint TextfeldNr=0;TextfeldNr<TextfeldAnzahl;TextfeldNr++) {
2222     //  TextfeldArray[TextfeldNr]->Weghoeren();
2223     //}
2224     //T_NetzwerkSpielerName.Herhoeren();
2225   } break;
2226   case S_H_TASTENBELEGUNGEN: {
2227     SetzeMenuZustand(HILFETASTENBELEGUNGEN);
2228   } break;
2229   case S_H_BILLARDREGELN: {
2230     SetzeMenuZustand(HILFEREGELN1);
2231   } break;
2232   case S_H_TUTORIAL: {
2233     Foul=0;
2234     LageVerbesserungKopffeld=0;
2235     LageVerbesserung=0;
2236     NeuAufbauenOderWeiterspielen=0;
2237     NeuAufbauenOderAchtEinsetzen=0;
2238     Spieler1Gewonnen=0;
2239     Spieler2Gewonnen=0;
2240     MenuGesperrt=0;
2241     SpielModus=TUTORIAL;
2242     StateMaschin=BETRACHTEN;
2243     Spiel=ACHTBALL;
2244     SpielfeldAufbau();
2245     Schiedsrichter.NeuesSpiel(Spiel);
2246     SchiedsrichterEntscheidung=0;
2247     Kamera.ladePosition(4);
2248     SetzeMenuZustand(SPIEL);
2249   } break;
2250   case S_H_ZUHILFE: {
2251     SetzeMenuZustand(HILFE);
2252   } break;
2253   case S_H_E1_N: {
2254     SetzeMenuZustand(HILFEEINFUEHRUNG2);
2255   } break;
2256   case S_H_E2_N: {
2257     SetzeMenuZustand(HILFEEINFUEHRUNG3);
2258   } break;
2259   case S_H_E2_L: {
2260     SetzeMenuZustand(HILFEEINFUEHRUNG1);
2261   } break;
2262   case S_H_E3_N: {
2263     SetzeMenuZustand(HILFEEINFUEHRUNG4);
2264   } break;
2265   case S_H_E3_L: {
2266     SetzeMenuZustand(HILFEEINFUEHRUNG2);
2267   } break;
2268   case S_H_E4_N: {
2269     SetzeMenuZustand(HILFEEINFUEHRUNG5);
2270   } break;
2271   case S_H_E4_L: {
2272     SetzeMenuZustand(HILFEEINFUEHRUNG3);
2273   } break;
2274   case S_H_E5_N: {
2275     SetzeMenuZustand(HILFEEINFUEHRUNG6);
2276   } break;
2277   case S_H_E5_L: {
2278     SetzeMenuZustand(HILFEEINFUEHRUNG4);
2279   } break;
2280   case S_H_E6_N: {
2281     SetzeMenuZustand(HILFEEINFUEHRUNG7);
2282   } break;
2283   case S_H_E6_L: {
2284     SetzeMenuZustand(HILFEEINFUEHRUNG5);
2285   } break;
2286   case S_H_R1_N: {
2287     SetzeMenuZustand(HILFEREGELN2);
2288   } break;
2289   case S_H_R2_N: {
2290     SetzeMenuZustand(HILFEREGELN3);
2291   } break;
2292   case S_H_R2_L: {
2293     SetzeMenuZustand(HILFEREGELN1);
2294   } break;
2295   case S_H_R3_N: {
2296     SetzeMenuZustand(HILFEREGELN4);
2297   } break;
2298   case S_H_R3_L: {
2299     SetzeMenuZustand(HILFEREGELN2);
2300   } break;
2301   case S_H_R4_N: {
2302     SetzeMenuZustand(HILFEREGELN5);
2303   } break;
2304   case S_H_R4_L: {
2305     SetzeMenuZustand(HILFEREGELN3);
2306   } break;
2307   case S_H_R5_N: {
2308     SetzeMenuZustand(HILFEREGELN6);
2309   } break;
2310   case S_H_R5_L: {
2311     SetzeMenuZustand(HILFEREGELN4);
2312   } break;
2313   case S_H_R6_N: {
2314     SetzeMenuZustand(HILFEREGELN7);
2315   } break;
2316   case S_H_R6_L: {
2317     SetzeMenuZustand(HILFEREGELN5);
2318   } break;
2319 
2320   default:{
2321     if (Signal>=900 && Signal<990) {
2322       ladeSprache(Signal);
2323       for (GLint dl=0 ; dl < 1000 ; dl++ ) {
2324 	if (!TextfeldArray[dl]) continue;
2325 	TextfeldArray[dl]->GeneriereDisplayList();
2326 	printf("."); fflush(stdout);
2327       }
2328       if (Sprache) SetzeMenuZustand(EINSTELLUNGEN);
2329       else SignalAusfuehrung(S_H_TUTORIAL);
2330 	//SetzeMenuZustand(HAUPTMENU);
2331       Sprache=Signal;
2332       SchreibeKonfiguration();
2333     }
2334   } break;
2335   }
2336 }
2337 
KeyboardTaste(unsigned char Taste,int,int)2338 GLint Menu::KeyboardTaste (unsigned char Taste,int,int){
2339 
2340   GLint Reaktion=0;
2341   GLint TextfeldNr=0;
2342 
2343   while (!Reaktion && TextfeldNr<1000) {
2344     if( TextfeldArray[TextfeldNr] )
2345       Reaktion = TextfeldArray[TextfeldNr]->Zeichen(Taste);
2346 
2347     //if (Reaktion) {
2348     //  printf("\nReaktion von %i\n",TextfeldNr);
2349     //  printf("%s",TextfeldArray[TextfeldNr]->Text());
2350     //}
2351 
2352     TextfeldNr++;
2353   }
2354 
2355   if (Reaktion) return 1;
2356 
2357   if (MenuGesperrt ||
2358       MenuZustand!=SPIEL) {
2359     return 1;
2360   }
2361 
2362   //Esc-Sequenzen ;)
2363 
2364   switch (MenuZustand) {
2365 
2366   case STARTBILDSCHIRM: {
2367     switch (Taste) {
2368     case 27: {
2369       MenuZustand=HAUPTMENU;
2370       NeuerMenuZustand();
2371       return 1;
2372     } break;
2373     }
2374   } break;
2375 
2376   case HAUPTMENU:{
2377     switch (Taste) {
2378     case 27: {
2379       MenuZustand=BEENDEN;
2380       NeuerMenuZustand();
2381       return 1;
2382     } break;
2383     }
2384   } break;
2385 
2386   case TRAINING:{
2387     switch (Taste) {
2388     case 27: {
2389       MenuZustand=HAUPTMENU;
2390       NeuerMenuZustand();
2391       return 1;
2392     } break;
2393     }
2394   } break;
2395 
2396   case ZWEISPIELER:{
2397     switch (Taste) {
2398     case 27: {
2399       MenuZustand=HAUPTMENU;
2400       NeuerMenuZustand();
2401       return 1;
2402     } break;
2403     }
2404   } break;
2405 
2406   case NETZWERKHAUPT:{
2407     switch (Taste) {
2408     case 27: {
2409       MenuZustand=HAUPTMENU;
2410       NeuerMenuZustand();
2411       return 1;
2412     } break;
2413     }
2414   } break;
2415 
2416   case NETZWERKNEU:{
2417     switch (Taste) {
2418     case 27: {
2419       MenuZustand=NETZWERKHAUPT;
2420       NeuerMenuZustand();
2421       return 1;
2422     } break;
2423     }
2424   } break;
2425 
2426   case NETZWERKBEITRETEN:{
2427     switch (Taste) {
2428     case 27: {
2429       MenuZustand=NETZWERKHAUPT;
2430       NeuerMenuZustand();
2431       return 1;
2432     } break;
2433     }
2434   } break;
2435 
2436   case BEENDEN:{
2437     switch (Taste) {
2438     case 27: {
2439       MenuZustand=HAUPTMENU;
2440       NeuerMenuZustand();
2441       return 1;
2442     } break;
2443     }
2444   } break;
2445 
2446   case AUSSPIEL:{
2447   } break;
2448 
2449   case EINSTELLUNGEN:{
2450   } break;
2451 
2452   }
2453 
2454   return 0;
2455 }
2456 
SetzeFPS(GLint fps)2457 void Menu::SetzeFPS(GLint fps) {
2458   char temp[]={0,0,0,0,0,0,0,0,0,0};
2459   sprintf(temp,"%i fps",fps);
2460   TextfeldArray[T_FPS]->SetzeText(temp);
2461 }
2462