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; }
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); }