1 #include <GL/glut.h>
2 #include <math.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 
6 #include "Textfeld.h"
7 #include "Kamera.h"
8 #include "Kugel.h"
9 #include "Anzeige.h"
10 #include "Namen.h"
11 #include "Schild.h"
12 #include "Menu.h"
13 #include "Schiedsrichter.h"
14 
15 #include "Einsetzen.h"
16 #include "Handling.h"
17 
18 #ifndef M_PI
19 #define M_PI 3.14159265358979323846
20 #endif
21 
22 
StartHandling()23 void StartHandling() {
24   Kamera.Rundflug(Faktor);
25   //Menu.Update(Faktor);
26 }
27 
BetrachtenHandling()28 void BetrachtenHandling() {
29   //Menu.Update(Faktor);
30   if (Taste_Pfeil_Oben)  {Kamera.Beweg_Vor(Faktor);}
31   if (Taste_Pfeil_Unten) {Kamera.Beweg_Zurueck(Faktor);}
32   if (Taste_Pfeil_Rechts){Kamera.Beweg_Rechts(Faktor);}
33   if (Taste_Pfeil_Links) {Kamera.Beweg_Links(Faktor);}
34   if (Taste_Shift)       {Kamera.Beweg_Hoch(Faktor);}
35   if (Taste_Strg)        {Kamera.Beweg_Runter(Faktor);}
36   if (Taste_Bild_Auf)    {Kamera.Beweg_Rein(Faktor);}
37   if (Taste_Bild_Ab)     {Kamera.Beweg_Raus(Faktor);}
38   if (Taste_Pos1)        {Kamera.Zoom_Rein(Faktor);}
39   if (Taste_Ende)        {Kamera.Zoom_Raus(Faktor);}
40 }
41 
ZielenHandling()42 void ZielenHandling() {
43   if (Taste_Pfeil_Oben)  {Kamera.Beweg_Rein(Faktor);}
44   if (Taste_Pfeil_Unten) {Kamera.Beweg_Raus(Faktor);}
45   if (Taste_Pfeil_Rechts){Kamera.Schwenk_Rechts(2*Faktor,Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());}
46   if (Taste_Pfeil_Links) {Kamera.Schwenk_Links(2*Faktor,Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());}
47   if (Taste_Shift)       {Kamera.Schwenk_Runter(Faktor,Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());}
48   if (Taste_Strg)        {Kamera.Schwenk_Hoch(Faktor,Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());}
49   if (Taste_Bild_Auf)    {Kamera.Beweg_Rein(Faktor);}
50   if (Taste_Bild_Ab)     {Kamera.Beweg_Raus(Faktor);}
51   if (Taste_Pos1)        {Kamera.Vertigo_Rein(Faktor);}
52   if (Taste_Ende)        {Kamera.Vertigo_Raus(Faktor);}
53 }
54 
AusholenHandling()55 void AusholenHandling() {
56   if (Taste_Pfeil_Oben)  {Kamera.Beweg_Rein(Faktor);}
57   if (Taste_Pfeil_Unten) {Kamera.Beweg_Raus(Faktor);}
58   if (Taste_Pfeil_Rechts){Kamera.Schwenk_Rechts(2*Faktor,Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());}
59   if (Taste_Pfeil_Links) {Kamera.Schwenk_Links(2*Faktor,Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());}
60   if (Taste_Shift)       {Kamera.Schwenk_Runter(Faktor,Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());}
61   if (Taste_Strg)        {Kamera.Schwenk_Hoch(Faktor,Kugel[0].Pos_xCM(),Kugel[0].Pos_yCM());}
62   if (Taste_Bild_Auf)    {Kamera.Beweg_Rein(Faktor);}
63   if (Taste_Bild_Ab)     {Kamera.Beweg_Raus(Faktor);}
64   if (Taste_Pos1)        {Kamera.Zoom_Rein(Faktor);}
65   if (Taste_Ende)        {Kamera.Zoom_Raus(Faktor);}
66 
67   AusholStaerke=MaxAusholStaerke*(1-exp((-FrameZeitpunkt+AusholStartzeit)/400.0));
68   Anzeige.setzeStossStaerke(AusholStaerke/3.333);
69 
70 }
71 
StossHandling()72 void StossHandling() {
73 
74   AllerersterStoss=0;
75   //WeisseVersetzbar=0;
76 
77   if (Taste_Pfeil_Oben)  {Kamera.Beweg_Vor(Faktor);}
78   if (Taste_Pfeil_Unten) {Kamera.Beweg_Zurueck(Faktor);}
79   if (Taste_Pfeil_Rechts){Kamera.Beweg_Rechts(Faktor);}
80   if (Taste_Pfeil_Links) {Kamera.Beweg_Links(Faktor);}
81   if (Taste_Shift)       {Kamera.Beweg_Hoch(Faktor);}
82   if (Taste_Strg)        {Kamera.Beweg_Runter(Faktor);}
83   if (Taste_Bild_Auf)    {Kamera.Beweg_Rein(Faktor);}
84   if (Taste_Bild_Ab)     {Kamera.Beweg_Raus(Faktor);}
85   if (Taste_Pos1)        {Kamera.Zoom_Rein(Faktor);}
86   if (Taste_Ende)        {Kamera.Zoom_Raus(Faktor);}
87 
88   //Frames++;                       // F"ur die Frames/sec-Anzeige
89 
90   // Zeit seit Stossbeginn
91   GLint Zeit=FrameZeitpunkt-Startzeit;
92 
93   // Letzten Zustand noch zeichnen, wenn Stoss
94   if (Zeit>Stossdauer) {Zeit=Stossdauer;} // eigentlich schon vorbei
95 
96   //printf("%i-%i=%i: ",FrameZeitpunkt,Startzeit,Zeit);
97 
98   for (int Kugelnr=0;Kugelnr<16;Kugelnr++) { // Alle Kugeln neu positionieren
99     if (Bewegungstabelle[Zeit][Kugelnr][2]<=0) {
100       //if (Kugelnr<8)
101 		//printf("%i,%i ",(GLint)Bewegungstabelle[Zeit][Kugelnr][0],(GLint)Bewegungstabelle[Zeit][Kugelnr][1]);
102 	  Kugel[Kugelnr].neuePositionD(Bewegungstabelle[Zeit][Kugelnr]);
103     }
104   }
105   //printf("\n");
106 
107   //DelayAusgleich=1;
108 
109   Anzeige.setzeStossStaerke(AusholStaerke/3.333-Zeit/3.0);
110 
111   if (!(Zeit & 31)) {
112     GLint neu=0;
113     for (int i=0;i<16;i++) {
114       if (KugelnImSpiel[i] && !KugelnVersenkt[i] && (Kugel[i].Pos_x()==3000)) {
115 	KugelnVersenkt[i]=1;
116 	neu=1;
117       }
118     }
119     if (neu) {Menu.NeuerMenuZustand();}
120   }
121 
122 
123   if (Zeit==Stossdauer &&
124       !(SpielModus == TUTORIAL && FrameZeitpunkt-Startzeit < 1900)) {
125     // Animation schon fertig?
126 
127     //#ifndef _WIN32
128     //printf(" %f Frames/sec\n",(Frames*100.0)/(Stossdauer+1.0));
129     //#endif
130 
131     for (int i=0;i<16;i++) {
132       if (KugelnImSpiel[i] && !KugelnVersenkt[i] && (Kugel[i].Pos_x()==3000)) {
133 	KugelnVersenkt[i]=1;
134       }
135     }
136 
137     if (SpielModus == TRAININGSSPIEL||SpielModus == TUTORIAL) {
138       if (Kugel[0].Pos_x()==3000) {
139 	StateMaschin=WEISSNEU;
140 	Anzeige.setzeStossStaerke(0.0);
141 	LageVerbesserung=1;
142 	LageVerbesserungKopffeld=1;
143 	WeisseEinsetzen();
144 	Menu.NeuerMenuZustand();
145       } else {
146 	StateMaschin=BETRACHTEN;
147 	Anzeige.setzeStossStaerke(0.0);
148 	Menu.NeuerMenuZustand();
149       }
150     } else if (Schiedsrichter.Entscheidung()) {
151       StateMaschin=SCHIEDSRICHTER;
152       Anzeige.setzeStossStaerke(0.0);
153     } else {
154       StateMaschin=BETRACHTEN;
155       Anzeige.setzeStossStaerke(0.0);
156       Menu.NeuerMenuZustand();
157     }
158   }
159 }
160 
WeissneuHandling()161 void WeissneuHandling() {
162 
163   if (SpielModus==TRAININGSSPIEL) {
164     LageVerbesserungKopffeld=0;
165     LageVerbesserung=1;
166   }
167 
168   GLfloat x=Kugel[0].Pos_xCM();
169   GLfloat y=Kugel[0].Pos_yCM();
170 
171   GLfloat Faktor2=sqrt((Kugel[0].Pos_xCM()-Kamera.Pos_xCM())*
172 		       (Kugel[0].Pos_xCM()-Kamera.Pos_xCM())+
173 		       (Kugel[0].Pos_yCM()-Kamera.Pos_yCM())*
174 		       (Kugel[0].Pos_yCM()-Kamera.Pos_yCM())+
175 		       Kamera.Pos_zCM()*Kamera.Pos_zCM());
176 
177   Faktor2*=.005;
178 
179   if (Taste_Pfeil_Oben) {
180     x+=.3*Faktor*Faktor2*sin(Kamera.Beta*M_PI/180.0);
181     y+=.3*Faktor*Faktor2*cos(Kamera.Beta*M_PI/180.0);
182   }
183   if (Taste_Pfeil_Unten) {
184     x-=.3*Faktor*Faktor2*sin(Kamera.Beta*M_PI/180.0);
185     y-=.3*Faktor*Faktor2*cos(Kamera.Beta*M_PI/180.0);
186   }
187   if (Taste_Pfeil_Links) {
188     x-=.3*Faktor*Faktor2*cos(Kamera.Beta*M_PI/180.0);
189     y+=.3*Faktor*Faktor2*sin(Kamera.Beta*M_PI/180.0);
190   }
191   if (Taste_Pfeil_Rechts) {
192     x+=.3*Faktor*Faktor2*cos(Kamera.Beta*M_PI/180.0);
193     y-=.3*Faktor*Faktor2*sin(Kamera.Beta*M_PI/180.0);
194   }
195 
196   GLint ungueltig=0;
197 
198   if (x<-124 || x>124 || (x>-63.5 && LageVerbesserungKopffeld)) {
199     x=Kugel[0].Pos_xCM();
200   }
201   if (y<-60.5||y>60.5) {
202     y=Kugel[0].Pos_yCM();
203   }
204 
205   for (int nr=1;nr<16;nr++) {
206     if ((Kugel[nr].Pos_xCM()-x)*(Kugel[nr].Pos_xCM()-x)+
207 	(Kugel[nr].Pos_yCM()-y)*(Kugel[nr].Pos_yCM()-y)<32.7) {
208       ungueltig=1;
209     }
210   }
211 
212   if (!ungueltig) {
213     Kugel[0].neuePositionCM(x,y);
214   }
215 
216   if (Taste_Shift)       {Kamera.Beweg_Hoch(Faktor);}
217   if (Taste_Strg)        {Kamera.Beweg_Runter(Faktor);}
218   if (Taste_Bild_Auf)    {Kamera.Beweg_Rein(Faktor);}
219   if (Taste_Bild_Ab)     {Kamera.Beweg_Raus(Faktor);}
220   if (Taste_Pos1)        {Kamera.Zoom_Rein(Faktor);}
221   if (Taste_Ende)        {Kamera.Zoom_Raus(Faktor);}
222 }
223 
SchiedsrichterHandling()224 void SchiedsrichterHandling() {
225   if (SchiedsrichterEntscheidung == -1) {
226     SchiedsrichterEntscheidung = Schiedsrichter.Entscheidung();
227 
228     AufnahmeWechsel = SchiedsrichterEntscheidung & 1;
229     Foul = SchiedsrichterEntscheidung & 2;
230     LageVerbesserungKopffeld = SchiedsrichterEntscheidung & 4;
231     LageVerbesserung = SchiedsrichterEntscheidung & 8;
232     NeuAufbauenOderWeiterspielen = SchiedsrichterEntscheidung & 16;
233     NeuAufbauenOderAchtEinsetzen = SchiedsrichterEntscheidung & 32;
234     Spieler1Gewonnen = SchiedsrichterEntscheidung & 64;
235     Spieler2Gewonnen = SchiedsrichterEntscheidung & 128;
236 
237     Menu.NeuerMenuZustand();
238 
239   }
240 }
241 
242 
243 
244 
245