using System; using IronMountain.SaveSystem; using UnityEngine; namespace SpellBoundAR.Items.Inventories { [Serializable] public class SavedInventoryEntry : IInventoryEntry { public event Action OnQuantityChanged; public event Action OnViewsChanged; [Header("Cache")] private string _directory; private SavedString _itemID; private SavedInt _quantity; private SavedInt _views; private SavedString _timestamp; public string Directory => _directory; public string ItemTypeID => _itemID.Value; public IItemTypeData ItemTypeData => Database.Instance.GetItemTypeByID(_itemID.Value); public int Quantity { get => _quantity.Value; set { if (_quantity.Value == value) return; _quantity.Value = Mathf.Max(value, 0); _timestamp.Value = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString(); OnQuantityChanged?.Invoke(); } } public int Views { get => _views.Value; set { if (_views.Value == value) return; _views.Value = value; OnViewsChanged?.Invoke(); } } public DateTime Timestamp => DateTime.Parse(_timestamp.Value); public SavedInventoryEntry(string directory) { _directory = directory; _itemID = new SavedString(directory, "Item ID.txt", string.Empty, null); _itemID.Save(); _quantity = new SavedInt(directory, "Quantity.txt", 0, null); _quantity.Save(); _views = new SavedInt(directory, "Views.txt", 0, null); _views.Save(); _timestamp = new SavedString(directory, "Timestamp.txt", DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString(), null); _timestamp.Save(); } public SavedInventoryEntry(string directory, IInventoryEntry inventoryEntry) { _directory = directory; string itemID = inventoryEntry.ItemTypeData != null ? inventoryEntry.ItemTypeData.ID : string.Empty; _itemID = new SavedString(directory, "Item ID.txt", itemID, null); _itemID.Save(); _quantity = new SavedInt(directory, "Quantity.txt", inventoryEntry.Quantity, null); _quantity.Save(); _views = new SavedInt(directory, "Views.txt", inventoryEntry.Views, null); _views.Save(); _timestamp = new SavedString(directory, "Timestamp.txt", inventoryEntry.Timestamp.ToShortDateString() + " " + inventoryEntry.Timestamp.ToLongTimeString(), null); _timestamp.Save(); } public SavedInventoryEntry(string directory, IItemTypeData item, int initialQuantity, int initialViews) { _directory = directory; _itemID = new SavedString(directory, "Item ID.txt", item.ID, null); _itemID.Save(); _quantity = new SavedInt(directory, "Quantity.txt", initialQuantity, null); _quantity.Save(); _views = new SavedInt(directory, "Views.txt", initialViews, null); _views.Save(); _timestamp = new SavedString(directory, "Timestamp.txt", DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString(), null); _timestamp.Save(); } } }