using UnityEngine; [System.Serializable] public class EquippableItemPrefabAssetData : PrefabAssetModelData { public EquippableItemData EquippableItemData; public EquippableItemPrefabAssetData(EquippableItemPrefabAsset assetModel) : base(assetModel) { EquippableItemData = MapModelToData(assetModel.EquippableItem); } /// /// Function to convert equitable item (current object partial variable) object to data format /// /// /// public EquippableItemData MapModelToData(EquippableItem equippableItem) { return new EquippableItemData(equippableItem); } /// /// Function to convert EquippableItem Asset format to data format /// /// /// public override PrefabAssetModelData PrefabAssetModelToData(PrefabAssetModel assetModel) { return new EquippableItemPrefabAssetData((EquippableItemPrefabAsset)assetModel); } public override PrefabAssetModel MapDataToPrefabAssetModel() { EquippableItemPrefabAsset equippableItemPrefabAsset = new EquippableItemPrefabAsset( Name, PrefabAssetName, new Vector3(Position[0], Position[1], Position[2]) ); // if we forcefully cast on EquippableItem by creating new clss variable - we lost data about Type // because constructo think we pass Item not EquippableItem (because MapDataToObject return Item type) var item = EquippableItemData.MapDataToObject(equippableItemPrefabAsset.PrefabAssetName) as EquippableItem; if (item != null) { // successfully cast - it was oryginally EquippableItem equippableItemPrefabAsset.EquippableItem = item; } else { // cast failed - it never were EquippableItem it plain Item equippableItemPrefabAsset.EquippableItem = new EquippableItem( EquippableItemData.MapDataToObject(equippableItemPrefabAsset.PrefabAssetName) ); } return equippableItemPrefabAsset; } }