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); }
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)); }
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; } } }
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)); } }
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); }
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); }
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(); }
/// <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); }
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(); }
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); }); }
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; }
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(); }
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 }
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)); } }
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; }
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); } }
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(); }
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); }
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; }
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; }
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); } } }