mmorpg2d/Assets/HeroEditor4D/InventorySystem/Scripts/Data/ItemParams.cs
2024-08-27 21:01:33 +05:30

83 lines
2.6 KiB
C#

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
{
/// <summary>
/// Represents generic item params (common for all items).
/// </summary>
[Serializable]
public class ItemParams
{
public string Id;
public int Level;
public ItemRarity Rarity;
public ItemType Type;
public ItemClass Class;
public List<ItemTag> Tags = new List<ItemTag>();
public List<Property> Properties = new List<Property>();
public int Price;
public int Weight;
public ItemMaterial Material;
public string IconId;
public string SpriteId;
public string Meta;
/// <summary>
/// Use this property to provide localization values for items.
/// </summary>
[JsonIgnore, NonSerialized] public List<LocalizedValue> Localization = new List<LocalizedValue>();
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<string> MetaToList()
{
return Meta.IsEmpty() ? new List<string>() : JsonConvert.DeserializeObject<List<string>>(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
};
}
}
}