Exemple #1
0
        protected override void PostConstruct()
        {
            base.PostConstruct();

            Tree.CreateItem();

            Tree.SetColumnTitle(0, Translate("ui.InventoryView.name"));
            Tree.SetColumnTitle(1, Translate("ui.InventoryView.type"));
            Tree.SetColumnTitle(2, Translate("ui.InventoryView.slot"));
            Tree.SetColumnTitle(3, Translate("ui.InventoryView.weight"));

            Tree.SetColumnTitlesVisible(true);

            var onDispose = Disposed.Where(identity);

            OnItemsChange
            .Do(_ => Tree.RemoveAllNodes())
            .CombineLatest(OnEquipmentContainerChange, (list, parent) => (list, parent))
            .TakeUntil(onDispose)
            .Subscribe(t => t.list.ToList().ForEach(item => CreateNode(item, t.parent)), this);

            OnSelectionChange
            .TakeUntil(onDispose)
            .Subscribe(DisplayItem, this);
        }
Exemple #2
0
        public InventoryView(
            IPlayerControl playerControl,
            InspectingView viewControl,
            MeshInstance itemStand,
            bool pauseWhenVisible,
            Option <string> closeAction,
            Godot.Control node,
            Tree tree,
            Container buttonContainer,
            Panel infoPanel,
            Label titleLabel,
            Option <Label> typeLabel,
            Option <RichTextLabel> descriptionLabel,
            PackedScene actionButton,
            ILoggerFactory loggerFactory) : base(pauseWhenVisible, closeAction, playerControl, node, loggerFactory)
        {
            Ensure.That(viewControl, nameof(viewControl)).IsNotNull();
            Ensure.That(tree, nameof(tree)).IsNotNull();
            Ensure.That(itemStand, nameof(itemStand)).IsNotNull();
            Ensure.That(buttonContainer, nameof(buttonContainer)).IsNotNull();
            Ensure.That(infoPanel, nameof(infoPanel)).IsNotNull();
            Ensure.That(titleLabel, nameof(titleLabel)).IsNotNull();
            Ensure.That(actionButton, nameof(actionButton)).IsNotNull();

            ViewControl      = viewControl;
            Tree             = tree;
            ButtonContainer  = buttonContainer;
            ItemStand        = itemStand;
            InfoPanel        = infoPanel;
            TitleLabel       = titleLabel;
            TypeLabel        = typeLabel;
            DescriptionLabel = descriptionLabel;
            ActionButton     = actionButton;

            _buttonListeners = new CompositeDisposable();

            OnEquipmentContainerChange = PlayerControl.OnCharacterChange
                                         .Select(c => c.Select(v => v.Equipments).ToObservable())
                                         .Switch();

            OnItemsChange = OnEquipmentContainerChange
                            .Select(c => c.OnItemsChange)
                            .Switch();

            OnSelectionChange = Tree.OnItemSelect()
                                .Select(v => v.Bind(i => Optional(i.GetMeta(SlotKey) as string)))
                                .Merge(OnItemsChange.Select(_ => Option <string> .None))
                                .CombineLatest(OnEquipmentContainerChange, (slot, slots) => (slot, slots))
                                .Select(t => t.slot.Bind(s => t.slots.FindItemInSlot(s)).HeadOrNone())
                                .Do(current => Selected = current);
        }
Exemple #3
0
        protected override void PostConstruct()
        {
            base.PostConstruct();

            var disposed = Disposed.Where(identity);

            OnItemsChange
            .Do(items => Items = items)
            .TakeUntil(disposed)
            .Subscribe(HandleItemsChange, this);

            OnNavigate
            .Do(_ => UpLabel.Iter(l => l.Active = this.CanGoUp()))
            .Select(i => i.Bind(v => v.GetPath()).Reverse())
            .Select(p => string.Join(" > ", p.Map(v => v.DisplayName)))
            .TakeUntil(disposed)
            .Subscribe(v => Breadcrumb.Iter(b => b.Text = v), this);

            UpLabel
            .Map(l => l.OnAction)
            .ToObservable()
            .Switch()
            .TakeUntil(disposed)
            .Subscribe(_ => this.GoUp());
            CloseLabel
            .Map(l => l.OnAction)
            .ToObservable()
            .Switch()
            .TakeUntil(disposed)
            .Subscribe(_ => this.Hide());

            Node.OnVisibilityChange()
            .StartWith(Visible)
            .TakeUntil(disposed)
            .Subscribe(OnVisibilityChanged, this);

            if (BackAction.IsSome)
            {
                Node.OnUnhandledInput()
                .Where(e => BackAction.Exists(v => e.IsActionPressed(v)) && this.CanGoUp())
                .TakeUntil(disposed)
                .Do(_ => Node.GetTree().SetInputAsHandled())
                .Subscribe(_ => this.GoUp(), this);
            }
        }
Exemple #4
0
        protected override void InitializeComponent(IUIContext context, bool isPlaying)
        {
            base.InitializeComponent(context, isPlaying);

            if (!isPlaying)
            {
                return;
            }

            OnItemsChange
            .Subscribe(UpdateItems, Debug.LogError)
            .AddTo(this);

            _textStyle
            .Select(v => v.ValueFor(this))
            .Subscribe(v => v.Update(PeerDropdown.captionText, DefaultTextStyle), Debug.LogError)
            .AddTo(this);
            _itemTextStyle
            .Select(v => v.Merge(DefaultItemTextStyleSet))
            .Subscribe(v => PeerToggle.TextStyle = v, Debug.LogError)
            .AddTo(this);

            _background
            .Select(v => v.ValueFor(this))
            .Subscribe(v => v.Update(PeerImage, DefaultBackground), Debug.LogError)
            .AddTo(this);
            _popupBackground
            .Select(v => v.Merge(DefaultPopupBackground))
            .Subscribe(v => PeerScrollPanel.Background = v, Debug.LogError)
            .AddTo(this);
            _itemBackground
            .Select(v => v.Merge(DefaultItemBackgroundSet))
            .Subscribe(v => PeerToggle.Checkbox = v, Debug.LogError)
            .AddTo(this);
            _arrowImage
            .Select(v => v.ValueFor(this))
            .Subscribe(v => v.Update(PeerArrow, DefaultArrowImage), Debug.LogError)
            .AddTo(this);
        }