Пример #1
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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();
        }
Пример #5
0
        /// <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();
        }
Пример #6
0
        /// <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();
        }
Пример #7
0
        /// <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;
        }
Пример #8
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
        }
Пример #12
0
        /// <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;
        }
Пример #13
0
        /// <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;
        }