// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Game.Rulesets.Catch.Objects; using osu.Game.Rulesets.Catch.UI; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.UI; using osuTK; namespace osu.Game.Rulesets.Catch.Mods { public class CatchModFlashlight : ModFlashlight { public override double ScoreMultiplier => 1.12; private const float default_flashlight_size = 350; public override Flashlight CreateFlashlight() => new CatchFlashlight(playfield); private CatchPlayfield playfield; public override void ApplyToDrawableRuleset(DrawableRuleset drawableRuleset) { playfield = (CatchPlayfield)drawableRuleset.Playfield; base.ApplyToDrawableRuleset(drawableRuleset); } private class CatchFlashlight : Flashlight { private readonly CatchPlayfield playfield; public CatchFlashlight(CatchPlayfield playfield) { this.playfield = playfield; FlashlightSize = new Vector2(0, getSizeFor(0)); } protected override void Update() { base.Update(); var catcherArea = playfield.CatcherArea; FlashlightPosition = catcherArea.ToSpaceOfOtherDrawable(catcherArea.MovableCatcher.DrawPosition, this); } private float getSizeFor(int combo) { if (combo > 200) return default_flashlight_size * 0.8f; else if (combo > 100) return default_flashlight_size * 0.9f; else return default_flashlight_size; } protected override void OnComboChange(ValueChangedEvent e) { this.TransformTo(nameof(FlashlightSize), new Vector2(0, getSizeFor(e.NewValue)), FLASHLIGHT_FADE_DURATION); } protected override string FragmentShader => "CircularFlashlight"; } } }