コード例 #1
0
        public NewsButton()
        {
            newsButton          = new pSprite(TextureManager.Load(OsuTexture.news_button), FieldTypes.StandardSnapBottomLeft, OriginTypes.BottomLeft, ClockTypes.Mode, Vector2.Zero, 0.8f, true, Color4.White);
            newsButton.OnClick += newsButton_OnClick;
            Add(newsButton);

            newsLight          = new pSprite(TextureManager.Load(OsuTexture.news_light), FieldTypes.StandardSnapBottomLeft, OriginTypes.BottomLeft, ClockTypes.Mode, new Vector2(3, 13f), 0.81f, true, Color4.White);
            newsLight.Additive = true;

            newsLight.Transform(new TransformationF(TransformationType.Fade, 0, 1, 0, 300, EasingTypes.Out)
            {
                Looping = true, LoopDelay = 1500
            });
            newsLight.Transform(new TransformationF(TransformationType.Fade, 1, 0, 300, 1500, EasingTypes.Out)
            {
                Looping = true, LoopDelay = 600
            });
            Add(newsLight);

            newsLight.Bypass = true;

            string lastRead      = GameBase.Config.GetValue("NewsLastRead", string.Empty);
            string lastRetrieved = GameBase.Config.GetValue("NewsLastRetrieved", string.Empty);

            if (lastRead == string.Empty || lastRetrieved != lastRead)
            {
                HasNews = true;
            }

            StringNetRequest nr = new StringNetRequest(@"https://osustream.com/misc/news.php?v=2");

            nr.onFinish += newsCheck_onFinish;
            NetManager.AddRequest(nr);
        }
コード例 #2
0
 private void footerHide()
 {
     s_Footer.Transformations.Clear();
     s_Footer.Transform(new TransformationV(s_Footer.Position, new Vector2(-60, -85), Clock.ModeTime, Clock.ModeTime + 500, EasingTypes.In));
     s_Footer.Transform(new TransformationF(TransformationType.Rotation, s_Footer.Rotation, 0.04f, Clock.ModeTime, Clock.ModeTime + 500, EasingTypes.In));
     s_Footer.Transform(new TransformationF(TransformationType.Fade, 1, 0, Clock.ModeTime + 500, Clock.ModeTime + 500));
 }
コード例 #3
0
        public override void Initialize()
        {
            spriteManager.CheckSpritesAreOnScreenBeforeRendering = true;

            GameBase.Config.SaveConfig();

            InputManager.OnMove += InputManager_OnMove;
            InputManager.OnDown += InputManager_OnDown;

            InitializeBeatmaps();

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

            s_Header          = new pSprite(TextureManager.Load(OsuTexture.songselect_header), new Vector2(0, 0));
            s_Header.OnClick += delegate { };
            topmostSpriteManager.Add(s_Header);

            s_Footer = new pSprite(TextureManager.Load(OsuTexture.songselect_footer), FieldTypes.StandardSnapBottomRight, OriginTypes.BottomRight, ClockTypes.Mode, new Vector2(0, -100), 0.98f, true, Color4.White)
            {
                Alpha    = 0,
                Rotation = 0.04f,
                Position = new Vector2(-60, -85)
            };

            s_Footer.OnClick += footer_onClick;

            spriteManager.Add(s_Footer);

            topmostSpriteManager.Add(s_ButtonBack = new BackButton(onBackPressed, Director.LastOsuMode == OsuMode.MainMenu));

            if (Player.Beatmap != null)
            {
                showDifficultySelection(panels.Find(p => p.Beatmap != null && p.Beatmap.ContainerFilename == Player.Beatmap.ContainerFilename), true);
            }
            else
            {
                InitializeBgm();

                s_Header.Transform(new TransformationV(new Vector2(0, -15), Vector2.Zero, 0, 800, EasingTypes.In));
                s_Header.Transform(new TransformationF(TransformationType.Rotation, -0.06f, 0, 0, 800, EasingTypes.In));

                Vector2 pos = new Vector2(400, 0);
                foreach (BeatmapPanel p in panels)
                {
                    p.MoveTo(pos, 0);
                    pos.Y += BeatmapPanel.PANEL_HEIGHT + 10;
                    pos.X += 300;
                }
            }
        }
コード例 #4
0
ファイル: Results.cs プロジェクト: indefined/osu-stream
        private void showNavigation()
        {
            if (s_Footer.Alpha != 1)
            {
                s_ButtonBack.FadeIn(500);

                s_Footer.Alpha = 1;
                s_Footer.Transform(new TransformationV(new Vector2(-60, -85), Vector2.Zero, Clock.ModeTime, Clock.ModeTime + 500, EasingTypes.In));
                s_Footer.Transform(new TransformationF(TransformationType.Rotation, 0.04f, 0, Clock.ModeTime, Clock.ModeTime + 500, EasingTypes.In));
            }
        }
コード例 #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);
        }
コード例 #6
0
        internal BeatmapPanel(Beatmap beatmap)
        {
            backingPlate            = pSprite.FullscreenWhitePixel;
            backingPlate.Alpha      = 1;
            backingPlate.AlwaysDraw = true;
            backingPlate.Colour     = Color4.OrangeRed;
            backingPlate.Scale.Y    = 80;
            backingPlate.Scale.X   *= 0.8f;
            backingPlate.DrawDepth  = 0.8f;
            SpriteCollection.Add(backingPlate);

            this.beatmap = beatmap;

            backingPlate.OnClick += delegate {
                backingPlate.MoveTo(backingPlate.Position - new Vector2(50, 0), 600);
                backingPlate.Transform(new Transformation(TransformationType.VectorScale, backingPlate.Scale,
                                                          new Vector2(backingPlate.Scale.X * 1.2f, backingPlate.Scale.Y),
                                                          backingPlate.ClockingNow, backingPlate.ClockingNow + 600));

                backingPlate.UnbindAllEvents();

                Player.SetBeatmap(beatmap);
                Director.ChangeMode(OsuMode.Play);
            };

            backingPlate.HandleClickOnUp = true;

            backingPlate.OnHover     += delegate { backingPlate.Colour = Color4.YellowGreen; };
            backingPlate.OnHoverLost += delegate { backingPlate.Colour = Color4.OrangeRed; };

            text = new pText(Path.GetFileNameWithoutExtension(beatmap.BeatmapFilename), 18, Vector2.Zero, Vector2.Zero, 1, true, Color4.White, false);
            SpriteCollection.Add(text);
        }
コード例 #7
0
ファイル: TouchBurster.cs プロジェクト: indefined/osu-stream
        public override void Initialize()
        {
            for (int i = 0; i < MAX_BURST; i++)
            {
                pSprite burst = new pSprite(TextureManager.Load(OsuTexture.mouse_burst), FieldTypes.Standard, OriginTypes.Centre, ClockTypes.Game, Vector2.Zero, 1, true, Color4.White);
                burst.Additive = true;
                burst.Alpha    = 0;
                burstSprites.Add(burst);
                spriteManager.Add(burst);

                burst.RemoveOldTransformations = false;
                burst.AlignToSprites           = false;

                //make transformations beforehand to avoid creating many.
                burst.Transform(new TransformationV {
                    Type = TransformationType.Movement
                },
                                new TransformationF {
                    Type = TransformationType.Scale
                },
                                new TransformationF {
                    Type = TransformationType.Fade
                });
            }

            base.Initialize();
        }
コード例 #8
0
        /// <summary>
        /// Connect two objects that occur at the same time with a line.
        /// </summary>
        private pSprite Connect(HitObject h1, HitObject h2, bool useEnd = false)
        {
            Vector2 p1 = useEnd ? h1.EndPosition : h1.Position;
            Vector2 p2 = h2.Position;

            HitObject firstObject = h1.CompareTo(h2) <= 0 ? h1 : h2;

            float length = ((p2 - p1).Length - DifficultyManager.HitObjectRadiusSolidGamefield * 1.96f) / DifficultyManager.HitObjectSizeModifier;

            pSprite connectingLine = new pSprite(TextureManager.Load(OsuTexture.connectionline), FieldTypes.GamefieldSprites, OriginTypes.Centre,
                                                 firstObject.Sprites[0].Clocking, (p2 + p1) / 2, SpriteManager.drawOrderBwd(firstObject.EndTime - 15), false, Color4.White);

            //a small hack to allow for texel boundaries to be the correct colour.
            connectingLine.DrawLeft++;
            connectingLine.DrawWidth       -= 2;
            connectingLine.ExactCoordinates = false;

            connectingLine.Scale    = new Vector2(length / 2 * (1 / GameBase.SpriteToBaseRatio), 1);
            connectingLine.Rotation = (float)Math.Atan2(p2.Y - p1.Y, p2.X - p1.X);

            int startTime = (useEnd && h1 is Slider) ? ((Slider)h1).snakingEnd : h1.StartTime - DifficultyManager.PreEmpt;

            startTime = Math.Max(startTime, h2.StartTime - DifficultyManager.PreEmpt);

            connectingLine.Transform(new TransformationF(TransformationType.Fade, 0, 1,
                                                         startTime, startTime + DifficultyManager.FadeIn));

            foreach (Transformation t in (h1.EndTime < h2.EndTime ? h1.Sprites[0].Transformations : h2.Sprites[0].Transformations))
            {
                if (t is TransformationF tf && tf.EndFloat == 0)
                {
                    connectingLine.Transform(t);
                }
            }

            h2.Sprites.Add(connectingLine);
            connectingLine.TagNumeric = HitObject.DIMMABLE_TAG;

            h1.connectedObject = h2;
            h2.connectedObject = h1;

            h1.connectionSprite = connectingLine;
            h2.connectionSprite = connectingLine;

            return(connectingLine);
        }
コード例 #9
0
        public override void Initialize()
        {
            leftFinger = new pSprite(TextureManager.Load(OsuTexture.finger_inner), new Vector2(-100, 200))
            {
                Field            = FieldTypes.GamefieldSprites,
                Origin           = OriginTypes.Centre,
                ExactCoordinates = false,
                Colour           = ColourHelper.Lighten2(Color4.LimeGreen, 0.5f),
                Alpha            = 0.3f,
                Additive         = true
            };

            leftFinger2 = new pSprite(TextureManager.Load(OsuTexture.finger_outer), Vector2.Zero)
            {
                Field            = FieldTypes.GamefieldSprites,
                Origin           = OriginTypes.Centre,
                Colour           = Color4.LimeGreen,
                ExactCoordinates = false,
                Alpha            = 0.3f,
                Additive         = false
            };

            rightFinger = new pSprite(TextureManager.Load(OsuTexture.finger_inner), new Vector2(612, 200))
            {
                Field            = FieldTypes.GamefieldSprites,
                Origin           = OriginTypes.Centre,
                Colour           = ColourHelper.Lighten2(Color4.Red, 0.5f),
                ExactCoordinates = false,
                Alpha            = 0.3f,
                Additive         = true
            };

            rightFinger2 = new pSprite(TextureManager.Load(OsuTexture.finger_outer), Vector2.Zero)
            {
                Field            = FieldTypes.GamefieldSprites,
                Origin           = OriginTypes.Centre,
                Colour           = Color4.Red,
                ExactCoordinates = false,
                Alpha            = 0.3f,
                Additive         = false
            };

            leftFinger.Transform(new TransformationV(new Vector2(-100, 130), idleLeft, Clock.ModeTime, Clock.ModeTime + 800, EasingTypes.In));
            rightFinger.Transform(new TransformationV(new Vector2(612, 130), idleRight, Clock.ModeTime, Clock.ModeTime + 800, EasingTypes.In));

            spriteManager.Add(leftFinger);
            spriteManager.Add(rightFinger);
            spriteManager.Add(leftFinger2);
            spriteManager.Add(rightFinger2);

            fingers.Add(leftFinger);
            fingers.Add(rightFinger);

            base.Initialize();
        }
コード例 #10
0
ファイル: MainMenu.cs プロジェクト: indefined/osu-stream
        private void osuLogo_OnClick(object sender, EventArgs e)
        {
            State = MenuState.Select;

            osuLogo.HandleInput = false;
            osuLogo.Transformations.Clear();

            AudioEngine.PlaySample(OsuSamples.MenuHit);

            menuBackgroundNew.BeAwesome();

            Transformation fadeIn = new TransformationF(TransformationType.Fade, 0, 0.98f, Clock.ModeTime + 1300, Clock.ModeTime + 1700);

            osuLogoSmall.Transform(fadeIn);

            Transformation move = new TransformationV(new Vector2(0, 50), Vector2.Zero, Clock.ModeTime + 500, Clock.ModeTime + 1000, EasingTypes.In);

            fadeIn = new TransformationF(TransformationType.Fade, 0, 0.98f, Clock.ModeTime + 500, Clock.ModeTime + 1000);
            NewsButton.Transform(fadeIn);
            NewsButton.Transform(move);

            osuLogo.Transformations.Clear();
            osuLogo.Transform(new TransformationF(TransformationType.Scale, osuLogo.ScaleScalar, osuLogo.ScaleScalar * 2.4f, Clock.ModeTime, Clock.ModeTime + 1300, EasingTypes.InDouble));
            osuLogo.Transform(new TransformationF(TransformationType.Rotation, osuLogo.Rotation, 0.35f, Clock.ModeTime, Clock.ModeTime + 1000, EasingTypes.In));

            osuLogoGloss.Transformations.Clear();
            osuLogoGloss.FadeOut(200);
            osuLogoGloss.Transform(new TransformationF(TransformationType.Scale, osuLogoGloss.ScaleScalar, osuLogoGloss.ScaleScalar * 2.4f, Clock.ModeTime, Clock.ModeTime + 1300, EasingTypes.InDouble));
            stream.FadeOut(150);
            additiveStream.FadeOut(150);

            osuLogo.FadeOut(800);

            explosions.ForEach(s =>
            {
                s.Transformations.Clear();
                s.FadeOut(100);
            });
        }
コード例 #11
0
ファイル: HoldCircle.cs プロジェクト: indefined/osu-stream
        protected override void initializeSprites()
        {
            Transformation fadeInTrack = new TransformationF(TransformationType.Fade, 0, 1, StartTime - DifficultyManager.PreEmpt, StartTime - DifficultyManager.PreEmpt + DifficultyManager.FadeIn);
            Transformation fadeOut     = new TransformationF(TransformationType.Fade, 1, 0, EndTime, EndTime + DifficultyManager.HitWindow50);

            activeOverlay = new pSprite(TextureManager.Load(OsuTexture.holdactive), FieldTypes.GamefieldSprites, OriginTypes.Centre, ClockTypes.Audio, Position, SpriteManager.drawOrderBwd(EndTime - 18), false, Color.White);
            spriteCollectionStart.Add(activeOverlay);

            inactiveOverlay = new pSprite(TextureManager.Load(OsuTexture.holdinactive), FieldTypes.GamefieldSprites, OriginTypes.Centre, ClockTypes.Audio, Position, SpriteManager.drawOrderBwd(EndTime - 19), false, Color.White);
            inactiveOverlay.Transform(new NullTransform(StartTime, EndTime));
            spriteCollectionStart.Add(inactiveOverlay);

            border = new pSprite(TextureManager.Load(OsuTexture.holdoverlay), FieldTypes.GamefieldSprites, OriginTypes.Centre, ClockTypes.Audio, Position, SpriteManager.drawOrderBwd(EndTime - 20), false, Color.White);
            border.Transform(fadeInTrack);
            border.Transform(fadeOut);
            Sprites.Add(border);

            spriteCollectionStart.ForEach(s => s.Transform(fadeInTrack));
            spriteCollectionStart.ForEach(s => s.Transform(fadeOut));

            circularProgress          = new CircularProgress(position, 4, false, 0, Color.White);
            circularProgress.Clocking = ClockTypes.Audio;
            circularProgress.Field    = FieldTypes.GamefieldExact;
            circularProgress.Additive = true;
            circularProgress.Transform(new NullTransform(StartTime, EndTime));

            spriteCollectionStart.Add(circularProgress);

            Sprites.AddRange(spriteCollectionStart);

            activeOverlay.Transform(new TransformationC(hold_colour, Color4.White, StartTime, EndTime));
            circularProgress.Transform(new TransformationC(new Color4(hold_colour.R, hold_colour.G, hold_colour.B, 0.8f), ColourHelper.Lighten(new Color4(hold_colour.R, hold_colour.G, hold_colour.B, 0.8f), 0.5f),
                                                           StartTime, EndTime));

            border.TagNumeric          = DIMMABLE_TAG;
            inactiveOverlay.TagNumeric = DIMMABLE_TAG;
        }
コード例 #12
0
        public override void Initialize()
        {
            startTime = Clock.Time;

            background = new pSprite(TextureManager.Load(OsuTexture.cleared), FieldTypes.StandardSnapCentre, OriginTypes.CentreLeft,
                                     ClockTypes.Game, Vector2.Zero, 1, true, Color4.White);
            background.Position.X -= background.DrawWidth * GameBase.SpriteToBaseRatio / 2;

            background.Alpha = 0;
            background.Transform(new TransformationF(TransformationType.Fade, 0, 1, Clock.Time, Clock.Time + 1700, EasingTypes.OutDouble));

            background.Additive = true;
            spriteManager.Add(background);

            pDrawable fill = pSprite.FullscreenWhitePixel;

            fill.Clocking = ClockTypes.Game;
            fill.Scale.X *= (float)Results.RankableScore.count300 / Results.RankableScore.totalHits + 0.001f;
            fill.Colour   = new Color4(1, 0.63f, 0.01f, 1);
            fillSprites.Add(fill);

            fill          = pSprite.FullscreenWhitePixel;
            fill.Clocking = ClockTypes.Game;
            fill.Scale.X *= (float)Results.RankableScore.count100 / Results.RankableScore.totalHits + 0.001f;
            fill.Colour   = new Color4(0.55f, 0.84f, 0, 1);
            fillSprites.Add(fill);

            fill          = pSprite.FullscreenWhitePixel;
            fill.Clocking = ClockTypes.Game;
            fill.Scale.X *= (float)Results.RankableScore.count50 / Results.RankableScore.totalHits + 0.001f;
            fill.Colour   = new Color4(0.50f, 0.29f, 0.635f, 1);
            fillSprites.Add(fill);

            fill          = pSprite.FullscreenWhitePixel;
            fill.Clocking = ClockTypes.Game;
            fill.Scale.X *= (float)Results.RankableScore.countMiss / Results.RankableScore.totalHits + 0.001f;
            fill.Colour   = new Color4(0.10f, 0.10f, 0.10f, 1);
            fillSprites.Add(fill);

            int i = 0;

            foreach (pDrawable p in fillSprites)
            {
                p.Alpha = 1;
                //p.Additive = true;
                p.DrawDepth  = 0.98f;
                p.AlwaysDraw = true;

                int offset = Clock.Time + i++ *time_between_fills;

                p.Transform(new TransformationC(ColourHelper.Darken(p.Colour, 0.4f), ColourHelper.Darken(p.Colour, 0.7f), Clock.Time, Clock.Time + 1400));
                p.Transform(new TransformationC(Color4.White, p.Colour, Clock.Time + 1600, Clock.Time + 3000));
                //force the initial colour to be an ambiguous gray.

                p.Transform(new TransformationBounce(offset, offset + end_bouncing * 2, p.Scale.X, p.Scale.X, 5));
            }

            GameBase.Scheduler.Add(delegate { AudioEngine.PlaySample(OsuSamples.RankBling); }, 1600);

            spriteManager.Add(fillSprites);

            base.Initialize();
        }
コード例 #13
0
ファイル: Results.cs プロジェクト: indefined/osu-stream
        private void doSubmission()
        {
            int deviceType = 0;

#if iOS
            if (!GameBase.Mapper)
            {
                deviceType = (int)osum.Support.iPhone.HardwareDetection.Version;

                //todo: for iOS5 twitter authentication, we need to double-check we actually have auth.
                string hash = GameBase.Config.GetValue <string>("hash", null);
                if (hash == null)
                {
                    //todo: no twitter auth. are we not submitting anymore?
                    return;
                }
                else if (hash.StartsWith("ios-"))
                {
                    hash = hash.Substring(4);
                    using (ACAccountStore store = new ACAccountStore())
                    {
                        ACAccount account = store.FindAccount(hash);
                        if (account != null)
                        {
                            //yay, i think.
                            //todo: test that this actually checks grants (it should in theory).
                        }
                        else
                        {
                            GameBase.Notify("Twitter authentication failed. Please visit the options screen to login again.");
                            GameBase.Config.SetValue <string>("username", null);
                            GameBase.Config.SetValue <string>("hash", null);
                            GameBase.Config.SetValue <string>("twitterId", null);
                            GameBase.Config.SaveConfig();
                            return;
                        }
                    }
                }

                string check = CryptoHelper.GetMd5String("moocow" +
                                                         GameBase.Instance.DeviceIdentifier +
                                                         RankableScore.count100 +
                                                         RankableScore.count300 +
                                                         RankableScore.count50 +
                                                         RankableScore.countMiss +
                                                         RankableScore.maxCombo +
                                                         RankableScore.spinnerBonusScore +
                                                         RankableScore.comboBonusScore +
                                                         RankableScore.accuracyBonusScore +
                                                         RankableScore.Ranking +
                                                         Path.GetFileName(Player.Beatmap.ContainerFilename) +
                                                         deviceType +
                                                         RankableScore.hitScore +
                                                         (int)Player.Difficulty);

                string postString =
                    "udid=" + GameBase.Instance.DeviceIdentifier +
                    "&count300=" + RankableScore.count300 +
                    "&count100=" + RankableScore.count100 +
                    "&count50=" + RankableScore.count50 +
                    "&countMiss=" + RankableScore.countMiss +
                    "&maxCombo=" + RankableScore.maxCombo +
                    "&spinnerBonus=" + RankableScore.spinnerBonusScore +
                    "&comboBonus=" + RankableScore.comboBonusScore +
                    "&accuracyBonus=" + RankableScore.accuracyBonusScore +
                    "&hitScore=" + RankableScore.hitScore +
                    "&rank=" + RankableScore.Ranking +
                    "&filename=" + NetRequest.UrlEncode(Path.GetFileName(Player.Beatmap.ContainerFilename)) +
                    "&cc=" + GameBase.Config.GetValue <string>("hash", string.Empty) +
                    "&c=" + check +
                    "&difficulty=" + (int)Player.Difficulty +
                    "&username="******"username", string.Empty) +
                    "&twitterid=" + GameBase.Config.GetValue <string>("twitterId", string.Empty) +
                    "&dt=" + deviceType +
                    "&offset=" + avg;

                spriteSubmitting = new pSprite(TextureManager.Load(OsuTexture.songselect_audio_preview), FieldTypes.StandardSnapRight, OriginTypes.Centre, ClockTypes.Game, new Vector2(20, 20), 0.999f, true, Color4.White)
                {
                    ExactCoordinates = false,
                    DimImmune        = true,
                    ScaleScalar      = 0.7f
                };

                spriteSubmitting.Transform(new TransformationF(TransformationType.Rotation, 0, MathHelper.Pi * 2, Clock.Time, Clock.Time + 1500)
                {
                    Looping = true
                });
                GameBase.MainSpriteManager.Add(spriteSubmitting);
                spriteSubmitting.FadeInFromZero(300);

                StringNetRequest nr = new StringNetRequest("https://www.osustream.com/score/submit.php", "POST", postString);
                nr.onFinish += delegate(string result, Exception e)
                {
                    spriteSubmitting.AlwaysDraw = false;
                    if (e == null)
                    {
                        spriteSubmitting.FadeOut(200);
                        spriteSubmitting.ScaleTo(3, 200);
                        spriteSubmitting.Colour = Color4.YellowGreen;
                    }
                    else
                    {
                        spriteSubmitting.FadeOut(1000);
                        spriteSubmitting.ScaleTo(1.2f, 200, EasingTypes.In);
                        spriteSubmitting.Colour = Color4.Red;
                    }

                    if (e == null && result != null && result.StartsWith("message:"))
                    {
                        rankingNotification = new Notification("Ranking", result.Replace("message:", string.Empty), NotificationStyle.Okay);
                        if (finishedDisplaying)
                        {
                            GameBase.Notify(rankingNotification);
                        }
                    }
                };
                NetManager.AddRequest(nr);
            }
#endif
        }
コード例 #14
0
        internal void SetDisplay(int countdown)
        {
            bool didChangeTexture = true;

            switch (countdown)
            {
            case 0:
                text.Texture = TextureManager.Load(OsuTexture.countdown_go);
                spriteManager.FadeOut(400);
                AudioEngine.PlaySample(OsuSamples.countgo);
                HasFinished = true;
                break;

            case 1:
                text.Texture = TextureManager.Load(OsuTexture.countdown_1);
                AudioEngine.PlaySample(OsuSamples.count1);
                break;

            case 2:
                text.Texture = TextureManager.Load(OsuTexture.countdown_2);
                AudioEngine.PlaySample(OsuSamples.count2);
                break;

            case 3:
                text.Texture = TextureManager.Load(OsuTexture.countdown_3);
                AudioEngine.PlaySample(OsuSamples.count3);
                break;

            case 4:
            case 5:
            case 6:
            case 7:
                text.Texture = TextureManager.Load(OsuTexture.countdown_ready);
                if (spriteManager.Alpha == 0)
                {
                    spriteManager.FadeIn(200);
                }
                didChangeTexture = countdown == 7;
                break;

            default:
                return;
            }

            if (countdown < 4)
            {
                text.Transformations.RemoveAll(t => t is TransformationBounce);
                background.Transformations.RemoveAll(t => t is TransformationBounce);

                text.Transform(new TransformationBounce(Clock.AudioTime, Clock.AudioTime + 300, Math.Max(1, text.ScaleScalar), 0.2f, 3));
                background.Transform(new TransformationBounce(Clock.AudioTime, Clock.AudioTime + 300, Math.Max(1, background.ScaleScalar), 0.2f, 3));

                if (OnPulse != null)
                {
                    OnPulse();
                }
            }

            if (didChangeTexture)
            {
                pDrawable flash = text.AdditiveFlash(300, 0.5f);
                flash.Transform(new TransformationF(TransformationType.Scale, 1, 1.2f, Clock.AudioTime, Clock.AudioTime + 400));
                flash.Transform(new TransformationF(TransformationType.Rotation, 0, 0.1f, Clock.AudioTime, Clock.AudioTime + 400));
            }
        }
コード例 #15
0
ファイル: Spinner.cs プロジェクト: indefined/osu-stream
        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;
        }
コード例 #16
0
ファイル: Results.cs プロジェクト: indefined/osu-stream
        private void Director_OnTransitionEnded()
        {
            //hit -> combo -> accuracy -> spin

            int time      = cameFromSongSelect ? 0 : 500;
            int increment = cameFromSongSelect ? 0 : 500;

            GameBase.Scheduler.Add(delegate
            {
                AudioEngine.PlaySample(OsuSamples.RankingBam);
                countScoreHit.ShowInt(RankableScore.hitScore, 6);
                countScoreHit.AdditiveFlash(500, 1);

                addedScore += RankableScore.hitScore;
                countTotalScore.ShowInt(addedScore, 6, true);
                countTotalScore.FlashColour(Color4.White, 1000);
            }, time);

            time += increment;

            GameBase.Scheduler.Add(delegate
            {
                AudioEngine.PlaySample(OsuSamples.RankingBam);
                countScoreCombo.ShowInt(RankableScore.comboBonusScore, 6);
                countScoreCombo.AdditiveFlash(500, 1);


                addedScore += RankableScore.comboBonusScore;
                countTotalScore.ShowInt(addedScore, 6, true);
                countTotalScore.FlashColour(Color4.White, 1000);
            }, time);

            time += increment;

            GameBase.Scheduler.Add(delegate
            {
                AudioEngine.PlaySample(OsuSamples.RankingBam);
                countScoreAccuracy.ShowInt(RankableScore.accuracyBonusScore, 6);
                countScoreAccuracy.AdditiveFlash(500, 1);

                addedScore += RankableScore.accuracyBonusScore;
                countTotalScore.ShowInt(addedScore, 6, true);
                countTotalScore.FlashColour(Color4.White, 1000);
            }, time);

            time += increment;

            GameBase.Scheduler.Add(delegate
            {
                AudioEngine.PlaySample(OsuSamples.RankingBam);
                countScoreSpin.ShowInt(RankableScore.spinnerBonusScore, 6);
                countScoreSpin.AdditiveFlash(500, 1);

                addedScore += RankableScore.spinnerBonusScore;
                countTotalScore.ShowInt(addedScore, 6, true);
                countTotalScore.FlashColour(Color4.White, 1000);
            }, time);

            time += increment;

            GameBase.Scheduler.Add(delegate
            {
                if (RankableScore.Ranking == Rank.D)
                {
                    AudioEngine.PlaySample(OsuSamples.RankFail);
                    rankGraphic.FadeIn(2000);
                    rankGraphic.ScaleScalar = 0.7f;
                    rankGraphic.ScaleTo(1, 1400, EasingTypes.In);
                    GameBase.Scheduler.Add(delegate
                    {
                        int interval = 100;
                        rankGraphic.Transform(new TransformationF(TransformationType.Rotation, 0, 0.3f, Clock.Time, Clock.Time + interval));
                        rankGraphic.Transform(new TransformationF(TransformationType.Rotation, 0.3f, -0.3f, Clock.Time + interval, Clock.Time + interval * 3));
                        rankGraphic.Transform(new TransformationF(TransformationType.Rotation, -0.3f, 0, Clock.Time + interval * 3, Clock.Time + interval * 4));
                    }, 1550);
                }
                else
                {
                    AudioEngine.PlaySample(OsuSamples.RankPass);
                    rankGraphic.FadeIn(4000);

                    GameBase.Scheduler.Add(delegate
                    {
                        rankGraphic.Transformations.Clear();
                        rankGraphic.Alpha = 1;
                        rankGraphic.AdditiveFlash(1500, 1);
                    }, 1400);
                }
            }, time);

            time += increment + 1200;

            if (isPersonalBest)
            {
                GameBase.Scheduler.Add(delegate
                {
                    pSprite personalBest = new pSprite(TextureManager.Load(OsuTexture.personalbest), FieldTypes.StandardSnapBottomRight, OriginTypes.Centre, ClockTypes.Mode, new Vector2(80, 250),
                                                       1, true, Color4.White);
                    personalBest.FadeInFromZero(250);
                    personalBest.ScaleScalar = 1.6f;
                    personalBest.RotateTo(0.2f, 250);
                    personalBest.ScaleTo(1, 250, EasingTypes.Out);

                    GameBase.Scheduler.Add(delegate { personalBest.AdditiveFlash(1000, 1).ScaleTo(1.05f, 1000); }, 250);

                    layer1.Add(personalBest);
                }, time);
            }

            time += increment;

            if (!cameFromSongSelect)
            {
                GameBase.Scheduler.Add(finishDisplaying, time);
            }
        }
コード例 #17
0
ファイル: Results.cs プロジェクト: indefined/osu-stream
        public override void Update()
        {
            if (!AudioEngine.Music.IsElapsing)
            {
                InitializeBgm();
            }

            if (!Director.IsTransitioning)
            {
                if (finishedDisplaying)
                {
                    if (!InputManager.IsPressed)
                    {
                        offset *= 1 - 0.1f * Clock.ElapsedRatioToSixty;
                    }

                    float thisOffset = 0;
                    if (offset != 0)
                    {
                        thisOffset = (offset > 0 ? 1 : -1) * (float)Math.Pow(Math.Abs(offset), 0.8);
                    }


                    foreach (pDrawable p in fillSprites)
                    {
                        p.Scale.Y = fill_height + thisOffset * 0.5f;
                    }
                    layer1.Position.Y = thisOffset * 0.6f;
                    layer2.Position.Y = thisOffset;

                    layer1.ExactCoordinates = thisOffset == 0;
                    layer2.ExactCoordinates = thisOffset == 0;
                }

                fallingSprites.RemoveAll(p => p.Transformations.Count == 0);
                foreach (pSprite p in fallingSprites)
                {
                    p.Position.Y += p.TagNumeric * Clock.ElapsedRatioToSixty * 0.003f * (float)Clock.ElapsedMilliseconds;
                    p.TagNumeric++;
                }

                if (fallingSprites.Count < 20 && frameCount++ % 5 == 0)
                {
                    float pos = (float)GameBase.Random.NextDouble() * GameBase.BaseSizeFixedWidth.X;

                    pTexture tex = null;
                    if (pos < fillSprites[1].Position.X)
                    {
                        tex = TextureManager.Load(OsuTexture.hit300);
                    }
                    else if (pos < fillSprites[2].Position.X)
                    {
                        tex = TextureManager.Load(OsuTexture.hit100);
                    }
                    else if (pos < fillSprites[3].Position.X)
                    {
                        tex = TextureManager.Load(OsuTexture.hit50);
                    }

                    if (tex != null)
                    {
                        pSprite f = new pSprite(tex, FieldTypes.Standard, OriginTypes.TopLeft, ClockTypes.Mode, new Vector2(pos, fillSprites[0].Scale.Y - 30), 0.3f, false, Color4.White);
                        f.ScaleScalar = 0.2f;
                        f.Transform(new TransformationF(TransformationType.Fade, 0, 1, Clock.ModeTime, Clock.ModeTime + 150));
                        f.Transform(new TransformationF(TransformationType.Fade, 1, 0, Clock.ModeTime + 250, Clock.ModeTime + 1000 + (int)(GameBase.Random.NextDouble() * 1000)));
                        fallingSprites.Add(f);
                        spriteManager.Add(f);
                    }
                }
            }

            int increaseAmount = (int)Math.Max(1, Clock.ElapsedMilliseconds / 8);

            if (count300.LastInt < RankableScore.count300)
            {
                count300.ShowInt(Math.Min(RankableScore.count300, count300.LastInt + increaseAmount), 0, false, 'x');
            }
            else if (count100.LastInt < RankableScore.count100)
            {
                count100.ShowInt(Math.Min(RankableScore.count100, count100.LastInt + increaseAmount), 0, false, 'x');
            }
            else if (count50.LastInt < RankableScore.count50)
            {
                count50.ShowInt(Math.Min(RankableScore.count50, count50.LastInt + increaseAmount), 0, false, 'x');
            }
            else if (count0.LastInt < RankableScore.countMiss)
            {
                count0.ShowInt(Math.Min(RankableScore.countMiss, count0.LastInt + increaseAmount), 0, false, 'x');
            }

            base.Update();
            layer1.Update();
            layer2.Update();
            topMostLayer.Update();
        }
コード例 #18
0
        public MenuBackground()
        {
            Instance = this;

            if (AudioEngine.Effect != null)
            {
                whoosh = AudioEngine.Effect.LoadBuffer(AudioEngine.LoadSample(OsuSamples.MenuWhoosh), 1, false, true);
            }

            EndStopLenience  = 0.5f;
            EndBufferZone    = 0;
            AutomaticHeight  = false;
            Scrollbar        = false;
            ExactCoordinates = false;
            LockHorizontal   = false;
            CheckSpritesAreOnScreenBeforeRendering = false;

            rectangleLineLeft  = new Line(new Vector2(114, 55) - centre, new Vector2(169, 362) - centre);
            rectangleLineRight = new Line(new Vector2(-100, -855) - centre, new Vector2(1200, 250) - centre);

            //if (!GameBase.IsSlowDevice)
            {
                rectBorder = new pQuad(
                    rectangleLineLeft.p1 + new Vector2(-2, -2),
                    new Vector2(444 + 2, 172 - 2) - centre,
                    rectangleLineLeft.p2 + new Vector2(-2, 2),
                    new Vector2(528 + 3, 297 + 2) - centre,
                    true, 0.4f, new Color4(21, 21, 22, 255));
                rectBorder.AlphaBlend = false;
                rectBorder.Field      = FieldTypes.StandardSnapCentre;
                rectBorder.Origin     = OriginTypes.Centre;
                Add(rectBorder);
            }

            rect = new pQuad(
                rectangleLineLeft.p1,
                new Vector2(444, 172) - centre,
                rectangleLineLeft.p2,
                new Vector2(528, 297) - centre,
                true, 0.42f, new Color4(33, 35, 42, 255));
            rect.Field      = FieldTypes.StandardSnapCentre;
            rect.AlphaBlend = false;
            rect.Origin     = OriginTypes.Centre;
            rect.Colours    = new[]
            {
                new Color4(40, 43, 52, 255),
                new Color4(38, 40, 48, 255),
                new Color4(41, 43, 51, 255),
                new Color4(29, 30, 34, 255)
            };
            Add(rect);

            pTexture specialTexture = TextureManager.Load(OsuTexture.menu_item_background);

            specialTexture.X++;
            specialTexture.Width -= 2;

            yellow = new pQuad(
                Vector2.Zero,
                Vector2.Zero,
                Vector2.Zero,
                Vector2.Zero,
                true, 0.5f, new Color4(254, 242, 0, 255));
            yellow.Tag             = yellow.Colour;
            yellow.HandleClickOnUp = true;
            yellow.Texture         = specialTexture;
            yellow.Field           = FieldTypes.StandardSnapCentre;
            yellow.Origin          = OriginTypes.Centre;
            yellow.OnClick        += Option_OnClick;
            yellow.OnHover        += Option_OnHover;
            yellow.OnHoverLost    += Option_OnHoverLost;
            Add(yellow);
            lines.Add(yellow);

            orange = new pQuad(
                Vector2.Zero,
                Vector2.Zero,
                Vector2.Zero,
                Vector2.Zero,
                true, 0.5f, new Color4(255, 102, 0, 255));
            orange.Tag             = orange.Colour;
            orange.HandleClickOnUp = true;
            orange.Texture         = specialTexture;
            orange.Field           = FieldTypes.StandardSnapCentre;
            orange.Origin          = OriginTypes.Centre;
            orange.OnClick        += Option_OnClick;
            orange.OnHover        += Option_OnHover;
            orange.OnHoverLost    += Option_OnHoverLost;

            Add(orange);
            lines.Add(orange);

            blue = new pQuad(
                Vector2.Zero,
                Vector2.Zero,
                Vector2.Zero,
                Vector2.Zero,
                true, 0.5f, new Color4(0, 192, 245, 255));
            blue.Tag             = blue.Colour;
            blue.HandleClickOnUp = true;
            blue.Texture         = specialTexture;
            blue.Field           = FieldTypes.StandardSnapCentre;
            blue.Origin          = OriginTypes.Centre;
            blue.OnClick        += Option_OnClick;
            blue.OnHover        += Option_OnHover;
            blue.OnHoverLost    += Option_OnHoverLost;
            Add(blue);
            lines.Add(blue);

            pink = new pQuad(
                Vector2.Zero,
                Vector2.Zero,
                Vector2.Zero,
                Vector2.Zero,
                true, 0.5f, new Color4(237, 0, 140, 255));
            pink.Texture         = specialTexture;
            pink.Tag             = pink.Colour;
            pink.HandleClickOnUp = true;
            pink.Field           = FieldTypes.StandardSnapCentre;
            pink.Origin          = OriginTypes.Centre;
            pink.OnClick        += Option_OnClick;
            pink.OnHover        += Option_OnHover;
            pink.OnHoverLost    += Option_OnHoverLost;
            lines.Add(pink);
            Add(pink);

            ScaleScalar = 1.4f;

            pSprite text = new pSprite(TextureManager.Load(OsuTexture.menu_tutorial), new Vector2(-66, 3));

            text.Field       = FieldTypes.StandardSnapCentre;
            text.Origin      = OriginTypes.Centre;
            text.Rotation    = -rotation_offset;
            text.ScaleScalar = 1 / scale_offset;
            text.Alpha       = 0;
            Add(text);
            textSprites.Add(text);

            text             = new pSprite(TextureManager.Load(OsuTexture.menu_play), new Vector2(-48, 23.5f));
            text.Field       = FieldTypes.StandardSnapCentre;
            text.Origin      = OriginTypes.Centre;
            text.Rotation    = -rotation_offset;
            text.ScaleScalar = 1 / scale_offset;
            text.Alpha       = 0;
            Add(text);
            textSprites.Add(text);

            text             = new pSprite(TextureManager.Load(OsuTexture.menu_store), new Vector2(-43, 48));
            text.Field       = FieldTypes.StandardSnapCentre;
            text.Origin      = OriginTypes.Centre;
            text.Rotation    = -rotation_offset;
            text.ScaleScalar = 1 / scale_offset;
            text.Alpha       = 0;
            Add(text);
            textSprites.Add(text);


            storeNew             = new pSprite(TextureManager.Load(OsuTexture.new_notify), new Vector2(-17, 30));
            storeNew.Field       = FieldTypes.StandardSnapCentre;
            storeNew.Origin      = OriginTypes.Centre;
            storeNew.Rotation    = -rotation_offset;
            storeNew.ScaleScalar = 1 / scale_offset;
            storeNew.Alpha       = 0;
            storeNew.Transform(new TransformationF(TransformationType.Scale, storeNew.ScaleScalar * 0.8f, storeNew.ScaleScalar, 0, 600, EasingTypes.In)
            {
                Looping = true, LoopDelay = 600
            });
            storeNew.Transform(new TransformationF(TransformationType.Scale, storeNew.ScaleScalar, storeNew.ScaleScalar * 0.8f, 600, 1200, EasingTypes.Out)
            {
                Looping = true, LoopDelay = 600
            });
            storeNew.Bypass = true;
            textSprites.Add(storeNew);
            Add(storeNew);


            text             = new pSprite(TextureManager.Load(OsuTexture.menu_options), new Vector2(-44, 74));
            text.Field       = FieldTypes.StandardSnapCentre;
            text.Origin      = OriginTypes.Centre;
            text.Rotation    = -rotation_offset;
            text.ScaleScalar = 1 / scale_offset;
            text.Alpha       = 0;
            Add(text);
            textSprites.Add(text);
        }
コード例 #19
0
        public override void Initialize()
        {
            spriteManager.CheckSpritesAreOnScreenBeforeRendering = true;

            Difficulty = Difficulty.None;
            Beatmap    = null;

            Clock.ResetManual();

            InitializeBgm();

            base.Initialize();

            playfieldBackground.Colour = new Color4(33, 81, 138, 255);

            s_ButtonBack = new BackButton(delegate { Director.ChangeMode(OsuMode.Options); }, false);
            topMostSpriteManager.Add(s_ButtonBack);

            int time = Clock.ModeTime;

            const int speed          = 17000;
            const int spacing        = 1800;
            const int header_spacing = 2100;
            const int image_spacing  = 2500;

            int len = creditsRoll.Length;

            for (int i = 0; i < len; i++)
            {
                string drawString = creditsRoll[i];

                if (drawString.Length == 0)
                {
                    continue;
                }

                bool isHeader = false;
                if (drawString[0] == '*')
                {
                    drawString = drawString.Substring(1);
                    isHeader   = true;
                }

                pDrawable text;

                if (isHeader)
                {
                    text = new pText(drawString, 30, Vector2.Zero, SpriteManager.drawOrderFwdPrio(i), true, new Color4(255, 168, 0, 255))
                    {
                        Field    = FieldTypes.StandardSnapTopCentre,
                        Origin   = OriginTypes.Centre,
                        Clocking = ClockTypes.Manual,
                        RemoveOldTransformations = false,
                        Alpha = 1
                    };

                    if (i > 0)
                    {
                        time += header_spacing - spacing;
                    }

                    text.Transform(new TransformationV(new Vector2(text.Position.X, GameBase.BaseSizeFixedWidth.Y + height_extra), new Vector2(0, -100), time, time + speed));
                    time += header_spacing;
                }
                else if (drawString.StartsWith("OsuTexture."))
                {
                    text = new pSprite(TextureManager.Load((OsuTexture)Enum.Parse(typeof(OsuTexture), drawString.Replace("OsuTexture.", ""))), Vector2.Zero)
                    {
                        Field    = FieldTypes.StandardSnapTopCentre,
                        Origin   = OriginTypes.Centre,
                        Clocking = ClockTypes.Manual,
                        RemoveOldTransformations = false,
                        Alpha = 1
                    };

                    if (i > 0)
                    {
                        time += image_spacing - spacing;
                    }

                    text.Transform(new TransformationV(new Vector2(text.Position.X, GameBase.BaseSizeFixedWidth.Y + height_extra), new Vector2(0, -100), time, time + speed));
                    time += image_spacing;
                }
                else
                {
                    string[] split = drawString.Split('-');

                    if (split.Length == 1)
                    {
                        text = new pText(drawString, 26, Vector2.Zero, SpriteManager.drawOrderFwdPrio(i), true, Color4.White)
                        {
                            Field    = FieldTypes.StandardSnapTopCentre,
                            Origin   = OriginTypes.Centre,
                            Clocking = ClockTypes.Manual,
                            RemoveOldTransformations = false,
                            TextShadow = true,
                            Alpha      = 1
                        };
                    }
                    else
                    {
                        text = new pText(split[0].Trim(), 22, new Vector2(-10, 0), SpriteManager.drawOrderFwdPrio(i), true, i % 2 == 0 ? new Color4(187, 230, 255, 255) : new Color4(255, 187, 253, 255))
                        {
                            Field    = FieldTypes.StandardSnapTopCentre,
                            Origin   = OriginTypes.CentreRight,
                            Clocking = ClockTypes.Manual,
                            RemoveOldTransformations = false,
                            Alpha = 1
                        };

                        pText text2 = new pText(split[1].Trim(), 16, new Vector2(10, 0), new Vector2(300, 0), SpriteManager.drawOrderFwdPrio(i), true, i % 2 == 0 ? new Color4(200, 200, 200, 255) : new Color4(240, 240, 240, 255), false)
                        {
                            Field    = FieldTypes.StandardSnapTopCentre,
                            Origin   = OriginTypes.CentreLeft,
                            Clocking = ClockTypes.Manual,
                            RemoveOldTransformations = false,
                            Alpha = 1
                        };

                        text2.Transform(new TransformationV(new Vector2(text2.Position.X, GameBase.BaseSizeFixedWidth.Y + height_extra), new Vector2(text2.Position.X, -100), time, time + speed));
                        spriteManager.Add(text2);
                    }

                    text.Transform(new TransformationV(new Vector2(text.Position.X, GameBase.BaseSizeFixedWidth.Y + height_extra), new Vector2(text.Position.X, -100), time, time + speed));
                    time += spacing;
                }

                spriteManager.Add(text);
                lastText = text;
            }

            InputManager.OnMove += InputManager_OnMove;
        }
コード例 #20
0
ファイル: MainMenu.cs プロジェクト: indefined/osu-stream
        public override void Initialize()
        {
            int initial_display = firstDisplay ? 2950 : 0;

            //spriteManagerBehind.Add(menuBackground);

            menuBackgroundNew          = new MenuBackground();
            menuBackgroundNew.Clocking = ClockTypes.Mode;

            const int logo_stuff_v_offset = -20;

            Transformation logoBounce = new TransformationBounce(initial_display, initial_display + 2000, 0.625f, 0.4f, 2);

            osuLogo = new pSprite(TextureManager.Load(OsuTexture.menu_osu), FieldTypes.StandardSnapCentre, OriginTypes.Centre, ClockTypes.Mode, new Vector2(0, logo_stuff_v_offset), 0.9f, true, Color4.White);
            osuLogo.Transform(logoBounce);
            osuLogo.OnClick += osuLogo_OnClick;
            menuBackgroundNew.Add(osuLogo);

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

            Transformation explosionFade = new TransformationF(TransformationType.Fade, 0, 1, initial_display + 500, initial_display + 700);

            pSprite explosion = new pSprite(TextureManager.Load(OsuTexture.menu_circle), FieldTypes.StandardSnapCentre, OriginTypes.Centre, ClockTypes.Mode, new Vector2(-90 * 0.625f, -90 * 0.625f + logo_stuff_v_offset), 0.8f, true, new Color4(112, 58, 144, 255));

            explosion.ScaleScalar = sizeForExplosion(0);
            explosion.Transform(explosionFade);
            explosions.Add(explosion);
            menuBackgroundNew.Add(explosion);

            explosion             = new pSprite(TextureManager.Load(OsuTexture.menu_circle), FieldTypes.StandardSnapCentre, OriginTypes.Centre, ClockTypes.Mode, new Vector2(170 * 0.625f, 10 * 0.625f + logo_stuff_v_offset), 0.8f, true, new Color4(242, 25, 138, 255));
            explosion.ScaleScalar = sizeForExplosion(1);
            explosion.Transform(explosionFade);
            explosions.Add(explosion);
            menuBackgroundNew.Add(explosion);

            explosion             = new pSprite(TextureManager.Load(OsuTexture.menu_circle), FieldTypes.StandardSnapCentre, OriginTypes.Centre, ClockTypes.Mode, new Vector2(-130 * 0.625f, 88 * 0.625f + logo_stuff_v_offset), 0.8f, true, new Color4(254, 148, 4, 255));
            explosion.ScaleScalar = sizeForExplosion(2);
            explosion.Transform(explosionFade);
            explosions.Add(explosion);
            menuBackgroundNew.Add(explosion);

            Transformation fadeIn = new TransformationF(TransformationType.Fade, 0, 1, initial_display, initial_display);

            spriteManager.Sprites.ForEach(s => s.Transform(fadeIn));

            stream = new pSprite(TextureManager.Load(OsuTexture.menu_stream), FieldTypes.StandardSnapCentre, OriginTypes.Centre, ClockTypes.Mode, new Vector2(0, 180), 0.95f, true, Color4.White);
            stream.Transform(new TransformationF(TransformationType.Fade, 0, 1, initial_display + 900, initial_display + 1300));
            spriteManager.Add(stream);

            additiveStream           = stream.Clone();
            additiveStream.Additive  = true;
            additiveStream.DrawDepth = 0.96f;
            additiveStream.Transform(new TransformationF(TransformationType.Fade, 0, 1, initial_display + 1000, initial_display + 1200)
            {
                Looping = true, LoopDelay = 5000
            });
            additiveStream.Transform(new TransformationF(TransformationType.Fade, 1, 0, initial_display + 1200, initial_display + 2000)
            {
                Looping = true, LoopDelay = 4400
            });
            spriteManager.Add(additiveStream);

            osuLogoSmall          = new pSprite(TextureManager.Load(OsuTexture.menu_logo), FieldTypes.Standard, OriginTypes.TopLeft, ClockTypes.Mode, new Vector2(5, 5), 0.9f, true, Color4.White);
            osuLogoSmall.OnClick += delegate
            {
                if (State == MenuState.Select)
                {
                    Director.ChangeMode(OsuMode.MainMenu);
                }
            };
            osuLogoSmall.Alpha = 0;
            spriteManager.Add(osuLogoSmall);

            NewsButton = new NewsButton();
            spriteManager.Add(NewsButton);
            NewsButton.Alpha = 0;

            menuBackgroundNew.Transform(fadeIn);

            osuLogo.Transform(fadeIn);

            InitializeBgm();

            menuBackgroundNew.Transform(new TransformationBounce(initial_display, initial_display + 2000, menuBackgroundNew.ScaleScalar, 0.8f, 2));

            if (firstDisplay)
            {
                pDrawable whiteLayer = pSprite.FullscreenWhitePixel;
                whiteLayer.Alpha    = 0;
                whiteLayer.Clocking = ClockTypes.Mode;
                spriteManager.Add(whiteLayer);

                whiteLayer.Transform(new TransformationF(TransformationType.Fade, 0, 0.125f, 800, initial_display - 200));
                whiteLayer.Transform(new TransformationF(TransformationType.Fade, 0.125f, 1f, initial_display - 200, initial_display));
                whiteLayer.Transform(new TransformationF(TransformationType.Fade, 1, 0, initial_display, initial_display + 1200, EasingTypes.In));

                pSprite headphones = new pSprite(TextureManager.Load(OsuTexture.menu_headphones), FieldTypes.StandardSnapCentre, OriginTypes.Centre, ClockTypes.Mode, new Vector2(0, 0), 0.9f, false, Color4.White);
                headphones.Additive = true;
                headphones.Transform(new TransformationF(TransformationType.Fade, 0, 1, 50, 200));
                headphones.Transform(new TransformationF(TransformationType.Fade, 1, 1, 1000, initial_display));
                spriteManager.Add(headphones);

#if !DIST
                headphones.OnClick += delegate
                {
                    GameBase.Mapper = true;
                    pText t = new pText("ENABLED MAPPER MODE", 24, new Vector2(0, 30), 1, false, Color4.Red)
                    {
                        Field  = FieldTypes.StandardSnapTopCentre,
                        Origin = OriginTypes.Centre
                    };
                    t.FadeOutFromOne(1500);
                    spriteManager.Add(t);
                };
#endif

                pDrawable add = headphones.Clone();
                add.Additive = true;
                add.Transform(new TransformationF(TransformationType.Fade, 0, 0.1f, 50, 200));
                add.Transform(new TransformationF(TransformationType.Fade, 0.1f, 0.2f, 1000, initial_display));
                add.Transform(new TransformationF(TransformationType.Scale, 1, 1.12f, 1000, initial_display, EasingTypes.Out));
                spriteManager.Add(add);

                add          = headphones.Clone();
                add.Additive = true;
                add.Transform(new TransformationF(TransformationType.Fade, 0, 0.1f, 50, 200));
                add.Transform(new TransformationF(TransformationType.Fade, 0.1f, 0.2f, 1000, initial_display));
                add.Transform(new TransformationF(TransformationType.Scale, 1, 1.04f, 1000, initial_display, EasingTypes.Out));
                spriteManager.Add(add);

                add          = headphones.Clone();
                add.Additive = true;
                add.Transform(new TransformationF(TransformationType.Fade, 0, 0.1f, 50, 200));
                add.Transform(new TransformationF(TransformationType.Fade, 0.1f, 0.2f, 1000, initial_display));
                add.Transform(new TransformationF(TransformationType.Scale, 1, 1.08f, 1000, initial_display, EasingTypes.Out));
                spriteManager.Add(add);

                GameBase.Scheduler.Add(delegate
                {
                    AudioEngine.PlaySample(OsuSamples.MainMenu_Intro);
                    GameBase.Scheduler.Add(delegate
                    {
                        if (AudioEngine.Music != null)
                        {
                            AudioEngine.Music.Play();
                        }
                    }, 2950);
                }, true);

                if (GameBase.Config.GetValue("firstrun", true))
                {
                    Notification notification = new Notification(
                        LocalisationManager.GetString(OsuString.FirstRunWelcome),
                        LocalisationManager.GetString(OsuString.FirstRunTutorial),
                        NotificationStyle.YesNo,
                        delegate(bool answer)
                    {
                        if (answer)
                        {
                            AudioEngine.PlaySample(OsuSamples.MenuHit);
                            Director.ChangeMode(OsuMode.Tutorial);
                        }

                        GameBase.Config.SetValue("firstrun", false);
                        GameBase.Config.SaveConfig();
                    });

                    GameBase.Scheduler.Add(delegate { GameBase.Notify(notification); }, initial_display + 1500);
                }
            }
            else
            {
                if (Director.LastOsuMode == OsuMode.Tutorial)
                {
                    AudioEngine.Music.SeekTo(0);
                }
                AudioEngine.Music.Play();
            }

            string username = GameBase.Config.GetValue <string>("username", null);

            bool hasAuth = GameBase.HasAuth;

            firstDisplay = false;
        }
コード例 #21
0
        private void FollowConnect(HitObject first, HitObject second, SpriteManager diffSpriteManager, pTexture fptexture)
        {
            if (!ShouldFollow(first, second))
            {
                return;
            }

            int time1 = first.EndTime;
            int time2 = second.StartTime;

            // followpoint code
            int time3 = first.StartTime - DifficultyManager.PreEmpt;

            // only allow followpoints to start their trek once their starting slider has finished snaking
            if (first.Type == HitObjectType.Slider)
            {
                time3 = Math.Max(time3, ((Slider)first).snakingEnd);
            }

            float hitRadius = DifficultyManager.HitObjectRadiusSolid / 2;

            Vector2 pos1 = first.EndPosition;
            Vector2 pos2 = second.Position;

            float distance = pMathHelper.Distance(pos1, pos2);

            distance -= hitRadius * 2;

            Vector2 distanceVector = pos2 - pos1;
            Vector2 unitVector     = distanceVector;

            unitVector.Normalize();
            unitVector *= (hitRadius - DifficultyManager.FollowLineDistance * 0.125f); // this lets the followpoints get closer to their circles, for a better looking effect.

            // these two now represent the very edges of the two circles to be joined.
            pos1 += unitVector;
            pos2 -= unitVector;

            // number of spaces between followpoints, including the spaces between
            // the first and last followpoints and their joining circles
            int count = (int)(distance / DifficultyManager.FollowLineDistance + 0.5f);

            if (count > 1)
            {
                float countf = count;

                // the first followpoint appears moments before the destination object appears.
                float expandStart = Math.Max(time3, time2 - DifficultyManager.PreEmpt - DifficultyManager.FollowLinePreEmptStart);
                // it should reach its target just in time for that circle to appear
                // the line's speed is limited so it may arrive a bit late if the slider it leaves from is still snaking.
                float expandEnd = Math.Max(time2 - DifficultyManager.PreEmpt, expandStart + DifficultyManager.FollowPointSpeedLimit);

                // begin contracting followpoints as soon as the first object is done
                float contractStart = Math.Max(time1, expandStart + DifficultyManager.FollowPointScreenTime);
                // try to contract at the same speed but always finish just as the later object needs to be hit
                float contractEnd = Math.Max(Math.Min(time2, time1 + DifficultyManager.FollowLinePreEmptEnd), expandEnd + DifficultyManager.FollowPointScreenTime);

                // exclude j=0 and j=count, since they represent the two circles
                for (int j = 1; j < count; j++)
                {
                    float   progress = j / countf;
                    Vector2 pos      = Vector2.Lerp(pos1, pos2, progress);

                    int fadein  = (int)pMathHelper.Lerp(expandStart, expandEnd, progress);
                    int fadeout = (int)pMathHelper.Lerp(contractStart, contractEnd, progress);

                    pSprite dot =
                        new pSprite(fptexture,
                                    FieldTypes.GamefieldSprites, OriginTypes.Centre, ClockTypes.Audio, pos,
                                    0.005f, false, Color4.White);

                    dot.Transform(
                        new TransformationF(TransformationType.Fade, 0, 1, fadein, fadein + DifficultyManager.FadeIn));
                    dot.Transform(
                        new TransformationBounce(fadein, fadein + DifficultyManager.FadeIn, 1, 2f, 2));
                    dot.Transform(
                        new TransformationF(TransformationType.Fade, 1, 0, fadeout, fadeout + DifficultyManager.FadeOut));
                    diffSpriteManager.Add(dot);
                    second.Sprites.Add(dot);
                }
            }
        }