예제 #1
0
        private void InputManager_OnDown(InputSource source, TrackingPoint trackingPoint)
        {
            pRectangle rect = new pRectangle(Vector2.Zero, new Vector2(GameBase.NativeSize.Width, GameBase.NativeSize.Height), false, 0.2f, Color4.White);

            rect.FadeOutFromOne(500);
            spriteManager.Add(rect);

            pointAt(trackingPoint.BasePosition / GameBase.InputToFixedWidthAlign);
        }
예제 #2
0
        public ProgressDisplay()
        {
            progressRectBg        = new pRectangle(Vector2.Zero, new Vector2(GameBase.BaseSize.X, HEIGHT), true, 0.99f, Color4.Black);
            progressRectBg.Field  = FieldTypes.StandardSnapBottomLeft;
            progressRectBg.Origin = OriginTypes.BottomLeft;
            Add(progressRectBg);

            progressRect          = new pRectangle(Vector2.Zero, new Vector2(0, HEIGHT - 1), true, 1, gray_colour);
            progressRect.Field    = FieldTypes.StandardSnapBottomLeft;
            progressRect.Origin   = OriginTypes.BottomLeft;
            progressRect.Additive = true;
            Add(progressRect);
        }
예제 #3
0
        internal void SetProgress(float progress, ScoreChange latestChange)
        {
            progressRect.Scale.X = GameBase.BaseSize.X * (progress - lastProgressStart);

            if (latestChange != lastDisplayedChange)
            {
                lastDisplayedChange = latestChange;

                Color4 displayColour = gray_colour;

                float heightMultiplier = 1;

                switch (lastDisplayedChange)
                {
                case ScoreChange.Hit300:
                    displayColour = new Color4(255, 156, 55, 255);
                    break;

                case ScoreChange.Hit100:
                    displayColour    = new Color4(117, 204, 65, 255);
                    heightMultiplier = 0.9f;
                    break;

                case ScoreChange.Hit50:
                    displayColour    = new Color4(118, 65, 143, 255);
                    heightMultiplier = 0.8f;
                    break;

                case ScoreChange.Miss:
                    displayColour    = new Color4(144, 0, 16, 255);
                    heightMultiplier = 0.7f;
                    break;
                }

                progressRect.FlashColour(Color4.White, 1000);
                //progressRect.Transform(new TransformationV(TransformationType.VectorScale, new Vector2(progressRect.Scale.X, progressRect.Scale.Y * 2), progressRect.Scale, Clock.ModeTime, Clock.ModeTime + 1000, EasingTypes.In));

                progressRect        = new pRectangle(new Vector2(progressRect.Scale.X + progressRect.Position.X, 0), new Vector2(0, HEIGHT * heightMultiplier - 1), true, 1, displayColour);
                progressRect.Field  = FieldTypes.StandardSnapBottomLeft;
                progressRect.Origin = OriginTypes.BottomLeft;
                Add(progressRect);

                lastProgressStart = progress;
            }
        }
예제 #4
0
        public override void Initialize()
        {
            mb             = new MenuBackground();
            mb.DrawDepth   = 0.1f;
            mb.Position    = new Vector2(440, -230);
            mb.ScaleScalar = 0.5f;

            osuLogo             = new pSprite(TextureManager.Load(OsuTexture.menu_osu), FieldTypes.StandardSnapCentre, OriginTypes.Centre, ClockTypes.Mode, new Vector2(0, 0), 0.9f, true, Color4.White);
            osuLogo.ScaleScalar = 0.7f;
            mb.Add(osuLogo);

            //gloss
            osuLogoGloss             = new pSprite(TextureManager.Load(OsuTexture.menu_gloss), FieldTypes.StandardSnapCentre, OriginTypes.Centre, ClockTypes.Mode, new Vector2(0, 0), 0.91f, true, Color4.White);
            osuLogoGloss.Additive    = true;
            osuLogoGloss.ScaleScalar = 0.7f;
            mb.Add(osuLogoGloss);

            if (DownloadLink != null)
            {
                downloadRequest           = new DataNetRequest(DownloadLink);
                downloadRequest.onUpdate += dnr_onUpdate;
                downloadRequest.onFinish += dnr_onFinish;

                NetManager.AddRequest(downloadRequest);
            }
            else
            {
                ShowMetadata();
            }

            GameBase.ShowLoadingOverlay = true;

            loadingBackground          = new pRectangle(Vector2.Zero, new Vector2(GameBase.BaseSize.X + 1, 0), true, 0, new Color4(0, 97, 115, 180));
            loadingBackground.Additive = true;
            loadingBackground.Field    = FieldTypes.StandardSnapBottomLeft;
            loadingBackground.Origin   = OriginTypes.BottomLeft;

            spriteManager.Add(loadingBackground);

            spriteManager.Add(new BackButton(delegate { Director.ChangeMode(OsuMode.Store); }, false));
        }
예제 #5
0
        internal Spinner(HitObjectManager hitObjectManager, int startTime, int endTime, HitObjectSoundType soundType)
            : base(hitObjectManager, Vector2.Zero, startTime, soundType, true, 0)
        {
            if (SpinnerCentre == Vector2.Zero)
            {
                SpinnerCentre = GameBase.StandardToGamefield(new Vector2(GameBase.BaseSizeFixedWidth.X / 2, GameBase.BaseSizeFixedWidth.Y - (GameBase.BaseSizeFixedWidth.Y / GameBase.BaseSize.Y) * SpinnerCentreFromBottom.Y));
            }

            Position = SpinnerCentre;
            EndTime  = endTime;
            Type     = HitObjectType.Spinner;
            Colour   = Color4.Gray;

            Color4 white = Color4.White;

            //Check for a jpg background for beatmap-based skins (used to reduce filesize), then fallback to png.
            SpriteBackground =
                new pSprite(TextureManager.Load(OsuTexture.spinner_background),
                            FieldTypes.StandardSnapBottomCentre, OriginTypes.BottomCentre, ClockTypes.Audio,
                            new Vector2(0, 0), SpriteManager.drawOrderFwdLowPrio(2), false, white);
            Sprites.Add(SpriteBackground);

            spriteCircle =
                new pSprite(TextureManager.Load(OsuTexture.spinner_circle),
                            FieldTypes.StandardSnapBottomCentre, OriginTypes.Centre, ClockTypes.Audio,
                            SpinnerCentreFromBottom, SpriteManager.drawOrderFwdLowPrio(3), false, white)
            {
                ExactCoordinates = false
            };
            Sprites.Add(spriteCircle);

            //todo: possible optimisation by changing the draw method for filling of spinner metres.
            spriteScoreMetreBackground =
                new pRectangle(Vector2.Zero, new Vector2(GameBase.BaseSizeFixedWidth.X, GameBase.BaseSize.Y), false, SpriteManager.drawOrderFwdLowPrio(0), new Color4(20, 20, 20, 255))
            {
                Clocking = ClockTypes.Audio,
                Field    = FieldTypes.StandardSnapBottomCentre,
                Origin   = OriginTypes.BottomCentre
            };

            Sprites.Add(spriteScoreMetreBackground);

            spriteScoreMetreForeground =
                new pRectangle(Vector2.Zero, new Vector2(GameBase.BaseSizeFixedWidth.X, 0), false, SpriteManager.drawOrderFwdLowPrio(1), Color4.OrangeRed)
            {
                Clocking = ClockTypes.Audio,
                Field    = FieldTypes.StandardSnapBottomCentre,
                Origin   = OriginTypes.BottomCentre
            };

            Sprites.Add(spriteScoreMetreForeground);

            ApproachCircle          = new ApproachCircle(SpinnerCentreFromBottom, 1, false, SpriteManager.drawOrderFwdLowPrio(5), new Color4(77 / 255f, 139 / 255f, 217 / 255f, 1));
            ApproachCircle.Width    = 8;
            ApproachCircle.Clocking = ClockTypes.Audio;
            ApproachCircle.Field    = FieldTypes.StandardSnapBottomCentre;
            Sprites.Add(ApproachCircle);

            spriteBonus = new pSpriteText("", "score", -5, // SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap,
                                          FieldTypes.StandardSnapBottomCentre, OriginTypes.Centre, ClockTypes.Audio,
                                          SpinnerCentreFromBottom - new Vector2(0, 80), SpriteManager.drawOrderFwdLowPrio(6), false, white);
            spriteBonus.Additive = true;
            Sprites.Add(spriteBonus);

            foreach (pDrawable p in Sprites)
            {
                p.Transformations.Clear();
                p.Transform(new TransformationF(TransformationType.Fade, 0, 1, StartTime - DifficultyManager.FadeIn, StartTime));
                p.Transform(new TransformationF(TransformationType.Fade, 1, 0, EndTime, EndTime + (spriteScoreMetreForeground == p ? DifficultyManager.FadeOut / 4 : DifficultyManager.FadeOut / 2)));
            }

            SpriteSpin =
                new pSprite(TextureManager.Load(OsuTexture.spinner_spin),
                            FieldTypes.StandardSnapBottomCentre, OriginTypes.Centre, ClockTypes.Audio,
                            SpinnerCentreFromBottom, SpriteManager.drawOrderFwdLowPrio(5), false, white);
            SpriteSpin.Transform(new TransformationF(TransformationType.Fade, 0, 1, StartTime - DifficultyManager.FadeIn / 2, StartTime));
            SpriteSpin.Transform(new TransformationF(TransformationType.Fade, 1, 0, EndTime - Math.Min(400, endTime - startTime), EndTime));
            Sprites.Add(SpriteSpin);

            ApproachCircle.Transform(new TransformationF(TransformationType.Scale, GameBase.BaseSizeFixedWidth.Y * 0.47f, 0.1f, StartTime, EndTime));

            SpriteClear =
                new pSprite(TextureManager.Load(OsuTexture.spinner_clear),
                            FieldTypes.StandardSnapBottomCentre, OriginTypes.Centre, ClockTypes.Audio,
                            SpinnerCentreFromBottom + new Vector2(0, 80), SpriteManager.drawOrderFwdLowPrio(6), false, white);
            SpriteClear.Transform(new TransformationF(TransformationType.Fade, 0, 0, startTime, endTime));
            Sprites.Add(SpriteClear);

            currentRotationCount = 0;
            rotationRequirement  = (int)((float)(EndTime - StartTime) / 1000 * DifficultyManager.SpinnerRotationRatio) * sensitivity_modifier;
        }