コード例 #1
0
        public void ApplyToHitRenderer(ManiaHitRenderer hitRenderer, ref List <SpeedAdjustmentContainer>[] hitObjectTimingChanges, ref List <SpeedAdjustmentContainer> barlineTimingChanges)
        {
            // We have to generate one speed adjustment per hit object for gravity
            foreach (ManiaHitObject obj in hitRenderer.Objects)
            {
                MultiplierControlPoint controlPoint = hitRenderer.CreateControlPointAt(obj.StartTime);
                // Beat length has too large of an effect for gravity, so we'll force it to a constant value for now
                controlPoint.TimingPoint.BeatLength = 1000;

                hitObjectTimingChanges[obj.Column].Add(new ManiaSpeedAdjustmentContainer(controlPoint, ScrollingAlgorithm.Gravity));
            }

            // Like with hit objects, we need to generate one speed adjustment per bar line
            foreach (DrawableBarLine barLine in hitRenderer.BarLines)
            {
                var controlPoint = hitRenderer.CreateControlPointAt(barLine.HitObject.StartTime);
                // Beat length has too large of an effect for gravity, so we'll force it to a constant value for now
                controlPoint.TimingPoint.BeatLength = 1000;

                barlineTimingChanges.Add(new ManiaSpeedAdjustmentContainer(controlPoint, ScrollingAlgorithm.Gravity));
            }
        }
コード例 #2
0
        protected override void Load(BaseGame game)
        {
            base.Load(game);

            try
            {
                if (Beatmap == null)
                {
                    Beatmap = ((OsuGame)game).Beatmaps.GetWorkingBeatmap(BeatmapInfo);
                }
            }
            catch
            {
                //couldn't load, hard abort!
                Exit();
                return;
            }

            AudioTrack track = Beatmap.Track;

            if (track != null)
            {
                game.Audio.Track.SetExclusive(track);
                sourceClock = track;
            }

            sourceClock = (IAdjustableClock)track ?? new StopwatchClock();
            playerClock = new InterpolatingFramedClock(sourceClock);

            Schedule(() =>
            {
                sourceClock.Reset();
                sourceClock.Start();
            });

            HitRenderer  hitRenderer;
            ScoreOverlay scoreOverlay;

            var beatmap = Beatmap.Beatmap;

            if (beatmap.BeatmapInfo?.Mode > PlayMode.Osu)
            {
                //we only support osu! mode for now because the hitobject parsing is crappy and needs a refactor.
                Exit();
                return;
            }

            PlayMode usablePlayMode = beatmap.BeatmapInfo?.Mode > PlayMode.Osu ? beatmap.BeatmapInfo.Mode : PreferredPlayMode;

            switch (usablePlayMode)
            {
            default:
                scoreOverlay = new ScoreOverlayOsu();

                hitRenderer = new OsuHitRenderer
                {
                    Objects = beatmap.HitObjects,
                    Anchor  = Anchor.Centre,
                    Origin  = Anchor.Centre
                };
                break;

            case PlayMode.Taiko:
                scoreOverlay = new ScoreOverlayOsu();

                hitRenderer = new TaikoHitRenderer
                {
                    Objects = beatmap.HitObjects,
                    Anchor  = Anchor.Centre,
                    Origin  = Anchor.Centre
                };
                break;

            case PlayMode.Catch:
                scoreOverlay = new ScoreOverlayOsu();

                hitRenderer = new CatchHitRenderer
                {
                    Objects = beatmap.HitObjects,
                    Anchor  = Anchor.Centre,
                    Origin  = Anchor.Centre
                };
                break;

            case PlayMode.Mania:
                scoreOverlay = new ScoreOverlayOsu();

                hitRenderer = new ManiaHitRenderer
                {
                    Objects = beatmap.HitObjects,
                    Anchor  = Anchor.Centre,
                    Origin  = Anchor.Centre
                };
                break;
            }

            hitRenderer.OnHit  += delegate(HitObject h) { scoreOverlay.OnHit(h); };
            hitRenderer.OnMiss += delegate(HitObject h) { scoreOverlay.OnMiss(h); };

            if (autoplay)
            {
                hitRenderer.Schedule(() => hitRenderer.DrawableObjects.ForEach(h => h.State = ArmedState.Armed));
            }

            Children = new Drawable[]
            {
                hitRenderer,
                scoreOverlay,
            };
        }
コード例 #3
0
        public override void Load(BaseGame game)
        {
            base.Load(game);

            try
            {
                if (Beatmap == null)
                {
                    Beatmap = ((OsuGame)game).Beatmaps.GetBeatmap(BeatmapInfo);
                }
            }
            catch
            {
                //couldn't load, hard abort!
                Exit();
                return;
            }

            HitRenderer  hitRenderer;
            ScoreOverlay scoreOverlay;

            switch (PlayMode)
            {
            default:
                scoreOverlay = new ScoreOverlayOsu();

                hitRenderer = new OsuHitRenderer
                {
                    Objects = Beatmap.HitObjects,
                    Anchor  = Anchor.Centre,
                    Origin  = Anchor.Centre
                };
                break;

            case PlayMode.Taiko:
                scoreOverlay = new ScoreOverlayOsu();

                hitRenderer = new TaikoHitRenderer
                {
                    Objects = Beatmap.HitObjects,
                    Anchor  = Anchor.Centre,
                    Origin  = Anchor.Centre
                };
                break;

            case PlayMode.Catch:
                scoreOverlay = new ScoreOverlayOsu();

                hitRenderer = new CatchHitRenderer
                {
                    Objects = Beatmap.HitObjects,
                    Anchor  = Anchor.Centre,
                    Origin  = Anchor.Centre
                };
                break;

            case PlayMode.Mania:
                scoreOverlay = new ScoreOverlayOsu();

                hitRenderer = new ManiaHitRenderer
                {
                    Objects = Beatmap.HitObjects,
                    Anchor  = Anchor.Centre,
                    Origin  = Anchor.Centre
                };
                break;
            }

            hitRenderer.OnHit  += delegate(HitObject h) { scoreOverlay.OnHit(h); };
            hitRenderer.OnMiss += delegate(HitObject h) { scoreOverlay.OnMiss(h); };

            Children = new Drawable[]
            {
                hitRenderer,
                scoreOverlay,
            };
        }