public Ennemi(Animate textureAnime, Vector2 position, Hero hero, Map map) { this.textureAnime = Ressources.GetPerso(Perso.Choisi).ennemiTextureAnime; this.texture = Ressources.GetPerso(Perso.Choisi).ennemiTexture; this.personnageAnime = Ressources.GetPerso(Perso.Choisi).ennemiAnime; this.positionGlobale = position; this.positionInitiale = position; this.vitesse = hero.vitesse; this.vitesseInitiale = hero.vitesse; this.container = new Rectangle((int)position.X, (int)position.Y, (int)(textureAnime.Texture.Width / textureAnime.Columns), textureAnime.Texture.Height); this.type = TypePerso.Ennemi; this.poids = new Vector2(0, hero.poids.Y); this.force = Vector2.Zero; this.reaction = Vector2.Zero; this.map = map; this.currentObjet = new Objet(); this.hero = hero; ACDC = new Rectangle(0, 0, texture.Width, texture.Height); animate = true; dead = false; font = Ressources.GetPerso(Perso.Choisi).font; #region moteur à particules particleComponent = new ParticleComponent(Ressources.Game); Ressources.Game.Components.Add(particleComponent); Emitter fireEmitter = new Emitter(); fireEmitter.Active = false; fireEmitter.TextureList.Add(Ressources.GetPerso(Perso.Choisi).obstacle); fireEmitter.RandomEmissionInterval = new RandomMinMax(50); fireEmitter.ParticleLifeTime = 9000; fireEmitter.ParticleDirection = new RandomMinMax(270, 300); fireEmitter.ParticleSpeed = new RandomMinMax(10, 20); // g modifié le moteur a particule; fireEmitter.ParticleRotation = new RandomMinMax(0, 180); fireEmitter.RotationSpeed = new RandomMinMax(0.04f); fireEmitter.ParticleFader = new ParticleFader(false, true, 30); fireEmitter.ParticleScaler = new ParticleScaler(0.2f, 0.18f, 0, 100); fireEmitter.Position = new Vector2(400, 650); //******piece********* Emitter desinté_piece = new Emitter(); desinté_piece.Active = false; desinté_piece.TextureList.Add(Ressources.GetPerso(Perso.Choisi).piece); desinté_piece.RandomEmissionInterval = new RandomMinMax(50); desinté_piece.ParticleLifeTime = 9000; desinté_piece.ParticleDirection = new RandomMinMax(270, 300); desinté_piece.ParticleSpeed = new RandomMinMax(10, 20); // g modifié le moteur a particule; desinté_piece.ParticleRotation = new RandomMinMax(0, 180); desinté_piece.RotationSpeed = new RandomMinMax(0.04f); desinté_piece.ParticleFader = new ParticleFader(false, true, 30); desinté_piece.ParticleScaler = new ParticleScaler(1.2f, 0.18f, 0, 100); desinté_piece.Position = new Vector2(400, 650); particleComponent.particleEmitterList.Add(fireEmitter); particleComponent.particleEmitterList.Add(desinté_piece); #endregion }
private void testCollision(Objet objet) { if (!dead && container.Intersects(hero.container)) { dead = true; GameOver.Die(); } //création nouvelle particule Emitter t3 = particleComponent.particleEmitterList[0]; Emitter t4 = particleComponent.particleEmitterList[1]; if (container.Intersects(objet.container)) { //collision bas ennemi if (container.X + container.Width >= objet.container.X && lastPos.Y + container.Height <= objet.container.Y && container.Y + container.Height >= objet.container.Y) { vitesse.Y = 0; positionGlobale.Y = objet.container.Y - container.Height; animate = true; } //collision côté droit ennemi if (map.Objets[(int)(objet.container.X / 45), (int)(objet.container.Y / 45)].type == TypeCase.Terre) { if (container.X + container.Width >= objet.container.X && lastPos.Y + container.Height > objet.container.Y && GameState.State == "inGame") { t3.Active = true; t3.ParticleSpeed = new RandomMinMax(0.6f); float Y = t3.Position.X; Y = Y + 1.5f; t3.Position = new Vector2(positionGlobale.X - camera.Position.X, positionGlobale.Y); map.Objets[(int)(objet.container.X / 45), (int)(objet.container.Y / 45)].texture = Ressources.GetPerso(Perso.Choisi).nulle; //t3.Active = false; } else { t3.Active = false; // activpart = false; } } else { t3.Active = false; // activpart = false; } if (map.Objets[(int)(objet.container.X / 45), (int)(objet.container.Y / 45)].type == TypeCase.Piece) { if (container.X + container.Width >= objet.container.X && lastPos.Y + container.Height > objet.container.Y && GameState.State == "inGame") { t4.Active = true; t4.ParticleSpeed = new RandomMinMax(0.6f); float Y = t3.Position.X; Y = Y + 1.5f; t4.Position = new Vector2(positionGlobale.X - camera.Position.X, positionGlobale.Y); map.Objets[(int)(objet.container.X / 45), (int)(objet.container.Y / 45)].texture = Ressources.GetPerso(Perso.Choisi).nulle; //t3.Active = false; } else { t4.Active = false; // activpart = false; } } else { t4.Active = false; // activpart = false; } } if ((map.Objets[(int)(objet.container.X / 45 + 1), (int)(objet.container.Y / 45)].type == TypeCase.Eau) && (vitesse.Y == 0) && (map.Objets[(int)(objet.container.X / 45 + 4), (int)(objet.container.Y / 45)].type == TypeCase.Eau)) { animate = false; force.Y -= 49000; } else if ((map.Objets[(int)(objet.container.X / 45 + 1), (int)(objet.container.Y / 45)].type == TypeCase.Eau) && (vitesse.Y == 0)) { animate = false; force.Y -= 40000; } }
public void Update(GameTime gameTime, float speed) { float dt = (float)gameTime.ElapsedGameTime.TotalSeconds; personnageAnime.Update(speed); //Animation container = new Rectangle((int)positionGlobale.X, (int)positionGlobale.Y, texture.Width, texture.Height); force.Y = 600; if (hero.acdc) { if (container.Intersects(hero.containerACDC)) { positionGlobale.X = hero.containerACDC.X - texture.Width - 120; hero.acdc = false; } } #region Test cases adjacentes currentObjet = new Objet(); currentObjet.container.Width = 45; currentObjet.container.Height = 45; int posY = (int)(container.Y / 45); int posX = (int)(container.X / 45); for (int i = 0; i <= 2; i++) { for (int j = 0; j <= 4; j++) { int currentX = posX + i; int currentY = posY + j; if (map.Valid(currentX, currentY) && map.Objets[currentX, currentY].type == TypeCase.Terre) { currentObjet.container.X = currentX * 45; currentObjet.container.Y = currentY * 45; testCollision(currentObjet); } } } #endregion Vector2 acceleration = poids + force; //somme des forces = masse * acceleration vitesse += acceleration * dt; positionGlobale += vitesse * dt; lastPos.X = container.X; lastPos.Y = container.Y; }
public void Load() { objets = Ressources.GetPerso(Perso.Choisi).objets; string line; int i = 0, j = 0; while ((line = stream.ReadLine()) != null) { foreach (char chara in line) { Objet objet = new Objet(); objet.position = new Vector2(i * 45, j * 45); objet.container = new Rectangle((int)objet.position.X, (int)objet.position.Y, 45, 45); switch (chara) { case '1': { objet.texture = Ressources.GetPerso(Perso.Choisi).obstacle; objet.type = TypeCase.Terre; break; } case '0': { objet.texture = Ressources.GetPerso(Perso.Choisi).terre; objet.type = TypeCase.Terre; break; } case '7': { objet.texture = Ressources.GetPerso(Perso.Choisi).terre2; objet.type = TypeCase.Terre; break; } case '9': { objet.texture = Ressources.GetPerso(Perso.Choisi).terre1; objet.type = TypeCase.Terre; break; } case '8': { objet.texture = Ressources.GetPerso(Perso.Choisi).sousterre; objet.type = TypeCase.Terre; break; } case '3': { objet.texture = Ressources.GetPerso(Perso.Choisi).nulle; objet.type = TypeCase.Eau; break; } case '2': { ListPiece.Add(new Rectangle((int)objet.position.X, (int)objet.position.Y, (int)objet.container.Width, (int)objet.container.Height)); objet.texture = Ressources.GetPerso(Perso.Choisi).piece; objet.type = TypeCase.Piece; break; } case 'c': { ListBombe.Add(new Rectangle((int)objet.position.X, (int)objet.position.Y, (int)objet.container.Width, (int)objet.container.Height)); objet.texture = Ressources.GetPerso(Perso.Choisi).bombe; objet.type = TypeCase.Bombe; break; } case 'B': { ListBonus.Add(new Rectangle((int)objet.position.X, (int)objet.position.Y, (int)objet.container.Width, (int)objet.container.Height)); objet.texture = Ressources.GetPerso(Perso.Choisi).bonus; objet.type = TypeCase.Bonus; break; } case 'A': { ListACDC.Add(new Rectangle((int)objet.position.X, (int)objet.position.Y, (int)objet.container.Width, (int)objet.container.Height)); objet.texture = Ressources.Content.Load<Texture2D>("ACDCmap"); objet.type = TypeCase.ACDC; break; } default: { objet.texture = Ressources.GetPerso(Perso.Choisi).nulle; objet.type = TypeCase.Null; break; } } objets[i, j] = objet; i++; } i = 0; j++; } }
public Hero(Animate textureAnime, Vector2 position, Vector2 vitesse, float poids, Map map) { this.texture = Ressources.GetPerso(Perso.Choisi).heroTexture; this.textureAnime = Ressources.GetPerso(Perso.Choisi).heroTextureAnime; this.textureDown = Ressources.GetPerso(Perso.Choisi).heroTextureDown; this.personnageAnime = Ressources.GetPerso(Perso.Choisi).heroAnime; this.positionGlobale = position; this.positionInitiale = position; this.vitesse = vitesse; this.vitesseInitiale = vitesse; this.type = TypePerso.Hero; this.poids = new Vector2(0, poids); this.force = Vector2.Zero; this.reaction = Vector2.Zero; this.map = map; containerDown = new Rectangle((int)positionGlobale.X, (int)positionGlobale.Y + texture.Height - textureDown.Height, textureDown.Width, textureDown.Height); containerUp = new Rectangle((int)positionGlobale.X, (int)positionGlobale.Y, texture.Width, texture.Height); this.container = containerUp; down = false; acdcTexture = Ressources.Content.Load<Texture2D>("ACDC"); containerACDC = new Rectangle((int)positionGlobale.X - acdcTexture.Width, (int)positionGlobale.Y, acdcTexture.Width, acdcTexture.Height); acdc = false; currentObjet = new Objet(); animate = true; random = new Random(); bonusVitesse = false; dead = false; win = false; superman = Ressources.Content.Load<Texture2D>("superman"); font = Ressources.GetPerso(Perso.Choisi).font; //moteur à particule pour la bombe #region Moteur a particules Emitter.statut = true; particleComponent = new ParticleComponent(Ressources.Game); Ressources.Game.Components.Add(particleComponent); bombe.Active = false; bombe.TextureList.Add(Ressources.Content.Load<Texture2D>("fire")); bombe.RandomEmissionInterval = new RandomMinMax(2.0d); bombe.ParticleLifeTime = 2000; bombe.ParticleDirection = new RandomMinMax(0, 359); bombe.ParticleSpeed = new RandomMinMax(0.1f, 1.0f); bombe.ParticleRotation = new RandomMinMax(0, 100); bombe.RotationSpeed = new RandomMinMax(0.015f); bombe.ParticleFader = new ParticleFader(false, true, 1350); bombe.ParticleScaler = new ParticleScaler(false, 0.3f); bombe.Position = new Vector2(400, 400); particleComponent.particleEmitterList.Add(bombe); //***************fumée************************** smokeEmitter.Active = false; smokeEmitter.TextureList.Add(Ressources.Content.Load<Texture2D>("smoke")); smokeEmitter.RandomEmissionInterval = new RandomMinMax(100); smokeEmitter.ParticleLifeTime = 9000; smokeEmitter.ParticleDirection = new RandomMinMax(-5, 5); smokeEmitter.ParticleSpeed = new RandomMinMax(0.6f); smokeEmitter.ParticleRotation = new RandomMinMax(0); smokeEmitter.RotationSpeed = new RandomMinMax(-0.008f, 0.008f); smokeEmitter.ParticleFader = new ParticleFader(true, true); smokeEmitter.ParticleScaler = new ParticleScaler(0.15f, 0.7f, 400, smokeEmitter.ParticleLifeTime); smokeEmitter.Position = new Vector2(0, 0); particleComponent.particleEmitterList.Add(smokeEmitter); //********************************************* //******************************************* // **** neige***************** testEmitter2.Active = false; testEmitter2.TextureList.Add(Ressources.Content.Load<Texture2D>("raindrop")); testEmitter2.RandomEmissionInterval = new RandomMinMax(9.0d); testEmitter2.ParticleLifeTime = 1000; testEmitter2.ParticleDirection = new RandomMinMax(170); testEmitter2.ParticleSpeed = new RandomMinMax(5.0f); testEmitter2.ParticleRotation = new RandomMinMax(0); testEmitter2.RotationSpeed = new RandomMinMax(0f); testEmitter2.ParticleFader = new ParticleFader(false, true, 800); testEmitter2.ParticleScaler = new ParticleScaler(false, 1.0f); testEmitter2.Opacity = 255; particleComponent.particleEmitterList.Add(testEmitter2); //************************** #endregion }
private void testCollision(Objet objet) { if (container.Intersects(objet.container)) { //collision haut hero if (lastPos.Y > objet.container.Y + objet.container.Height && (container.X >= objet.container.X || container.X <= objet.container.X + objet.container.Width) && container.Y <= objet.container.Y + objet.container.Height) { vitesse.Y = 150; positionGlobale.Y = objet.container.Y + objet.container.Height;//à revoir. } else if (lastPos.Y + container.Height > objet.container.Y && container.X + container.Width >= objet.container.X && lastPos.X + container.Width > objet.container.X) { bonusVitesse = false; positionGlobale.X = objet.container.X - container.Width; } //collision bas hero if (lastPos.Y + container.Height <= objet.container.Y && (container.X >= objet.container.X || container.X <= objet.container.X + objet.container.Width) && container.Y + container.Height >= objet.container.Y) { vitesse.Y = 0; positionGlobale.Y = objet.container.Y - containerUp.Height; animate = true; } } }
public void Update(GameTime gameTime, float speed) { if (Perso.Choisi == "roumain")//&& particleComponent.particleEmitterList.Count != 0) particleComponent.particleEmitterList[2].Active = true; float dt = (float)gameTime.ElapsedGameTime.TotalSeconds; personnageAnime.Update(speed); //Animation //container pour le personnage a l'horisontale containerDown = new Rectangle((int)positionGlobale.X, (int)positionGlobale.Y + texture.Height - textureDown.Height, textureDown.Width, textureDown.Height); //container pour le personnage debout containerUp = new Rectangle((int)positionGlobale.X, (int)positionGlobale.Y, texture.Width - 10, texture.Height); if (down) container = containerDown; else container = containerUp; //force pour equilibre force.Y = 500; containerACDC = new Rectangle((int)positionGlobale.X - acdcTexture.Width + 20, (int)positionGlobale.Y - 10, acdcTexture.Width, acdcTexture.Height); #region Test collision ACDC for (int i = 0; i < Map.ListACDC.Count; i++) { if (container.Intersects(Map.ListACDC[i])) { map.Objets[Map.ListACDC[i].X / 45, Map.ListACDC[i].Y / 45] = map.Objets[1, 1]; Map.ListACDC[i] = new Rectangle(0, 0, 45, 45); acdc = true; } } #endregion #region Test collision Bonus for (int i = 0; i < Map.ListBonus.Count; i++) { if (container.Intersects(Map.ListBonus[i])) { map.Objets[Map.ListBonus[i].X / 45, Map.ListBonus[i].Y / 45] = map.Objets[1, 1]; Map.ListBonus[i] = new Rectangle(0, 0, 45, 45); AudioRessources.wingold.Play(AudioRessources.volume, 0f, 0f); Bonus.Execute(random.Next(0, 4), ref bonusVitesse); random = new Random(); t0 = Convert.ToInt32(gameTime.TotalGameTime.TotalSeconds); } } #endregion #region Bonus Vitesse if (bonusVitesse) { t1 = Convert.ToInt32(gameTime.TotalGameTime.TotalSeconds); AudioRessources.wingold.Play(AudioRessources.volume, 0f, 0f); positionGlobale.X += 10; if (ennemi != null) ennemi.positionGlobale.X += 9; if (t1 - t0 > 10) bonusVitesse = false; } #endregion #region Test collision pièce for (int i = 0; i < Map.ListPiece.Count; i++) { if (container.Intersects(Map.ListPiece[i])) { map.Objets[Map.ListPiece[i].X / 45, Map.ListPiece[i].Y / 45] = map.Objets[1, 1]; Map.ListPiece[i] = new Rectangle(0, 0, 45, 45); AudioRessources.wingold.Play(AudioRessources.volume, 0f, 0f); //score mis à jour Statistiques.Score++; //MOTEUR A PARTICULES A METTRE ICI } } #endregion currentObjet = new Objet(); currentObjet.container.Width = 45; currentObjet.container.Height = 45; int posY = (int)(container.Y / 45); int posX = (int)(container.X / 45); if (down) { #region Test cases adjacentes Down for (int i = 0; i <= 4; i++) { for (int j = 0; j <= 2; j++) { int currentX = posX + i; int currentY = posY + j; if (map.Valid(currentX, currentY) && map.Objets[currentX, currentY].type == TypeCase.Terre) { currentObjet.container.X = currentX * 45; currentObjet.container.Y = currentY * 45; testCollision(currentObjet); //map.Objets[currentX, currentY].texture = Ressources.GetPerso(Perso.Choisi).barregreencenter; } } } #endregion } else { #region Test cases adjacentes Up for (int i = 0; i <= 2; i++) { for (int j = 0; j <= 4; j++) { int currentX = posX + i; int currentY = posY + j; if (map.Valid(currentX, currentY) && map.Objets[currentX, currentY].type == TypeCase.Terre) { currentObjet.container.X = currentX * 45; currentObjet.container.Y = currentY * 45; testCollision(currentObjet); //map.Objets[currentX, currentY].texture = Ressources.GetPerso(Perso.Choisi).barregreencenter; } } } #endregion } #region Test Bombe + Moteur à particules Emitter bomb = particleComponent.particleEmitterList[0]; Emitter fum = particleComponent.particleEmitterList[1]; if (!explosion) { for (int i = 0; i < Map.ListBombe.Count; i++) { if (container.Intersects(Map.ListBombe[i])) { AudioRessources.getbomb.Play(AudioRessources.volume, 0f, 0f); tfloat1 = gameTime.TotalGameTime.TotalMilliseconds; Emitter.bombe = true; bomb.Active = true; bomb.ParticleSpeed = new RandomMinMax(0.6f); float Y = bomb.Position.X; Y = Y + 1.5f; bomb.Position = new Vector2(positionGlobale.X - ennemi.camera.Position.X + 50, positionGlobale.Y + 20); vitesse.X = 0; ennemi.vitesse.X = 0; explosion = true; //t3.Active = false; } else { Emitter.bombe = false; bomb.Active = false; // activpart = false; } } } else { tfloat2 = gameTime.TotalGameTime.TotalMilliseconds; if (tfloat2 - tfloat1 > 0.8f) { bomb.Active = false; if (!dead) { dead = true; GameOver.Die(); } fum.Active = true; fum.Position = new Vector2(positionGlobale.X - ennemi.camera.Position.X + 50, positionGlobale.Y + 20); if (fum.EmittedNewParticle) { float f = MathHelper.ToRadians(fum.LastEmittedParticle.Direction + 180); fum.LastEmittedParticle.Rotation = f; } } else if ((tfloat2 - tfloat1 > 0.5f)) { fum.Active = true; fum.Position = new Vector2(positionGlobale.X - ennemi.camera.Position.X + 50, positionGlobale.Y + 20); if (fum.EmittedNewParticle) { float f = MathHelper.ToRadians(fum.LastEmittedParticle.Direction + 180); fum.LastEmittedParticle.Rotation = f; } } } #endregion #region moteur à particules Neige if (Perso.Choisi == "roumain") { particleComponent.particleEmitterList[2].Active = true; Emitter t2 = particleComponent.particleEmitterList[2]; t2.Position = new Vector2((float)random.NextDouble() * (1280), 0); if (t2.EmittedNewParticle) { float f = MathHelper.ToRadians(t2.LastEmittedParticle.Direction + 180); t2.LastEmittedParticle.Rotation = f; } } #endregion #region Keyboard Input /* if (KB.New.IsKeyDown(Keys.Left)) positionGlobale.X -= 5; if (KB.New.IsKeyDown(Keys.Right)) positionGlobale.X += 5; if (KB.New.IsKeyDown(Keys.Up)) positionGlobale.Y -= 1; if (KB.New.IsKeyDown(Keys.Down)) positionGlobale.Y += 1; */ if (KB.New.IsKeyDown(Keys.Up) && vitesse.Y == 0) { force.Y -= 26000; animate = false; } if (KB.New.IsKeyDown(Keys.Down) && vitesse.Y == 0) { down = true; } if (KB.New.IsKeyUp(Keys.Down)) { down = false; } #endregion Vector2 acceleration = poids + force; //somme des forces = masse * acceleration vitesse += acceleration * dt; positionGlobale += vitesse * dt; //mise à jour de la position d'avant lastPos.X = container.X; lastPos.Y = container.Y; if (positionGlobale.X >= 42345) { if (!dead && GameState.State == "inGame") { dead = true; win = true; GameOver.Die(); } else if (GameState.State == "multiInGame") { GameState.State = "multiGameOver"; } } if (positionGlobale.Y >= 800) { particleComponent.particleEmitterList[2].Active = false; if (!dead && GameState.State == "inGame") { dead = true; GameOver.Die(); } else if (GameState.State == "multiInGame") { GameState.State = "multiGameOver"; } } }