using System;
using System.Collections.Generic;
using System.Linq;
using Assets.HeroEditor4D.Common.Scripts.Common;
using Assets.HeroEditor4D.InventorySystem.Scripts.Enums;
using Newtonsoft.Json;
namespace Assets.HeroEditor4D.InventorySystem.Scripts.Data
{
///
/// Represents generic item params (common for all items).
///
[Serializable]
public class ItemParams
{
public string Id;
public int Level;
public ItemRarity Rarity;
public ItemType Type;
public ItemClass Class;
public List Tags = new List();
public List Properties = new List();
public int Price;
public int Weight;
public ItemMaterial Material;
public string IconId;
public string SpriteId;
public string Meta;
///
/// Use this property to provide localization values for items.
///
[JsonIgnore, NonSerialized] public List Localization = new List();
public char Grade => (char) (65 + Level);
public Property FindProperty(PropertyId id)
{
var target = Properties.SingleOrDefault(i => i.Id == id && i.Element == ElementId.Physic);
return target;
}
public Property FindProperty(PropertyId id, ElementId element)
{
var target = Properties.SingleOrDefault(i => i.Id == id && i.Element == element);
return target;
}
public string GetLocalizedName(string language)
{
var localized = Localization.SingleOrDefault(i => i.Language == language) ?? Localization.SingleOrDefault(i => i.Language == "English");
return localized == null ? Id : localized.Value;
}
public List MetaToList()
{
return Meta.IsEmpty() ? new List() : JsonConvert.DeserializeObject>(Meta);
}
public ItemParams Copy()
{
return new ItemParams
{
Id = Id,
Level = Level,
Rarity = Rarity,
Type = Type,
Class = Class,
Tags = Tags.ToList(),
Properties = Properties.Select(i => i.Copy()).ToList(),
Price = Price,
Weight = Weight,
Material = Material,
IconId = IconId,
SpriteId = SpriteId,
Meta = Meta
};
}
}
}