/// <summary> /// </summary> private void CreateTooltip() { TooltipText = new SpriteText(Fonts.Exo2SemiBold, Name, 13) { Alpha = 0 }; Tooltip = new Sprite() { Parent = this, Y = Padding - 20, Size = new ScalableVector2(TooltipText.Width + 10, TooltipText.Height + 10), Tint = ColorHelper.HexToColor("#161616"), Alignment = TooltipAlignment, Alpha = 0, SetChildrenAlpha = true }; Tooltip.AddBorder(Color.White); Tooltip.Border.Alpha = 0; TooltipText.Parent = Tooltip; TooltipText.Alignment = Alignment.MidCenter; TooltipText.TextAlignment = Alignment.MidCenter; }
/// <summary> /// </summary> private void CreateContainer() { CustomizeContainer = new Sprite { Parent = this, Alignment = Alignment.MidCenter, Size = new ScalableVector2(930, 500), Tint = ColorHelper.HexToColor("#0f0f0f") }; CustomizeContainer.AddBorder(Colors.MainAccent, 2); }
/// <summary> /// Creates the avatar for the user. /// </summary> private void CreateAvatar() { Avatar = new Sprite { Parent = this, Size = new ScalableVector2(Height * 0.80f, Height * 0.80f), X = 10, Alignment = Alignment.MidLeft, Image = GetAvatarOrRequest() }; Avatar.AddBorder(Color.White, 2); }
/// <summary> /// Creates the thumbnail of the map /// </summary> private void CreateThumbnail() { Thumbnail = new Sprite() { Parent = this, Alignment = Alignment.MidLeft, X = 10, Size = new ScalableVector2(256, 144), Alpha = 0 }; Thumbnail.AddBorder(Color.White); UpdateThumbnailImage(); }
/// <summary> /// Creates the thumbnail of the map /// </summary> private void CreateThumbnail() { Thumbnail = new Sprite() { Parent = this, Alignment = Alignment.MidLeft, X = 10, Size = new ScalableVector2(222, 110), Alpha = 0 }; Thumbnail.AddBorder(ColorHelper.HexToColor("#236f9c")); UpdateThumbnailImage(); }
/// <inheritdoc /> /// <summary> /// </summary> /// <param name="container"></param> /// <param name="message"></param> public DrawableChatMessage(ChatMessageContainer container, ChatMessage message) { Container = container; Message = message; DestroyIfParentIsNull = false; Avatar = new Sprite { Parent = this, UsePreviousSpriteBatchOptions = true, X = 10, Size = new ScalableVector2(44, 44), Y = Padding, }; SteamManager.SteamUserAvatarLoaded += OnSteamAvatarLoaded; // QuaverBot. No need to load. if (message.Sender.OnlineUser.SteamId == 0) { Avatar.Image = UserInterface.UnknownAvatar; } // We've got the user's avatar, so use it. if (SteamManager.UserAvatars.ContainsKey((ulong)message.Sender.OnlineUser.SteamId)) { Avatar.Image = SteamManager.UserAvatars[(ulong)message.Sender.OnlineUser.SteamId]; } // Need to retrieve user's avatar. else { // Go with an unknown avatar for now until it's loaded. Avatar.Image = UserInterface.UnknownAvatar; SteamManager.SendAvatarRetrievalRequest((ulong)message.Sender.OnlineUser.SteamId); } var userColor = Colors.GetUserChatColor(Message.Sender.OnlineUser.UserGroups); Avatar.AddBorder(new Color(userColor.R / 2, userColor.G / 2, userColor.B / 2), 2); Avatar.Border.Alpha = 0.95f; X = -Container.Width; Width = Container.Width - 5; Alpha = 0; CreateUsernameText(); CreateChatBadge(); CreateMessageContentText(); RecalculateHeight(); }
/// <summary> /// </summary> private void CreateMapBanner() { MapBanner = new Sprite { Parent = this, Alignment = Alignment.TopCenter, Y = Status.Y + Status.Height + 10, Size = new ScalableVector2(368, 80), SetChildrenAlpha = true, Alpha = 0 }; MapBanner.AddBorder(Colors.MainAccent); MapBanner.Border.Alpha = 0; }
/// <inheritdoc /> /// <summary> /// </summary> /// <param name="screen"></param> public AlphaScreenView(Screen screen) : base(screen) { GameBase.Game.GlobalUserInterface.Cursor.Hide(0); CreateBackgroundImage(); var blackBg = new Sprite { Parent = Container, HeightScale = 1, WidthScale = 1, Tint = Color.Black, Alpha = 1, Alignment = Alignment.MidCenter }; blackBg.AddBorder(Color.White, 3); CreateWelcomeText(); CreateDiscordJoinText(); CreateThanksText(); CreateThingsWontBePerfectText(); CreatePressToSkipText(); }
/// <inheritdoc /> /// <summary> /// </summary> /// <param name="container"></param> /// <param name="item"></param> /// <param name="index"></param> public DrawableMultiplayerPlayer(PoolableScrollContainer <OnlineUser> container, OnlineUser item, int index) : base(container, item, index) { Alpha = 0f; Tint = Color.White; Size = new ScalableVector2(container.Width, HEIGHT); Button = new DrawableMultiplayerPlayerButton(this) { Parent = this, UsePreviousSpriteBatchOptions = true }; Ready = new Sprite { Parent = Button, Alignment = Alignment.MidLeft, X = 16, Image = FontAwesome.Get(FontAwesomeIcon.fa_check_mark), Size = new ScalableVector2(18, 18), Alpha = OnlineManager.CurrentGame.PlayersReady.Contains(Item.Id) ? 1 : 0.35f, Tint = Color.LimeGreen, UsePreviousSpriteBatchOptions = true }; Avatar = new Sprite { Parent = Button, Size = new ScalableVector2(36, 36), X = Ready.X + Ready.Width + 16, Alignment = Alignment.MidLeft, Alpha = 0, UsePreviousSpriteBatchOptions = true }; Avatar.AddBorder(GetPlayerColor(), 2); Flag = new Sprite() { Parent = Button, Alignment = Alignment.MidLeft, X = Avatar.X + Avatar.Width + 16, Image = item.CountryFlag == null?Flags.Get("XX") : Flags.Get(item.CountryFlag), Size = new ScalableVector2(26, 26), UsePreviousSpriteBatchOptions = true }; Username = new SpriteTextBitmap(FontsBitmap.GothamRegular, string.IsNullOrEmpty(item.Username) ? $"Loading..." : item.Username) { Parent = Flag, Alignment = Alignment.MidLeft, X = Flag.Width + 6, FontSize = 16, UsePreviousSpriteBatchOptions = true }; HostCrown = new Sprite { Parent = Username, Alignment = Alignment.MidLeft, X = Username.Width + 12, Y = 1, Size = new ScalableVector2(16, 16), Image = FontAwesome.Get(FontAwesomeIcon.fa_vintage_key_outline), SpriteEffect = SpriteEffects.FlipHorizontally, Tint = Color.Gold, UsePreviousSpriteBatchOptions = true }; NoMapIcon = new Sprite() { Parent = Button, Alignment = Alignment.MidLeft, X = Ready.X, Size = Ready.Size, Tint = Color.Red, Visible = OnlineManager.CurrentGame.PlayersWithoutMap.Contains(Item.Id), Image = FontAwesome.Get(FontAwesomeIcon.fa_times), UsePreviousSpriteBatchOptions = true }; Wins = new SpriteTextBitmap(FontsBitmap.GothamRegular, "0 Wins") { Parent = this, Alignment = Alignment.MidRight, X = -16, FontSize = 16, Tint = Colors.SecondaryAccent, Y = -2, UsePreviousSpriteBatchOptions = true }; Mods = new SpriteTextBitmap(FontsBitmap.GothamRegular, "") { Parent = this, Alignment = Alignment.MidLeft, X = Avatar.X + Avatar.Width + 16, FontSize = 14, Y = 8, UsePreviousSpriteBatchOptions = true, Tint = Colors.MainAccent }; Referee = new SpriteTextBitmap(FontsBitmap.GothamRegular, "Referee") { Parent = this, Alignment = Alignment.MidRight, X = -16, FontSize = 16, Y = -2, UsePreviousSpriteBatchOptions = true }; OnlineManager.Client.OnUserInfoReceived += OnUserInfoReceived; OnlineManager.Client.OnGameHostChanged += OnGameHostChanged; OnlineManager.Client.OnGameMapChanged += OnGameMapChanged; OnlineManager.Client.OnGamePlayerNoMap += OnGamePlayerNoMap; OnlineManager.Client.OnGamePlayerHasMap += OnGamePlayerHasMap; OnlineManager.Client.OnPlayerReady += OnGamePlayerReady; OnlineManager.Client.OnPlayerNotReady += OnGamePlayerNotReady; OnlineManager.Client.OnUserStats += OnUserStats; OnlineManager.Client.OnGamePlayerWinCount += OnGamePlayerWinCount; OnlineManager.Client.OnGameTeamWinCount += OnGameTeamWinCount; OnlineManager.Client.OnPlayerChangedModifiers += OnPlayerChangedModifiers; OnlineManager.Client.OnChangedModifiers += OnGameChangedModifiers; OnlineManager.Client.OnGameSetReferee += OnGameSetReferee; SteamManager.SteamUserAvatarLoaded += OnSteamAvatarLoaded; if (!OnlineManager.OnlineUsers[item.Id].HasUserInfo) { OnlineManager.Client.RequestUserInfo(new List <int> { item.Id }); } else { if (SteamManager.UserAvatars.ContainsKey((ulong)Item.SteamId)) { Avatar.Image = SteamManager.UserAvatars[(ulong)Item.SteamId]; Avatar.Alpha = 1; } } // Request user stats if necessary if (OnlineManager.OnlineUsers[item.Id].Stats.Count == 0) { OnlineManager.Client.RequestUserStats(new List <int> { item.Id }); } }
/// <inheritdoc /> /// <summary> /// </summary> /// <param name="container"></param> /// <param name="item"></param> /// <param name="index"></param> /// <param name="header"></param> public ResultMultiplayerScoreboardUser(PoolableScrollContainer <ScoreboardUser> container, ScoreboardUser item, int index, ResultMultiplayerScoreboardTableHeader header) : base(container, item, index) { Header = header; Size = new ScalableVector2(container.Width, HEIGHT); Alpha = 0.85f; Button = new ResultMultiplayerScoreboardUserButton(Item, container) { Parent = this, Size = Size, UsePreviousSpriteBatchOptions = true }; // ReSharper disable once ObjectCreationAsStatement var rank = new SpriteTextBitmap(FontsBitmap.GothamRegular, $"{item.Rank}.") { Parent = this, Alignment = Alignment.MidLeft, X = 20, FontSize = 16, Tint = Item.Type == ScoreboardUserType.Self ? Colors.SecondaryAccent : Color.White, UsePreviousSpriteBatchOptions = true }; var avatar = new Sprite { Parent = this, Alignment = Alignment.MidLeft, Size = new ScalableVector2(32, 32), X = 56, Image = item.Avatar.Image, UsePreviousSpriteBatchOptions = true }; avatar.AddBorder(Color.White, 2); var username = new SpriteTextBitmap(FontsBitmap.GothamRegular, item.UsernameRaw) { Parent = this, Alignment = Alignment.MidLeft, X = avatar.X + avatar.Width + 16, FontSize = 16, Tint = Item.Type == ScoreboardUserType.Self ? Colors.SecondaryAccent : Color.White, UsePreviousSpriteBatchOptions = true }; if (item.Processor == null) { return; } CreateData(new Dictionary <string, string> { { "Rating", item.CalculateRating().ToString("00.00") }, { "Grade", "" }, { "Accuracy", StringHelper.AccuracyToString(item.Processor.Accuracy) }, { "Max Combo", item.Processor.MaxCombo + "x" }, { "Marv", item.Processor.CurrentJudgements[Judgement.Marv].ToString() }, { "Perf", item.Processor.CurrentJudgements[Judgement.Perf].ToString() }, { "Great", item.Processor.CurrentJudgements[Judgement.Great].ToString() }, { "Good", item.Processor.CurrentJudgements[Judgement.Good].ToString() }, { "Okay", item.Processor.CurrentJudgements[Judgement.Okay].ToString() }, { "Miss", item.Processor.CurrentJudgements[Judgement.Miss].ToString() }, { "Mods", item.Processor.Mods <= 0 ? "None" : ModHelper.GetModsString(ModHelper.GetModsFromRate(ModHelper.GetRateFromMods(item.Processor.Mods))) } }); // ReSharper disable once ObjectCreationAsStatement new Sprite { Parent = this, Alignment = Alignment.BotLeft, Size = new ScalableVector2(Width, 1), Alpha = 0.3f }; }
/// <inheritdoc /> /// <summary> /// </summary> /// <param name="screen"></param> public TestDrawingSpritesScreenView(Screen screen) : base(screen) { #region GREEN_BOX GreenBox = new Sprite() { Parent = Container, Size = new ScalableVector2(50, 50), Tint = Color.Green, Position = new ScalableVector2(0, 10), Alignment = Alignment.TopCenter }; GreenBox.AddBorder(Color.White, 2); #endregion #region HELLO_WORLD_TEXT HelloWorldText = new SpriteText("exo2-bold", "Hello, World!", 18) { Parent = Container, Alignment = Alignment.TopCenter, Y = GreenBox.Height + GreenBox.Y + 40 }; #endregion #region CLICK_ME_BUTTON ClickMeButton = new TextButton(WobbleAssets.WhiteBox, "exo2-bold", "Click me!", 18, (sender, args) => { // Click event handler method goes here. // Choose a random background color! BackgroundColor = new Color(Rng.Next(0, 255), Rng.Next(0, 255), Rng.Next(0, 255)); }) { Parent = Container, Size = new ScalableVector2(150, 50), Tint = Color.White, Text = { Tint = Color.Black }, Alignment = Alignment.TopCenter, Y = HelloWorldText.Y + 40 }; #endregion #region ANIMATING_LIGHTING AnimatingLighting = new AnimatableSprite(Textures.TestSpritesheet) { Parent = Container, Size = new ScalableVector2(200, 200), Alignment = Alignment.MidRight, X = -20, // Here we will create new custom SpriteBatchOptions for this sprite. // This overrides SpriteBatch.Begin() to include these new SpriteBatchOptions ONLY for this sprite and any // sprites drawn after it that specify `UsePreviousSpriteBatchOptions` // // IMPORTANT! // Any sprites you want to have these same SpriteBatch.Begin options for WITHOUT creating a new SpriteBatch, // you must set `UsePreviousSpriteBatchOptions` to true. SpriteBatchOptions = new SpriteBatchOptions { BlendState = BlendState.Additive }, }; // Start the animation loop forwards at 60FPS infinitely. AnimatingLighting.StartLoop(Direction.Forward, 60); #endregion #region SPRITE_WITH_SHADER SpriteWithShader = new Sprite { Image = WobbleAssets.WhiteBox, Size = new ScalableVector2(200, 200), Alignment = Alignment.TopCenter, Parent = Container, Tint = Color.Orange, Y = ClickMeButton.Y + ClickMeButton.Height + 40, SpriteBatchOptions = new SpriteBatchOptions { SortMode = SpriteSortMode.Deferred, BlendState = BlendState.NonPremultiplied, SamplerState = SamplerState.PointClamp, DepthStencilState = DepthStencilState.Default, RasterizerState = RasterizerState.CullNone, // The shader attached is to make the sprite semi transparent // Shader created by "Vortex-" (https://github.com/VortexCoyote) Shader = new Shader(GameBase.Game.Resources.Get("Wobble.Tests.Resources/Shaders/semi-transparent.mgfxo"), new Dictionary <string, object> { { "p_dimensions", new Vector2(200, 200) }, { "p_position", new Vector2(0, 0) }, { "p_rectangle", new Vector2(100, 100) }, { "p_alpha", 0f } }) } }; #endregion }
/// <inheritdoc /> /// <summary> /// </summary> /// <param name="screen"></param> public LobbyScreenView(LobbyScreen screen) : base(screen) { LobbyScreen = screen; CreateBackground(); CreateHeader(); CreateFooter(); Visualizer = new MenuAudioVisualizer((int)WindowManager.Width, 400, 150, 5) { Parent = Container, Alignment = Alignment.BotLeft, Y = -Footer.Height }; Visualizer.Bars.ForEach(x => { x.Alpha = 0.30f; }); CreateSearchBox(); CreateMatchContainer(); Jukebox = new Jukebox(true); FilterBackground = new Sprite() { Parent = Container, Position = new ScalableVector2(-Searchbox.X, Searchbox.Y), Size = new ScalableVector2(762, Searchbox.Height), Tint = Color.Black, Alpha = 0.75f }; FilterBackground.AddBorder(Color.White, 2); const float spacing = 60f; var locked = new LabelledCheckbox("Display Locked", ConfigManager.LobbyFilterHasPassword) { Parent = FilterBackground, Alignment = Alignment.MidLeft, X = 14 }; var full = new LabelledCheckbox("Display Full", ConfigManager.LobbyFilterFullGame) { Parent = FilterBackground, Alignment = Alignment.MidLeft, X = locked.X + locked.Width + spacing }; var owned = new LabelledCheckbox("Map Downloaded", ConfigManager.LobbyFilterOwnsMap) { Parent = FilterBackground, Alignment = Alignment.MidLeft, X = full.X + full.Width + spacing }; var friends = new LabelledCheckbox("Friends In Game", ConfigManager.LobbyFilterHasFriends) { Parent = FilterBackground, Alignment = Alignment.MidLeft, X = owned.X + owned.Width + spacing }; ConfigManager.LobbyFilterHasPassword.ValueChanged += RefilterGames; ConfigManager.LobbyFilterFullGame.ValueChanged += RefilterGames; ConfigManager.LobbyFilterOwnsMap.ValueChanged += RefilterGames; ConfigManager.LobbyFilterHasFriends.ValueChanged += RefilterGames; }
/// <summary> /// </summary> public OnlinePlayercard() { Size = new ScalableVector2(520, 66); Image = UserInterface.PlayercardBackground; Background = new Sprite() { Parent = this, Alignment = Alignment.MidCenter, Size = new ScalableVector2(Width - 4, Height - 4), Image = UserInterface.PlayercardCoverDefault, Alpha = 0.65f }; Button = new ImageButton(UserInterface.BlankBox) { Parent = this, Alignment = Alignment.MidCenter, Size = new ScalableVector2(Width - 4, Height - 4), Alpha = 0 }; Button.Clicked += OnButtonClicked; Avatar = new Sprite() { Parent = this, Alignment = Alignment.MidLeft, Size = new ScalableVector2(Height * 0.75f, Height * 0.75f), X = 12, Image = SteamManager.UserAvatars[SteamUser.GetSteamID().m_SteamID] }; Avatar.AddBorder(Color.White, 2); Flag = new Sprite() { Parent = this, Alignment = Alignment.MidLeft, Y = -12, Size = new ScalableVector2(24, 24), X = Avatar.X + Avatar.Width + 10, Image = Flags.Get("XX") }; Username = new SpriteTextBitmap(FontsBitmap.GothamRegular, ConfigManager.Username.Value) { Parent = Flag, Alignment = Alignment.MidLeft, X = Flag.Width + 8, FontSize = 20 }; GameMode = new SpriteTextBitmap(FontsBitmap.GothamRegular, ModeHelper.ToShortHand(ConfigManager.SelectedGameMode.Value)) { Parent = this, Alignment = Alignment.BotRight, Position = new ScalableVector2(-10, -8), FontSize = 16, Tint = Colors.SecondaryAccent, }; Status = new SpriteTextBitmap(FontsBitmap.GothamRegular, "Offline") { Parent = this, Alignment = Alignment.MidLeft, X = Flag.X, Y = Flag.Y + Flag.Height, FontSize = 16 }; LoadingWheel = new Sprite() { Parent = Status, Size = new ScalableVector2(16, 16), Image = UserInterface.LoadingWheel, Alignment = Alignment.MidLeft, X = Status.Width + 10 }; UpdateText(); OnlineManager.Status.ValueChanged += OnOnlineStatusChanged; ConfigManager.SelectedGameMode.ValueChanged += OnSelectedGameModeChanged; }