public static void recup_env() { // Transformation des coordonnées dans l'espaces aux coordonnées du laby de Charles int a = ((int)macamera.position.X + rayon_salles) / (2 * rayon_salles); int b = ((int)macamera.position.Z + rayon_salles) / (2 * rayon_salles); ab_stay_in_bounds(ref a, ref b); RoomsBuilder RoomsBuilder = new RoomsBuilder(); PlaceMonster PlaceMonster = new PlaceMonster(); //string pathL = @"Ressources\Game\C(L).obj"; //string pathX = @"Ressources\Game\C(X).obj"; //string pathIf = @"Ressources\Game\C(If).obj"; //string pathT = @"Ressources\Game\C(T).obj"; //string path2 = @"Ressources\Game\cabine.obj"; string pathStatue = @"Ressources\Game\statue.obj"; //string pathStatue = @"Ressources\Game\sql5_000049.obj"; if (Slender.doit_etre_recharge) { Slender.doit_etre_recharge = false; Program.freeModel(new Point(-137, -137), true, false); if (Slender.seraaffiche) { compteur_slender = compteur_slender % 4 + 1; float ang; Slender.position = PlaceMonster.GetPositionMonster(out ang); if (first_loop) { first_loop = false; Slender.position = new Vector3(30000, 30000, 30000); } Program.Liste_Lights[1].Position = new Vector3(Slender.position.X, Slender.position.Y + 100, Slender.position.Z); Program.getModel(pathStatue, Matrix.Scaling(2f * 75/*10*/) * Matrix.RotationY(ang) * Matrix.Translation(Slender.position), new Point(-137, -137)); } else { compteur_slender = 1; } } /// RECHERCHE S'IL Y A DES SALLES QUI DOIVENT ETRE CHARGEES PUIS RECHARGEES DE SUITE APRES /// //try //{ // Recupere la liste des cases vues ////Console.WriteLine("Zone [{0},{1}] [{2},{3}]", a, b, macamera.position.X, macamera.position.Z); List<Case> cases = new List<Case>(Program.newmaze.maze[a, b].see); // Init bool[] idadecharger = new bool[previous_cases.Count]; for (int i = 0; i < previous_cases.Count; i++) { idadecharger[i] = true; } // Recupere la liste des cases à décharger for (int i = 0; i < cases.Count; i++) { for (int j = 0; j < previous_cases.Count && cases.Count != 0; j++) { if (previous_cases[j].x == cases[i].x && previous_cases[j].y == cases[i].y && idadecharger[j] == true) { idadecharger[j] = false; cases.RemoveAt(i); i--; break; } } } // Decharge les cases à être déchargées for (int i = 0; i < previous_cases.Count; i++) { if (idadecharger[i]) { Program.freeModel(new Point(previous_cases[i].x, previous_cases[i].y), true, false); previous_cases.RemoveAt(i); i--; } } // sauvegarde des cases previous_cases.AddRange(cases); // Charges les nouvelles cases for (int i = 0; i < cases.Count; i++) { if (cases[i].type == 3) // L { RoomsBuilder.buildLRoom(rayon_salles, cases[i]); /*Program.getModel(@"Ressources\Game\C(L).obj", Matrix.RotationY((float)Math.PI / 2 * (cases[i].rot - 1)) * Matrix.Translation( -(2 * rayon_salles) * cases[i].x, 0, -(2 * rayon_salles) * cases[i].y), new Point(cases[i].x, cases[i].y));*/ } else if (cases[i].type == 2) // T { RoomsBuilder.buildTRoom(rayon_salles, cases[i]); /*Program.getModel(@"Ressources\Game\C(T).obj", Matrix.RotationY((float)Math.PI / 2 * (cases[i].rot - 1 + 1)) * Matrix.Translation( -(2 * rayon_salles) * cases[i].x, 0, -(2 * rayon_salles) * cases[i].y), new Point(cases[i].x, cases[i].y));*/ } else if (cases[i].type == 4) // Io { RoomsBuilder.buildIoRoom(rayon_salles, cases[i]); /*Program.getModel(@"Ressources\Game\caca2.obj", Matrix.Scaling(30) * Matrix.RotationY((float)Math.PI / 2 * (cases[i].rot - 1 + 1)) * Matrix.Translation( -(2 * rayon_salles) * cases[i].x, 0, -(2 * rayon_salles) * cases[i].y), new Point(cases[i].x, cases[i].y));*/ } else if (cases[i].type == 5) // If { RoomsBuilder.buildIfRoom(rayon_salles, cases[i]); /*Program.getModel(@"Ressources\Game\C(If).obj", Matrix.Scaling(30) * Matrix.RotationY((float)Math.PI / 2 * (cases[i].rot - 1 + 2)) * Matrix.Translation( -(2 * rayon_salles) * cases[i].x, 0, -(2 * rayon_salles) * cases[i].y), new Point(cases[i].x, cases[i].y));*/ } else if (cases[i].type == 1) // X { RoomsBuilder.buildXRoom(rayon_salles, cases[i]); /*Program.getModel(@"Ressources\Game\C(X).obj", Matrix.Scaling(30) * Matrix.RotationY((float)Math.PI / 2 * (cases[i].rot - 1)) * Matrix.Translation( -(2 * rayon_salles) * cases[i].x, 0, -(2 * rayon_salles) * cases[i].y), new Point(cases[i].x, cases[i].y));*/ } } }
//> Color codes for WriteNicely : // 0: Black. // 1: DarkBlue. // 2: DarkGreen. // 3: DarkCyan. // 4: DarkRed. // 5: DarkMagenta. // 6: DarkYellow. // 7: Gray. // 8: DarkGray. // 9: Blue. //10: Green. //11: Cyan. //12: Red. //13: Magenta. //14: Yellow. //15: White. public static void ingame() { //Matrix view = Matrix.LookAtLH(new Vector3(0, 0, -0.00002f), new Vector3(0, 0, 0), Vector3.UnitY); List<structModelFiles> ModelFiles = new List<structModelFiles>(); macamera = new Camera(); HUD hud = new HUD(); Stopwatch clock = new Stopwatch(); clock.Start(); Int64 previous_time = clock.ElapsedTicks; Int64 previous_clignement = clock.ElapsedTicks; Collision.Initialize(); Matrix oldView = macamera.view; Vector3 oldPos = macamera.position; Vector3 oldAngle = macamera.angle; // Préchargement des salles RoomsBuilder RoomsBuilder = new RoomsBuilder(); // MAXIMUM (impossible à otimiser) RoomsBuilder.buildIfRoom(400, new Case(0, Case.CaseType.If, new Point(-1, -1))); RoomsBuilder.buildIfRoom(400, new Case(0, Case.CaseType.If, new Point(-1, -1))); RoomsBuilder.buildIfRoom(400, new Case(0, Case.CaseType.If, new Point(-1, -1))); // MAXIMUM RoomsBuilder.buildLRoom(400, new Case(0, Case.CaseType.L, new Point(-1, -1))); RoomsBuilder.buildLRoom(400, new Case(0, Case.CaseType.L, new Point(-1, -1))); RoomsBuilder.buildLRoom(400, new Case(0, Case.CaseType.L, new Point(-1, -1))); RoomsBuilder.buildLRoom(400, new Case(0, Case.CaseType.L, new Point(-1, -1))); // pas de maximum RoomsBuilder.buildIoRoom(400, new Case(0, Case.CaseType.Io, new Point(-1, -1))); RoomsBuilder.buildIoRoom(400, new Case(0, Case.CaseType.Io, new Point(-1, -1))); RoomsBuilder.buildIoRoom(400, new Case(0, Case.CaseType.Io, new Point(-1, -1))); RoomsBuilder.buildIoRoom(400, new Case(0, Case.CaseType.Io, new Point(-1, -1))); // pas de maximum RoomsBuilder.buildTRoom(400, new Case(0, Case.CaseType.T, new Point(-1, -1))); RoomsBuilder.buildTRoom(400, new Case(0, Case.CaseType.T, new Point(-1, -1))); RoomsBuilder.buildTRoom(400, new Case(0, Case.CaseType.T, new Point(-1, -1))); RoomsBuilder.buildTRoom(400, new Case(0, Case.CaseType.T, new Point(-1, -1))); RoomsBuilder.buildTRoom(400, new Case(0, Case.CaseType.T, new Point(-1, -1))); // pas de maximum RoomsBuilder.buildXRoom(400, new Case(0, Case.CaseType.X, new Point(-1, -1))); RoomsBuilder.buildXRoom(400, new Case(0, Case.CaseType.X, new Point(-1, -1))); // On cache les salles préchargées Program.freeModel(new Point(-1, -1), true, false); // On lance la boucle de rendu RenderLoop.Run(Program.form, () => { Program.device.BeginScene(); if (!MediaPlayer.intro_finished) { MediaPlayer.Intro(); } else if (Menu.IsInMenu) { Cursor.Show(); Program.device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); Menu.InMenu(); } else { Cursor.Hide(); recup_env(); //effect.SetValue("LightPosition", new Vector4(-macamera.position.X, macamera.position.Y, -macamera.position.Z, 1)); /*if (clock.ElapsedTicks - previous_clignement > 100000000) // 1 tick != 100ns (cf diff entre Date et Stopwatch) utiliser Stopwatch.Frequency { //Console.WriteLine(Stopwatch.Frequency); previous_clignement = clock.ElapsedTicks; }*/ oldAngle = macamera.angle; Int64 timer = clock.ElapsedTicks - previous_time; previous_time = clock.ElapsedTicks; macamera.orient_camera(timer); //-------------------------------------------------------- // Died //-------------------------------------------------------- #region died if (kill == false) { if (distanceSlender_var <= 100) { kill = true; if (!Sound.dead.IsAlive) { if (Sound.dead.ThreadState == System.Threading.ThreadState.Stopped) { Sound.soundContinue = true; Sound.dead = new Thread(Sound.bruitpas); } Sound.dead.Start(); } } } if (kill == true) { Time.Start(); if (Time.ElapsedMilliseconds < 500) { macamera.position.Y += (0.000006f * Time.ElapsedMilliseconds) * 70; } else if (Time.ElapsedMilliseconds == 500) { if (stateinflash == 0) { stateinflash = -1; } } else if ((Time.ElapsedMilliseconds > 1500) && (Time.ElapsedMilliseconds < 4650)) { macamera.angle.Z -= (0.00000006f * Time.ElapsedMilliseconds); macamera.angle.Y += 0.00000006f * Time.ElapsedMilliseconds; macamera.position.Y += (0.00000006f * Time.ElapsedMilliseconds) * 70; } else if ((Time.ElapsedMilliseconds > 4650) && (Time.ElapsedMilliseconds < 4700)) { macamera.angle.Z -= (0.0000006f * Time.ElapsedMilliseconds); macamera.position.Y += (0.00000006f * Time.ElapsedMilliseconds) * 70; } else if ((Time.ElapsedMilliseconds > 4700) && (Time.ElapsedMilliseconds < 5200)) { macamera.position.Y += (0.00000006f * Time.ElapsedMilliseconds) * 70; } else if (Time.ElapsedMilliseconds >= 5200) { if (stateinflash == 0) { stateinflash = -1; } //kill = false; Time.Stop(); Time.Reset(); Thread.Sleep(1000); Sound.dead.Abort(); Menu.IsInMenu = true; } } #endregion //-------------------------------------------------------- previous_time = clock.ElapsedTicks; bool collide = Collision.CheckCollisions(macamera.position); //collide = false; if (collide) { macamera.position = oldPos; oldView = Matrix.Translation(oldPos.X, oldPos.Y + (float)Math.Sin(Ingame.sinusoide) / 45f * 70, oldPos.Z) * Matrix.RotationAxis(new Vector3(0, 1, 0), macamera.angle.Y + Ingame.parasitesCamera[0]) * Matrix.RotationAxis(new Vector3(1, 0, 0), macamera.angle.X + Ingame.parasitesCamera[1]) * Matrix.RotationAxis(new Vector3(0, 0, 1), macamera.angle.Z); macamera.view = oldView; } else { oldPos = macamera.position; oldView = macamera.view; } Program.Liste_Lights[0].Position = -Ingame.macamera.position; Program.device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); for (int k = 0; k < Program.Liste_OBJ.Count; k++) { Program.Liste_OBJ[k].effect.SetValue("LightPosition[0]", new Vector4(Program.Liste_Lights[0].Position, 1)); Program.Liste_OBJ[k].effect.SetValue("LightPosition[1]", new Vector4(Program.Liste_Lights[1].Position.X, Program.Liste_Lights[1].Position.Y + 2f, Program.Liste_Lights[1].Position.Z, 1)); Program.Liste_OBJ[k].effect.SetValue("LightDistanceSquared[0]", lightDistanceSquared0calcul); Program.Liste_OBJ[k].effect.SetValue("LightDistanceSquared[1]", lightDistanceSquared1calcul); Program.Liste_OBJ[k].effect.SetValue("percent_Negatif", percent_negatif); Program.Liste_OBJ[k].effect.SetValue("View", macamera.view); Program.Liste_OBJ[k].effect.SetValue("Sepia", Sepia); Program.Liste_OBJ[k].effect.SetValue("luminosity", luminosity); Program.Liste_OBJ[k].effect.Begin(); Program.Liste_OBJ[k].effect.BeginPass(0); Program.Liste_OBJ[k].effect.SetValue("World", Program.Liste_OBJ[k].Transformation); Program.Liste_OBJ[k].effect.SetValue("WorldInverseTranspose", Matrix.Transpose(Matrix.Invert(Program.Liste_OBJ[k].Transformation))); for (int i = 0; i < Program.Liste_OBJ[k].data.Count; i++) { if (Program.Liste_OBJ[k].sera_affiche) { Program.device.SetStreamSource(0, Program.Liste_OBJ[k].data[i].VertexBuffer, 0, Utilities.SizeOf<structVertex>()); Program.device.SetTexture(0, Program.Liste_textures[Program.getTexture(Program.Liste_OBJ[k].data[i].map_Kd)].texture); Program.device.SetTexture(1, Program.Liste_textures[Program.getTexture(Program.Liste_OBJ[k].data[i].map_Ns)].texture); Program.device.DrawPrimitives(PrimType, 0, Program.Liste_OBJ[k].data[i].nbfaces); } } Program.Liste_OBJ[k].effect.EndPass(); Program.Liste_OBJ[k].effect.End(); } hud.Display_HUD(); } Program.device.EndScene(); // Okay Program.device.Present(); }); Cursor.Show(); Menu.Dispose(); hud.Dispose(); for (int k = 0; k < Program.Liste_OBJ.Count; k++) { for (int i = 0; i < Program.Liste_OBJ[k].data.Count; i++) { Program.Liste_OBJ[k].data[i].VertexBuffer.Dispose(); } } foreach (structTexture TextureElt in Program.Liste_textures) { TextureElt.texture.Dispose(); } clock.Stop(); }