//soundtouch // // public void DrawCubo(float x1,float y1,float z1,float x2,float y2,float z2); public SharpGLForm() { Basic_Size = 17; MazeCellsIntTab= new int[Basic_Size][]; for (int j = 0; j < Basic_Size;j++ ) { MazeCellsIntTab[j] = new int[Basic_Size]; } ListaKolizji = new List<Wektor>(); ListaKolizjiX = new List<float>(); ListaKolizjiZ = new List<float>(); MazeCellType = new List<int>(); rysowM =new RysownikMaze(); StraightTrap = new TrapChecker(); // Sprawdzacz = new SprawdzaczKolizji(); MyMaze = rysowM.DrawMazeSkelethOfSize(25,true); MyMazeTwo = rysowM.DrawMazeSkelethOfSize(Basic_Size,false); first_time = false; tempMazeList = rysowM.ConvertMazeStructToListOfTypes(MyMazeTwo); for(int i=0;i<Basic_Size*Basic_Size;i++) { MazeCellsIntTab[i / Basic_Size][i % Basic_Size] = tempMazeList.ElementAt(i); } KeyA = false; KeyS = false; KeyD = false; KeyW=false; KeySpace=false; WektorZero = new Wektor(0, 0, 0); PlayerWektorSpeed = new Wektor(0, 0, 0); PlayerLive = 7; YAxisCamera = 5; CursorWektor = new Wektor(0, 0, 0); CursorWektorAngled = new Wektor(0, 0, 0); Debug.WriteLine("j"); Boss = new KwadratBoss(true); // new List<int>(); listaPociskow = new List<KwadratMaterialnyPocisk>(); listaPociskowPlayera = new List<KwadratMaterialnyPocisk>(); listaPociskow.Add(new KwadratMaterialnyPocisk(Boss.polozenie, new Wektor(0.1f, 0.0f, -0.13f), 22)); listaPociskow.Add(new KwadratMaterialnyPocisk(Boss.polozenie, new Wektor(0.09f, 0.0f, -0.03f), 22)); listaPociskow.Add(new KwadratMaterialnyPocisk(Boss.polozenie, new Wektor(-0.14f, 0.0f, -0.133f), 22)); for(int i=0 ; i<13 ; i++) { listaPociskow.Add(new KwadratMaterialnyPocisk(Boss.polozenie,losowyWektorPredkosci(),20)); } cuboPlayer = new kwardratMaterialny(new Wektor(0.0f,0.0f,0.0f),new Wektor(0.0f,0.0f,0.0f),new Wektor(0.4f,0.4f,0.4f),new Wektor(0.2f,0.2f,0.2f),45); // Wektor temp,temp1; // temp = new Wektor(0.0f,0.0f,0.0f); // temp1 = new Wektor(0.2f,0.0f,-0.1f); bulletOne = new KwadratMaterialnyPocisk(new Wektor(0.0f, 0.0f, 0.0f),new Wektor(0.2f, 0.0f, 0.03f), 40); bulletOne = new KwadratMaterialnyPocisk(new Wektor(0.0f, 0.0f, 0.0f), 30); //bulletOne = new KwadratMaterialnyPocisk(temp, temp1, 30); // new KwadratMaterialnyPocisk() da = new Wektor(1.0f, 1.0f, 1.0f); // Wektor re; re = new Wektor(2.0f, 1.0f, 1.0f); InitializeComponent(); this.Controls.Add(openGLControl); // this. // openGLControl.KeyPress += openGLControl_KeyPress; this.openGLControl.KeyPress += new KeyPressEventHandler(keypressed); this.openGLControl.KeyDown += new KeyEventHandler(Form2_KeyDown); this.openGLControl.KeyUp += new KeyEventHandler(Form1_KeyUp); this.openGLControl.MouseClick += Control1_MouseClick; }
private void openGLControl_OpenGLDraw(object sender, RenderEventArgs e) { CursorWektor.X =-1 * ((float)Cursor.Position.X - 680) / 50; CursorWektor.Z = -1 * ((float)Cursor.Position.Y - 374) / 50; // double Angle = Math.Atan2(CursorWektor.Z, CursorWektor.X); double Angle = -45; CursorWektorAngled = rotate_wektor(0, 0, (float)Angle, CursorWektor); // CursorWektorAngled.X = CursorWektor.X * (float)Math.Sin(Angle -ConvertToRadians(90)); // CursorWektorAngled.Z = CursorWektor.Z * (float)Math.Cos(Angle -ConvertToRadians(90)); // Get the OpenGL object. OpenGL gl = openGLControl.OpenGL; rysow = new Rysownik(gl); rysowM.SetUpGl(gl); if (!first_time) { rysowM.DrawMazeFloor(tempMazeList, 1.0f, new Wektor(0, 0, 0)); if (rysowM.ListaPointowDoKolizji != null) { // Debug.Write("wwrsdsfsafasfa"); ListaKolizji = rysowM.ListaPointowDoKolizji; // ListaKolizjiX = rysowM.ListaXDoKolizji; // ListaKolizjiZ = rysowM.ListaZDoKolizji; } first_time = true; } Sprawdzacz = new SprawdzaczKolizji(rysow); // rysowM = new RysownikMaze(gl); // Clear the color and depth buffer. gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); // (x > 0 ? x : (2*PI + x)) * 360 / (2*PI) double AngleX; AngleX = CursorWektor.X; // if(CursorWektor.X<0){AngleX = (2*Math.PI + CursorWektor.X) * 360 / (2*Math.PI) ;} double AngleY; AngleY = CursorWektor.Z; // if (CursorWektor.Z < 0) { AngleY = (2 * Math.PI + CursorWektor.Z) * 360 / (2 * Math.PI); } Angle_between_wektor_X_Z(WektorZero, CursorWektor); // Load the identity matrix. gl.MatrixMode(OpenGL.GL_PROJECTION); // Load the identity. gl.LoadIdentity(); gl.Perspective(60.0f, 0, 0, 0); rysow.DrawLive(new Wektor(0.9f, -0.7f, 0), new Wektor(0.05f, 0.03f, 0f), PlayerLive); rysow.DrawLive(new Wektor(-0.9f, -0.7f, 0), new Wektor(0.05f, 0.04f, 0f), Boss.Live); // gl.DepthMask(0); // rysow.DrawCubo(0, 0, 0, 0.33f, 0.33f, 0.33f,0.0f,true,0.6f); // gl.DepthMask(1); gl.Enable(SharpGL.OpenGL.GL_SMOOTH); gl.Enable(SharpGL.OpenGL.GL_FLAT); // gl.Enable(SharpGL.OpenGL.GL_LINE_SMOOTH); // Create a perspective transformation. gl.Perspective(60.0f, (double)Width / (double)Height, 0.01, 100.0); // Use the 'look at' helper function to position and aim the camera. gl.LookAt(cuboPlayer.polozenie.X - 5, YAxisCamera, cuboPlayer.polozenie.Z - 5, cuboPlayer.polozenie.X, cuboPlayer.polozenie.Y, cuboPlayer.polozenie.Z, 0, 1, 0); // Rotate around the Y axis. float samesize= 2.3f; // =new Wektor(1.0, 1.0, 1.0); //Wektor re(1.0,1.0,1.0); /* for (int i = 0; i < listaPociskow.Count; i++) // Loop with for. { rysow.DrawCubo(listaPociskow[i].polozenie.X, listaPociskow[i].polozenie.Y, listaPociskow[i].polozenie.Z, listaPociskow[i].grubosci.X, listaPociskow[i].grubosci.Y, listaPociskow[i].grubosci.Z, (float)listaPociskow[i].angle + rotation, true,1.0f); } */ // list /* for (int i = 0; i < listaPociskowPlayera.Count; i++) // Loop with for. { rysow.DrawCubo(listaPociskowPlayera[i].polozenie.X, listaPociskowPlayera[i].polozenie.Y, listaPociskowPlayera[i].polozenie.Z, listaPociskowPlayera[i].grubosci.X, listaPociskowPlayera[i].grubosci.Y, listaPociskowPlayera[i].grubosci.Z, (float)listaPociskowPlayera[i].angle + rotation, true, 1.0f); } */ // rysow.DrawCubo(Boss.polozenie.X, Boss.polozenie.Y, Boss.polozenie.Z, // Boss.grubosci.X, Boss.grubosci.Y, Boss.grubosci.Z, 20,2); // rysow.draw_floor(); // rysowM.FinalDrawAllMazeByGl(MyMaze, new Wektor(0, 0, 0),(float)cuboPlayer.angle/15); // rysowM.FinalDrawAllMazeByGl(MyMazeTwo, new Wektor(-2, 0, -3), 0.5f); // rysowM.DrawMazyByListToSpeedUp(tempMazeList,new Wektor(2,0,0),0.02f); // rysowM.drawQuadFloor(new Wektor(1, 0, 1), 1f); // rysowM.drawQuadFloor(new Wektor(0,0,0),1.0f); rysowM.DrawMazeFloor(tempMazeList, 1.0f, new Wektor(0, 0, 0)); int Xo; int Yo; Coord tempCo = StraightTrap.in_what_coord(cuboPlayer.polozenie.X, cuboPlayer.polozenie.Z, 1.0f); Debug.Write(tempCo.x); Debug.Write(" y>"); Debug.WriteLine(tempCo.y); if( StraightTrap.is_three_cell_far(MazeCellsIntTab, tempCo.x, tempCo.y)) { Debug.WriteLine("buuummm"); } // + " y>" + cuboPlayer.polozenie.Z-1.0f); // gl.EnableClientState(OpenGL.GL_VERTEX_ARRAY); // gl.VertexPointer(0,3,rysowM.ArrayVertex); // gl.VertexPointer() //glVertexPointer(3, GL_FLOAT, 0, vertices); // draw a cube // gl.DrawArrays(OpenGL.GL_LINES,0,rysowM.count/2); //glDrawArrays(GL_TRIANGLES, 0, 36); // deactivate vertex arrays after drawing //glDisableClientState(GL_VERTEX_ARRAY); // gl.EnableClientState(OpenGL.GL_VERTEX_ARRAY); // gl.DrawArrays() // Debug.WriteLine(ListaKolizji.Count + " <out "); //mapka// rysowM.DrawMazyByListToSpeedUp(tempMazeList, cuboPlayer.polozenie, 0.22f); // Debug.Write(tempMazeList.Count.ToString() + " "); // rysowM.FinalDrawAllMazeByGl(MyMazeTwo, new Wektor(-5, 0, -5),1+(float)Math.Sin(rotation/10)); gl.Enable(SharpGL.OpenGL.GL_BLEND); gl.BlendFunc(SharpGL.OpenGL.GL_SRC_ALPHA,SharpGL.OpenGL.GL_ONE_MINUS_SRC_ALPHA); // glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); CursorWektor += cuboPlayer.polozenie; rysow.DrawCubo_with_alpha(CursorWektor.X, CursorWektor.Y, CursorWektor.Z, cuboPlayer.grubosci.X, cuboPlayer.grubosci.Y, cuboPlayer.grubosci.Z, rotation * 2,0.3f); CursorWektorAngled += cuboPlayer.polozenie; // rysow.DrawCubo_with_alpha(CursorWektorAngled.X, CursorWektorAngled.Y, CursorWektorAngled.Z, //// cuboPlayer.grubosci.X, // cuboPlayer.grubosci.Y * 3, cuboPlayer.grubosci.Z, (float)(1.5 * -1) * rotation, 0.3f); cuboPlayer.angle = -1f * Angle_between_wektor_X_Z(cuboPlayer.polozenie, CursorWektor); rysow.DrawPlayer(cuboPlayer.polozenie, cuboPlayer.grubosci, cuboPlayer.angle); // rysow.DrawCubo_with_alpha(CursorWektorAngled.X,CursorWektorAngled.Y,CursorWektorAngled.Z, // cuboPlayer.grubosci.X, // cuboPlayer.grubosci.Y*3, cuboPlayer.grubosci.Z, (float)(1.5 * -1) * rotation ,0.3f); Wektor AngleZeto; AngleZeto = new Wektor(120, 31200, 2130); // // trete //player config int hour_0_to_7; hour_0_to_7 = 900000; if (KeyW && !KeyA && !KeyD && !KeyS) { hour_0_to_7 = -1; } if (!KeyW && !KeyA && !KeyD && KeyS) { hour_0_to_7 = 4; } if (!KeyW && KeyA && !KeyD && !KeyS) { hour_0_to_7 = 6; } if (!KeyW && !KeyA && KeyD && !KeyS) { hour_0_to_7 = 2; } if (KeyA && KeyS && !KeyW) { hour_0_to_7 = 5; } if (KeyS && KeyD && !KeyW) { hour_0_to_7 = 3; } if (KeyD && KeyW) { hour_0_to_7 = 1; } if (KeyW && KeyA) { hour_0_to_7 = 7; } Wektor temp; temp = new Wektor(0.0f, 0.0f, 0.2f); if (Math.Abs(cuboPlayer.predkosc.X) < 0.2f && Math.Abs(cuboPlayer.predkosc.Z) < 0.2f) { switch (hour_0_to_7) { case -1: cuboPlayer.predkosc = RotateWektorOnZero(temp, 315); break; case 1: cuboPlayer.predkosc = temp; // cuboPlayer.predkosc.Z += 0.21f; // Debug.WriteLine(RotateWektorOnZero(temp, 45).X + " " + RotateWektorOnZero(temp, 45).Z); break; case 2: cuboPlayer.predkosc = RotateWektorOnZero(temp, 45); //cuboPlayer.predkosc.Z += RotateWektorOnZero(temp, 90).Z; // Debug.WriteLine(RotateWektorOnZero(temp, 90).X + " " + RotateWektorOnZero(temp, 90).Z); break; case 3: cuboPlayer.predkosc = RotateWektorOnZero(temp, 90); break; case 4: cuboPlayer.predkosc = RotateWektorOnZero(temp, 135); break; case 5: cuboPlayer.predkosc = RotateWektorOnZero(temp, 180); break; case 6: cuboPlayer.predkosc = RotateWektorOnZero(temp, 225); break; case 7: cuboPlayer.predkosc = RotateWektorOnZero(temp, 270); break; // default: // cuboPlayer.wycisz_predkosc_only_XZ_o(0.1f); } } cuboPlayer.wycisz_predkosc_only_XZ_o(0.01f); // if(Sprawdzacz.CzyNieKoliduje(ListaKolizji,1.0f,cuboPlayer.polozenie + cuboPlayer.predkosc)){ if (ListaKolizji != null) { // Debug.Write(ListaKolizji.Count); // Debug.Write("nie pusty"); if(Sprawdzacz.CzyNieKoliduje(ListaKolizji,0.5f,cuboPlayer.polozenie+cuboPlayer.predkosc)) { cuboPlayer.krok_naprzod(); } } //esle if (bulletOne != null) { bulletOne.krok_naprzod(); } Boss.krok_naprzod(); // foreach (KwadratMaterialnyPocisk prime in listaPociskow) // Loop through List with foreach. // { // prime.krok_naprzod(); // } for (int i = 0; i < listaPociskow.Count; i++) // Loop with for. { if (listaPociskow[i].vitality < 1) { listaPociskow.RemoveAt(i); } else { listaPociskow[i].krok_naprzod(); } } //foreach (KwadratMaterialnyPocisk prime in listaPociskowPlayera) // Loop through List with foreach. //{ // if (prime.vitality < 3) // { // listaPociskowPlayera.Remove(prime); // } // else // { // prime.krok_naprzod(); // } //} for (int i = 0; i < listaPociskowPlayera.Count; i++) // Loop with for. { if(czy_nachodza(listaPociskowPlayera[i].polozenie,Boss.polozenie,Boss.grubosci.X)) { Boss.Live--; // Debug.WriteLine("nachodza"); } if (listaPociskowPlayera[i].vitality < 3) { listaPociskowPlayera.RemoveAt(i); } else { listaPociskowPlayera[i].krok_naprzod(); } } if (cuboPlayer.polozenie.X < 2.0f * 16 * 3 && -5.5f + (2.0f * 16 * 3) < cuboPlayer.polozenie.Z && -5.5f + (2.0f * 16 * 3) < cuboPlayer.polozenie.X ) { ListaKolizji = new List<Wektor>(); ListaKolizjiX = new List<float>(); ListaKolizjiZ = new List<float>(); MazeCellType = new List<int>(); rysowM = new RysownikMaze(); // Sprawdzacz = new SprawdzaczKolizji(); MyMaze = rysowM.DrawMazeSkelethOfSize(25, true); MyMazeTwo = rysowM.DrawMazeSkelethOfSize(16, false); // tempMazeList = rysowM.ConvertMazeStructToListOfTypes(MyMazeTwo); cuboPlayer.polozenie = new Wektor(0, 0, 0); } if( cuboPlayer.polozenie.X > 2.0f * 16) { } if(Boss.counter%100 == 0) { Boss.Live--; if(Boss.Live==0) { cuboPlayer.polozenie = new Wektor(0, 0, 0); } listaPociskow = new List<KwadratMaterialnyPocisk>(); for (int i = 0; i < 13; i++) { listaPociskow.Add(new KwadratMaterialnyPocisk(Boss.polozenie, losowyWektorPredkosci(), 20)); } } // cuboOne.daj_kat_kwadrata(); // Nudge the rotation. rotation += 3.0f; Wektor inc; inc = new Wektor(0.01f, 0.0f, 0.0f); da += inc; re= re * 1.01f; if (bulletOne != null) { if (bulletOne.vitality < 0) { bulletOne = null; } } }
public MazeStruct DrawMazeSkelethOfSize(int MazeSize,bool is_fivedirect) { EdgeWeightedGraph MazeBasic = new EdgeWeightedGraph(MazeSize * MazeSize); // int tab[25]; Random rand; rand = new Random(); int xRand = rand.Next(); for (int i = 0; i < MazeSize; i++) { for (int j = 0; j < MazeSize; j++) { // for(int x=0;x<4;x++) int dest = ((i + 1) * MazeSize) + j; if (i + 1 < MazeSize) { xRand = (rand.Next() % 6) + 1; Edge tempEdge = new Edge(i * MazeSize + j, dest, xRand); MazeBasic.AddEdge(tempEdge); } dest = ((i - 1) * MazeSize) + j; if (i - 1 >= 0) { xRand = (rand.Next() % 6) + 1; Edge tempEdge = new Edge(i * MazeSize + j, dest, xRand); MazeBasic.AddEdge(tempEdge); } dest = (i * MazeSize) + (j + 1); if (j + 1 < MazeSize) { xRand = (rand.Next() % 6) + 1; Edge tempEdge = new Edge(i * MazeSize + j, dest, xRand); MazeBasic.AddEdge(tempEdge); } dest = (i * MazeSize) + (j - 1); if (j - 1 >= 0) { xRand = (rand.Next() % 6) + 1; Edge tempEdge = new Edge(i * MazeSize + j, dest, xRand); MazeBasic.AddEdge(tempEdge); } if (is_fivedirect) { dest = ((i + 1) * MazeSize) + (j + 1); if (j + 1 < MazeSize && i + 1 < MazeSize) { xRand = (rand.Next() % 6) + 1; Edge tempEdge = new Edge(i * MazeSize + j, dest, xRand); MazeBasic.AddEdge(tempEdge); } } } } PrimMST MazeBasicTree = new PrimMST(MazeBasic); // MazeBasicTree.Edges Queue<Edge> MazeDone = new Queue<Edge>(); // Queue<Edge> MazeDone = new Queue<Edge>(); // int sorc, desto; // String writelienString; MazeStruct MazeToReturn; MazeToReturn = new MazeStruct(MazeSize* MazeSize); foreach (Edge s in MazeBasicTree.Edges()) { // Debug.WriteLine( s.Target. +" "); MazeToReturn.setUpByEdge(s,true); } return MazeToReturn; }
public List<int> ConvertMazeStructToListOfTypes(MazeStruct MazeTemp) { int x,y; List<int> tempList; tempList = new List<int>(); bool up, down, left, right; int ofType; ofType = 10000; // tempString = "0000"; int target_x= 0; int target_y= 0; int InitialSize = (int)Math.Sqrt( (double)MazeTemp.SizeOfMaze); // Debug.WriteLine(InitialSize); for(int i = 0;i < MazeTemp.SizeOfMaze;i++) { // x = i / InitialSize; // y = i % InitialSize; x = i / InitialSize; y = i % InitialSize; var temp = MazeTemp.TableOfMazes.Find(r => (r.VertexNumber == i)); //kurde find nieraz zwraca tempa bez sasiadow ... // Debug.WriteLine(temp.Neigboors.Count); up = down = left = right = false; //if work is fine foreach (int vertex in temp.Neigboors) { Debug.WriteLine(i + " >>" + vertex); // target_x = vertex / InitialSize; // target_y = vertex % InitialSize; target_x = vertex / InitialSize; target_y = vertex % InitialSize; if(target_x == x) { if(target_y > y) { up = true; // tempString[0] = '1'; ofType += 1000; } else { down = true; // tempString[2] = '1'; ofType += 10; } } else { if(target_x > x) { right = true; ofType += 100; // tempString[1] = '1'; } else { left = true; ofType += 1; // tempString[3] = '1'; } } //awesome schiz // target_y = vertex / InitialSize; } //foreach // Debug.WriteLine(ofType); if (ofType != 10000) { tempList.Add(ofType); // Debug.WriteLine("sasiaz z" + ofType + " o numerze " + i); } ofType = 10000; // temp.Neigboors.Add(TempEdge.Dest()); } return tempList; }
public void FinalDrawAllMazeByGl(MazeStruct MazeTemp,Wektor Center,float Weight_of_cell) { int x; int target_x; int target_y; float weight; float weight_with_size; weight = Weight_of_cell; int y; Wektor Cursor; Wektor DrawableCursor; //Cursor = Center; weight_with_size = weight * MazeTemp.SizeOfMaze; Cursor = new Wektor(Center.X - (weight_with_size / 2), Center.Y - (weight_with_size / 2), Center.Z - (weight_with_size / 2)); DrawableCursor = Cursor; int InitialSize = (int)Math.Sqrt( (double)MazeTemp.SizeOfMaze); gl.PushMatrix(); gl.Begin(OpenGL.GL_LINES); gl.Color(0.44f, 0.44f, 0.44f); for(int i = 0;i < MazeTemp.SizeOfMaze;i++) { x = i / InitialSize; y = i % InitialSize; DrawableCursor.X = Cursor.X+ ( x * weight); DrawableCursor.Z = Cursor.Z + (y * weight); var temp = MazeTemp.TableOfMazes.Find(r => (r.VertexNumber == i)); // Debug.Write(i); // Debug.WriteLine(temp.Neigboors.Count + " nawet raz nei jest pusty"); foreach (int vertex in temp.Neigboors) { // Debug.Write(" >>>" + vertex); target_x = vertex / InitialSize; //awesome schiz // target_y = vertex / InitialSize; target_y = vertex % InitialSize; // gl.Color(0.57f, 0.52f, 0.59f); // gl.Vertex(DrawableCursor.X, Center.Y, DrawableCursor.Z); // gl.Vertex(Cursor.X, Cursor.Y, Cursor.Z); // gl.Vertex(Cursor.X + (target_x * weight), 0 , Cursor.Z + (target_y * weight)); gl.Vertex(Center.X+ (target_x* weight ), Center.Y, Center.Z + (target_y * weight)); gl.Vertex(Center.X + (x * weight),Center.Y,Center.Z + (y * weight)); } // Debug.WriteLine(" "); // temp.Neigboors.Add(TempEdge.Dest()); } gl.End(); gl.PopMatrix(); }