/// <summary> /// Recicla uma bala que é necessária para o jogo /// </summary> /// <param name="assetname">Nome da textura a utilizar</param> /// <param name="direcao">Direção do ecrã em que a bala se movimenta</param> /// <param name="origemBala">Entidade que originou a bala</param> /// <param name="direcaoBala">Tipo de bala - Em frente, cima ou baixo</param> /// <param name="parent">Turret que disparou a bala</param> /// <returns>Uma bala reciclada</returns> public static Bala addBala(string assetname, int direcao, OrigemBala origemBala, DireccaoBala direcaoBala, Defence parent = null) { balaTemp = balasMortas.First(); if (assetname == "balaplayer") { balaTemp.image = balaplayer; } else if (assetname == "baladefesas") { balaTemp.image = baladefesas; } else { balaTemp.image = balainimigo; } balaTemp.parent = parent; vectorTemp.X = 1f; vectorTemp.Y = (float)balaTemp.image.Height / (float)balaTemp.image.Width; balaTemp.size = vectorTemp; balaTemp.spriteEffects = direcao > 0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; balaTemp.direccao = direcao; balaTemp.origemBala = origemBala; balaTemp.direccaobala = direcaoBala; balaTemp.direction = Vector2.Zero; balasAtivas.Add(balaTemp); balasMortas.Remove(balaTemp); return(balaTemp); }
/// <summary> /// Construtor do Missil /// </summary> /// <param name="contents">Instância de ContenteManager</param> /// <param name="assetName">Nome da textura a utilizar</param> /// <param name="tipoMissil">Tipo de missil - simples ou teleguiado</param> /// <param name="direccao">Direção do ecrã em que o missil se desloca</param> /// <param name="origemBala">Entidade que originou o missil</param> /// <param name="alvo">Alvo a atingir</param> public Missil(ContentManager contents, string assetName, TipoMissil tipoMissil, int direccao, OrigemBala origemBala, FlyingEntity alvo = null) : base(contents, assetName) { base.spriteEffects = direccao > 0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; this.tipoMissil = tipoMissil; this.speed = Camera.velocidadegeral * 5; this.speedInicial = this.speed; this.aceleracao = this.speed / 20; this.direccao = direccao; this.alvo = alvo; this.passouPeloAlvo = false; this.origemBala = origemBala; this.EnableCollisions(); }
/// <summary> ///Construtor da classe "Bala". ///É responsavável por todas as variáveis que definem uma bala /// </summary> /// <param name="contents">Instâcia de ContentManager</param> /// <param name="assetName">Nome da textura da bala</param> /// <param name="direccao">Direção do ecrã em que a bala se move</param> /// <param name="origemBala">Entidade que disparou a bala</param> /// <param name="direccaobala">Tipo de bala - frente, cima, baixo</param> /// <param name="parent">Turret que originou a bala</param> public Bala(ContentManager contents, string assetName, int direccao, OrigemBala origemBala, DireccaoBala direccaobala, Defence parent = null) : base(contents, assetName) { base.spriteEffects = direccao > 0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; this.speed = Camera.velocidadegeral; this.direccaobala = direccaobala; this.direccao = direccao; this.origemBala = origemBala; this.parent = parent; direction = Vector2.Zero; this.EnableCollisions(); //else //{ // som.playTiroEnimigo(contents); //} }
/// <summary> /// Verifica a existência de colisões pixel a pixel /// </summary> /// <param name="cManager">Instância de ContentManager</param> /// <param name="scene">Instância de scene</param> /// <param name="sprite">Sprite a verificar</param> /// <param name="origemBala">Entidade que deu origem à bala</param> static public void Colision(ContentManager cManager, Scene scene, Sprite sprite, OrigemBala origemBala) { //Colisao com enimigos if (scene.Collides(sprite, out collided, out collisionPoint, scene.inimigos)) { if (origemBala == OrigemBala.player) { if (sprite is Missil) { Missil missil = (Missil)sprite; missil.thrust.Destroy(); missil.Destroy(); } //cria explosao scene.AddExplosao(new AnimatedSprite(cManager, "explosao", 9, 9, false, sprite.position, 0.2f)); if (collided is NPC) { NPC inimigo = (NPC)collided; if (sprite is Missil) { scene.AddExplosao(new AnimatedSprite(cManager, "explosao", 9, 9, false, sprite.position, 0.9f)); inimigo.Destroy(); } else { inimigo.Vida--; } } if (collided is Boss) { Boss boss = (Boss)collided; if (sprite is Missil) { scene.AddExplosao(new AnimatedSprite(cManager, "explosao", 9, 9, false, sprite.position, 0.9f)); boss.Vida -= 10; } else { boss.Vida--; } } sprite.Destroy(); } if (collided is Missil) { Missil missil = (Missil)collided; scene.AddExplosao(new AnimatedSprite(cManager, "explosao", 9, 9, false, sprite.position, 0.2f)); if (missil.thrust != null) { missil.thrust.Destroy(); } missil.Destroy(); } } if (scene.Collides(sprite, out collided, out collisionPoint, scene.sprites)) { if (collided is Cenario && sprite is Bala) { scene.AddExplosao(new AnimatedSprite(cManager, "explosao", 9, 9, false, sprite.position, 0.2f)); } if (collided is Player) { Player player = (Player)collided; if (sprite is Missil) { Missil missil = (Missil)sprite; missil.thrust.Destroy(); missil.Destroy(); player.Vida -= 2; scene.AddExplosao(new AnimatedSprite(cManager, "explosao", 9, 9, false, sprite.position, 0.4f)); } else { player.Vida--; scene.AddExplosao(new AnimatedSprite(cManager, "explosao", 9, 9, false, sprite.position, 0.2f)); } } if (!(collided is Bala)) { sprite.Destroy(); } } }
/// <summary> /// Recicla um missil que é necessário para o jogo /// </summary> /// <param name="assetname">Textura do missil a utilizar</param> /// <param name="tipoMissil">Tipo de missil - inimigo ou jogador</param> /// <param name="direcao">Direção do ecrã em que o missil se move</param> /// <param name="origemBala">Entidade que originou o missil</param> /// <param name="alvo">Alvo do missil teleguiado</param> /// <returns>Missil reciclado</returns> public static Missil addMissil(string assetname, TipoMissil tipoMissil, int direcao, OrigemBala origemBala, FlyingEntity alvo = null) { missilTemp = misseisMortos.First(); if (assetname == "missilPlayer") { missilTemp.image = missilplayer; } else { missilTemp.image = missilinimigo; } vectorTemp.X = 1f; vectorTemp.Y = (float)missilTemp.image.Height / (float)missilTemp.image.Width; missilTemp.size = vectorTemp; missilTemp.spriteEffects = direcao > 0 ? SpriteEffects.None : SpriteEffects.FlipHorizontally; missilTemp.tipoMissil = tipoMissil; missilTemp.direccao = direcao; missilTemp.alvo = alvo; missilTemp.origemBala = origemBala; misseisAtivos.Add(missilTemp); misseisMortos.Remove(missilTemp); return(missilTemp); }