Exemplo n.º 1
0
        public ComboCounter(Player player)
        {
            this.player = player;

            s_hitCombo =
                new pSpriteText(GetComboString(), SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap,
                                FieldTypes.Window, OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(2, 465), 0.9F, true, Color.TransparentWhite);
            s_hitCombo.CurrentPosition.Y = 480 - s_hitCombo.MeasureText().Y *0.8f;
            s_hitCombo.StartPosition.Y   = 480 - s_hitCombo.MeasureText().Y *0.8f;
            s_hitCombo.CurrentScale      = 1.28F;

            s_hitCombo2 =
                new pSpriteText("0x", SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap,
                                FieldTypes.Window, OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(2, 465), 0.9F, true, Color.TransparentWhite);
            s_hitCombo2.CurrentPosition.Y = 480 - 8;
            s_hitCombo2.OriginPosition    = new Vector2(0, s_hitCombo2.MeasureText().Y *0.625f + 8);
            s_hitCombo2.CurrentScale      = 1.28F;

            if (!Player.Relaxing)
            {
                player.spriteManager.Add(s_hitCombo);
                player.spriteManager.Add(s_hitCombo2);
            }
        }
Exemplo n.º 2
0
        internal virtual void LoadScoreText(string scoreText, Vector2 location)
        {
            pSprite        p;
            Transformation t;

            const int timeOffset = 200;

            Vector2 tMove = new Vector2(40, 0);

            p =
                new pSpriteText(scoreText, SkinManager.Current.FontScore,
                                SkinManager.Current.FontScoreOverlap, Fields.TopLeft,
                                Origins.TopLeft, Clocks.Game,
                                location, 0.8F, true, Color.TransparentWhite);
            p.Scale = 1.12F;
            t       =
                new Transformation(p.Position - tMove, p.Position, startTime + timeOffset,
                                   startTime + timeOffset + length);
            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);

            text = p;
        }
Exemplo n.º 3
0
        protected virtual void InitializeSprites()
        {
            SkinOsu skin     = SkinManager.Current;
            Vector2 position = new Vector2(2, 472);

            s_hitCombo =
                new pSpriteText(comboString, skin.FontCombo, skin.FontComboOverlap,
                                Fields.TopLeft, Origins.Custom, Clocks.Game,
                                position, 0.92f, true, Color.TransparentWhite);

            s_hitCombo.OriginPosition = new Vector2(0, s_hitCombo.MeasureText().Y * 0.625f + 9);

            s_hitCombo2 =
                new pSpriteText("0x", skin.FontCombo, skin.FontComboOverlap,
                                Fields.TopLeft, Origins.Custom, Clocks.Game,
                                position, 0.91f, true, Color.TransparentWhite);

            s_hitCombo2.OriginPosition = new Vector2(3, s_hitCombo2.MeasureText().Y * 0.625f + 9);
            s_hitCombo2.Additive       = true;

            s_hitCombo.Scale = s_hitCombo2.Scale = 1.28f;

            if (canDisplayCombo)
            {
                spriteManager.Add(s_hitCombo);
                spriteManager.Add(s_hitCombo2);
            }
        }
Exemplo n.º 4
0
        internal ScoreDisplay(SpriteManager spriteManager, Vector2 position, bool alignRight, float scale, bool showScore, bool showAccuracy)
        {
            this.spriteManager = spriteManager;

            this.scale = scale;
            if (GameBase.Tournament)
            {
                scale *= 1.4f;
            }

            float vpos = position.Y;

            textMeasure = Vector2.Zero;

            if (showScore)
            {
                s_Score =
                    new pSpriteText(@"00000000", SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap,
                                    alignRight ? Fields.TopRight : Fields.TopLeft, alignRight ? Origins.TopRight : Origins.TopLeft, Clocks.Game,
                                    new Vector2(0, 0), 0.95F, true, Color.White);
                s_Score.TextConstantSpacing = true;
                textMeasure      = s_Score.MeasureText() * 0.625f * scale;
                s_Score.Position = new Vector2(position.X, vpos);
                s_Score.Scale    = scale;

                vpos += textMeasure.Y;
            }

            if (SkinManager.UseNewLayout)
            {
                vpos += 3;
            }

            if (showAccuracy)
            {
                s_Accuracy =
                    new pSpriteText(@"00.00%", SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap,
                                    alignRight ? Fields.TopRight : Fields.TopLeft, alignRight ? Origins.TopRight : Origins.TopLeft, Clocks.Game,
                                    new Vector2(0, 0), 0.95F, true, Color.White);
                s_Accuracy.Scale = scale * (showScore ? 0.6f : 1);
                s_Accuracy.TextConstantSpacing = true;
                s_Accuracy.Position            = new Vector2(position.X, vpos);

                LeftOfDisplay =
                    s_Accuracy.Position +
                    new Vector2(s_Accuracy.MeasureText().X * 0.625f * s_Accuracy.Scale + 24,
                                s_Accuracy.MeasureText().Y * 0.625f * s_Accuracy.Scale / 2);
            }


            if (!Player.Relaxing && !Player.Relaxing2)
            {
                spriteManager.Add(s_Score);
                spriteManager.Add(s_Accuracy);
            }
        }
Exemplo n.º 5
0
        internal HitCircle(HitObjectManager hit_object_manager, Vector2 pos, int startTime, bool newCombo, int comboOffset, HitObjectSoundType soundType)
            : base(hit_object_manager, pos, startTime, soundType, newCombo, comboOffset)
        {
            Type = HitObjectType.Circle;

            Color4 white = Color4.White;

            SpriteHitCircle1 =
                new pSprite(TextureManager.Load(OsuTexture.hitcircle0), FieldTypes.GamefieldSprites, OriginTypes.Centre, ClockTypes.Audio, Position, SpriteManager.drawOrderBwd(StartTime), false, white);
            Sprites.Add(SpriteHitCircle1);
            //SpriteHitCircle1.TagNumeric = 1;
            SpriteHitCircle1.TagNumeric = DIMMABLE_TAG;


            SpriteHitCircleText = new pSpriteText(null, "default", 3, //SkinManager.Current.FontHitCircle, SkinManager.Current.FontHitCircleOverlap,
                                                  FieldTypes.GamefieldSprites, OriginTypes.Centre,
                                                  ClockTypes.Audio, Position, SpriteManager.drawOrderBwd(StartTime - 1),
                                                  false, white);
            SpriteHitCircleText.TextConstantSpacing = false;

            SpriteHitCircleText.TagNumeric = DIMMABLE_TAG;

            SpriteApproachCircle          = new ApproachCircle(Position, 1, false, 1, white);
            SpriteApproachCircle.Clocking = ClockTypes.Audio;
            Sprites.Add(SpriteApproachCircle);

            if (ShowCircleText)
            {
                Sprites.Add(SpriteHitCircleText);
            }

            SpriteApproachCircle.Transform(new TransformationF(TransformationType.Fade, 0, 0.9F,
                                                               startTime - DifficultyManager.PreEmpt, Math.Min(startTime, startTime - DifficultyManager.PreEmpt + DifficultyManager.FadeIn * 2)));

            SpriteApproachCircle.Transform(new TransformationF(TransformationType.Scale, 4, 1,
                                                               startTime - DifficultyManager.PreEmpt, startTime));

            SpriteApproachCircle.Transform(new TransformationF(TransformationType.Fade, 0.9f, 0,
                                                               startTime, startTime + (int)(DifficultyManager.PreEmpt * 0.1f)));

            Transformation fadeIn = new TransformationF(TransformationType.Fade, 0, 1,
                                                        startTime - DifficultyManager.PreEmpt, startTime - DifficultyManager.PreEmpt + DifficultyManager.FadeIn);

            SpriteHitCircle1.Transform(fadeIn);
            SpriteHitCircleText.Transform(fadeIn);

            Transformation fadeOut = new TransformationF(TransformationType.Fade, 1, 0,
                                                         startTime, startTime + DifficultyManager.HitWindow50);

            SpriteHitCircle1.Transform(fadeOut);
            SpriteHitCircleText.Transform(fadeOut);
        }
Exemplo n.º 6
0
        internal ScoreboardEntry(int rank, string name, PlayModes playMode)
        {
            this.rank     = rank;
            this.playMode = playMode;
            this.name     = name ?? @"-";
            creationOrder = creationCount++;

            float depth = 0.92f;

            SpriteBackground = new pSprite(TextureManager.Load(@"menu-button-background"), Fields.TopLeft, Origins.Custom, Clocks.Game, Vector2.Zero, depth, true, new Color(0, 0, 0, 150))
            {
                Alpha = 0,
                Scale = 0.62f
            };

            SpriteName = new pText(name, 14, new Vector2(0, -2), Vector2.Zero, depth + 0.000003f, true, new Color(255, 255, 255, 0), true);

            SpriteScore = new pSpriteText(string.Empty, @"scoreentry", 2.5f, Fields.TopLeft, Origins.TopLeft, Clocks.Game, new Vector2(2, 18), depth + 0.000003f, true, new Color(255, 255, 255, 0))
            {
                TextConstantSpacing = true
            };

            SpriteCombo = new pSpriteText(string.Empty, @"scoreentry", 2.5f, Fields.TopLeft, Origins.TopRight, Clocks.Game, new Vector2(82, 18), depth + 0.000003f, true, new Color(153, 251, 255, 0))
            {
                TextConstantSpacing = true
            };

            SpriteRank = new pSpriteText(rank > 0 ? rank.ToString() : string.Empty, @"scoreentry", 3, Fields.TopLeft, Origins.TopRight, Clocks.Game, new Vector2(82, -2), depth + 0.000002f, true,
                                         new Color(255, 255, 255, 80))
            {
                Scale = 2.2f,
                Alpha = 0
            };

            SpriteCollection = new List <pSprite>
            {
                SpriteBackground,
                SpriteName,
                SpriteScore,
                SpriteCombo,
                SpriteRank
            };

            UpdateSpriteLayout();
        }
Exemplo n.º 7
0
        protected override void animateDecrease()
        {
            if (HitCombo == 0 && applyEffect)
            {
                applyEffect = false;

                pSpriteText s_fade =
                    new pSpriteText(s_hitCombo.Text, SkinManager.Current.FontCombo, SkinManager.Current.FontScoreOverlap,
                                    Fields.TopLeft, Origins.Centre, Clocks.Game,
                                    Vector2.Zero, 0.915f, true, breakColour);

                s_fade.Position       = s_hitCombo.Position;
                s_fade.OriginPosition = Vector2.Zero;

                s_fade.Transformations.Add(new Transformation(TransformationType.Fade, 0.8f, 0, GameBase.Time, GameBase.Time + 200));
                s_fade.Transformations.Add(new Transformation(TransformationType.Scale, 1, 4, GameBase.Time, GameBase.Time + 200));

                spriteManager.Add(s_fade);
            }
        }
Exemplo n.º 8
0
        internal override void InitializeSprites()
        {
            if (GameBase.GameField.CorrectionOffsetActive)
            {
                spinnerTopOffset -= 16;
            }

            //this is madness, but works.
            posTopLeftCentre = new Vector2(GameBase.WindowManager.WidthScaled / Math.Max(1, GameBase.WindowManager.WidthWidescreenRatio) / 2f, spinnerTopOffset + 219);

            Color fade = (GameBase.Mode == OsuModes.Play &&
                          (ModManager.CheckActive(hitObjectManager.ActiveMods, Mods.SpunOut) || Player.Relaxing2)
                              ? Color.Gray
                              : Color.White);

            SpriteCircleTop =
                new pSprite(TextureManager.Load(@"spinner-circle", SkinSource.Osu | SkinSource.Skin), Fields.TopLeft,
                            Origins.Centre,
                            Clocks.Audio, posTopLeftCentre, SpriteManager.drawOrderBwd(EndTime), false,
                            fade);
            SpriteCollection.Add(SpriteCircleTop);

            if (!ModManager.CheckActive(hitObjectManager.ActiveMods, Mods.Hidden))
            {
                pTexture highRes = TextureManager.Load(@"spinner-approachcircle", SkinSource.Skin);

                SpriteApproachCircle =
                    new pSprite(TextureManager.Load(@"spinner-approachcircle", SkinSource.Osu | SkinSource.Skin), Fields.TopLeft, Origins.Centre,
                                Clocks.Audio, posTopLeftCentre, SpriteManager.drawOrderBwd(EndTime - 2), false, fade);
                SpriteCollection.Add(SpriteApproachCircle);
            }

            SpriteBonusCounter = new pSpriteText("", SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap,
                                                 Fields.TopLeft, Origins.Centre,
                                                 Clocks.Audio, new Vector2(posTopLeftCentre.X, posTopLeftCentre.Y + 80),
                                                 SpriteManager.drawOrderBwd(EndTime - 3), false,
                                                 fade);
            SpriteCollection.Add(SpriteBonusCounter);

            SpriteCircleTop.Scale *= 0.8f;
        }
Exemplo n.º 9
0
        protected override void InitializeSprites()
        {
            SkinOsu skin     = SkinManager.Current;
            Vector2 position = new Vector2(2, 240);

            s_hitCombo =
                new pSpriteText(comboString, skin.FontCombo, skin.FontComboOverlap,
                                Fields.TopLeft, Origins.Centre, Clocks.Game,
                                position, 0.9f, true, Color.TransparentWhite);
            s_hitCombo2 =
                new pSpriteText(string.Empty, skin.FontCombo, skin.FontComboOverlap,
                                Fields.TopLeft, Origins.Centre, Clocks.Game,
                                position, 0.91f, true, Color.TransparentWhite);
            s_hitCombo2.Additive = true;

            if (canDisplayCombo)
            {
                spriteManager.Add(s_hitCombo);
                spriteManager.Add(s_hitCombo2);
            }
        }
Exemplo n.º 10
0
        public override void Initialize()
        {
            base.Initialize();

            s_hitCombo = new pSpriteText("0x", "score", -2,
                                         FieldTypes.StandardSnapBottomLeft, OriginTypes.BottomLeft, ClockTypes.Game,
                                         new Vector2(2 + GameBase.SuperWidePadding, 6), 0.92F, true, Color4.White);
            s_hitCombo.Alpha = 0;
            //s_hitCombo.OriginVector = new Vector2(3, 40);
            s_hitCombo.ScaleScalar = 1.28F;

            s_hitCombo_Incoming =
                new pSpriteText("0x", "score", -2,
                                FieldTypes.StandardSnapBottomLeft, OriginTypes.BottomLeft, ClockTypes.Game,
                                new Vector2(2 + GameBase.SuperWidePadding, 6), 0.91F, true, Color4.White);
            s_hitCombo_Incoming.Alpha = 0;
            //s_hitCombo_Incoming.OriginVector = new Vector2(3, 40);
            s_hitCombo_Incoming.Additive = true;

            spriteManager.Add(s_hitCombo);
            spriteManager.Add(s_hitCombo_Incoming);
        }
Exemplo n.º 11
0
            public InputOverlayButton(ButtonType type, Vector2 position)
            {
                Type = type;

                SpriteBackground = new pSprite(TextureManager.Load(@"inputoverlay-key"), Fields.TopLeft, Origins.Centre, Clocks.Game, position)
                {
                    AlwaysDraw = true,
                    Depth      = 0.98f
                };

                Sprites.Add(SpriteBackground);

                //tournament draws stuff so small text is pointless.
                if (GameBase.Tournament)
                {
                    return;
                }

                if (string.IsNullOrEmpty(description))
                {
                    SpriteBackground.InitialColour = Color.LightGray;
                    SpriteBackground.Alpha         = 0.5f;
                }
                else
                {
                    SpriteDescription = new pText(description, 12, position, 1, true, SkinManager.Current.Colours[@"InputOverlayText"])
                    {
                        Origin     = Origins.Centre,
                        TextColour = Color.White
                    };

                    Sprites.Add(SpriteDescription);

                    SpriteCount       = new pSpriteText(string.Empty, @"scoreentry", 1, Fields.TopLeft, Origins.Centre, Clocks.Game, position, 1, true, SkinManager.Current.Colours[@"InputOverlayText"]);
                    SpriteCount.Alpha = 0;
                    Sprites.Add(SpriteCount);
                }
            }
Exemplo n.º 12
0
        internal ScoreDisplay(Vector2 position, bool alignRight, float scale, bool showScore, bool showAccuracy)
        {
            this.scale = scale;

            float vpos    = position.Y;
            float hOffset = 40 + GameBase.SuperWidePadding;

            textMeasure = Vector2.Zero;

            if (showScore)
            {
                s_Score =
                    new pSpriteText("000000", "score", 1,
                                    alignRight ? FieldTypes.StandardSnapRight : FieldTypes.Standard, alignRight ? OriginTypes.TopRight : OriginTypes.TopLeft, ClockTypes.Game,
                                    new Vector2(hOffset, 0), 0.95F, true, Color4.White);
                s_Score.TextConstantSpacing = true;
                s_Score.Position            = new Vector2(hOffset, vpos);
                s_Score.ScaleScalar         = scale;
                textMeasure = s_Score.MeasureText() * 0.625f * scale;

                vpos += textMeasure.Y + 4;
            }

            if (showAccuracy)
            {
                s_Accuracy =
                    new pSpriteText("00.00%", "score", 1,
                                    alignRight ? FieldTypes.StandardSnapRight : FieldTypes.Standard, alignRight ? OriginTypes.TopRight : OriginTypes.TopLeft, ClockTypes.Game,
                                    new Vector2(hOffset, 0), 0.95F, true, Color4.White);
                s_Accuracy.TextConstantSpacing = true;
                s_Accuracy.ScaleScalar         = scale * (showScore ? 0.7f : 1);
                s_Accuracy.Position            = new Vector2(hOffset - 35, vpos);
            }


            spriteManager.Add(s_Score);
            spriteManager.Add(s_Accuracy);
        }
Exemplo n.º 13
0
        internal override void Update(int score)
        {
            if (!Player.Relaxing)
            {
                int diff = score - CurrentScore;
                if (diff > 0)
                {
                    Vector2     startPos = new Vector2(10, s_Score.Position.Y + textMeasure.Y);
                    pSpriteText s        =
                        new pSpriteText(diff.ToString(), SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap,
                                        s_Accuracy.Field, Origins.TopRight, Clocks.Game,
                                        startPos, 0.95F, false, Color.Red);
                    s.Scale = scale * 0.8f;
                    spriteManager.Add(s);

                    s.FadeInFromZero(60);
                    s.Transformations.Add(new Transformation(startPos + new Vector2(RNG.NextBool(0.5) ? 10 : -10, 0), startPos, GameBase.Time + 0, GameBase.Time + 100, EasingTypes.Out));
                    s.Transformations.Add(new Transformation(startPos, startPos + new Vector2(0, -30), GameBase.Time + 300, GameBase.Time + 420, EasingTypes.In));
                    s.Transformations.Add(new Transformation(TransformationType.Fade, 1, 0, GameBase.Time + 300, GameBase.Time + 420, EasingTypes.In));
                }
            }

            base.Update(score);
        }
Exemplo n.º 14
0
        internal HitCircle(Vector2 pos, int startTime, bool newCombo, bool addWhistle, bool addFinish)
        {
            Position  = pos;
            StartTime = startTime;
            EndTime   = startTime;

            Type      = HitObjectType.Normal;
            SoundType = HitObjectSoundType.Normal;

            if (newCombo)
            {
                Type |= HitObjectType.NewCombo;
            }
            if (addWhistle)
            {
                SoundType |= HitObjectSoundType.Whistle;
            }
            if (addFinish)
            {
                SoundType |= HitObjectSoundType.Finish;
            }

            SpriteCollection = new List <pSprite>();
            DimCollection    = new List <pSprite>();

            SpriteApproachCircle =
                new pSprite(SkinManager.Load("approachcircle"), FieldTypes.Gamefield, OriginTypes.Centre,
                            ClockTypes.Audio, Position, SpriteManager.drawOrderFwdPrio(StartTime - HitObjectManager.PreEmpt), false, beatColour);
            if (Player.currentScore == null || (!ModManager.CheckActive(Player.currentScore.enabledMods, Mods.Hidden) && !ModManager.CheckActive(Player.currentScore.enabledMods, Mods.Taiko)))
            {
                SpriteCollection.Add(SpriteApproachCircle);
            }

            SpriteHitCircle1 =
                new pSprite(SkinManager.Load("hitcircle"), FieldTypes.Gamefield, OriginTypes.Centre,
                            ClockTypes.Audio, Position, SpriteManager.drawOrderBwd(StartTime), false, beatColour);
            SpriteCollection.Add(SpriteHitCircle1);
            SpriteHitCircle1.TagNumeric = 1;
            DimCollection.Add(SpriteHitCircle1);


            SpriteHitCircle2 =
                new pSprite(SkinManager.Load("hitcircleoverlay"), FieldTypes.Gamefield,
                            OriginTypes.Centre, ClockTypes.Audio, Position,
                            SpriteManager.drawOrderBwd(StartTime - (SkinManager.Current.OverlayAboveNumber ? 2 : 1)), false, Color.White);
            SpriteCollection.Add(SpriteHitCircle2);
            DimCollection.Add(SpriteHitCircle2);
            SpriteHitCircleText = new pSpriteText(null, SkinManager.Current.FontHitCircle, SkinManager.Current.FontHitCircleOverlap, FieldTypes.Gamefield, OriginTypes.Centre,
                                                  ClockTypes.Audio, Position, SpriteManager.drawOrderBwd(StartTime - (SkinManager.Current.OverlayAboveNumber ? 1 : 2)),
                                                  false,
                                                  Color.White);

            SpriteHitCircleText.CurrentScale = textSize;

            /*new pSpriteText( comboNumber.ToString(), FieldTypes.Gamefield, OriginTypes.Centre,
             *          ClockTypes.Audio, Position, SpriteManager.drawOrderBwd(StartTime - 2), false,
             *          Color.White);*/
            SpriteCollection.Add(SpriteHitCircleText);
            DimCollection.Add(SpriteHitCircleText);
            SpriteSelectionCircle =
                new pSprite(SkinManager.Load("hitcircleselect"), FieldTypes.Gamefield,
                            OriginTypes.Centre, ClockTypes.Game, Position,
                            SpriteManager.drawOrderBwd(StartTime - 2), true, Color.TransparentWhite);
            SpriteCollection.Add(SpriteSelectionCircle);


            SpriteApproachCircle.Transformations.Add(
                new Transformation(TransformationType.Fade, 0, 0.9F, startTime - HitObjectManager.PreEmpt,
                                   Math.Min(startTime, startTime - HitObjectManager.PreEmpt + HitObjectManager.FadeIn * 2)));

            SpriteApproachCircle.Transformations.Add(
                new Transformation(TransformationType.Scale, 4, 1, startTime - HitObjectManager.PreEmpt, startTime));

            Transformation t;

            if (Player.currentScore != null && ModManager.CheckActive(Player.currentScore.enabledMods, Mods.Hidden))
            {
                t = new Transformation(TransformationType.Fade, 0, 1, startTime - HitObjectManager.PreEmpt,
                                       startTime - (int)(HitObjectManager.PreEmpt * 0.6));

                SpriteHitCircle1.Transformations.Add(t);

                t = new Transformation(TransformationType.Fade, 0, 1, startTime - HitObjectManager.PreEmpt,
                                       startTime - (int)(HitObjectManager.PreEmpt * 0.6));

                SpriteHitCircle2.Transformations.Add(t);

                t = new Transformation(TransformationType.Fade, 0, 1, startTime - HitObjectManager.PreEmpt,
                                       startTime - (int)(HitObjectManager.PreEmpt * 0.6));

                SpriteHitCircleText.Transformations.Add(t);

                t = new Transformation(TransformationType.Fade, 1, 0, startTime - (int)(HitObjectManager.PreEmpt * 0.6),
                                       startTime - (int)(HitObjectManager.PreEmpt * 0.3));

                SpriteHitCircle1.Transformations.Add(t);

                t = new Transformation(TransformationType.Fade, 1, 0, startTime - (int)(HitObjectManager.PreEmpt * 0.6),
                                       startTime - (int)(HitObjectManager.PreEmpt * 0.3));
                SpriteHitCircle2.Transformations.Add(t);
                t = new Transformation(TransformationType.Fade, 1, 0, startTime - (int)(HitObjectManager.PreEmpt * 0.6),
                                       startTime - (int)(HitObjectManager.PreEmpt * 0.3));
                SpriteHitCircleText.Transformations.Add(t);
            }
            else
            {
                t = new Transformation(TransformationType.Fade, 0, 1, startTime - HitObjectManager.PreEmpt,
                                       startTime - HitObjectManager.PreEmpt + HitObjectManager.FadeIn);

                SpriteHitCircle1.Transformations.Add(t);
                t = new Transformation(TransformationType.Fade, 0, 1, startTime - HitObjectManager.PreEmpt,
                                       startTime - HitObjectManager.PreEmpt + HitObjectManager.FadeIn);
                SpriteHitCircle2.Transformations.Add(t);
                t = new Transformation(TransformationType.Fade, 0, 1, startTime - HitObjectManager.PreEmpt,
                                       startTime - HitObjectManager.PreEmpt + HitObjectManager.FadeIn);
                SpriteHitCircleText.Transformations.Add(t);
            }

            if (GameBase.Mode == Modes.Edit)
            {
                SpriteApproachCircle.Transformations.Add(
                    new Transformation(TransformationType.Fade, 1, 0, startTime,
                                       startTime + HitObjectManager.ForceFadeOut));
                SpriteApproachCircle.Transformations.Add(
                    new Transformation(TransformationType.Scale, 1, 1.1F, startTime, startTime + 100));

                SpriteHitCircle1.Transformations.Add(
                    new Transformation(TransformationType.Fade, 1, 0, startTime,
                                       startTime + HitObjectManager.ForceFadeOut));
                SpriteHitCircle1.Transformations.Add(
                    new Transformation(Colour, Color.White, startTime - 5, startTime - 5));
                SpriteHitCircle2.Transformations.Add(
                    new Transformation(TransformationType.Fade, 1, 0, startTime,
                                       startTime + HitObjectManager.ForceFadeOut));

                SpriteHitCircleText.Transformations.Add(
                    new Transformation(TransformationType.Fade, 1, 0, startTime,
                                       startTime + HitObjectManager.ForceFadeOut));
            }
            else if (Player.currentScore == null || !ModManager.CheckActive(Player.currentScore.enabledMods, Mods.Hidden))
            {
                SpriteHitCircle1.Transformations.Add(
                    new Transformation(TransformationType.Fade, 1, 0, startTime, startTime + HitObjectManager.Hit50));
                SpriteHitCircle2.Transformations.Add(
                    new Transformation(TransformationType.Fade, 1, 0, startTime, startTime + HitObjectManager.Hit50));
                SpriteHitCircleText.Transformations.Add(
                    new Transformation(TransformationType.Fade, 1, 0, startTime, startTime + HitObjectManager.Hit50));
            }
        }
Exemplo n.º 15
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;
        }
Exemplo n.º 16
0
        internal void UpdateCalculations(bool force, double multiplier)
        {
            if (force || taikoMiddle == null)
            {
                //slider endpoint is not hittable when the next hitobject has
                //a starttime before the slider's endtime.
                List <HitObject> hitobjects = hitObjectManager.hitObjects;
                int ind = hitobjects.IndexOf(this);
                if (ind < hitobjects.Count - 1 &&
                    hitobjects[ind + 1].HittableStartTime - (EndTime + (int)MinHitDelay) <= (int)MinHitDelay)
                {
                    endpointHittable = false;
                }

                float scalefactor = !SoundType.IsType(HitObjectSoundType.Finish) ? 0.65f : 1;

                SpatialLength *= SegmentCount;
                double v = hitObjectManager.SliderScoringPointDistance * hitObjectManager.Beatmap.DifficultySliderTickRate;
                double b = hitObjectManager.Beatmap.BeatLengthAt(StartTime);
                EndTime = StartTime + (int)(SpatialLength / v * b);

                SpatialLength *= multiplier;

                taikoMiddle = new pSprite(TextureManager.Load(@"taiko-roll-middle"), Fields.GamefieldWide,
                                          Origins.TopLeft, Clocks.Audio,
                                          new Vector2(Position.X,
                                                      Position.Y - hitObjectManager.HitObjectRadius * scalefactor),
                                          SpriteManager.drawOrderBwd(EndTime + 10),
                                          false, new Color(252, 184, 6));
                taikoMiddle.VectorScale =
                    new Vector2((float)SpatialLength * GameBase.WindowManager.Ratio / hitObjectManager.SpriteRatio * (1 / scalefactor), 1);
                taikoMiddle.Transformations.Add(new Transformation(TransformationType.Fade, 0, 1,
                                                                   StartTime - hitObjectManager.PreEmpt, StartTime));
                taikoMiddle.Transformations.Add(new Transformation(TransformationType.Fade, 1, 0, EndTime,
                                                                   EndTime + hitObjectManager.PreEmptSliderComplete));
                spriteManager.Add(taikoMiddle);
                SpriteCollection.Add(taikoMiddle);
                DimCollection.Add(taikoMiddle);

                taikoEnd = new pSprite(TextureManager.Load(@"taiko-roll-end"), Fields.GamefieldWide, Origins.TopLeft,
                                       Clocks.Audio,
                                       new Vector2(Position.X, Position.Y - hitObjectManager.HitObjectRadius * scalefactor),
                                       SpriteManager.drawOrderBwd(EndTime + 8),
                                       false, new Color(252, 184, 6));
                taikoEnd.OriginPosition =
                    new Vector2(
                        (float)-SpatialLength * GameBase.WindowManager.Ratio / hitObjectManager.SpriteRatio * (1 / scalefactor), 0);
                taikoEnd.Transformations.Add(new Transformation(TransformationType.Fade, 0, 1,
                                                                StartTime - hitObjectManager.PreEmpt, StartTime));
                taikoEnd.Transformations.Add(new Transformation(TransformationType.Fade, 1, 0, EndTime,
                                                                EndTime + hitObjectManager.PreEmptSliderComplete));

                spriteManager.Add(taikoEnd);
                SpriteCollection.Add(taikoEnd);
                DimCollection.Add(taikoEnd);

                sliderBall.Transformations.Add(new Transformation(sliderStartCircle.Position,
                                                                  sliderStartCircle.Position, StartTime - 500, EndTime));
                sliderFollower.Transformations.Add(new Transformation(sliderStartCircle.Position,
                                                                      sliderStartCircle.Position, StartTime, EndTime));

                counter =
                    new pSpriteText("", SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap,
                                    Fields.GamefieldWide, Origins.Centre, Clocks.Audio,
                                    HitObjectManagerTaiko.HIT_LOCATION, 0.9f, false, Color.White);
                counter.Scale = 0.8f;
                counter.Transformations.Add(new Transformation(TransformationType.Fade, 0, 1, StartTime, StartTime));
                counter.Transformations.Add(new Transformation(TransformationType.Fade, 0.6f, 0, EndTime, EndTime + 300));
                spriteManager.Add(counter);

                int index = 0;

                for (double i = StartTime; i < HittableEndTime; i += MinHitDelay)
                {
                    if (i == StartTime)
                    {
                        hittablePoints.Add(new HitPoint((int)i, null));
                        index++;
                        continue;
                    }

                    bool major = ((hitObjectManager.Beatmap.DifficultySliderTickRate == 3) ||
                                  (hitObjectManager.Beatmap.DifficultySliderTickRate == 6) ||
                                  (hitObjectManager.Beatmap.DifficultySliderTickRate == 1.5d)) ? (index % 3) == 0 : (index % 4) == 0;

                    pSprite scoringDot = new pSprite(TextureManager.Load(@"sliderscorepoint"),
                                                     Fields.GamefieldWide, Origins.Centre, Clocks.Audio, new Vector2(Position.X,
                                                                                                                     Position.Y),
                                                     SpriteManager.drawOrderBwd(StartTime + 1), false, major ? Color.Yellow : Color.White, this);

                    if (!major)
                    {
                        scoringDot.Scale *= 0.8f;
                    }


                    scoringDot.OriginPosition.X -= (float)(SpatialLength * (float)(i - StartTime) / Length) * GameBase.WindowManager.Ratio / hitObjectManager.SpriteRatio / scoringDot.Scale * (1 / scalefactor);

                    scoringDot.Transformations.Add(new Transformation(TransformationType.Fade, 0, 1,
                                                                      StartTime - hitObjectManager.PreEmpt, StartTime));
                    scoringDot.Transformations.Add(new Transformation(TransformationType.Fade, 1, 0, EndTime,
                                                                      EndTime + hitObjectManager.PreEmptSliderComplete));

                    hittablePoints.Add(new HitPoint((int)i, scoringDot));

                    spriteManager.Add(scoringDot);
                    SpriteCollection.Add(scoringDot);
                    DimCollection.Add(scoringDot);

                    index++;
                }

                if (scalefactor != 1)
                {
                    foreach (pSprite p in SpriteCollection)
                    {
                        p.Scale *= scalefactor;
                    }
                }

                for (int i = 0; i < sliderStartCircle.SpriteCollection.Count; i++)
                {
                    pSprite s = sliderStartCircle.SpriteCollection[i];
                    foreach (Transformation t in s.Transformations)
                    {
                        if (t.Type ==
                            TransformationType.Fade &&
                            t.StartFloat == 1)
                        {
                            t.Time1 = EndTime;
                            t.Time2 = EndTime;
                        }
                    }
                    SpriteCollection.Add(s);
                    DimCollection.Add(s);
                    spriteManager.Add(s);
                }
            }
        }
Exemplo n.º 17
0
        private void LoadScore(Score score)
        {
            foreach (pSprite ps in leftPanel)
            {
                ps.FadeOut(100);
                ps.AlwaysDraw = false;
            }
            leftPanel.Clear();

            this.score = score;

            stringTotalScore = String.Format("{0:00000000}", score.totalScore);

            s_score1 =
                new pSpriteText("", SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap,
                                FieldTypes.Window, OriginTypes.Centre, ClockTypes.Game,
                                new Vector2(180, 94), 0.8F, true, Color.White);
            s_score1.CurrentScale = 1.05f;
            spriteManager.Add(s_score1);
            leftPanel.Add(s_score1);

            int textx1 = 80;
            int imgx1  = 40;
            int textx2 = 280;
            int imgx2  = 240;

            int row1 = 160;
            int row2 = 220;
            int row3 = 280;
            int row4 = 320;
            int row5 = 380;

            int textoffset = -25;

            int     timeOffset  = 1000;
            int     timeOffset2 = 1300;
            Vector2 tMove       = new Vector2(40, 0);
            int     length      = 400;

            pSprite p =
                new pSprite(SkinManager.Load("hit300"), FieldTypes.Window, OriginTypes.Centre,
                            ClockTypes.Game, new Vector2(imgx1, row1), 0.9F, true, Color.TransparentWhite);
            Transformation t =
                new Transformation(TransformationType.Scale, 1, 0.5F, startTime + timeOffset,
                                   startTime + timeOffset + length);

            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", score.count300), SkinManager.Current.FontScore,
                                SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx1, row1 + textoffset), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);

            p =
                new pSprite(SkinManager.Load("hit100"), FieldTypes.Window, OriginTypes.Centre,
                            ClockTypes.Game, new Vector2(imgx1, row2), 0.9F, true, Color.TransparentWhite);
            t =
                new Transformation(TransformationType.Scale, 1, 0.5F, startTime + timeOffset,
                                   startTime + timeOffset + length);
            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", score.count100), SkinManager.Current.FontScore,
                                SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx1, row2 + textoffset), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);

            p =
                new pSprite(SkinManager.Load("hit50"), FieldTypes.Window, OriginTypes.Centre,
                            ClockTypes.Game, new Vector2(imgx1, row3), 0.9F, true, Color.TransparentWhite);
            t =
                new Transformation(TransformationType.Scale, 1, 0.5F, startTime + timeOffset,
                                   startTime + timeOffset + length);
            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", score.count50), SkinManager.Current.FontScore,
                                SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx1, row3 + textoffset), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);

            p =
                new pSprite(SkinManager.Load("hit300g"), FieldTypes.Window, OriginTypes.Centre,
                            ClockTypes.Game, new Vector2(imgx2, row1), 0.9F, true, Color.TransparentWhite);
            t =
                new Transformation(TransformationType.Scale, 1, 0.5F, startTime + timeOffset,
                                   startTime + timeOffset + length);
            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", score.countGeki), SkinManager.Current.FontScore,
                                SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx2, row1 + textoffset), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);


            p =
                new pSprite(SkinManager.Load("hit100k"), FieldTypes.Window, OriginTypes.Centre,
                            ClockTypes.Game, new Vector2(imgx2, row2), 0.9F, true, Color.TransparentWhite);
            t =
                new Transformation(TransformationType.Scale, 1, 0.5F, startTime + timeOffset,
                                   startTime + timeOffset + length);
            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", score.countKatu), SkinManager.Current.FontScore,
                                SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx2, row2 + textoffset), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);

            p =
                new pSprite(SkinManager.Load("hit0"), FieldTypes.Window, OriginTypes.Centre,
                            ClockTypes.Game, new Vector2(imgx2, row3), 0.9F, true, Color.TransparentWhite);
            t =
                new Transformation(TransformationType.Scale, 1, 0.5F, startTime + timeOffset,
                                   startTime + timeOffset + length);
            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", score.countMiss), SkinManager.Current.FontScore,
                                SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx2, row3 + textoffset), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);

            p =
                new pSprite(SkinManager.Load("ranking-maxcombo"), FieldTypes.Window, OriginTypes.TopLeft,
                            ClockTypes.Game, new Vector2(imgx1 - 35, row4 - 8), 0.81F, true, Color.TransparentWhite);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", score.maxCombo), SkinManager.Current.FontScore,
                                SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx1 - 65, row4 + 10), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);

            p =
                new pSprite(SkinManager.Load("ranking-accuracy"), FieldTypes.Window, OriginTypes.TopLeft,
                            ClockTypes.Game, new Vector2(imgx2 - 58, row4 - 8), 0.81F, true, Color.TransparentWhite);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);

            p =
                new pSpriteText(String.Format("{0:0.00}%", score.accuracy * 100), SkinManager.Current.FontScore,
                                SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx2 - 86, row4 + 10), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);
            leftPanel.Add(p);

            if (score.ranking < Rankings.F)
            {
                p =
                    new pSprite(SkinManager.Load("ranking-" + score.ranking), FieldTypes.Window,
                                OriginTypes.Centre,
                                ClockTypes.Game, new Vector2(180, 270), 0.3F, true, Color.TransparentWhite);
                t =
                    new Transformation(TransformationType.Scale, 1.4f, 1f, startTime + timeOffset,
                                       startTime + timeOffset + 1000);
                t.Easing = EasingTypes.Out;
                p.Transformations.Add(t);
                t =
                    new Transformation(TransformationType.Fade, 0, 0.4f, startTime + timeOffset,
                                       startTime + timeOffset + 1000);
                t.Easing = EasingTypes.Out;
                p.Transformations.Add(t);
                spriteManager.Add(p);
                leftPanel.Add(p);
                if (score.ranking < Rankings.B)
                {
                    p =
                        new pSprite(SkinManager.Load("ranking-" + score.ranking), FieldTypes.Window,
                                    OriginTypes.Centre,
                                    ClockTypes.Game, new Vector2(180, 270), 0.9F, true, Color.TransparentWhite);
                    t =
                        new Transformation(TransformationType.Scale, 1f, 2f, startTime + timeOffset + 1000,
                                           startTime + timeOffset + 1400);
                    t.Easing = EasingTypes.In;
                    p.Transformations.Add(t);
                    leftPanel.Add(p);
                    t =
                        new Transformation(TransformationType.Fade, 0.4f, 0, startTime + timeOffset + 1000,
                                           startTime + timeOffset + 1400);
                    t.Easing = EasingTypes.In;
                    p.Transformations.Add(t);
                    spriteManager.Add(p);
                    leftPanel.Add(p);
                }
            }

            if (score.perfect)
            {
                p =
                    new pSprite(SkinManager.Load("ranking-perfect"), FieldTypes.Window,
                                OriginTypes.Centre,
                                ClockTypes.Game, new Vector2(200, 430), 0.99F, true, Color.TransparentWhite, "ranking");
                t =
                    new Transformation(TransformationType.Scale, 1.1F, 1, startTime + timeOffset,
                                       startTime + timeOffset + 600);
                t.Easing = EasingTypes.Out;
                p.Transformations.Add(t);
                t =
                    new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                       startTime + timeOffset + 600);
                t.Easing = EasingTypes.Out;
                p.Transformations.Add(t);
                spriteManager.Add(p);
                leftPanel.Add(p);
            }

            s_white =
                new pSprite(GameBase.WhitePixel, FieldTypes.WindowNone, OriginTypes.TopLeft, ClockTypes.Game,
                            Vector2.Zero, 1, false,
                            Color.TransparentWhite);
            s_white.UseVectorScale = true;
            s_white.VectorScale    = new Vector2(GameBase.WindowWidth, GameBase.WindowHeight);
            t =
                new Transformation(TransformationType.Fade, 1, 0, startTime + timeOffset + 1000,
                                   startTime + timeOffset + 2400);
            s_white.Transformations.Add(t);
            spriteManager.Add(s_white);
            leftPanel.Add(s_white);
        }
Exemplo n.º 18
0
        internal Spinner(int startTime, int endTime, HitObjectSoundType soundType, bool spinnerStuff)
        {
            Position = new Vector2(GameBase.GamefieldDefaultWidth / 2, GameBase.GamefieldDefaultHeight / 2);


            StartTime = startTime;
            EndTime   = endTime;
            Type      = HitObjectType.Spinner | HitObjectType.NewCombo;
            SoundType = soundType;
            Colour    = Color.Gray;

            SpriteCollection = new List <pSprite>();
            DimCollection    = new List <pSprite>();

            spriteBackground =
                new pSprite(SkinManager.Load("spinner-background"), FieldTypes.Window,
                            OriginTypes.TopLeft,
                            ClockTypes.Audio, new Vector2(0, 45), SpriteManager.drawOrderFwd(StartTime - 1), false,
                            Color.White);
            SpriteCollection.Add(spriteBackground);

            spriteCircle =
                new pSprite(SkinManager.Load("spinner-circle"), FieldTypes.Window,
                            OriginTypes.Centre,
                            ClockTypes.Audio, new Vector2(320, 264), SpriteManager.drawOrderFwd(StartTime), false,
                            Color.White);
            SpriteCollection.Add(spriteCircle);

            spriteScoreMetre =
                new pSprite(SkinManager.Load("spinner-metre"), FieldTypes.Window,
                            OriginTypes.TopLeft,
                            ClockTypes.Audio, new Vector2(0, 45), SpriteManager.drawOrderFwd(StartTime + 1), false,
                            Color.White);
            SpriteCollection.Add(spriteScoreMetre);

            spriteRpmBackground = new pSprite(SkinManager.Load("spinner-rpm"), FieldTypes.Window,
                                              OriginTypes.TopLeft,
                                              ClockTypes.Audio,
                                              new Vector2(233, 445), SpriteManager.drawOrderFwd(StartTime + 3), false,
                                              Color.White);


            spriteRpmText = new pSpriteText("", SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap,
                                            FieldTypes.Window, OriginTypes.TopRight,
                                            ClockTypes.Audio, new Vector2(400, 448),
                                            SpriteManager.drawOrderFwd(StartTime + 4), false,
                                            Color.White);
            spriteRpmText.CurrentScale = 0.9f;

            if (GameBase.Mode != Modes.Edit && spinnerStuff)
            {
                SpriteCollection.Add(spriteRpmText);
                SpriteCollection.Add(spriteRpmBackground);
            }

            SpriteApproachCircle =
                new pSprite(SkinManager.Load("approachcircle"), FieldTypes.Window, OriginTypes.Centre,
                            ClockTypes.Audio, new Vector2(320, 264), SpriteManager.drawOrderFwd(StartTime + 2), false,
                            SkinManager.LoadColour("SpinnerApproachCircle"));
            if (Player.currentScore == null || !ModManager.CheckActive(Player.currentScore.enabledMods, Mods.Hidden))
            {
                SpriteCollection.Add(SpriteApproachCircle);
            }

            spriteBonus = new pSpriteText("", SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap,
                                          FieldTypes.Window, OriginTypes.Centre,
                                          ClockTypes.Audio, new Vector2(320, 344),
                                          SpriteManager.drawOrderFwd(StartTime + 3), false,
                                          Color.White);
            SpriteCollection.Add(spriteBonus);

            UpdateDraw();

            if (GameBase.Mode != Modes.Edit && spinnerStuff)
            {
                SpriteSpin = new pSprite(SkinManager.Load("spinner-spin"), FieldTypes.Window, OriginTypes.Centre,
                                         ClockTypes.Audio, new Vector2(320, 380),
                                         SpriteManager.drawOrderFwd(StartTime + 2), false, Color.White);
                SpriteSpin.Transformations.Add(
                    new Transformation(TransformationType.Fade, 0, 1, StartTime - HitObjectManager.FadeIn / 3,
                                       StartTime));
                SpriteSpin.Transformations.Add(
                    new Transformation(TransformationType.Fade, 1, 0, StartTime + Math.Min(1600, endTime - startTime),
                                       StartTime + Math.Min(2000, endTime - startTime)));
                SpriteCollection.Add(SpriteSpin);

                SpriteClear = new pSprite(SkinManager.Load("spinner-clear"), FieldTypes.Window, OriginTypes.Centre,
                                          ClockTypes.Audio, new Vector2(320, 160),
                                          SpriteManager.drawOrderFwd(StartTime + 2), false, Color.White);
                SpriteClear.Transformations.Add(
                    new Transformation(TransformationType.Fade, 0, 0, startTime, endTime));
                SpriteCollection.Add(SpriteClear);
            }


            randomizer = new Random();
        }
Exemplo n.º 19
0
        public override void Initialize()
        {
            ReplayMode = InputManager.ReplayMode;

            if (ReplayMode)
            {
                if (InputManager.ReplayStreaming)
                {
                    score            = Player.currentScore;
                    score.playerName = ChatEngine.watchTarget;
                }
                else
                {
                    score        = InputManager.ReplayScore;
                    score.replay = null;

                    if (score.rawGraph != null)
                    {
                        score.ReadGraphData(score.rawGraph);
                    }
                }
            }
            else
            {
                score            = Player.currentScore;
                score.playerName = ConfigManager.sUsername;

                rankingDialog = new RankingDialog(this);
            }

            InputManager.ReplayMode           = false;
            InputManager.ReplayStreaming      = false;
            InputManager.ReplayStreamingStart = 0;

            Randomizer = new Random();

            startTime = GameBase.Time + 300;

            KeyboardHandler.OnKeyPressed += GameBase_OnKeyPressed;
            MouseHandler.OnClick         += GameBase_OnClick;

            spriteManager = new SpriteManager();

            Texture2D ss = null;

            if (SkinManager.Current.RawName == "Default")
            {
                try
                {
                    ss = content.Load <Texture2D>("ranking-background");
                }
                catch
                {
                }
            }

            pSprite bg =
                new pSprite(ss ?? SkinManager.Load("playfield"), FieldTypes.Window, OriginTypes.TopLeft,
                            ClockTypes.Game, Vector2.Zero, 0, true, ss != null ? Color.White : new Color(146, 148, 214));

            spriteManager.Add(bg);

            pSprite p =
                new pSprite(SkinManager.Load("ranking-title"), FieldTypes.Window, OriginTypes.TopLeft,
                            ClockTypes.Game, new Vector2(360, 0), 0.8F, true, Color.White);

            spriteManager.Add(p);

            p =
                new pSprite(SkinManager.Load("ranking-graph"), FieldTypes.Window, OriginTypes.TopLeft,
                            ClockTypes.Game, new Vector2(80, 360), 0.8F, true, Color.White);
            spriteManager.Add(p);

            p =
                new pSprite(SkinManager.Load("ranking-panel"), FieldTypes.Window, OriginTypes.TopLeft,
                            ClockTypes.Game, new Vector2(0, 46), 0.2F, true, Color.White);
            spriteManager.Add(p);
            p.Additive = true;

            stringTotalScore = String.Format("{0:00000000}", score.totalScore);

            s_score1 =
                new pSpriteText("", SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap, FieldTypes.Window, OriginTypes.Centre, ClockTypes.Game,
                                new Vector2(180, 94), 0.8F, true, Color.White);
            s_score1.CurrentScale = 1.05f;
            spriteManager.Add(s_score1);

            int textx1 = 80;
            int imgx1  = 40;
            int textx2 = 280;
            int imgx2  = 240;

            int row1 = 160;
            int row2 = 220;
            int row3 = 280;
            int row4 = 320;

            int textoffset = -25;

            int     timeOffset  = 1000;
            int     timeOffset2 = 1300;
            Vector2 tMove       = new Vector2(40, 0);
            int     length      = 400;

            p =
                new pSprite(SkinManager.Load("hit300"), FieldTypes.Window, OriginTypes.Centre,
                            ClockTypes.Game, new Vector2(imgx1, row1), 0.9F, true, Color.TransparentWhite);
            Transformation t =
                new Transformation(TransformationType.Scale, 1, 0.5F, startTime + timeOffset,
                                   startTime + timeOffset + length);

            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", score.count300), SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx1, row1 + textoffset), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            p =
                new pSprite(SkinManager.Load("hit100"), FieldTypes.Window, OriginTypes.Centre,
                            ClockTypes.Game, new Vector2(imgx1, row2), 0.9F, true, Color.TransparentWhite);
            t =
                new Transformation(TransformationType.Scale, 1, 0.5F, startTime + timeOffset,
                                   startTime + timeOffset + length);
            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", score.count100), SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx1, row2 + textoffset), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            p =
                new pSprite(SkinManager.Load("hit50"), FieldTypes.Window, OriginTypes.Centre,
                            ClockTypes.Game, new Vector2(imgx1, row3), 0.9F, true, Color.TransparentWhite);
            t =
                new Transformation(TransformationType.Scale, 1, 0.5F, startTime + timeOffset,
                                   startTime + timeOffset + length);
            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", score.count50), SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx1, row3 + textoffset), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            p =
                new pSprite(SkinManager.Load("hit300g"), FieldTypes.Window, OriginTypes.Centre,
                            ClockTypes.Game, new Vector2(imgx2, row1), 0.9F, true, Color.TransparentWhite);
            t =
                new Transformation(TransformationType.Scale, 1, 0.5F, startTime + timeOffset,
                                   startTime + timeOffset + length);
            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", score.countGeki), SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx2, row1 + textoffset), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);


            p =
                new pSprite(SkinManager.Load("hit100k"), FieldTypes.Window, OriginTypes.Centre,
                            ClockTypes.Game, new Vector2(imgx2, row2), 0.9F, true, Color.TransparentWhite);
            t =
                new Transformation(TransformationType.Scale, 1, 0.5F, startTime + timeOffset,
                                   startTime + timeOffset + length);
            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", score.countKatu), SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx2, row2 + textoffset), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            p =
                new pSprite(SkinManager.Load("hit0"), FieldTypes.Window, OriginTypes.Centre,
                            ClockTypes.Game, new Vector2(imgx2, row3), 0.9F, true, Color.TransparentWhite);
            t =
                new Transformation(TransformationType.Scale, 1, 0.5F, startTime + timeOffset,
                                   startTime + timeOffset + length);
            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", score.countMiss), SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx2, row3 + textoffset), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            p =
                new pSprite(SkinManager.Load("ranking-maxcombo"), FieldTypes.Window, OriginTypes.TopLeft,
                            ClockTypes.Game, new Vector2(imgx1 - 35, row4 - 8), 0.81F, true, Color.TransparentWhite);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", score.maxCombo), SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx1 - 65, row4 + 10), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            p =
                new pSprite(SkinManager.Load("ranking-accuracy"), FieldTypes.Window, OriginTypes.TopLeft,
                            ClockTypes.Game, new Vector2(imgx2 - 58, row4 - 8), 0.81F, true, Color.TransparentWhite);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + length);
            timeOffset += length;
            t.Easing    = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            p =
                new pSpriteText(String.Format("{0:0.00}%", score.accuracy * 100), SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap, FieldTypes.Window,
                                OriginTypes.TopLeft, ClockTypes.Game,
                                new Vector2(textx2 - 86, row4 + 10), 0.8F, true, Color.TransparentWhite);
            p.CurrentScale = 1.12F;
            t =
                new Transformation(p.CurrentPosition - tMove, p.CurrentPosition, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.In;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            p =
                new pSprite(SkinManager.Load("ranking-" + score.ranking), FieldTypes.Window,
                            OriginTypes.Centre,
                            ClockTypes.Game, new Vector2(530, 170), 0.9F, true, Color.TransparentWhite);
            t =
                new Transformation(TransformationType.Scale, 2, 1, startTime + timeOffset,
                                   startTime + timeOffset + 1000);
            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                   startTime + timeOffset + 1000);
            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            spriteManager.Add(p);

            if (score.ranking < Rankings.B)
            {
                p =
                    new pSprite(SkinManager.Load("ranking-" + score.ranking), FieldTypes.Window,
                                OriginTypes.Centre,
                                ClockTypes.Game, new Vector2(530, 170), 0.9F, true, Color.TransparentWhite);
                t =
                    new Transformation(TransformationType.Scale, 1, 2, startTime + timeOffset + 1000,
                                       startTime + timeOffset + 1400);
                t.Easing = EasingTypes.In;
                p.Transformations.Add(t);
                t =
                    new Transformation(TransformationType.Fade, 1, 0, startTime + timeOffset + 1000,
                                       startTime + timeOffset + 1400);
                t.Easing = EasingTypes.In;
                p.Transformations.Add(t);
                spriteManager.Add(p);
            }

            if (score.perfect)
            {
                p =
                    new pSprite(SkinManager.Load("ranking-perfect"), FieldTypes.Window,
                                OriginTypes.Centre,
                                ClockTypes.Game, new Vector2(200, 430), 0.9F, true, Color.TransparentWhite, "ranking");
                t =
                    new Transformation(TransformationType.Scale, 1.1F, 1, startTime + timeOffset,
                                       startTime + timeOffset + 600);
                t.Easing = EasingTypes.Out;
                p.Transformations.Add(t);
                t =
                    new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset,
                                       startTime + timeOffset + 600);
                t.Easing = EasingTypes.Out;
                p.Transformations.Add(t);
                GameBase.spriteManager.Add(p);
            }

            s_white =
                new pSprite(GameBase.WhitePixel, FieldTypes.WindowNone, OriginTypes.TopLeft, ClockTypes.Game,
                            Vector2.Zero, 1, false,
                            Color.TransparentWhite);
            s_white.UseVectorScale = true;
            s_white.VectorScale    = new Vector2(GameBase.WindowWidth, GameBase.WindowHeight);
            t =
                new Transformation(TransformationType.Fade, 1, 0, startTime + timeOffset + 1000,
                                   startTime + timeOffset + 2400);
            s_white.Transformations.Add(t);
            GameBase.spriteManager.Add(s_white);

            pSprite detailsBack =
                new pSprite(GameBase.WhitePixel, FieldTypes.Window,
                            OriginTypes.TopLeft,
                            ClockTypes.Game,
                            new Vector2(0, 0), 0.7F, true, Color.Black);

            detailsBack.VectorScale    = new Vector2(1024, 83);
            detailsBack.UseVectorScale = true;
            spriteManager.Add(detailsBack);

            pText pt =
                new pText(BeatmapManager.Current.DisplayTitle, 22, new Vector2(0, 0), Vector2.Zero, 0.79F, true,
                          Color.White, false);

            spriteManager.Add(pt);

            pt =
                new pText("Beatmap by " + BeatmapManager.Current.Creator, 16, new Vector2(1, 20), Vector2.Zero, 0.79F,
                          true, Color.White, false);
            spriteManager.Add(pt);
            pt = new pText("Played by " + score.playerName + " on " +
                           score.date.ToString("yy/MM/dd hh:mm:ss", GameBase.nfi), 16, new Vector2(1, 34), Vector2.Zero,
                           0.79F, true, Color.White, false);
            spriteManager.Add(pt);

            if (!ReplayMode)
            {
                b_retry =
                    new pSprite(SkinManager.Load("ranking-retry"), FieldTypes.Window,
                                OriginTypes.Centre,
                                ClockTypes.Game,
                                new Vector2(520, 320), 0.94F, true,
                                new Color(255, 255, 255, 178));
                b_retry.OnClick    += retry_OnClick;
                b_retry.IsClickable = true;
                b_retry.HoverEffect = new Transformation(TransformationType.Fade, 0.7F, 1, 0, 200);
                spriteManager.Add(b_retry);
            }

            b_replay =
                new pSprite(SkinManager.Load("ranking-replay"), FieldTypes.Window,
                            OriginTypes.Centre,
                            ClockTypes.Game,
                            new Vector2(520, 380), 0.94F, true,
                            new Color(255, 255, 255, 178));
            b_replay.OnClick    += replay_OnClick;
            b_replay.IsClickable = true;
            b_replay.HoverEffect = new Transformation(TransformationType.Fade, 0.7F, 1, 0, 200);
            spriteManager.Add(b_replay);

            b_back =
                new pSprite(SkinManager.Load("ranking-back"), FieldTypes.Window,
                            OriginTypes.Centre,
                            ClockTypes.Game,
                            new Vector2(520, 440), 0.94F, true,
                            new Color(255, 255, 255, 178));
            b_back.OnClick    += return_OnClick;
            b_back.IsClickable = true;
            b_back.HoverEffect = new Transformation(TransformationType.Fade, 0.7F, 1, 0, 200);
            spriteManager.Add(b_back);

            int   time = 0;
            float dep  = 0;
            int   x    = 600;

            foreach (Mods m in Enum.GetValues(typeof(Mods)))
            {
                if (ModManager.CheckActive(score.enabledMods, m))
                {
                    Transformation t2 =
                        new Transformation(TransformationType.Scale, 2, 1, GameBase.Time + time,
                                           GameBase.Time + time + 400);
                    Transformation t3 =
                        new Transformation(TransformationType.Fade, 0, 1, GameBase.Time + time,
                                           GameBase.Time + time + 400);
                    t2.Easing = EasingTypes.In;
                    t3.Easing = EasingTypes.In;

                    p =
                        new pSprite(SkinManager.Load("selection-mod-" + m.ToString().ToLower()),
                                    FieldTypes.Window,
                                    OriginTypes.Centre,
                                    ClockTypes.Game,
                                    new Vector2(x, 260), 0.92F + dep, true,
                                    Color.TransparentWhite);
                    p.Transformations.Add(t2);
                    p.Transformations.Add(t3);
                    spriteManager.Add(p);

                    time += 500;
                    dep  += 0.00001f;
                    x    -= 20;
                }
            }

            graphLine = new List <Line>();

            if (score.hpGraph != null && score.hpGraph.Count > 0)
            {
                float time1   = score.hpGraph[0].X;
                float time2   = score.hpGraph[score.hpGraph.Count - 1].X;
                float ratio   = 186 / (time2 - time1);
                int   height  = 86;
                int   offsetX = 94;
                int   offsetY = 373;

                Vector2[] va = score.hpGraph.ToArray();

                for (int i = 0; i < va.Length; i++)
                {
                    va[i].X = GameBase.WindowRatio * ((va[i].X - time1) * ratio + offsetX);
                    bool ok = va[i].Y > 0.5;
                    va[i].Y = GameBase.WindowRatio * ((1 - va[i].Y) * height + offsetY);

                    if (i > 0)
                    {
                        Line l = new Line(va[i - 1], va[i], 1, (ok ? Color.YellowGreen : Color.Red));
                        graphLine.Add(l);
                        graphLength += l.rho;
                    }
                }
            }

            Console.WriteLine("graph length is " + graphLength);
            drawList = new List <Line>();

            base.Initialize();

            GameBase.LoadComplete();

            if (ReplayMode)
            {
                Progress(false);
            }
            else
            {
                ApplauseChannel = AudioEngine.PlaySample(AudioEngine.s_Applause);
            }
        }
Exemplo n.º 20
0
        override internal void UpdateCalculations(bool force)
        {
            if (force || taikoMiddle == null)
            {
                sliderStartCircle = new HitCircle((int)Position.X, (int)Position.Y, StartTime, false, SoundType);
                sliderStartCircle.SetColour(Colour);

                for (int i = 0; i < sliderStartCircle.SpriteCollection.Count; i++)
                {
                    SpriteCollection.Add(sliderStartCircle.SpriteCollection[i]);
                    HitObjectManager.spriteManager.Add(sliderStartCircle.SpriteCollection[i]);
                }

                float scalefactor = (SoundType & HitObjectSoundType.Finish) == 0 ? 0.7f : 1;

                sliderLength *= sliderRepeatCount;
                double v = HitObjectManager.SliderScoringPointDistance * BeatmapManager.Current.DifficultySliderTickRate;
                double b = AudioEngine.beatLengthAt(StartTime);
                EndTime = StartTime + (int)(sliderLength / v * b);

                taikoMiddle = new pSprite(SkinManager.Load("taiko-roll-middle"), FieldTypes.Gamefield, OriginTypes.TopLeft, ClockTypes.Audio, new Vector2(Position.X, Position.Y - HitObjectManager.HitObjectRadius * scalefactor), SpriteManager.drawOrderBwd(EndTime + 10),
                                          false, new Color(252, 184, 6));
                taikoMiddle.UseVectorScale = true;
                taikoMiddle.VectorScale    = new Vector2((float)sliderLength * GameBase.WindowRatio / HitObjectManager.SpriteRatio * (1 / scalefactor), 1);
                taikoMiddle.Transformations.Add(new Transformation(TransformationType.Fade, 0, 1, StartTime - HitObjectManager.PreEmpt, StartTime));
                taikoMiddle.Transformations.Add(new Transformation(TransformationType.Fade, 1, 0, EndTime, EndTime + HitObjectManager.PreEmptSliderComplete));
                HitObjectManager.spriteManager.Add(taikoMiddle);
                SpriteCollection.Add(taikoMiddle);

                taikoEnd = new pSprite(SkinManager.Load("taiko-roll-end"), FieldTypes.Gamefield, OriginTypes.TopLeft, ClockTypes.Audio, new Vector2(Position.X, Position.Y - HitObjectManager.HitObjectRadius * scalefactor), SpriteManager.drawOrderBwd(EndTime + 8),
                                       false, new Color(252, 184, 6));
                taikoEnd.OriginPosition = new Vector2((float)-sliderLength * GameBase.WindowRatio / HitObjectManager.SpriteRatio * (1 / scalefactor), 0);
                taikoEnd.Transformations.Add(new Transformation(TransformationType.Fade, 0, 1, StartTime - HitObjectManager.PreEmpt, StartTime));
                taikoEnd.Transformations.Add(new Transformation(TransformationType.Fade, 1, 0, EndTime, EndTime + HitObjectManager.PreEmptSliderComplete));
                HitObjectManager.spriteManager.Add(taikoEnd);
                SpriteCollection.Add(taikoEnd);

                sliderBall.Transformations.Add(new Transformation(sliderStartCircle.Position,
                                                                  sliderStartCircle.Position, StartTime - 500, EndTime));
                sliderFollower.Transformations.Add(new Transformation(sliderStartCircle.Position,
                                                                      sliderStartCircle.Position, StartTime, EndTime));

                counter =
                    new pSpriteText("", SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap,
                                    FieldTypes.Gamefield, OriginTypes.Centre, ClockTypes.Audio,
                                    new Vector2(100, 150), 0.9f, false, Color.White);
                counter.CurrentScale = 0.8f;
                counter.Transformations.Add(new Transformation(TransformationType.Fade, 0, 1, StartTime, StartTime));
                counter.Transformations.Add(new Transformation(TransformationType.Fade, 0.6f, 0, EndTime, EndTime + 300));
                HitObjectManager.spriteManager.Add(counter);

                newCache = false;

                if (scalefactor != 1)
                {
                    foreach (pSprite p in SpriteCollection)
                    {
                        p.CurrentScale *= 0.7f;
                    }
                }
            }
        }
Exemplo n.º 21
0
        internal HitCircleOsu(HitObjectManager hom, Vector2 pos, int startTime, bool newCombo, bool addWhistle, bool addFinish, bool addClap, int comboOffset)
            : base(hom)
        {
            Position     = pos;
            BasePosition = pos;
            StartTime    = startTime;
            EndTime      = startTime;

            Type               = HitObjectType.Normal;
            SoundType          = HitObjectSoundType.None;
            SampleSet          = Audio.SampleSet.None;
            SampleSetAdditions = Audio.SampleSet.None;

            int p = LocalPreEmpt;

            if (newCombo)
            {
                Type       |= HitObjectType.NewCombo;
                ComboOffset = comboOffset;
            }
            if (addWhistle)
            {
                SoundType |= HitObjectSoundType.Whistle;
            }
            if (addFinish)
            {
                SoundType |= HitObjectSoundType.Finish;
            }
            if (addClap)
            {
                SoundType |= HitObjectSoundType.Clap;
            }


            if (hom.spriteManager == null)
            {
                return;
            }

            bool hidden            = ModManager.CheckActive(hitObjectManager.ActiveMods, Mods.Hidden);
            bool hasApproachCircle = ShowApproachCircle && (!hidden || (hom.hitObjects.Count == 0 && ConfigManager.sHiddenShowFirstApproach));

            Color white = Color.White;

            pTexture t_approachCircle = TextureManager.Load(@"approachcircle");
            pTexture t_hit1           = TextureManager.LoadFirstAvailable(new[] { SpriteNameHitCircle, default_sprite_hitcircle });

            pTexture[] t_hit2 = TextureManager.LoadAll((t_hit1 != null ? t_hit1.AssetName : default_sprite_hitcircle) + @"overlay");

            SpriteApproachCircle = new pSprite(t_approachCircle, Fields.Gamefield, Origins.Centre, Clocks.Audio, Position, SpriteManager.drawOrderFwdPrio(StartTime - p), false, white);
            if (hasApproachCircle)
            {
                SpriteCollection.Add(SpriteApproachCircle);
            }
            SpriteApproachCircle.Transformations.Add(new Transformation(TransformationType.Fade, 0, 0.9F, startTime - p, Math.Min(startTime, startTime - p + HitObjectManager.FadeIn * 2)));
            SpriteApproachCircle.Transformations.Add(new Transformation(TransformationType.Scale, 4, 1, startTime - p, startTime));

            SpriteHitCircle1 = new pSprite(t_hit1, Fields.Gamefield, Origins.Centre, Clocks.Audio, Position, SpriteManager.drawOrderBwd(StartTime), false, white)
            {
                TagNumeric = 1
            };
            SpriteCollection.Add(SpriteHitCircle1);
            DimCollection.Add(SpriteHitCircle1);


            SpriteHitCircle2 = new pAnimation(t_hit2, Fields.Gamefield, Origins.Centre, Clocks.Audio, Position,
                                              SpriteManager.drawOrderBwd(StartTime - (hitObjectManager.ShowOverlayAboveNumber ? 2 : 1)), false, Color.White);
            SpriteHitCircle2.FrameDelay = 1000 / 2F;
            SpriteCollection.Add(SpriteHitCircle2);
            DimCollection.Add(SpriteHitCircle2);

            SpriteHitCircleText = new pSpriteText(null, SkinManager.Current.FontHitCircle, SkinManager.Current.FontHitCircleOverlap, Fields.Gamefield, Origins.Centre,
                                                  Clocks.Audio, Position, SpriteManager.drawOrderBwd(StartTime - (hitObjectManager.ShowOverlayAboveNumber ? 1 : 2)), false, Color.White);
            SpriteHitCircleText.Scale = TEXT_SIZE;

            if (ShowCircleText)
            {
                SpriteCollection.Add(SpriteHitCircleText);
            }

            Transformation t;

            //fade in
            if (hidden)
            {
                t = new Transformation(TransformationType.Fade, 0, 1, startTime - p, startTime - (int)(p * 0.6));
            }
            else
            {
                t = new Transformation(TransformationType.Fade, 0, 1, startTime - p, startTime - p + HitObjectManager.FadeIn);
            }

            SpriteHitCircle1.Transformations.Add(t.Clone());
            SpriteHitCircle2.Transformations.Add(t.Clone());
            SpriteHitCircleText.Transformations.Add(t.Clone());

            //fade out
            if (GameBase.Mode == OsuModes.Edit)
            {
                SpriteSelectionCircle =
                    new pSprite(TextureManager.Load(@"hitcircleselect"), Fields.Gamefield,
                                Origins.Centre, Clocks.Game, Position,
                                SpriteManager.drawOrderBwd(StartTime - 3), true, Color.TransparentWhite);
                SpriteCollection.Add(SpriteSelectionCircle);

                if (ConfigManager.sEditorHitAnimations)
                {
                    Arm(true);
                }
                else
                {
                    t = new Transformation(TransformationType.Fade, 1, 0, startTime, startTime + hitObjectManager.ForceFadeOut);
                    SpriteHitCircle1.Transformations.Add(t.Clone());
                    SpriteHitCircle2.Transformations.Add(t.Clone());
                    SpriteHitCircleText.Transformations.Add(t.Clone());
                    SpriteApproachCircle.Transformations.Add(t.Clone());
                }

                SpriteApproachCircle.Transformations.Add(new Transformation(TransformationType.Scale, 1, 1.1F, startTime, startTime + 100));
            }
            else
            {
                Disarm();
            }
        }
Exemplo n.º 22
0
        private void loadScores(SlotTeams teamId, int tabId, bool slowAnimations)
        {
            bool isFruits = playMode == PlayModes.CatchTheBeat;

            int startTime = GameBase.Time;

            Score scoreEntry = tabId != 0 ? PlayerVs.LastScoreEntries[tabId - 1].Score : (teamId == SlotTeams.Blue ? team1Score : team2Score);

            //load the right scoreSprites we are about to replace
            List <pSprite> scoreSprites = teamId == SlotTeams.Blue ? scoreSpritesBlue : scoreSpritesRed;
            HealthGraph    currentHpGraph;

            spriteManagerWideScrolling.RemoveRange(scoreSprites);
            scoreSprites.Clear();
            //create new scoresprites
            const int textx1 = 80;
            const int imgx1  = 40;
            const int textx2 = 280;
            //const int imgx2 = 240;

            const int row1 = 160;
            const int row2 = 220;
            const int row3 = 280;
            const int row4 = 320;

            int textoffset = SkinManager.UseNewLayout ? -16 : -25;

            Vector2 tMove = new Vector2(0, 20);

            int            timeOffset  = slowAnimations ? 1000 : 0;
            int            timeOffset2 = slowAnimations ? 1300 : 0;
            int            length      = slowAnimations ? 400 : 20;
            pSprite        p;
            Transformation t;

            p =
                new pSpriteText(String.Format("{0}x", scoreEntry.Count300), SkinManager.Current.FontScore,
                                SkinManager.Current.FontScoreOverlap, Fields.TopLeft,
                                Origins.TopLeft, Clocks.Game,
                                new Vector2(textx1, row1 + textoffset), 0.8F, true, Color.TransparentWhite);
            p.Scale = 1.12F;
            t       =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.Out;
            p.Transformations.Add(t);
            scoreSprites.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", scoreEntry.Count100), SkinManager.Current.FontScore,
                                SkinManager.Current.FontScoreOverlap, Fields.TopLeft,
                                Origins.TopLeft, Clocks.Game,
                                new Vector2(textx1, row2 + textoffset), 0.8F, true, Color.TransparentWhite);
            p.Scale = 1.12F;

            t =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.Out;
            p.Transformations.Add(t);
            scoreSprites.Add(p);

            p =
                new pSpriteText(String.Format("{0}x", scoreEntry.Count50), SkinManager.Current.FontScore,
                                SkinManager.Current.FontScoreOverlap, Fields.TopLeft,
                                Origins.TopLeft, Clocks.Game,
                                new Vector2(textx1, row3 + textoffset), 0.8F, true, Color.TransparentWhite);
            p.Scale = 1.12F;
            t       =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.Out;
            p.Transformations.Add(t);
            scoreSprites.Add(p);

            if (!isFruits)
            {
                p =
                    new pSpriteText(String.Format("{0}x", scoreEntry.CountGeki), SkinManager.Current.FontScore,
                                    SkinManager.Current.FontScoreOverlap, Fields.TopLeft,
                                    Origins.TopLeft, Clocks.Game,
                                    new Vector2(textx2, row1 + textoffset), 0.8F, true, Color.TransparentWhite);
                p.Scale = 1.12F;

                t =
                    new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                       startTime + timeOffset2 + length);
                timeOffset2 += length;
                t.Easing     = EasingTypes.Out;
                p.Transformations.Add(t);
                scoreSprites.Add(p);

                p =
                    new pSpriteText(String.Format("{0}x", scoreEntry.CountKatu), SkinManager.Current.FontScore,
                                    SkinManager.Current.FontScoreOverlap, Fields.TopLeft,
                                    Origins.TopLeft, Clocks.Game,
                                    new Vector2(textx2, row2 + textoffset), 0.8F, true, Color.TransparentWhite);
                p.Scale = 1.12F;
                t       =
                    new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                       startTime + timeOffset2 + length);
                timeOffset2 += length;
                t.Easing     = EasingTypes.Out;
                p.Transformations.Add(t);
                scoreSprites.Add(p);
            }

            p =
                new pSpriteText(String.Format("{0}x", scoreEntry.CountMiss), SkinManager.Current.FontScore,
                                SkinManager.Current.FontScoreOverlap, Fields.TopLeft,
                                Origins.TopLeft, Clocks.Game,
                                new Vector2(textx2, (isFruits ? row1 : row3) + textoffset), 0.8F, true,
                                Color.TransparentWhite);
            p.Scale = 1.12F;
            t       =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.Out;
            p.Transformations.Add(t);
            scoreSprites.Add(p);

            p =
                new pSpriteText(tabId == 0 ? "xxxx" : String.Format("{0}x", scoreEntry.MaxCombo),
                                SkinManager.Current.FontScore,
                                SkinManager.Current.FontScoreOverlap, Fields.TopLeft,
                                Origins.TopLeft, Clocks.Game,
                                new Vector2(textx1 - 65, row4 + 10), 0.8F, true, Color.TransparentWhite);
            p.Scale = 1.12F;
            t       =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            timeOffset2 += length;
            t.Easing     = EasingTypes.Out;
            p.Transformations.Add(t);
            scoreSprites.Add(p);

            p =
                new pSpriteText(String.Format("{0:0.00}%", scoreEntry.Accuracy * 100), SkinManager.Current.FontScore,
                                SkinManager.Current.FontScoreOverlap, Fields.TopLeft,
                                Origins.TopLeft, Clocks.Game,
                                new Vector2(textx2 - 86, row4 + 10), 0.8F, true, Color.TransparentWhite);
            p.Scale = 1.12F;
            t       =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length);
            t.Easing = EasingTypes.Out;
            p.Transformations.Add(t);
            scoreSprites.Add(p);
            timeOffset2 += length;

            string stringTotalScore = String.Format("{0:00000000}", scoreEntry.TotalScore);

            pSpriteText ps =
                new pSpriteText(stringTotalScore, SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap,
                                Fields.TopLeft, Origins.Centre, Clocks.Game,
                                /*new Vector2(180, row4 + 110)*/ new Vector2(180, 94), 0.8F, true, Color.White);

            ps.Scale = SkinManager.UseNewLayout ? 1.3f : 1.2f;
            if (SkinManager.UseNewLayout)
            {
                ps.SpacingOverlap = -2;
            }
            ps.Alpha = 0;
            t        =
                new Transformation(TransformationType.Fade, 0, 1, startTime + timeOffset2,
                                   startTime + timeOffset2 + length * 2);
            t.Easing = EasingTypes.Out;
            ps.Transformations.Add(t);
            scoreSprites.Add(ps);


            int offsetX = 0;

            switch (teamId)
            {
            case SlotTeams.Blue:
                break;

            case SlotTeams.Red:
                offsetX = GameBase.WindowManager.WidthScaled - 279;
                break;
            }
            //scale and move the sprites to the correct panel
            float scale = 0.6f * 1.10f;

            for (int j = 0; j < scoreSprites.Count; j++)
            {
                pSprite pp = scoreSprites[j];
                pp.Scale     *= scale;
                pp.Position.X = imgx1 + (pp.Position.X - imgx1) * scale + offsetX;
                pp.Position.Y = row1 + (pp.Position.Y - row1) * scale + 18;
                spriteManagerWideScrolling.Add(pp);
            }

            //Actual graph position relative to the graph sprite
            float healthGraphX = rankingGraphPosition.X + (SkinManager.UseNewLayout ? 0 : 5) + offsetX;
            float healthGraphY = rankingGraphPosition.Y - (SkinManager.UseNewLayout ? 65 : 44);

            //finally create the hpGraph
            currentHpGraph = new HealthGraph(startTime, slowAnimations ? 2000 : 4000, scoreEntry, new RectangleF(healthGraphX, healthGraphY, 150, 68));

            if (teamId == SlotTeams.Blue)
            {
                team1HPgraph = currentHpGraph;
            }
            else
            {
                team2HPgraph = currentHpGraph;
            }

            spriteManagerWideScrolling.Add(currentHpGraph);
        }
Exemplo n.º 23
0
        internal ScorePanel(Score score, EventHandler action)
        {
            Score = score;

            base_depth += 0.0001f * score.OnlineRank;

            s_BackingPlate = new pRectangle(Vector2.Zero, new Vector2(GameBase.BaseSize.X, PANEL_HEIGHT), true, base_depth, new Color4(0, 0, 0, 40))
            {
                Tag = this
            };

            s_BackingPlate.OnHover     += delegate { s_BackingPlate.FadeColour(new Color4(83, 156, 224, 80), 100); };
            s_BackingPlate.OnHoverLost += delegate { s_BackingPlate.FadeColour(new Color4(0, 0, 0, 40), 100); };

            Sprites.Add(s_BackingPlate);

            if (action != null)
            {
                s_BackingPlate.OnClick += action;
            }

            s_BackingPlate.HandleClickOnUp = true;

            pSpriteText rankNumber = new pSpriteText(score.OnlineRank.ToString(), "score", 0, FieldTypes.Standard, OriginTypes.CentreRight, ClockTypes.Mode, Vector2.Zero, 0.9f, true, new Color4(100, 100, 100, 255));

            rankNumber.Offset = new Vector2(GameBase.SuperWidePadding + 20, PANEL_HEIGHT / 2);
            rankNumber.TextConstantSpacing = true;
            rankNumber.SpacingOverlap      = 8;
            rankNumber.ZeroAlpha           = 0.5f;
            rankNumber.ScaleScalar         = 0.5f;
            Sprites.Add(rankNumber);

            pSprite rankingSprite = new pSprite(score.RankingTextureTiny, Vector2.Zero)
            {
                Origin    = OriginTypes.CentreLeft,
                DrawDepth = base_depth + 0.06f,
                Offset    = new Vector2(GameBase.SuperWidePadding + 23, PANEL_HEIGHT / 2)
            };

            Sprites.Add(rankingSprite);

            if (!score.guest)
            {
                pSpriteWeb avatar = new pSpriteWeb(@"https://api.twitter.com/1/users/profile_image/" + score.Username)
                {
                    Offset = new Vector2(GameBase.SuperWidePadding + 80, PANEL_HEIGHT / 2),
                    Origin = OriginTypes.Centre
                };
                Sprites.Add(avatar);
            }


            s_Text        = new pText(score.Username, 26, Vector2.Zero, Vector2.Zero, 0.5f, true, score.guest ? Color4.LightGray : Color4.White, false);
            s_Text.Bold   = true;
            s_Text.Offset = new Vector2(GameBase.SuperWidePadding + 100, 0);
            Sprites.Add(s_Text);

            pSpriteText scoreText = new pSpriteText("000000", "score", 0, FieldTypes.StandardSnapRight, OriginTypes.CentreRight, ClockTypes.Mode, Vector2.Zero, 0.9f, true, new Color4(255, 166, 0, 255));

            scoreText.Offset = new Vector2(GameBase.SuperWidePadding + 200, PANEL_HEIGHT / 2);
            scoreText.ShowInt(score.totalScore, 6, true);
            scoreText.TextConstantSpacing = true;
            scoreText.ZeroAlpha           = 0.5f;
            scoreText.ScaleScalar         = 0.8f;
            Sprites.Add(scoreText);

            pSpriteText accuracy = new pSpriteText((score.accuracy * 100).ToString("00.00", GameBase.nfi) + "%", "score", 0, FieldTypes.StandardSnapRight, OriginTypes.CentreRight, ClockTypes.Mode, Vector2.Zero, 0.9f, true, new Color4(0, 180, 227, 255));

            accuracy.Offset              = new Vector2(GameBase.SuperWidePadding + 20, PANEL_HEIGHT / 2);
            accuracy.ScaleScalar         = 0.8f;
            accuracy.TextConstantSpacing = true;
            Sprites.Add(accuracy);
        }
Exemplo n.º 24
0
        public override void Initialize()
        {
            background =
                new pSprite(TextureManager.Load(OsuTexture.songselect_background), FieldTypes.StandardSnapCentre, OriginTypes.Centre,
                            ClockTypes.Mode, Vector2.Zero, 0, true, new Color4(56, 56, 56, 255));
            background.Scale.X = background.DrawWidth / GameBase.BaseSize.X;

            background.AlphaBlend = false;
            spriteManager.Add(background);

            rankingBackground =
                new pSprite(TextureManager.Load(OsuTexture.ranking_background), FieldTypes.StandardSnapCentreLeft, OriginTypes.CentreLeft,
                            ClockTypes.Mode, Vector2.Zero, 0.4f, true, Color4.White);
            rankingBackground.Position    = new Vector2(5, -20);
            rankingBackground.ScaleScalar = 0.85f;
            layer2.Add(rankingBackground);

            pText artist = new pText(Player.Beatmap.Artist, 30, new Vector2(10, fill_height + 5), 0.5f, true, Color4.OrangeRed)
            {
                TextShadow = true
            };

            layer1.Add(artist);
            pText title = new pText(Player.Beatmap.Title, 30, new Vector2(16 + artist.MeasureText().X / GameBase.BaseToNativeRatioAligned, fill_height + 5), 0.5f, true, Color4.White)
            {
                TextShadow = true
            };

            layer1.Add(title);

            pTexture modeTex;

            switch (Player.Difficulty)
            {
            case Difficulty.Easy:
                modeTex = TextureManager.Load(OsuTexture.songselect_mode_easy);
                break;

            case Difficulty.Expert:
                modeTex = TextureManager.Load(OsuTexture.songselect_mode_expert);
                break;

            default:
                modeTex = TextureManager.Load(OsuTexture.songselect_mode_stream);
                break;
            }

            modeGraphic = new pSprite(modeTex, FieldTypes.StandardSnapRight, OriginTypes.TopRight, ClockTypes.Mode, new Vector2(5, 7), 0.45f, true, Color4.White)
            {
                ScaleScalar = 0.5f
            };
            layer1.Add(modeGraphic);

            rankGraphic = new pSprite(RankableScore.RankingTexture, FieldTypes.StandardSnapBottomRight, OriginTypes.Centre, ClockTypes.Mode, new Vector2(120, 180), 0.46f, true, Color4.White)
            {
                Alpha = 0
            };

            layer1.Add(rankGraphic);

            initializeTransition();

            //Scoring
            {
                float v_offset = -165;

                pText heading = new pText(LocalisationManager.GetString(OsuString.Score), 28, new Vector2(240, v_offset), 0.5f, true, Color4.White)
                {
                    Origin = OriginTypes.TopLeft,
                    Field  = FieldTypes.StandardSnapCentreLeft,
                    Bold   = true
                };
                resultSprites.Add(heading);

                v_offset += 30;

                pSpriteText count = new pSpriteText("000,000", "score", 0, FieldTypes.StandardSnapCentreLeft, OriginTypes.TopRight, ClockTypes.Mode, new Vector2(445, v_offset), 0.9f, true, new Color4(255, 166, 0, 255));
                count.TextConstantSpacing = true;
                countTotalScore           = count;

                resultSprites.Add(count);

                v_offset += 40;

                //Spin Bonus
                heading = new pText(LocalisationManager.GetString(OsuString.Hit), 20, new Vector2(240, v_offset), 0.5f, true, Color4.Gray)
                {
                    Origin = OriginTypes.TopLeft,
                    Field  = FieldTypes.StandardSnapCentreLeft,
                    Bold   = true
                };
                resultSprites.Add(heading);

                count = new pSpriteText("000000", "score", 0, FieldTypes.StandardSnapCentreLeft, OriginTypes.TopRight, ClockTypes.Mode, new Vector2(445, v_offset), 0.9f, true, new Color4(255, 166, 0, 255));
                count.TextConstantSpacing = true;
                count.ZeroAlpha           = 0.5f;
                count.ScaleScalar         = 0.7f;
                resultSprites.Add(count);

                countScoreHit = count;

                v_offset += 25;


                heading = new pText(LocalisationManager.GetString(OsuString.Combo), 20, new Vector2(240, v_offset), 0.5f, true, Color4.Gray)
                {
                    Origin = OriginTypes.TopLeft,
                    Field  = FieldTypes.StandardSnapCentreLeft,
                    Bold   = true
                };
                resultSprites.Add(heading);

                count = new pSpriteText("000000", "score", 0, FieldTypes.StandardSnapCentreLeft, OriginTypes.TopRight, ClockTypes.Mode, new Vector2(445, v_offset), 0.9f, true, new Color4(255, 166, 0, 255));
                count.TextConstantSpacing = true;
                count.ZeroAlpha           = 0.5f;
                count.ScaleScalar         = 0.7f;
                resultSprites.Add(count);

                countScoreCombo = count;

                v_offset += 25;

                heading = new pText(LocalisationManager.GetString(OsuString.Accuracy), 20, new Vector2(240, v_offset), 0.5f, true, Color4.Gray)
                {
                    Origin = OriginTypes.TopLeft,
                    Field  = FieldTypes.StandardSnapCentreLeft,
                    Bold   = true
                };
                resultSprites.Add(heading);

                count = new pSpriteText("000000", "score", 0, FieldTypes.StandardSnapCentreLeft, OriginTypes.TopRight, ClockTypes.Mode, new Vector2(445, v_offset), 0.9f, true, new Color4(255, 166, 0, 255));
                count.TextConstantSpacing = true;
                count.ZeroAlpha           = 0.5f;
                count.ScaleScalar         = 0.7f;
                resultSprites.Add(count);

                countScoreAccuracy = count;

                v_offset += 25;

                heading = new pText(LocalisationManager.GetString(OsuString.Spin), 20, new Vector2(240, v_offset), 0.5f, true, Color4.Gray)
                {
                    Origin = OriginTypes.TopLeft,
                    Field  = FieldTypes.StandardSnapCentreLeft,
                    Bold   = true
                };
                resultSprites.Add(heading);

                count = new pSpriteText("000000", "score", 0, FieldTypes.StandardSnapCentreLeft, OriginTypes.TopRight, ClockTypes.Mode, new Vector2(445, v_offset), 0.9f, true, new Color4(255, 166, 0, 255));
                count.TextConstantSpacing = true;
                count.ZeroAlpha           = 0.5f;
                count.ScaleScalar         = 0.7f;
                resultSprites.Add(count);

                countScoreSpin = count;

                v_offset += 30;

                heading = new pText(LocalisationManager.GetString(OsuString.Accuracy), 28, new Vector2(240, v_offset), 0.5f, true, Color4.White)
                {
                    Origin = OriginTypes.TopLeft,
                    Field  = FieldTypes.StandardSnapCentreLeft,
                    Bold   = true
                };
                resultSprites.Add(heading);

                v_offset += 34;

                count             = new pSpriteText((RankableScore.accuracy * 100).ToString("00.00", GameBase.nfi) + "%", "score", 0, FieldTypes.StandardSnapCentreLeft, OriginTypes.TopRight, ClockTypes.Mode, new Vector2(445, v_offset), 0.9f, true, new Color4(0, 180, 227, 255));
                count.ScaleScalar = 0.7f;
                resultSprites.Add(count);

                v_offset += 20;

                heading = new pText(LocalisationManager.GetString(OsuString.MaxCombo), 28, new Vector2(240, v_offset), 0.5f, true, Color4.White)
                {
                    Origin = OriginTypes.TopLeft,
                    Field  = FieldTypes.StandardSnapCentreLeft,
                    Bold   = true
                };
                resultSprites.Add(heading);

                v_offset += 34;

                count             = new pSpriteText(RankableScore.maxCombo.ToString("#,0", GameBase.nfi) + "x", "score", 0, FieldTypes.StandardSnapCentreLeft, OriginTypes.TopRight, ClockTypes.Mode, new Vector2(445, v_offset), 0.9f, true, new Color4(0, 180, 227, 255));
                count.ScaleScalar = 0.7f;
                resultSprites.Add(count);
            }

            {
                Vector2 pos        = new Vector2(60, -130);
                Vector2 textOffset = new Vector2(150, 0);

                float spacing = 65;

                pSprite hitExplosion = new pSprite(TextureManager.Load(OsuTexture.hit300), pos)
                {
                    Field = FieldTypes.StandardSnapCentreLeft, Origin = OriginTypes.Centre, ScaleScalar = 0.5f, DrawDepth = 0.9f
                };
                resultSprites.Add(hitExplosion);

                count300 = new pSpriteText("0x", "score", 0, FieldTypes.StandardSnapCentreLeft, OriginTypes.CentreRight, ClockTypes.Mode, pos + textOffset, 0.9f, true, Color4.White)
                {
                    SpacingOverlap = 3, TextConstantSpacing = true
                };
                resultSprites.Add(count300);

                pos.Y += spacing;

                hitExplosion = new pSprite(TextureManager.Load(OsuTexture.hit100), pos)
                {
                    Field = FieldTypes.StandardSnapCentreLeft, Origin = OriginTypes.Centre, ScaleScalar = 0.5f, DrawDepth = 0.9f
                };
                resultSprites.Add(hitExplosion);

                count100 = new pSpriteText("0x", "score", 0, FieldTypes.StandardSnapCentreLeft, OriginTypes.CentreRight, ClockTypes.Mode, pos + textOffset, 0.9f, true, Color4.White)
                {
                    SpacingOverlap = 3, TextConstantSpacing = true
                };
                resultSprites.Add(count100);

                pos.Y += spacing;

                hitExplosion = new pSprite(TextureManager.Load(OsuTexture.hit50), pos)
                {
                    Field = FieldTypes.StandardSnapCentreLeft, Origin = OriginTypes.Centre, ScaleScalar = 0.5f, DrawDepth = 0.9f
                };
                resultSprites.Add(hitExplosion);

                count50 = new pSpriteText("0x", "score", 0, FieldTypes.StandardSnapCentreLeft, OriginTypes.CentreRight, ClockTypes.Mode, pos + textOffset, 0.9f, true, Color4.White)
                {
                    SpacingOverlap = 3, TextConstantSpacing = true
                };
                resultSprites.Add(count50);

                pos.Y += spacing;

                hitExplosion = new pSprite(TextureManager.Load(OsuTexture.hit0), pos)
                {
                    Field = FieldTypes.StandardSnapCentreLeft, Origin = OriginTypes.Centre, ScaleScalar = 0.5f, DrawDepth = 0.9f
                };
                resultSprites.Add(hitExplosion);

                count0 = new pSpriteText("0x", "score", 0, FieldTypes.StandardSnapCentreLeft, OriginTypes.CentreRight, ClockTypes.Mode, pos + textOffset, 0.9f, true, Color4.White)
                {
                    SpacingOverlap = 3, TextConstantSpacing = true
                };
                resultSprites.Add(count0);
            }

            if (Director.LastOsuMode == OsuMode.SongSelect)
            {
                cameFromSongSelect = true;
            }

            layer2.Add(resultSprites);

            s_ButtonBack       = new BackButton(returnToSelect, false);
            s_ButtonBack.Alpha = 0;
            topMostLayer.Add(s_ButtonBack);

            s_Footer          = new pSprite(TextureManager.Load(OsuTexture.ranking_footer), FieldTypes.StandardSnapBottomRight, OriginTypes.BottomRight, ClockTypes.Mode, new Vector2(0, -100), 0.98f, true, Color4.White);
            s_Footer.Alpha    = 0;
            s_Footer.OnClick += delegate
            {
                Director.ChangeMode(OsuMode.Play);
                AudioEngine.PlaySample(OsuSamples.MenuHit);
            };
            topMostLayer.Add(s_Footer);

            if (!cameFromSongSelect)
            {
                InitializeBgm();

                //this is a bit of cheating to ensure that getting 100% will always result in 1mil. there are some race conditions with multitouch that may allow
                //for ever-so-slightly lower max scores, but this would piss people off.
                if (RankableScore.accuracy == 1 && RankableScore.totalScore - RankableScore.spinnerBonusScore != Score.MAX_SCORE)
                {
                    RankableScore.comboBonusScore = Score.MAX_SCORE - RankableScore.accuracyBonusScore - RankableScore.hitScore;
                }

                DifficultyScoreInfo bmi = BeatmapDatabase.GetDifficultyInfo(Player.Beatmap, Player.Difficulty);
                if (bmi.HighScore == null || RankableScore.totalScore > bmi.HighScore.totalScore)
                {
                    if (bmi.difficulty == Difficulty.Normal && RankableScore.Ranking >= Rank.A && (bmi.HighScore == null || bmi.HighScore.Ranking < Rank.A))
                    {
                        unlockedExpert = true;
                    }

                    isPersonalBest = true;
                    bmi.HighScore  = RankableScore;
                    BeatmapDatabase.Write();
                }
                else if (bmi.HighScore != null && RankableScore.Ranking > bmi.HighScore.Ranking)
                {
                    bmi.HighScore.Ranking = RankableScore.Ranking;
                }

                //Average Timing
                avg = (float)RankableScore.hitOffsetMilliseconds / Math.Max(1, RankableScore.hitOffsetCount);
                pText heading = new pText(LocalisationManager.GetString(OsuString.AvgTiming) + Math.Round(Math.Abs(avg), 1) + (RankableScore.hitOffsetMilliseconds > 0 ? "ms late" : "ms early"), 16, new Vector2(0, 20), 0.5f, true, Color4.White)
                {
                    Field  = FieldTypes.StandardSnapBottomCentre,
                    Origin = OriginTypes.BottomCentre
                };
                layer1.Add(heading);

                doSubmission();
            }
            else
            {
                if (!string.IsNullOrEmpty(RankableScore.Username))
                {
                    pText playerName = new pText("Played by " + RankableScore.Username, 30, new Vector2(10, 10), 0.5f, true, new Color4(255, 234, 0, 255))
                    {
                        TextShadow = true,
                        Field      = FieldTypes.StandardSnapBottomRight,
                        Origin     = OriginTypes.BottomRight
                    };

                    s_Footer.Bypass = true; //don't show footer. we need this room!

                    layer1.Add(playerName);
                }

                //displaying a previous high score (or online high score)
                finishDisplaying();
            }

            Director.OnTransitionEnded += Director_OnTransitionEnded;
            InputManager.OnMove        += HandleInputManagerOnMove;
        }
Exemplo n.º 25
0
        internal virtual void InitializeSprites()
        {
            newStyleSpinner = SkinManager.UseNewLayout && (SkinManager.IgnoreBeatmapSkin || TextureManager.Load(@"spinner-circle", SkinSource.Beatmap) == null) && TextureManager.Load(@"spinner-background", SkinSource.Skin) == null;

            if (GameBase.GameField.CorrectionOffsetActive)
            {
                spinnerTopOffset -= 16;
            }

            //this is madness, but works.
            posTopLeftCentre = new Vector2(GameBase.WindowManager.WidthScaled / Math.Max(1, GameBase.WindowManager.WidthWidescreenRatio) / 2f, spinnerTopOffset + 219);

            Color initialColour = (GameBase.Mode == OsuModes.Play && Player.currentScore != null && (ModManager.CheckActive(hitObjectManager.ActiveMods, Mods.SpunOut) || Player.Relaxing2) ? Color.Gray : Color.White);

            if (GameBase.Mode == OsuModes.Play && SkinManager.Current.SpinnerFadePlayfield)
            {
                //we need to add a backing layer as this skin requests the playfield is hidden while the spinner is present.

                SpriteCollection.Add(new pSprite(GameBase.WhitePixel, Fields.TopLeft, Origins.TopLeft, Clocks.Audio, new Vector2(0, 0), SpriteManager.drawOrderFwdLowPrio(StartTime - 1), false, Color.Black)
                {
                    Scale       = 1.6f,
                    VectorScale = new Vector2(640, spinnerTopOffset)
                });

                if (GameBase.GameField.CorrectionOffsetActive)
                {
                    SpriteCollection.Add(new pSprite(GameBase.WhitePixel, Fields.TopLeft, Origins.TopLeft, Clocks.Audio, new Vector2(0, 480 - 19), SpriteManager.drawOrderFwdLowPrio(StartTime - 1), false, Color.Black)
                    {
                        Scale       = 1.6f,
                        VectorScale = new Vector2(640, 19) //Use 19 here instead of 16 as the spinner-background graphic seems a little short...
                    });
                }
            }

            if (newStyleSpinner)
            {
                SpriteCircleTop = new pSprite(TextureManager.Load(@"spinner-top"), Fields.TopLeft, Origins.Centre, Clocks.Audio, posTopLeftCentre, SpriteManager.drawOrderFwdLowPrio(StartTime + 1), false, initialColour);
                SpriteCollection.Add(SpriteCircleTop);

                spriteCircleBottom = new pSprite(TextureManager.Load(@"spinner-bottom"), Fields.TopLeft, Origins.Centre, Clocks.Audio, posTopLeftCentre, SpriteManager.drawOrderFwdLowPrio(StartTime), false, initialColour);
                SpriteCollection.Add(spriteCircleBottom);

                spriteMiddleTop = new pSprite(TextureManager.Load(@"spinner-middle"), Fields.TopLeft, Origins.Centre, Clocks.Audio, posTopLeftCentre, SpriteManager.drawOrderFwdLowPrio(StartTime + 3), false, Color.TransparentWhite);
                SpriteCollection.Add(spriteMiddleTop);

                spriteMiddleBottom = new pSprite(TextureManager.Load(@"spinner-middle2"), Fields.TopLeft, Origins.Centre, Clocks.Audio, posTopLeftCentre, SpriteManager.drawOrderFwdLowPrio(StartTime + 2), false, Color.TransparentWhite);
                SpriteCollection.Add(spriteMiddleBottom);
            }
            else
            {
                pTexture bgTexture = null;
                //Check for a jpg background for beatmap-based skins (used to reduce filesize), then fallback to png.
                if (!SkinManager.IgnoreBeatmapSkin)
                {
                    bgTexture = TextureManager.Load(@"spinner-background.jpg", SkinSource.Beatmap);
                }
                if (bgTexture == null)
                {
                    bgTexture = TextureManager.Load(@"spinner-background", SkinSource.Beatmap | SkinSource.Skin);
                }

                Color bgColour = SkinManager.Colours.ContainsKey(@"SpinnerBackground") ? SkinManager.Colours[@"SpinnerBackground"] : new Color(100, 100, 100, 255);
                spriteBackground = new pSprite(bgTexture, Fields.TopLeft, Origins.Centre, Clocks.Audio, posTopLeftCentre, SpriteManager.drawOrderFwdLowPrio(StartTime - 1), false, bgColour);
                SpriteCollection.Add(spriteBackground);

                SpriteCircleTop = new pSprite(TextureManager.Load(@"spinner-circle"), Fields.TopLeft, Origins.Centre, Clocks.Audio, posTopLeftCentre, SpriteManager.drawOrderFwdLowPrio(StartTime), false, initialColour);
                SpriteCollection.Add(SpriteCircleTop);

                spriteScoreMetre            = new pSprite(TextureManager.Load(@"spinner-metre"), Fields.TopLeft, Origins.TopLeft, Clocks.Audio, new Vector2(posTopLeftCentre.X - 320, spinnerTopOffset), SpriteManager.drawOrderFwdLowPrio(StartTime + 1), false, initialColour);
                spriteScoreMetre.DrawHeight = 0;
                SpriteCollection.Add(spriteScoreMetre);
            }

            if (GameBase.Mode == OsuModes.Play)
            {
                spriteRpmBackground = new pSprite(TextureManager.Load(@"spinner-rpm"), Fields.TopLeft, Origins.TopLeft, Clocks.Audio, new Vector2(posTopLeftCentre.X - 87, 445), SpriteManager.drawOrderFwdLowPrio(StartTime + 3), false, initialColour);

                spriteRpmText = new pSpriteText("", SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap, Fields.TopLeft, Origins.TopRight, Clocks.Audio, new Vector2(posTopLeftCentre.X + 80, 448), SpriteManager.drawOrderFwdLowPrio(StartTime + 4), false, initialColour)
                {
                    Scale = 0.9f
                };

                SpriteCollection.Add(spriteRpmText);
                SpriteCollection.Add(spriteRpmBackground);
            }

            if (SpriteCircleTop.Texture.Source != SkinSource.Osu && (!ModManager.CheckActive(hitObjectManager.ActiveMods, Mods.Hidden)))
            {
                SpriteApproachCircle = new pSprite(TextureManager.Load(@"spinner-approachcircle"), Fields.TopLeft, Origins.Centre, Clocks.Audio, posTopLeftCentre, SpriteManager.drawOrderFwdLowPrio(StartTime + 2), false, initialColour);
                SpriteCollection.Add(SpriteApproachCircle);
            }

            SpriteBonusCounter = new pSpriteText(string.Empty, SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap, Fields.TopLeft, Origins.Centre, Clocks.Audio,
                                                 new Vector2(posTopLeftCentre.X, spinnerTopOffset + 299), SpriteManager.drawOrderFwdLowPrio(StartTime + 3), false, initialColour);

            SpriteCollection.Add(SpriteBonusCounter);
        }
Exemplo n.º 26
0
        protected virtual void LoadScore(Score score)
        {
            if (score == null)
            {
                return;
            }

            foreach (pSprite ps in leftPanel)
            {
                ps.FadeOut(100);
                ps.AlwaysDraw = false;
            }
            leftPanel.Clear();
            rankingElements.Clear();

            this.score = score;

            if (score.Processor != null || score.PlayMode == PlayModes.OsuMania)
            {
                stringTotalScore = string.Format("{0:0000000}", score.TotalScore);
            }
            else
            {
                stringTotalScore = string.Format("{0:00000000}", score.TotalScore);
            }

            s_score1 =
                new pSpriteText("", SkinManager.Current.FontScore, SkinManager.Current.FontScoreOverlap,
                                Fields.TopLeft, Origins.Centre, Clocks.Game,
                                new Vector2(220, 94), 0.8F, true, Color.White);
            s_score1.Scale = SkinManager.UseNewLayout ? 1.3f : 1.05f;
            if (SkinManager.UseNewLayout)
            {
                s_score1.SpacingOverlap = -2;
            }
            s_score1.TextConstantSpacing = true;
            spriteManagerWideScrolling.Add(s_score1);
            leftPanel.Add(s_score1);

            const int textx1 = 80;
            const int imgx1  = 40;
            const int textx2 = 280;
            const int imgx2  = 240;

            const int row1 = 160;
            const int row2 = 220;
            const int row3 = 280;
            const int row4 = 320;

            RankingElement e;

            switch (score.PlayMode)
            {
            case PlayModes.Osu:
            {
                rankingElements.Add(new RankingElement(@"hit300", new Vector2(imgx1, row1), String.Format("{0}x", score.Count300)));

                rankingElements.Add(new RankingElement(@"hit100", new Vector2(imgx1, row2), String.Format("{0}x", score.Count100)));

                rankingElements.Add(new RankingElement(@"hit50", new Vector2(imgx1, row3), String.Format("{0}x", score.Count50)));

                rankingElements.Add(new RankingElement(@"hit300g", new Vector2(imgx2, row1), String.Format("{0}x", score.CountGeki)));

                rankingElements.Add(new RankingElement(@"hit100k", new Vector2(imgx2, row2), String.Format("{0}x", score.CountKatu)));

                rankingElements.Add(new RankingElement(@"hit0", new Vector2(imgx2, row3), String.Format("{0}x", score.CountMiss)));

                break;
            }

            case PlayModes.Taiko:
            {
                rankingElements.Add(new RankingElement(@"taiko-hit300", new Vector2(imgx1, row1),
                                                       String.Format("{0}x", score.Count300 - score.CountGeki)));

                rankingElements.Add(new RankingElement(@"taiko-hit100", new Vector2(imgx1, row2),
                                                       String.Format("{0}x", score.Count100 - score.CountKatu)));

                rankingElements.Add(new RankingElement(@"taiko-hit0", new Vector2(imgx1, row3), String.Format("{0}x", score.CountMiss)));

                rankingElements.Add(new RankingElement(@"taiko-hit300g", new Vector2(imgx2, row1), String.Format("{0}x", score.CountGeki)));

                rankingElements.Add(new RankingElement(@"taiko-hit100k", new Vector2(imgx2, row2), String.Format("{0}x", score.CountKatu)));

                break;
            }

            case PlayModes.CatchTheBeat:
            {
                // overlays are added first to prevent a minor display bug
                rankingElements.Add(new RankingElement(@"fruit-orange-overlay", new Vector2(imgx1, row1), null, true));

                e = new RankingElement(@"fruit-orange", new Vector2(imgx1, row1), String.Format("{0}x", score.Count300));
                e.image.InitialColour = Color.Orange;
                rankingElements.Add(e);

                e = new RankingElement(@"fruit-drop", new Vector2(imgx1, row2), String.Format("{0}x", score.Count100));
                e.ChangeScale(1F, 0.6F);
                e.image.InitialColour = Color.YellowGreen;
                rankingElements.Add(e);

                e = new RankingElement(@"fruit-drop", new Vector2(imgx1, row3), String.Format("{0}x", score.Count50));
                e.ChangeScale(1F, 0.4F);
                e.ApplyRotation(4f);
                e.image.InitialColour = Color.LightBlue;
                rankingElements.Add(e);

                e = new RankingElement(@"fruit-orange-overlay", new Vector2(imgx2, row1), null, true);
                e.ChangeScale(1f, 0.4f);
                e.ApplyRotation(0.8f);
                rankingElements.Add(e);

                e = new RankingElement(@"hit0", new Vector2(imgx2, row1) - new Vector2(20, 20), null, true);
                e.ChangeScale(0.7f, 0.2f);
                rankingElements.Add(e);

                e = new RankingElement(@"fruit-orange", new Vector2(imgx2, row1), String.Format("{0}x", score.CountMiss));
                e.ChangeScale(1f, 0.4f);
                e.ApplyRotation(0.8f);
                e.image.InitialColour = Color.LightGray;
                rankingElements.Add(e);

                break;
            }

            case PlayModes.OsuMania:
            {
                rankingElements.Add(new RankingElement(@"mania-hit300", new Vector2(imgx1, row1), String.Format("{0}x", score.Count300)));

                rankingElements.Add(new RankingElement(@"mania-hit200", new Vector2(imgx1, row2), String.Format("{0}x", score.CountKatu)));

                rankingElements.Add(new RankingElement(@"mania-hit50", new Vector2(imgx1, row3), String.Format("{0}x", score.Count50)));

                rankingElements.Add(new RankingElement(@"mania-hit300g", new Vector2(imgx2, row1), String.Format("{0}x", score.CountGeki)));

                rankingElements.Add(new RankingElement(@"mania-hit100", new Vector2(imgx2, row2), String.Format("{0}x", score.Count100)));

                rankingElements.Add(new RankingElement(@"mania-hit0", new Vector2(imgx2, row3), String.Format("{0}x", score.CountMiss)));

                break;
            }
            }

            int row4Offset = (SkinManager.UseNewLayout ? 20 : 8);

            e = new RankingElement(@"ranking-maxcombo", new Vector2(imgx1 - 35, row4 - row4Offset), null, false, 0, Origins.TopLeft);
            e.ChangeScale(1F, 1F);
            e.image.Depth = 0.81F;

            // we're adding the text separately here because of the unusual offset.
            e.LoadScoreText(String.Format("{0}x", score.MaxCombo), new Vector2(textx1 - 65, row4 + 10));
            e.text.Depth = 0.8F;
            rankingElements.Add(e);

            e = new RankingElement(@"ranking-accuracy", new Vector2(imgx2 - 58, row4 - row4Offset), null, false, 0, Origins.TopLeft);
            e.ChangeScale(1F, 1F);
            e.image.Depth = 0.81F;

            e.LoadScoreText(String.Format("{0:0.00}%", score.Accuracy * 100), new Vector2(textx2 - 86, row4 + 10));
            e.text.Depth = 0.8F;
            rankingElements.Add(e);

            // show average error as hint

            string hint = "";

            if (score.HitErrors != null && score.HitErrors.Count != 0)
            {
                List <double> result = GetErrorStatisticsArray(score.HitErrors);
                if (result != null)
                {
#if DEBUG
                    hint = String.Format("Accuracy:\nError: {0:0.00}ms - {1:0.00}ms avg / {3:0.00}ms - {4:0.00}ms max \nUnstable Rate: {2:0.00}\n", result[0], result[1], result[4] * 10, result[6], result[5]);
#else
                    hint = String.Format("Accuracy:\nError: {0:0.00}ms - {1:0.00}ms avg\nUnstable Rate: {2:0.00}\n", result[0], result[1], result[4] * 10, result[6], result[5]);
#endif
                }
            }
            if (score.SpinningRates != null && score.SpinningRates.Count != 0)
            {
                List <double> result = GetErrorStatisticsArray(score.SpinningRates);
                if (result != null)
                {
                    hint += String.Format("Spin:\nSpeed: {0:000}(Max:{1:000}rpm)\nUnstable Rate: {2:0.00}\n", result[2], result[5], result[4] * 2);
                }
            }
            if (hint != "")
            {
                spriteRankingGraph.HandleInput = true;
                spriteRankingGraph.ToolTip     = hint;
            }

            if (score.Perfect)
            {
                e = new RankingElement(@"ranking-perfect", new Vector2(SkinManager.UseNewLayout ? 260 : 200, 430), null, false, 300);
                e.ChangeScale(1.1F, 1F);
                e.image.Depth = 0.99F;
                rankingElements.Add(e);
            }

            int timeOffset = AddRankingSprites();

            LoadRanking(timeOffset);

            if (healthGraph != null)
            {
                spriteManagerWideScrolling.Remove(healthGraph);
                healthGraph.Dispose();
            }

            //Actual graph position relative to the graph sprite
            float healthGraphX = spriteRankingGraph.InitialPosition.X + (SkinManager.UseNewLayout ? 5 : 10);
            float healthGraphY = spriteRankingGraph.InitialPosition.Y + (SkinManager.UseNewLayout ? 5 : 10);

            healthGraph = new HealthGraph(startTime, 4000, score, new RectangleF(healthGraphX, healthGraphY, 186, 86));
            spriteManagerWideScrolling.Add(healthGraph);
            LoadMods();

            s_white =
                new pSprite(GameBase.WhitePixel, Fields.TopLeft, Origins.TopLeft, Clocks.Game,
                            Vector2.Zero, 1, false,
                            Color.TransparentWhite);
            s_white.ScaleToWindowRatio = false;
            s_white.Additive           = true;
            s_white.VectorScale        = new Vector2(GameBase.WindowManager.Width, GameBase.WindowManager.Height);
            Transformation t = new Transformation(TransformationType.Fade, 0.5f, 0, startTime + timeOffset + 1000, startTime + timeOffset + 2400);
            s_white.Transformations.Add(t);
            spriteManagerWideAbove.Add(s_white);
            leftPanel.Add(s_white);
        }