Beispiel #1
0
        private void LoadBulletShield(Enums.AgentType castedBy, MovingAgent agent)
        {
            int   bulletSpeed   = 8;
            float angleModifier = 1.0f; // lower numbers for straight line - higher for wide angle - NOTE: values between 0 and 1 work best

            for (int i = 0; i < 100; i++)
            {
                Bullet bullet = new Bullet();
                bullet.LoadEffect(Texture);
                bullet.Position      = agent.Position + Utils.CalculateRotatedMovement(new Vector2(0, -(agent.FrameHeight / 2)), agent.Rotation);
                bullet.Rotation      = (agent.Rotation - (0.5f * angleModifier)) + (float)random.NextDouble() * angleModifier;
                bullet.MaxSpeed      = bulletSpeed;
                bullet.Color         = innerColor;
                bullet.MinDamage     = MinDamage;
                bullet.MaxDamage     = MaxDamage;
                bullet.CastedBy      = castedBy;
                bullet.HitsRemaining = 1;

                PulseGame.Current.effectComponent.AddEffect(bullet);
            }

            //Game1.Current.EffectComponent.SplitBulletsFromPlayer();

            ActiveCoolDown = CoolDown;
        }
Beispiel #2
0
        private void LoadDefaultExplosion(Enums.AgentType castedBy, MovingAgent agent)
        {
            if (castedBy == Enums.AgentType.Player)
            {
                MouseState mouseStateCurrent = Mouse.GetState();

                Explosion explosion = new Explosion();
                explosion.LoadExplosion(Texture, BoundingRect, Frames);
                explosion.Position          = new Vector2(mouseStateCurrent.X, mouseStateCurrent.Y);
                explosion.AnimationInterval = new TimeSpan(1100000);
                explosion.EffectType        = AttackType;
                explosion.CastedBy          = castedBy;
                explosion.EffectSubType     = Enums.AttackSubType.Default;

                PulseGame.Current.effectComponent.AddEffect(explosion);

                ActiveCoolDown = CoolDown;
            }
            else
            {
                Explosion explosion = new Explosion();
                explosion.LoadExplosion(Texture, BoundingRect, Frames);
                explosion.Position          = PulseGame.Current.player.Position;
                explosion.AnimationInterval = new TimeSpan(1100000);
                explosion.EffectSubType     = Enums.AttackSubType.Default;

                PulseGame.Current.effectComponent.AddEffect(explosion);

                ActiveCoolDown = CoolDown;
            }
        }
Beispiel #3
0
        private void LoadNuke(Enums.AgentType castedBy, MovingAgent agent)//, Color color)
        {
            int   bulletSpeed   = 8;
            float angleModifier = 0.25f; // lower numbers for straight line - higher for wide angle - NOTE: values between 0 and 1 work best

            for (int i = 0; i < 1; i++)
            {
                Random rand  = new Random();
                Color  color = (i % 2 == 0) ? new Color(rand.Next(180, 255), rand.Next(180, 255), rand.Next(180, 255), 255) : new Color(rand.Next(0, 100), rand.Next(0, 100), rand.Next(0, 100), 255);

                Bullet bullet = new Bullet();
                bullet.LoadEffect(Texture);
                bullet.Position      = agent.Position + Utils.CalculateRotatedMovement(new Vector2(0, -(agent.FrameHeight / 2)), agent.Rotation);
                bullet.Rotation      = (agent.Rotation - (0.5f * angleModifier)) + (float)random.NextDouble() * angleModifier;
                bullet.MaxSpeed      = bulletSpeed;
                bullet.Color         = color;
                bullet.MinDamage     = MinDamage;
                bullet.MaxDamage     = MaxDamage;
                bullet.CastedBy      = castedBy;
                bullet.HitsRemaining = 3;
                bullet.EffectSubType = Enums.AttackSubType.Nuke;

                PulseGame.Current.effectComponent.AddEffect(bullet);
            }

            PulseGame.Current.effectComponent.NukeSplit();

            ActiveCoolDown = CoolDown;
        }
Beispiel #4
0
        private void UseTeleport(Enums.AgentType castedBy, MovingAgent agent)
        {
            PulseGame game = PulseGame.Current;

            Vector2 targetPos = new Vector2(game.mouseStateCurrent.X, game.mouseStateCurrent.Y);

            Rectangle targetBounds = new Rectangle
                                     (
                (int)(targetPos.X - (agent.Bounds.Width / 2)),
                (int)(targetPos.Y - (agent.Bounds.Height / 2)),
                agent.Bounds.Width,
                agent.Bounds.Height
                                     );

            if (castedBy == Enums.AgentType.Player)
            {
                List <GameAgent> intersectingAgentList = game.levelInfo.AgentList.Where(ga => ga.Type == (int)Enums.AgentType.Enemy && ga.Bounds.Intersects(targetBounds) && ((Enemy)ga).Health < agent.Health).ToList();

                foreach (GameAgent intersectingAgent in intersectingAgentList)
                {
                    Enemy enemyObj = ((Enemy)intersectingAgent);

                    enemyObj.TakeDamage(enemyObj.Health);
                }
            }

            agent.Position = targetPos;
            agent.Color    = Color.White;

            int   bulletSpeed   = 10;
            float angleModifier = 6.0f; // lower numbers for straight line - higher for wide angle - NOTE: values between 0 and 1 work best

            for (int i = 0; i < 200; i++)
            {
                Bullet bullet = new Bullet();
                bullet.LoadEffect(Texture);
                bullet.Position      = agent.Position + Utils.CalculateRotatedMovement(new Vector2(0, -(agent.FrameHeight / 2)), agent.Rotation);
                bullet.Rotation      = (agent.Rotation - (0.5f * angleModifier)) + (float)random.NextDouble() * angleModifier;
                bullet.MaxSpeed      = bulletSpeed;
                bullet.Color         = Color.Yellow;
                bullet.MinDamage     = MinDamage;
                bullet.MaxDamage     = MaxDamage;
                bullet.CastedBy      = castedBy;
                bullet.HitsRemaining = 1;

                PulseGame.Current.effectComponent.AddEffect(bullet);
            }

            ActiveCoolDown = CoolDown;
        }
Beispiel #5
0
        private void AddAttackToActiveEffects(Enums.AgentType castedBy, MovingAgent agent)
        {
            switch (AttackType)
            {
            case Enums.AttackType.Bullet:

                switch (AttackSubType)
                {
                case Enums.AttackSubType.Default:         LoadDefaultBullet(castedBy, agent);    break;

                case Enums.AttackSubType.TriBullet:       LoadTriBullet(castedBy, agent);        break;

                case Enums.AttackSubType.SplitBullets:    LoadSplitBullets(castedBy, agent);     break;

                case Enums.AttackSubType.Nuke:            LoadNuke(castedBy, agent);             break;

                case Enums.AttackSubType.BulletShield:    LoadBulletShield(castedBy, agent);     break;

                case Enums.AttackSubType.DoubleTriBullet: LoadDoubleTriBullet(castedBy, agent);  break;
                }

                break;

            case Enums.AttackType.Explosion:

                switch (AttackSubType)
                {
                case Enums.AttackSubType.Default:         LoadDefaultExplosion(castedBy, agent); break;

                case Enums.AttackSubType.ReflectingStar:  LoadReflectingStar(castedBy, agent);   break;
                }

                break;

            case Enums.AttackType.MovementEffect:

                switch (AttackSubType)
                {
                case Enums.AttackSubType.Teleport:      UseTeleport(castedBy, agent);          break;
                }

                break;
            }
        }
Beispiel #6
0
        private void LoadReflectingStar(Enums.AgentType castedBy, MovingAgent agent)
        {
            Random rand = new Random();

            int       padding   = 100;
            LevelInfo levelInfo = PulseGame.Current.levelInfo;

            Explosion explosion = new Explosion();

            explosion.LoadExplosion(Texture, BoundingRect, Frames);
            explosion.Position          = new Vector2(rand.Next(padding, 3 * padding), rand.Next(padding, levelInfo.Height - padding));
            explosion.AnimationInterval = new TimeSpan(1100000);
            explosion.EffectSubType     = Enums.AttackSubType.ReflectingStar;
            explosion.CastedBy          = castedBy;

            PulseGame.Current.effectComponent.AddEffect(explosion);

            ActiveCoolDown = CoolDown;
        }
Beispiel #7
0
        private void LoadDoubleTriBullet(Enums.AgentType castedBy, MovingAgent agent)
        {
            //innerColor = Color.Red;
            //outerColor = Color.Orange;

            int   bulletSpeed   = 8;
            float angleModifier = 0.25f; // lower numbers for straight line - higher for wide angle - NOTE: values between 0 and 1 work best

            Vector2 playerPos = PulseGame.Current.player.Position;

            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    Vector2 pos = new Vector2(agent.Position.X, agent.Position.Y + (i == 0 ? -50 : 50)) + Utils.CalculateRotatedMovement(new Vector2(0, -(agent.FrameHeight / 4)), agent.Rotation);

                    Bullet bullet = new Bullet();
                    bullet.LoadEffect(Texture);
                    bullet.Position      = pos;
                    bullet.Rotation      = (Utils.GetRotationToTarget(playerPos, pos) - (0.5f * angleModifier)) + (float)random.NextDouble() * angleModifier;
                    bullet.MaxSpeed      = bulletSpeed;
                    bullet.Color         = innerColor;
                    bullet.MinDamage     = MinDamage;
                    bullet.MaxDamage     = MaxDamage;
                    bullet.CastedBy      = castedBy;
                    bullet.EffectSubType = Enums.AttackSubType.TriBullet;
                    bullet.EffectType    = Enums.AttackType.Bullet;
                    bullet.Color         = (i % 2 == 0) ? new Color(50, 100, 240) : new Color(245, 50, 55); // light blue / light red
                    bullet.HitsRemaining = 1;

                    PulseGame.Current.effectComponent.AddEffect(bullet);
                }
            }

            currentSequence += AttackCost;

            if (currentSequence > MaxSequence)
            {
                Random rand = new Random();
                ActiveCoolDown  = rand.Next(CoolDown);
                currentSequence = 0;
            }
        }
Beispiel #8
0
        private void LoadDefaultBullet(Enums.AgentType castedBy, MovingAgent agent)
        {
            Bullet bullet = new Bullet();

            bullet.LoadEffect(Texture);
            bullet.Position      = agent.Position + Utils.CalculateRotatedMovement(new Vector2(0, -(agent.FrameHeight / 2)), agent.Rotation);
            bullet.Rotation      = agent.Rotation;
            bullet.MaxSpeed      = castedBy == Enums.AgentType.Player ? 8 : 6;
            bullet.Color         = Color;
            bullet.MinDamage     = MinDamage;
            bullet.MaxDamage     = MaxDamage;
            bullet.EffectType    = AttackType;
            bullet.CastedBy      = castedBy;
            bullet.HitsRemaining = 1;

            PulseGame.Current.effectComponent.AddEffect(bullet);

            ActiveCoolDown = CoolDown;
        }
Beispiel #9
0
        private List <Color> GetBulletColorListByAgentType(Enums.AgentType castedBy)
        {
            switch (castedBy)
            {
            case Enums.AgentType.Player:

                return(new List <Color>()
                {
                    Color.AliceBlue,
                    Color.Purple,
                    Color.LightBlue,
                    Color.Blue,
                    Color.LightGreen,
                    Color.Green,
                    Color.WhiteSmoke,
                    Color.White
                });

            case Enums.AgentType.Enemy:

                return(new List <Color>()
                {
                    Color.LightYellow,
                    Color.Yellow,
                    Color.LightGoldenrodYellow,
                    Color.Orange,
                    Color.Pink,
                    Color.Red
                });

            default:

                return(new List <Color>()
                {
                    Color.White,
                    Color.White
                });
            }
        }
Beispiel #10
0
 public void UseAttack(Enums.AgentType castedBy, MovingAgent agent)
 {
     AddAttackToActiveEffects(castedBy, agent);
 }
Beispiel #11
0
        private void LoadSplitBullets(Enums.AgentType castedBy, MovingAgent agent)
        {
            PulseGame.Current.effectComponent.SplitBulletsFromPlayer();

            ActiveCoolDown = CoolDown;
        }
Beispiel #12
0
        private void LoadTriBullet(Enums.AgentType castedBy, MovingAgent agent)
        {
            List <Color> colorList = GetBulletColorListByAgentType(castedBy);

            int colorChangeInterval = 100; // 100 seems like a good interval - 20 to demo

            if (bulletCount > colorChangeInterval * colorList.Count / 2)
            {
                bulletCount = 0;
            }

            innerColor = colorList[(2 * (bulletCount / colorChangeInterval)) % colorList.Count];
            outerColor = colorList[(2 * (bulletCount / colorChangeInterval) + 1) % colorList.Count];

            int   bulletSpeed   = 8;
            float angleModifier = 0.25f; // lower numbers for straight line - higher for wide angle - NOTE: values between 0 and 1 work best

            Bullet bullet = new Bullet();

            bullet.LoadEffect(Texture);
            bullet.Position      = agent.Position + Utils.CalculateRotatedMovement(new Vector2(0, -(agent.FrameHeight / 2)), agent.Rotation);
            bullet.Rotation      = (agent.Rotation - (0.5f * angleModifier)) + (float)random.NextDouble() * angleModifier;
            bullet.MaxSpeed      = bulletSpeed;
            bullet.Color         = innerColor;
            bullet.MinDamage     = MinDamage;
            bullet.MaxDamage     = MaxDamage;
            bullet.CastedBy      = castedBy;
            bullet.EffectSubType = Enums.AttackSubType.TriBullet;
            bullet.HitsRemaining = 1;

            PulseGame.Current.effectComponent.AddEffect(bullet);

            Bullet bullet1 = new Bullet();

            bullet1.LoadEffect(Texture);
            bullet1.Position     = agent.Position + Utils.CalculateRotatedMovement(new Vector2(0, -(agent.FrameHeight / 2)), agent.Rotation);
            bullet1.Rotation     = agent.Rotation - ((float)random.NextDouble() * angleModifier);//0.02f;
            bullet1.MaxSpeed     = bulletSpeed;
            bullet1.Color        = outerColor;
            bullet1.MinDamage    = MinDamage;
            bullet1.MaxDamage    = MaxDamage;
            bullet1.CastedBy     = castedBy;
            bullet.EffectSubType = Enums.AttackSubType.TriBullet;
            bullet.HitsRemaining = 1;

            PulseGame.Current.effectComponent.AddEffect(bullet1);

            Bullet bullet2 = new Bullet();

            bullet2.LoadEffect(Texture);
            bullet2.Position     = agent.Position + Utils.CalculateRotatedMovement(new Vector2(0, -(agent.FrameHeight / 2)), agent.Rotation);
            bullet2.Rotation     = agent.Rotation + ((float)random.NextDouble() * angleModifier);
            bullet2.MaxSpeed     = bulletSpeed;
            bullet2.Color        = outerColor;
            bullet2.MinDamage    = MinDamage;
            bullet2.MaxDamage    = MaxDamage;
            bullet2.CastedBy     = castedBy;
            bullet.EffectSubType = Enums.AttackSubType.TriBullet;
            bullet.HitsRemaining = 1;

            PulseGame.Current.effectComponent.AddEffect(bullet2);

            // change the color set of the bullets
            bulletCount++;

            ActiveCoolDown = CoolDown;
        }