Exemplo n.º 1
0
        /// <summary>
        /// Sets correctly oriented animation and returns number of frames in animation
        /// </summary>
        /// <returns>returns number of frames in animation</returns>
        private static void setAnimation(OurSprite attacker)
        {
            switch (attacker.Orientation)
            {
                case Orientations.Down:
                    if (attacker is Frostbyte.Characters.Mage && (attacker as Frostbyte.Characters.Mage).attackTier == 1)
                    {
                        attacker.SetAnimation(15);
                    }

                    else if (attacker is Frostbyte.Characters.Mage && ((attacker as Frostbyte.Characters.Mage).attackTier == 2 ||
                       (attacker as Frostbyte.Characters.Mage).attackTier == 3))
                    {
                        attacker.SetAnimation(20);
                    }

                    else
                    {
                        attacker.SetAnimation(0 + 5 * attacker.State.GetHashCode());
                    }

                    break;
                case Orientations.Down_Right:
                    attacker.Hflip = false;
                    if (attacker is Frostbyte.Characters.Mage && (attacker as Frostbyte.Characters.Mage).attackTier == 1)
                    {
                        attacker.SetAnimation(16);
                    }

                    else if (attacker is Frostbyte.Characters.Mage && ((attacker as Frostbyte.Characters.Mage).attackTier == 2 ||
                       (attacker as Frostbyte.Characters.Mage).attackTier == 3))
                    {
                        attacker.SetAnimation(21);
                    }

                    else
                    {
                        attacker.SetAnimation(1 + 5 * attacker.State.GetHashCode());
                    }

                    break;
                case Orientations.Down_Left:
                    attacker.Hflip = true;
                    if (attacker is Frostbyte.Characters.Mage && (attacker as Frostbyte.Characters.Mage).attackTier == 1)
                    {
                        attacker.SetAnimation(16);
                    }

                    else if (attacker is Frostbyte.Characters.Mage && ((attacker as Frostbyte.Characters.Mage).attackTier == 2 ||
                       (attacker as Frostbyte.Characters.Mage).attackTier == 3))
                    {
                        attacker.SetAnimation(21);
                    }

                    else
                    {
                        attacker.SetAnimation(1 + 5 * attacker.State.GetHashCode());
                    }

                    break;
                case Orientations.Right:
                    attacker.Hflip = false;
                    if (attacker is Frostbyte.Characters.Mage && (attacker as Frostbyte.Characters.Mage).attackTier == 1)
                    {
                        attacker.SetAnimation(17);
                    }

                    else if (attacker is Frostbyte.Characters.Mage && ((attacker as Frostbyte.Characters.Mage).attackTier == 2 ||
                       (attacker as Frostbyte.Characters.Mage).attackTier == 3))
                    {
                        attacker.SetAnimation(22);
                    }

                    else
                    {
                        attacker.SetAnimation(2 + 5 * attacker.State.GetHashCode());
                    }

                    break;
                case Orientations.Left:
                    attacker.Hflip = true;
                    if (attacker is Frostbyte.Characters.Mage && (attacker as Frostbyte.Characters.Mage).attackTier == 1)
                    {
                        attacker.SetAnimation(17);
                    }

                    else if (attacker is Frostbyte.Characters.Mage && ((attacker as Frostbyte.Characters.Mage).attackTier == 2 ||
                       (attacker as Frostbyte.Characters.Mage).attackTier == 3))
                    {
                        attacker.SetAnimation(22);
                    }

                    else
                    {
                        attacker.SetAnimation(2 + 5 * attacker.State.GetHashCode());
                    }

                    break;
                case Orientations.Up_Right:
                    attacker.Hflip = false;
                    if (attacker is Frostbyte.Characters.Mage && (attacker as Frostbyte.Characters.Mage).attackTier == 1)
                    {
                        attacker.SetAnimation(18);
                    }

                    else if (attacker is Frostbyte.Characters.Mage && ((attacker as Frostbyte.Characters.Mage).attackTier == 2 ||
                       (attacker as Frostbyte.Characters.Mage).attackTier == 3))
                    {
                        attacker.SetAnimation(23);
                    }

                    else
                    {
                        attacker.SetAnimation(3 + 5 * attacker.State.GetHashCode());
                    }

                    break;
                case Orientations.Up_Left:
                    attacker.Hflip = true;
                    if (attacker is Frostbyte.Characters.Mage && (attacker as Frostbyte.Characters.Mage).attackTier == 1)
                    {
                        attacker.SetAnimation(18);
                    }

                    else if (attacker is Frostbyte.Characters.Mage && ((attacker as Frostbyte.Characters.Mage).attackTier == 2 ||
                       (attacker as Frostbyte.Characters.Mage).attackTier == 3))
                    {
                        attacker.SetAnimation(23);
                    }

                    else
                    {
                        attacker.SetAnimation(3 + 5 * attacker.State.GetHashCode());
                    }

                    break;
                case Orientations.Up:
                    if (attacker is Frostbyte.Characters.Mage && (attacker as Frostbyte.Characters.Mage).attackTier == 1)
                    {
                        attacker.SetAnimation(19);
                    }

                    else if (attacker is Frostbyte.Characters.Mage && ((attacker as Frostbyte.Characters.Mage).attackTier == 2 ||
                       (attacker as Frostbyte.Characters.Mage).attackTier == 3))
                    {
                        attacker.SetAnimation(24);
                    }

                    else
                    {
                        attacker.SetAnimation(4 + 5 * attacker.State.GetHashCode());
                    }

                    break;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Performs Poison Vomit attack for Worm
        /// </summary>
        /// <param name="_target">The target for the projectile to attack</param>
        /// <param name="_attacker">The sprite initiating the attack</param>
        /// <param name="_baseDamage">The amount of damage to inflict before constant multiplier for weakness</param>
        /// <param name="_attackFrame">The frame that the attack begins on</param>
        /// <returns>Returns true when finished</returns>
        public static IEnumerable<bool> WormVomit(OurSprite attacker, int animation, int baseDamage, int attackFrame, Element elem = Element.Earth)
        {
            #region Variables
            Level l = This.Game.CurrentLevel;
            Vector2 initialDirection = attacker.Direction;
            attacker.State = SpriteState.Attacking;
            attacker.SetAnimation(animation);
            int FrameCount = attacker.FrameCount();
            TimeSpan attackStartTime = This.gameTime.TotalGameTime;

            Effect particleEffect = l.GetEffect("ParticleSystem");
            Texture2D poison = l.GetTexture("poison");
            ParticleEmitter particleEmitter = new ParticleEmitter(10000, particleEffect, poison);
            particleEmitter.ZOrder = attacker.ZOrder - 1;
            particleEmitter.effectTechnique = "FadeAtXPercent";
            particleEmitter.fadeStartPercent = .98f;
            particleEmitter.blendState = BlendState.Additive;
            (particleEmitter.collisionObjects.First() as Collision_BoundingCircle).Radius = 105;
            (particleEmitter.collisionObjects.First() as Collision_BoundingCircle).createDrawPoints();
            #endregion Variables

            attacker.isAttackAnimDone = false;
            attacker.Rewind();

            while (attacker.Frame < FrameCount && attacker.Frame != attackFrame)
            {
                attacker.State = SpriteState.Attacking;
                attacker.SetAnimation(animation);
                FrameCount = attacker.FrameCount();
                yield return false;
            }

            particleEmitter.GroundPos = attacker.GroundPos + new Vector2(7, -30);

            #region Generate Lightning Strike and Ground Spread and Deal Damage

            if (This.Game.AudioManager.PlaySoundEffect("Effects/Lightning_Strike"))
            {
                yield return false;
            }

            for (int i = 0; i < 100; i++)
            {
                //Deal Damage
                if (5 - i % 15 == 0 && Collision.CollisionData.Count > 0)
                {
                    List<Tuple<CollisionObject, WorldObject, CollisionObject>> collidedWith;
                    Collision.CollisionData.TryGetValue(particleEmitter, out collidedWith);
                    if (collidedWith != null)
                    {
                        foreach (Tuple<CollisionObject, WorldObject, CollisionObject> detectedCollision in collidedWith)
                        {
                            if (((detectedCollision.Item2 is Enemy) && (attacker is Player)) || ((detectedCollision.Item2 is Player) && (attacker is Enemy)))
                            {
                                Damage(attacker, (detectedCollision.Item2 as OurSprite), baseDamage);
                            }
                        }
                    }
                }

                yield return false;
            }

            #endregion Generate Lightning Strike and Ground Spread and Deal Damage
            while (particleEmitter.ActiveParticleCount > 0)
            {
                yield return false;
            }

            particleEmitter.Remove();
            l.RemoveSprite(particleEmitter);
            attacker.particleEmitters.Remove(particleEmitter);

            attacker.isAttackAnimDone = true;

            yield return true;
        }