/// <summary> /// Describe the interraction between player and the levels objects (spikes, slims, doors and keys) /// Is not used if the player is dead /// This function is executed inside of the BackgroundWorker bw_action /// </summary> private void actions() { foreach (PictureBox rect in this.Controls) { switch (rect.Tag) { case "key": if (player.Bounds.IntersectsWith(rect.Bounds) && rect.Enabled != false) { switch (rect.Name) { case "blueKey": blueKey.Taken = true; rect.Location = new Point(275, 30); rect.Tag = "inventory"; break; case "greenKey": greenKey.Taken = true; rect.Location = new Point(345, 30); rect.Tag = "inventory"; break; case "redKey": redKey.Taken = true; rect.Location = new Point(415, 30); rect.Tag = "inventory"; break; case "yellowKey": yellowKey.Taken = true; rect.Location = new Point(485, 30); rect.Tag = "inventory"; break; default: break; } } break; case "door": //remplir l'interaction avec le joueur en fonction des clés en sa possession if (player.Bounds.IntersectsWith(rect.Bounds) && player.Action) { switch (rect.Name) { case "endDoor": //La clé bleue doit toujours être celle de la porte finale if (blueKey.Taken && !endDoor.Open) { endDoor.Open = true; rect.Image = Image.FromFile(Application.StartupPath + @"\res\door.open.png"); player.Action = false; } else if (endDoor.Open) { ClearForm(this, typeof(PictureBox)); //Switch qui permet de lancer le bon niveau en fonction de la porte prise switch (endDoor.Output) { case DoorsOutputs.Level1: Level1(); break; case DoorsOutputs.Level2: Level2(); break; case DoorsOutputs.Level3: Level3(); break; default: break; } } break; default: break; } } break; case "spikes": if (spike.Hurt) { if (player.Right <= rect.Left + rect.Width / 2 + player.Width / 2 && player.Bounds.IntersectsWith(rect.Bounds)) { player.Lifes -= spike.DealDammage(); player.RefillInertia(); player.Jump = true; player.Left -= spike.PushPlayer(); } else if (player.Bounds.IntersectsWith(rect.Bounds)) { player.Lifes -= spike.DealDammage(); player.RefillInertia(); player.Jump = true; player.Left += spike.PushPlayer(); } } break; case "slims": if (player.Bounds.IntersectsWith(rect.Bounds)) { player.Lifes -= slims[0].DealDammage(); player.RefillInertia(); player.Jump = true; } break; default: break; } } }