Example #1
0
        internal SpinnerFruits(HitObjectManager hom, int startTime, int endTime, HitObjectSoundType soundType)
            : base(hom, startTime, endTime, soundType)
        {
            HitFactoryFruits hitFactoryFruits = hitObjectManager.hitFactory as HitFactoryFruits;

            bool  first = true;
            float var   = (endTime - startTime);

            while (var > 100)
            {
                var /= 2;
            }

            if (var <= 0)
            {
                return;
            }

            int count = 0;

            for (float j = startTime; j <= endTime; j += var)
            {
                HitCircleFruitsSpin f = new HitCircleFruitsSpin(hitObjectManager, new Vector2(hitFactoryFruits.random.Next(0, 512), 0),
                                                                (int)j, first && this.NewCombo, SoundType,
                                                                hitFactoryFruits.GetRandomFruit(), count);
                Fruits.Add(f);

                first = false;
                count++;
            }
        }
        public HitCircleFruitsTick(HitObjectManager hom, Vector2 startPosition, int startTime, bool newCombo, HitObjectSoundType soundType, string fruit)
            : base(hom, startPosition, startTime, newCombo, soundType, "drop")
        {
            SpriteCollection.ForEach(s => s.Scale *= 0.8f);

            HitFactoryFruits hitFactoryFruits = hitObjectManager.hitFactory as HitFactoryFruits;
            float            startRotation    = (float)hitFactoryFruits.random.NextDouble() * 2;

            Transformation rotate = new Transformation(TransformationType.Rotation, startRotation, 0, StartTime - hitObjectManager.PreEmpt, StartTime + 2000);

            rotate.EndFloat = (float)rotate.Duration / 200 + startRotation;

            SpriteCollection.ForEach(s => s.Transformations.Add(rotate));
        }
        public HitCircleFruitsSpin(HitObjectManager hom, Vector2 startPosition, int startTime, bool newCombo, HitObjectSoundType soundType, string fruit, int count)
            : base(hom, startPosition, startTime, newCombo, soundType, fruit)
        {
            HitFactoryFruits hitFactoryFruits = hitObjectManager.hitFactory as HitFactoryFruits;

            float          startScale = (float)hitFactoryFruits.random.NextDouble() * 1.6f + 0.6f;
            Transformation scale      = new Transformation(TransformationType.Scale, startScale, 0.6f, StartTime - hitObjectManager.PreEmpt, StartTime);

            SpriteCollection.ForEach(s => s.Transformations.Add(scale));

            Transformation rotation = new Transformation(TransformationType.Rotation, RNG.NextSingle(-1f, 1f), RNG.NextSingle(-1f, 1f), StartTime - hitObjectManager.PreEmpt, StartTime);

            SpriteCollection.ForEach(s => s.Transformations.Add(rotation));

            if (hitObjectManager.ComboColours.Count > 0)
            {
                base.SetColour(hitObjectManager.ComboColours[hitFactoryFruits.random.Next(0, hitObjectManager.ComboColours.Count)]);
            }

            Type &= ~HitObjectType.NewCombo;

            this.count = count;
        }
Example #4
0
        internal override void UpdateCalculations(bool force = true)
        {
            base.UpdateCalculations(force);

            // We need to abort here, otherwise we will run out of memory by creating too many tiny ticks for this slider.
            if (Length > 60000)
            {
                throw new ArgumentOutOfRangeException("Slider is too long. (Over 1 minute!)");
            }

            bool useCorrectSamplesets = hitObjectManager.Beatmap.PlayMode != PlayModes.CatchTheBeat ||
                                        hitObjectManager.Beatmap.BeatmapVersion >= 14;

            Fruits.Clear();

            HitCircleFruits f1 = new HitCircleFruits(hitObjectManager, Position, StartTime, NewCombo, unifiedSoundAddition ? SoundType : SoundTypeList[0], fruit);

            if (useCorrectSamplesets)
            {
                ApplySamplesets(f1, 0);
            }
            else
            {
                f1.SampleSetAdditions = SampleSetAdditionList.Count > 0 && SampleSetAdditionList[0] != Audio.SampleSet.None ? SampleSetAdditionList[0] : SampleSetAdditions;
            }
            f1.Type |= HitObjectType.NewCombo; //new colour

            Fruits.Add(f1);

            int lastTime = StartTime;

            HitFactoryFruits hitFactoryFruits = hitObjectManager.hitFactory as HitFactoryFruits;

            int fruitIndex = 1;

            for (int i = 0; i < sliderScoreTimingPoints.Count; i++)
            {
                int time = sliderScoreTimingPoints[i];

                if (time - lastTime > 80)
                {
                    float var = (time - lastTime);
                    while (var > 100)
                    {
                        var /= 2;
                    }


                    for (float j = lastTime + var; j < time; j += var)
                    {
                        HitCircleFruitsTickTiny f = new HitCircleFruitsTickTiny(hitObjectManager, PositionAtTime((int)j) + new Vector2(hitFactoryFruits.random.Next(-20, 20), 0), (int)j, false, SoundType, fruit);
                        Fruits.Add(f);
                    }
                }

                lastTime = time;

                if (i < sliderScoreTimingPoints.Count - 1)
                {
                    int repeatLocation = sliderRepeatPoints.BinarySearch(time);

                    if (repeatLocation >= 0)
                    {
                        HitCircleFruits f = new HitCircleFruits(hitObjectManager, repeatLocation % 2 == 1 ? Position : Position2, time, false, unifiedSoundAddition ? SoundType : SoundTypeList[repeatLocation + 1], fruit);
                        if (useCorrectSamplesets)
                        {
                            ApplySamplesets(f, fruitIndex);
                        }
                        Fruits.Add(f);

                        fruitIndex++;
                    }
                    else
                    {
                        HitCircleFruitsTick f = new HitCircleFruitsTick(hitObjectManager, PositionAtTime(time), time, false, SoundType, fruit);
                        Fruits.Add(f);
                    }
                }
            }

            HitCircleFruits f2 = new HitCircleFruits(hitObjectManager, EndPosition, EndTime, false, unifiedSoundAddition ? SoundType : SoundTypeList[SoundTypeList.Count - 1], fruit);

            if (useCorrectSamplesets)
            {
                ApplySamplesets(f2, SampleSetAdditionList.Count - 1);
            }
            else
            {
                f2.SampleSetAdditions = SampleSetAdditionList.Count > 0 && SampleSetAdditionList[1] != Audio.SampleSet.None ? SampleSetAdditionList[1] : SampleSetAdditions;
            }

            Fruits.Add(f2);
        }