Example #1
0
 protected virtual void ExplodeStars(
     Mobile m, FireworkStars fx, Point3D p, int radius, int sound, int[] stars, int[] hues)
 {
     if (m != null && !m.Deleted && fx != FireworkStars.None && stars != null && stars.Length != 0 && !Deleted)
     {
         fx.DoStarsEffect(p, Map, radius, sound, stars, hues);
     }
 }
		protected virtual void ExplodeStars(
			Mobile m, FireworkStars fx, Point3D p, int radius, int sound, int[] stars, int[] hues)
		{
			if (m != null && !m.Deleted && fx != FireworkStars.None && stars != null && stars.Length != 0 && !Deleted)
			{
				fx.DoStarsEffect(p, Map, radius, sound, stars, hues);
			}
		}
Example #3
0
        public static void DoStarsEffect(
            this FireworkStars fx, IPoint3D p, Map map, int radius, int sound, int[] stars, int[] hues)
        {
            if (fx == FireworkStars.None || stars == null || stars.Length == 0)
            {
                return;
            }

            radius = Math.Max(0, Math.Min(10, radius));

            if (hues.Length == 0)
            {
                hues = new int[9];

                hues.SetAll(i => Utility.RandomBrightHue());
            }

            switch (fx)
            {
            case FireworkStars.Peony:
            {
                var shape = new Sphere3D(p, radius, true);

                shape.ForEach(
                    b =>
                    new MovingEffectInfo(
                        p, b, map, stars.GetRandom(), hues.GetRandom(), Utility.RandomMinMax(4, 6), EffectRender.LightenMore)
                    .MovingImpact(
                        e =>
                    {
                        if (sound > 0 && Utility.RandomDouble() <= 0.25)
                        {
                            Effects.PlaySound(b, map, sound);
                        }
                    }));
            }
            break;

            case FireworkStars.Chrysanthemum:
            {
                var shape = new Disc3D(p, radius, false);

                shape.ForEach(
                    b =>
                    new MovingEffectInfo(
                        p, b, map, stars.GetRandom(), hues.GetRandom(), Utility.RandomMinMax(4, 6), EffectRender.LightenMore)
                    .MovingImpact(
                        e =>
                    {
                        if (sound > 0 && Utility.RandomDouble() <= 0.25)
                        {
                            Effects.PlaySound(b, map, sound);
                        }
                    }));
            }
            break;

            case FireworkStars.Dahlia:
            {
                var shape = new Cylendar3D(p, radius, true, false);

                shape.ForEach(
                    b =>
                    new MovingEffectInfo(
                        p, b, map, stars.GetRandom(), hues.GetRandom(), Utility.RandomMinMax(6, 8), EffectRender.LightenMore)
                    .MovingImpact(
                        e =>
                    {
                        if (sound > 0 && Utility.RandomDouble() <= 0.25)
                        {
                            Effects.PlaySound(b, map, sound);
                        }
                    }));
            }
            break;

            case FireworkStars.Willow:
            {
                var shape = new Disc3D(p, radius, true);

                shape.ForEach(
                    b =>
                    new MovingEffectInfo(
                        p, b, map, stars.GetRandom(), hues.GetRandom(), Utility.RandomMinMax(6, 8), EffectRender.LightenMore)
                    .MovingImpact(
                        e =>
                    {
                        if (Utility.RandomDouble() < 0.66)
                        {
                            return;
                        }

                        int zL = b.Z;
                        int zR = b.GetWorldTop(map).Z;

                        if (zL <= zR || zL < p.Z)
                        {
                            return;
                        }

                        int zDiff = zL - zR;

                        if (zDiff < 30)
                        {
                            return;
                        }

                        Point3D t = b.Clone3D(0, 0, -(zDiff / 2));

                        new MovingEffectInfo(b, t, map, e.EffectID, e.Hue, Math.Max(1, e.Speed / 2), e.Render).Send();

                        if (sound > 0 && Utility.RandomDouble() <= 0.25)
                        {
                            Effects.PlaySound(b, map, sound);
                        }
                    }));
            }
            break;

            case FireworkStars.BloomFlower:
            {
                var shape = new Ring3D(p, radius);

                shape.ForEach(
                    b =>
                    new MovingEffectInfo(
                        p, b, map, stars.GetRandom(), hues.GetRandom(), Utility.RandomMinMax(6, 8), EffectRender.LightenMore)
                    .MovingImpact(
                        e =>
                    {
                        if (Utility.RandomDouble() < 0.66)
                        {
                            return;
                        }

                        Point3D t = b.Clone3D(Utility.RandomMinMax(-3, 3), Utility.RandomMinMax(-3, 3), Utility.RandomMinMax(-10, 10));

                        new MovingEffectInfo(b, t, map, e.EffectID, e.Hue, e.Speed, e.Render).Send();

                        if (sound > 0 && Utility.RandomDouble() <= 0.25)
                        {
                            Effects.PlaySound(b, map, sound);
                        }
                    }));
            }
            break;

            case FireworkStars.Ring:
            {
                var shape = new Ring3D(p, radius);

                shape.ForEach(
                    b =>
                    new MovingEffectInfo(
                        p, b, map, stars.GetRandom(), hues.GetRandom(), Utility.RandomMinMax(6, 8), EffectRender.LightenMore)
                    .MovingImpact(
                        e =>
                    {
                        int zL = b.Z;
                        int zR = b.GetWorldTop(map).Z;

                        if (zL <= zR || zL < p.Z)
                        {
                            return;
                        }

                        int zDiff = zL - zR;

                        if (zDiff < 30)
                        {
                            return;
                        }

                        Point3D t = b.Clone3D(0, 0, -(zDiff / 2));

                        new MovingEffectInfo(b, t, map, e.EffectID, e.Hue, 2, e.Render).Send();

                        if (sound > 0 && Utility.RandomDouble() <= 0.25)
                        {
                            Effects.PlaySound(b, map, sound);
                        }
                    }));
            }
            break;

            case FireworkStars.Crossette:
            {
                var shape = new Plane3D(p, radius, true);

                shape.ForEach(
                    b =>
                    new MovingEffectInfo(
                        p, b, map, stars.GetRandom(), hues.GetRandom(), Utility.RandomMinMax(6, 8), EffectRender.LightenMore)
                    .MovingImpact(
                        e =>
                    {
                        if (Utility.RandomDouble() < 0.33)
                        {
                            return;
                        }

                        Point3D t = b.Clone3D(Utility.RandomMinMax(-5, 5), Utility.RandomMinMax(-5, 5));

                        new MovingEffectInfo(b, t, map, e.EffectID, e.Hue, e.Speed, e.Render).Send();

                        if (sound > 0 && Utility.RandomDouble() <= 0.25)
                        {
                            Effects.PlaySound(b, map, sound);
                        }
                    }));
            }
            break;
            }
        }