Пример #1
0
    public CharSheetSkillsUi()
    {
        var detailsDoc = WidgetDoc.Load("ui/char_skills.json");

        Container = detailsDoc.GetRootContainer();
        Container.SetMouseMsgHandler(msg =>
        {
            // Forward mouse wheel messages to the scrollbar
            if ((msg.flags & MouseEventFlag.ScrollWheelChange) != 0)
            {
                _scrollbar.HandleMouseMessage(msg);
            }

            return(true);
        });
        Container.Name    = "char_skills_ui_main_window";
        Container.Visible = false;

        _skillRanks     = detailsDoc.GetTextContent("skill-ranks-label");
        _attributeBonus = detailsDoc.GetTextContent("skill-attribute-bonus-label");
        _attributeType  = detailsDoc.GetTextContent("skill-attribute-type-label");
        _miscBonus      = detailsDoc.GetTextContent("skill-misc-bonus-label");
        _total          = detailsDoc.GetTextContent("skill-total-label");
        HideSkillDetails();

        for (var i = 0; i < 20; i++)
        {
            var button = new SkillButton(new Rectangle(1, 1 + 13 * i, 156, 13));
            button.OnMouseEnter += _ => ShowSkillDetails(button);
            button.OnMouseExit  += _ => HideSkillDetails();
            button.SetMouseMsgHandler(msg =>
            {
                if ((msg.flags & MouseEventFlag.ScrollWheelChange) != 0)
                {
                    return(_scrollbar.HandleMouseMessage(msg));
                }

                return(false);
            });
            Container.Add(button);
            _skillButtons[i] = button;
        }

        if (VisibleSkills.Length > _skillButtons.Length)
        {
            _scrollbar = new WidgetScrollBar(new Rectangle(160, -4, 13, 267));
            _scrollbar.SetMin(0);
            _scrollbar.Max = VisibleSkills.Length - _skillButtons.Length;
            Container.Add(_scrollbar);
            _scrollbar.SetValueChangeHandler((value) => UpdateSkillButtons());
        }

        UpdateSkillButtons();
    }
 public WidgetScrollBarHandle(WidgetScrollBar scrollBar)
 {
     mScrollBar     = scrollBar;
     mTop           = new WidgetImage("art/scrollbar/top.tga");
     mTopClicked    = new WidgetImage("art/scrollbar/top_click.tga");
     mHandle        = new WidgetImage("art/scrollbar/fill.tga");
     mHandleClicked = new WidgetImage("art/scrollbar/fill_click.tga");
     mBottom        = new WidgetImage("art/scrollbar/bottom.tga");
     mBottomClicked = new WidgetImage("art/scrollbar/bottom_click.tga");
     Width          = mHandle.GetPreferredSize().Width;
 }
    public WidgetScrollView(int width, int height) : base(width, height)
    {
        var scrollBar = new WidgetScrollBar();

        scrollBar.Height = height;
        scrollBar.X      = width - scrollBar.Width;
        scrollBar.SetValueChangeHandler(newValue => { mContainer.SetScrollOffsetY(newValue); });
        mScrollBar = scrollBar;
        base.Add(scrollBar);

        var scrollView = new WidgetContainer(GetInnerWidth(), height);

        mContainer = scrollView;
        base.Add(scrollView);

        UpdateInnerContainer();
    }
Пример #4
0
    public KnownSpellsList(Rectangle rectangle, GameObject critter, int classCode) : base(rectangle)
    {
        var spellsKnown  = critter.GetSpellArray(obj_f.critter_spells_known_idx);
        var domainSpells = GameSystems.Spell.IsDomainSpell(classCode);

        // Try scrolling one spell per scrollbar-tick
        var buttonHeight = 10;
        var currentY     = 0;

        for (var level = 0; level <= 9; level++)
        {
            var headerAdded = false;

            foreach (var spell in spellsKnown)
            {
                if (domainSpells != GameSystems.Spell.IsDomainSpell(spell.classCode) ||
                    !domainSpells && spell.classCode != classCode ||
                    spell.spellLevel != level)
                {
                    continue;
                }

                if (!headerAdded)
                {
                    var levelHeader = new WidgetText($"#{{char_ui_spells:3}} {level}", "char-spell-level");
                    levelHeader.Y = currentY;
                    currentY     += levelHeader.GetPreferredSize().Height;
                    AddContent(levelHeader);
                    headerAdded = true;
                }

                var spellOpposesAlignment =
                    GameSystems.Spell.SpellOpposesAlignment(critter, spell.classCode, spell.spellEnum);
                var spellButton = new KnownSpellButton(
                    new Rectangle(8, currentY, Width - 8, 12),
                    spellOpposesAlignment,
                    spell
                    );
                spellButton.Y = currentY;
                spellButton.OnMemorizeSpell += (spell, button) => OnMemorizeSpell?.Invoke(spell, button);
                currentY += spellButton.Height;
                Add(spellButton);

                buttonHeight = Math.Max(buttonHeight, spellButton.Height);
            }
        }

        var overscroll = currentY - Height;

        if (overscroll > 0)
        {
            var lines = (int)MathF.Ceiling(overscroll / (float)buttonHeight);

            _scrollbar        = new WidgetScrollBar();
            _scrollbar.X      = Width - _scrollbar.Width;
            _scrollbar.Height = Height;

            // Clip existing items that overlap the scrollbar
            foreach (var widgetBase in GetChildren())
            {
                if (widgetBase.X + widgetBase.Width >= _scrollbar.X)
                {
                    var remainingWidth = Math.Max(0, _scrollbar.X - widgetBase.X);
                    widgetBase.Width = remainingWidth;
                }
            }

            _scrollbar.SetMin(0);
            _scrollbar.Max = lines;
            _scrollbar.SetValueChangeHandler(value =>
            {
                SetScrollOffsetY(value * buttonHeight);
                _scrollbar.Y = value * buttonHeight; // Horrible fakery, moving the scrollbar along
            });
            Add(_scrollbar);
        }
    }