internal static void SerializePlaceableItemsUsingCustomSerializationSystem(string savePath, List <PlaceableItem> itemsUsingCustomSerializationSystem)
        {
            PlaceableItemSerializationWrapper placeableItemSerializationWrapper = new PlaceableItemSerializationWrapper();

            foreach (PlaceableItem item in itemsUsingCustomSerializationSystem)
            {
                if (ActivePlaceableItemCreators.HasCreatorFromEnum(item.itemType) == false)
                {
                    continue;
                }

                Utilities.Logger.Print($"Modded Placeable Item Serializing {item}...");
                IACMFPlaceableItemCustomSerializationSystem serializationSystem = ActivePlaceableItemCreators.GetCreatorFromEnum(item.itemType) as IACMFPlaceableItemCustomSerializationSystem;

                PlaceableItemSerializable placeableItemSerializable = serializationSystem.SerializeItem(item);
                if (placeableItemSerializable == null)
                {
                    Utilities.Logger.Error($"{item} SerializeItem returned null.");
                    ShowErrorDialog();
                }
                else
                {
                    placeableItemSerializationWrapper.Add(placeableItemSerializable);
                }
            }

            bool result = Utilities.JsonSerialization.Serialize(placeableItemSerializationWrapper, savePath + MODDED_PLACEABLE_ITEM_SAVE_FILE_NAME);

            if (result == false)
            {
                ShowErrorDialog();
            }

            Utilities.Logger.Print($"Modded Placeable Items Serialization successful.");
        }
        internal void Add(PlaceableItem placeableItem)
        {
            PlaceableItemSerializable placeableItemSerializable = new PlaceableItemSerializable();

            placeableItemSerializable.SetObjectForSerializer(placeableItem);
            PlaceableItems.Add(placeableItemSerializable);
        }
        /**
         * If you are just doing boring serialization/deserialization like the following
         * remove the interface IACMFPlaceableItemCustomSerializationSystem and these following methods
         * and allow the system serialize/deserialize for you.
         * This is the default serialization/deseralization behaviour.
         */
        public PlaceableItemSerializable SerializeItem(PlaceableItem placeableItem)
        {
            PlaceableItemSerializable placeableItemSerializable = new PlaceableItemSerializable();

            placeableItemSerializable.SetObjectForSerializer(placeableItem);
            return(placeableItemSerializable);
        }
        /**
         * Read the above comment for SerializeItem()
         */
        public bool DeserializeItem(PlaceableItemSerializable placeableItemSerializable)
        {
            PlaceableItem component =
                Object.Instantiate(Prefab, placeableItemSerializable.position, placeableItemSerializable.rotation, FolderController.Instance.itemsFolder).GetComponent <PlaceableItem>();

            component.SetObjectFromSerializer(placeableItemSerializable);
            component.ChangeToPlaced(false);

            return(true);
        }
 internal void Add(PlaceableItemSerializable placeableItemSerializable)
 {
     PlaceableItems.Add(placeableItemSerializable);
 }