private void updateBackgroundAlignment(pSprite s, AlignmentMode alignmentMode, BackgroundAdjustmentDelegate backgroundAdjustment) { if (s == null || BackgroundTexture == null) { return; } if ((alignmentMode & AlignmentMode.Storyboard) != 0) { s.ScaleToScreen((alignmentMode & AlignmentMode.Widescreen) != 0); } else { //first align based on height s.Scale = (float)GameBase.WindowManager.SpriteRes / BackgroundTexture.DisplayHeight; //if it isn't wide enough, let's make it so. if (s.Width * s.Scale * GameBase.WindowManager.RatioInverse < GameBase.WindowManager.Width) { s.Scale = GameBase.WindowManager.Width / ((float)s.Width * GameBase.WindowManager.RatioInverse); } } if (backgroundAdjustment != null) { backgroundAdjustment(BackgroundSprite); } currentAlignmentMode = alignmentMode; currentBackgroundAdjustment = backgroundAdjustment; }
internal ChatManager(Tournament tournament, SpriteManager spriteManager, float depth) { this.tournament = tournament; this.spriteManager = spriteManager; float scale = TournamentLayout.ClientScale * GameBase.WindowManager.Ratio; spriteManager.Add(titleNormal = new pSprite(TextureManager.Load(Path.Combine(Tournament.SkinDirectory, @"tourney-title"), SkinSource.Skin), Fields.TopCentre, Origins.BottomCentre, Clocks.Game, new Vector2(0, 1080 / scale), depth, true, Color.White)); titleNormal.ScaleToScreen(false, true); spriteManager.Add(titleActive = new pSprite(TextureManager.Load(Path.Combine(Tournament.SkinDirectory, @"tourney-title-chat"), SkinSource.Skin), Fields.TopRight, Origins.BottomRight, Clocks.Game, new Vector2(0, 1080 / scale), depth + 0.0001f, true, Color.White) { Alpha = 0 }); //Todo: Downscale float yPos = TournamentLayout.ClientBoxLeft.Bottom / GameBase.WindowManager.Ratio; float xPos = (GameBase.WindowManager.WidthScaled - CHAT_WIDTH) / 2f; float height = TournamentLayout.Height / GameBase.WindowManager.Ratio - yPos; float offset = 5; chatArea = new pScrollableArea(new RectangleF(xPos + offset, yPos + offset, CHAT_WIDTH - 2 * offset, height - 2 * offset), new Vector2(CHAT_WIDTH - 2 * offset, 0), true) { ScrollDragger = false, AllowContentDragging = false }; spriteManager.Add(chatBg = new pSprite(GameBase.WhitePixel, Fields.TopCentre, Origins.BottomCentre, Clocks.Game, new Vector2(0, 1080 / scale), depth + 0.0002f, true, new Color(0, 0, 0, 200)) { VectorScale = new Vector2(CHAT_WIDTH, height) * 1.6f, Alpha = 0 }); ChatEngine.OnNewMessage += handleMessage; }
internal BackgroundManager(Tournament tournament, SpriteManager spriteManager, float depth) { this.tournament = tournament; var remoteBackgroundSprite = new pSpriteDynamic(Tournament.Config.GetValue(@"background", @"https://osu.ppy.sh/images/tournament/default.png"), null, 0, Vector2.Zero, 0.1f) { AlwaysDraw = true, Alpha = 0 }; remoteBackgroundSprite.OnTextureLoaded += () => remoteBackgroundSprite.ScaleToScreen(false, true); spriteManager.Add(remoteBackgroundSprite); foreach (string bg in backgroundNames) { var tex = TextureManager.Load(Path.Combine(Tournament.SkinDirectory, bg)); if (tex != null) { var bgSprite = new pSprite(tex, Fields.TopLeft, Origins.TopLeft, Clocks.Game, Vector2.Zero, depth, true, Color.White) { Alpha = 0 }; bgSprite.ScaleToScreen(false, true); modeBackgroundSprites.Add(bg, bgSprite); spriteManager.Add(bgSprite); } var tempVideo = new pVideo(Path.Combine(Tournament.SkinDirectory, bg), SkinSource.Skin, Clocks.Game); if (tempVideo.Texture != null) { tempVideo.Field = Fields.TopLeft; tempVideo.Origin = Origins.TopLeft; // Make sure videos are above backgrounds in all cases tempVideo.Depth = depth + 0.0001f; tempVideo.Alpha = 0; tempVideo.Loop = true; tempVideo.ScaleToScreen(false, true); tempVideo.UpdateTextureAlignment(); modeBackgroundVideos.Add(bg, tempVideo); spriteManager.Add(tempVideo); } depth += 0.00001f; } if (!modeBackgroundSprites.ContainsKey(backgroundNames[0])) { modeBackgroundSprites.Add(backgroundNames[0], remoteBackgroundSprite); } loadBackground(@"background"); }