Advertisement
Guest User

Untitled

a guest
Jun 21st, 2021
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.42 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace GameStudioName
  5. {
  6.     [Flags]
  7.     public enum InventoryFilters
  8.     {
  9.         None = 0,
  10.         Skins = 1,
  11.         Weapons = 2,
  12.         Poses = 4,
  13.         Avatars = 8,
  14.         Emojis = 16,
  15.         Stickers = 32
  16.     }
  17.  
  18.     public class InventoryWatcher : SceneObject<InventoryWatcher>
  19.     {
  20.         private IGameDatabase database;
  21.         private IBackendService backend;
  22.  
  23.         private List<InventoryNotifier> notifiers = new List<InventoryNotifier>();
  24.  
  25.         private void Awake()
  26.         {
  27.             database = Context.Resolve<IGameDatabase>();
  28.             backend = Context.Resolve<IBackendService>();
  29.         }
  30.         protected override void OnEnable()
  31.         {
  32.             base.OnEnable();
  33.             backend.InventoryItemsAdded += OnInventoryItemsAdded;
  34.             backend.InventoryItemRemovedFromNew += OnInventoryItemRemovedFromNew;
  35.         }
  36.         protected override void OnDisable()
  37.         {
  38.             base.OnDisable();
  39.             backend.InventoryItemsAdded -= OnInventoryItemsAdded;
  40.             backend.InventoryItemRemovedFromNew -= OnInventoryItemRemovedFromNew;
  41.         }
  42.  
  43.         private void OnInventoryItemsAdded(string[] items)
  44.         {
  45.             UpdateNotifiers();
  46.         }
  47.         private void OnInventoryItemRemovedFromNew(string itemId)
  48.         {
  49.             UpdateNotifiers();
  50.         }
  51.  
  52.         public void RegisterNotifier(InventoryNotifier notifier)
  53.         {
  54.             notifiers.Add(notifier);
  55.             UpdateNotifiers();
  56.         }
  57.         private void UpdateNotifiers()
  58.         {
  59.             int skinCount = 0, weaponCount = 0,
  60.                 poseCount = 0, avatarCount = 0,
  61.                 emojiCount = 0, stickerCount = 0;
  62.             foreach (var itemId in backend.GetNewInventoryItems())
  63.             {
  64.                 var item = database.GetItem(itemId);
  65.                 switch (item.Type)
  66.                 {
  67.                     case ItemType.Skin:
  68.                         skinCount++;
  69.                         break;
  70.                     case ItemType.Weapon:
  71.                         weaponCount++;
  72.                         break;
  73.                     case ItemType.Pose:
  74.                         poseCount++;
  75.                         break;
  76.                     case ItemType.Avatar:
  77.                         avatarCount++;
  78.                         break;
  79.                     case ItemType.Emoji:
  80.                         emojiCount++;
  81.                         break;
  82.                     case ItemType.Sticker:
  83.                         stickerCount++;
  84.                         break;
  85.                 }
  86.             }
  87.  
  88.             var inventoryFilter = InventoryFilters.None;
  89.             inventoryFilter |= skinCount > 0 ? InventoryFilters.Skins : 0;
  90.             inventoryFilter |= weaponCount > 0 ? InventoryFilters.Weapons : 0;
  91.             inventoryFilter |= poseCount > 0 ? InventoryFilters.Poses : 0;
  92.             inventoryFilter |= avatarCount > 0 ? InventoryFilters.Avatars : 0;
  93.             inventoryFilter |= emojiCount > 0 ? InventoryFilters.Emojis : 0;
  94.             inventoryFilter |= stickerCount > 0 ? InventoryFilters.Stickers : 0;
  95.  
  96.             foreach (var notifier in notifiers)
  97.             {
  98.                 if (notifier.Filter == InventoryFilters.None)
  99.                     continue;
  100.                 notifier.OnNotify(notifier.Filter == inventoryFilter);
  101.             }
  102.         }
  103.     }
  104. }
  105.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement