예제 #1
0
 private UiPosition GetPanelPosition(PanelSetup setup, TypePadding dockPadding)
 {
     return(new UiPosition(setup.StartPos,
                           setup.Pos.StartYPos + dockPadding.Bottom,
                           setup.PanelReg.Width,
                           setup.Pos.Height - (dockPadding.Bottom + dockPadding.Top)));
 }
예제 #2
0
        private void DrawPanel(IEnumerable <BasePlayer> players, PanelRegistration registeredPanel, UpdateEnum updateEnum)
        {
            if (!_init)
            {
                return;
            }

            players = players
                      .Where(p => _storedData.Settings[p.userID]?.Enabled ?? true &&
                             (string.IsNullOrEmpty(registeredPanel.Permission) ||
                              permission.UserHasPermission(p.UserIDString, registeredPanel.Permission)))
                      .ToList();
            if (!players.Any())
            {
                return;
            }

            PanelSetup setup = new PanelSetup
            {
                Pos           = _pluginConfig.Docks[registeredPanel.Dock].Position,
                PanelColor    = registeredPanel.BackgroundColor,
                StartPos      = _panelPositions[registeredPanel.Dock][registeredPanel.Name],
                UiParentPanel = GetPanelUiName(registeredPanel.Name),
                PanelReg      = registeredPanel,
            };

            if (registeredPanel.PanelType == PanelTypeEnum.Global)
            {
                DrawGlobalPanel(players, setup, updateEnum);
            }
            else if (registeredPanel.PanelType == PanelTypeEnum.Player)
            {
                DrawPlayersPanel(players, setup, updateEnum);
            }
        }
예제 #3
0
        private void DrawPlayersPanel(IEnumerable <BasePlayer> players, PanelSetup setup, UpdateEnum updateEnum)
        {
            HiddenPanelInfo info = _hiddenPanels[setup.PanelReg.Name];

            if (info.All)
            {
                return;
            }

            foreach (BasePlayer player in players)
            {
                PanelRegistration     reg       = setup.PanelReg;
                Hash <string, object> panelData = reg.Plugin.Call(reg.GetPanelMethod, player, reg.Name) as Hash <string, object>;
                if (panelData == null)
                {
                    PrintError($"DrawPlayersPanel: {reg.Plugin.Name} returned no data from {reg.GetPanelMethod} method");
                    return;
                }

                Panel panel = new Panel(panelData);
                foreach (PanelUpdate update in CreatePanel(panel, setup, updateEnum))
                {
                    CuiHelper.DestroyUi(player, update.PanelName);
                    if (!info.PlayerHidden.Contains(player.userID))
                    {
                        CuiHelper.AddUi(player, update.Container);
                    }
                }
            }
        }
예제 #4
0
        private void DrawPanel(List <BasePlayer> players, PanelRegistration registeredPanel, UpdateEnum updateEnum)
        {
            if (!_init)
            {
                return;
            }

            players = players
                      .Where(p => _storedData.Settings[p.userID]?.Enabled ?? true)
                      .ToList();
            if (players.Count == 0)
            {
                return;
            }

            PanelSetup setup = new PanelSetup
            {
                Pos           = _pluginConfig.Docks[registeredPanel.Dock].Position,
                PanelColor    = registeredPanel.BackgroundColor,
                StartPos      = _panelPositions[registeredPanel.Dock][registeredPanel.Name],
                UiParentPanel = GetPanelUiName(registeredPanel.Name),
                PanelReg      = registeredPanel,
            };

            if (registeredPanel.PanelType == PanelTypeEnum.Global)
            {
                DrawGlobalPanel(players, setup, updateEnum);
            }
            else if (registeredPanel.PanelType == PanelTypeEnum.Player)
            {
                DrawPlayersPanel(players, setup, updateEnum);
            }
        }
예제 #5
0
        private List <PanelUpdate> CreatePanel(Panel panel, PanelSetup setup, UpdateEnum update)
        {
            List <PanelUpdate> containers = new List <PanelUpdate>();

            if (update == UpdateEnum.All || update == UpdateEnum.Panel)
            {
                TypePadding         dockPadding = _pluginConfig.Docks[setup.PanelReg.Dock].DockPadding;
                UiPosition          pos         = GetPanelPosition(setup, dockPadding);
                CuiElementContainer container   = Ui.Container(setup.PanelColor, pos, setup.UiParentPanel);
                containers.Add(new PanelUpdate
                {
                    Container = container,
                    PanelName = setup.UiParentPanel
                });
            }

            List <PanelType> panelTypes = new List <PanelType>();

            if (panel.Text != null)
            {
                panelTypes.Add(panel.Text);
            }

            if (panel.Image != null)
            {
                panelTypes.Add(panel.Image);
            }

            float offset = 0;

            foreach (PanelType type in panelTypes.Where(pt => pt.Enabled).OrderBy(pt => pt.Order))
            {
                if (type is PanelText)
                {
                    if (update == UpdateEnum.All || update == UpdateEnum.Text)
                    {
                        containers.Add(CreateText(panel, setup.UiParentPanel, offset));
                    }
                }
                else if (type is PanelImage)
                {
                    if (update == UpdateEnum.All || update == UpdateEnum.Image)
                    {
                        containers.Add(CreateImage(panel, setup.UiParentPanel, offset));
                    }
                }

                offset += type.Width;
            }

            return(containers);
        }