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); }
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); }
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); } }
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); }