public static SpellCollection Create(string name, EnumSetting spellContainers, EnumSetting allowances,
                                         EnumSetting rarities, EnumSetting characterClasses, SaveableSelectedEnumPerEnum characterCasterTypes,
                                         EnumSetting books, RarityPerCharacterClassPerSpellContainer rarityPerCharacterClassPerSpellContainer)
    {
        SpellCollection newSpellCollection = CreateInstance <SpellCollection> ();

        if (CheckName(name) == NameCheckResult.Bad)
        {
            throw new UnityException("Spell Collection name invalid, contains invalid characters.");
        }
        if (CheckName(name) == NameCheckResult.IsDefault)
        {
            throw new UnityException("Spell Collection name invalid, name cannot start with Default");
        }

        newSpellCollection.name                  = name;
        newSpellCollection.spellContainers       = spellContainers;
        newSpellCollection.allowances            = allowances;
        newSpellCollection.rarities              = rarities;
        newSpellCollection.characterClasses      = characterClasses;
        newSpellCollection.characterCasterTypes  = characterCasterTypes;
        newSpellCollection.books                 = books;
        newSpellCollection.spellCollectionFilter = SpellCollectionFilter.CreateBlank(allowances, rarities, characterClasses, books);
        newSpellCollection.spells                = new Spell[0];

        SaveableHolder.AddSaveable(newSpellCollection);

        return(newSpellCollection);
    }
    protected override void SetupFromSplitJsonString(string[] splitJsonString)
    {
        name                 = splitJsonString[0];
        spellContainers      = EnumSetting.Load(splitJsonString[1]);
        allowances           = EnumSetting.Load(splitJsonString[2]);
        rarities             = EnumSetting.Load(splitJsonString[3]);
        characterClasses     = EnumSetting.Load(splitJsonString[4]);
        characterCasterTypes = SaveableSelectedEnumPerEnum.Load(splitJsonString[5]);
        books                = EnumSetting.Load(splitJsonString[6]);
        rarityPerCharacterClassPerSpellContainer = RarityPerCharacterClassPerSpellContainer.Load(splitJsonString[7]);
        spellCollectionFilter = SpellCollectionFilter.CreateFromJsonString(splitJsonString[8]);

        spells = new Spell[splitJsonString.Length - 9];
        for (int i = 0; i < spells.Length; i++)
        {
            spells[i] = Spell.CreateFromJsonString(splitJsonString[i + 9]);
        }

        spellCollectionFilter.ApplyFilter(this);
    }
    protected override string ConvertToJsonString(string[] jsonSplitter)
    {
        string jsonString = "";

        jsonString += name + jsonSplitter[0];
        jsonString += spellContainers.name + jsonSplitter[0];
        jsonString += allowances.name + jsonSplitter[0];
        jsonString += rarities.name + jsonSplitter[0];
        jsonString += characterClasses.name + jsonSplitter[0];
        jsonString += characterCasterTypes.name + jsonSplitter[0];
        jsonString += books.name + jsonSplitter[0];
        jsonString += rarityPerCharacterClassPerSpellContainer.name + jsonSplitter[0];
        jsonString += SpellCollectionFilter.GetJsonString(spellCollectionFilter) + jsonSplitter[0];

        for (int i = 0; i < spells.Length; i++)
        {
            jsonString += Spell.GetJsonString(spells[i]) + jsonSplitter[0];
        }

        return(jsonString);
    }