Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace GameStudioName
- {
- [Flags]
- public enum InventoryFilters
- {
- None = 0,
- Skins = 1,
- Weapons = 2,
- Poses = 4,
- Avatars = 8,
- Emojis = 16,
- Stickers = 32
- }
- public class InventoryWatcher : SceneObject<InventoryWatcher>
- {
- private IGameDatabase database;
- private IBackendService backend;
- private List<InventoryNotifier> notifiers = new List<InventoryNotifier>();
- private void Awake()
- {
- database = Context.Resolve<IGameDatabase>();
- backend = Context.Resolve<IBackendService>();
- }
- protected override void OnEnable()
- {
- base.OnEnable();
- backend.InventoryItemsAdded += OnInventoryItemsAdded;
- backend.InventoryItemRemovedFromNew += OnInventoryItemRemovedFromNew;
- }
- protected override void OnDisable()
- {
- base.OnDisable();
- backend.InventoryItemsAdded -= OnInventoryItemsAdded;
- backend.InventoryItemRemovedFromNew -= OnInventoryItemRemovedFromNew;
- }
- private void OnInventoryItemsAdded(string[] items)
- {
- UpdateNotifiers();
- }
- private void OnInventoryItemRemovedFromNew(string itemId)
- {
- UpdateNotifiers();
- }
- public void RegisterNotifier(InventoryNotifier notifier)
- {
- notifiers.Add(notifier);
- UpdateNotifiers();
- }
- private void UpdateNotifiers()
- {
- int skinCount = 0, weaponCount = 0,
- poseCount = 0, avatarCount = 0,
- emojiCount = 0, stickerCount = 0;
- foreach (var itemId in backend.GetNewInventoryItems())
- {
- var item = database.GetItem(itemId);
- switch (item.Type)
- {
- case ItemType.Skin:
- skinCount++;
- break;
- case ItemType.Weapon:
- weaponCount++;
- break;
- case ItemType.Pose:
- poseCount++;
- break;
- case ItemType.Avatar:
- avatarCount++;
- break;
- case ItemType.Emoji:
- emojiCount++;
- break;
- case ItemType.Sticker:
- stickerCount++;
- break;
- }
- }
- var inventoryFilter = InventoryFilters.None;
- inventoryFilter |= skinCount > 0 ? InventoryFilters.Skins : 0;
- inventoryFilter |= weaponCount > 0 ? InventoryFilters.Weapons : 0;
- inventoryFilter |= poseCount > 0 ? InventoryFilters.Poses : 0;
- inventoryFilter |= avatarCount > 0 ? InventoryFilters.Avatars : 0;
- inventoryFilter |= emojiCount > 0 ? InventoryFilters.Emojis : 0;
- inventoryFilter |= stickerCount > 0 ? InventoryFilters.Stickers : 0;
- foreach (var notifier in notifiers)
- {
- if (notifier.Filter == InventoryFilters.None)
- continue;
- notifier.OnNotify(notifier.Filter == inventoryFilter);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement