コード例 #1
0
 /// <summary>
 /// Sets up the sprite for a specific body part
 /// </summary>
 private void SetupBodySprite(SpriteSheetAndData variantBodypart, string bodypartKey, Color?color = null)
 {
     if (variantBodypart.Texture != null)
     {
         SetupSprite(variantBodypart, bodypartKey, color);
     }
 }
コード例 #2
0
    /// <summary>
    /// Mutates the plant instance this is run against
    /// </summary>
    /// <param name="_DefaultPlantData"></param>
    public void MutateTo(DefaultPlantData _DefaultPlantData)
    {
        if (_DefaultPlantData == null)
        {
            return;
        }
        Plantname     = _DefaultPlantData.plantData.Plantname;
        Description   = _DefaultPlantData.plantData.Description;
        Name          = _DefaultPlantData.plantData.Name;
        ProduceObject = _DefaultPlantData.plantData.ProduceObject;
        PacketsSprite = _DefaultPlantData.plantData.PacketsSprite;
        //ProduceSprite = _DefaultPlantData.plantData.ProduceSprite;
        GrowthSprites    = _DefaultPlantData.plantData.GrowthSprites;
        FullyGrownSprite = _DefaultPlantData.plantData.FullyGrownSprite;
        DeadSprite       = _DefaultPlantData.plantData.DeadSprite;

        MutatesInTo = _DefaultPlantData.plantData.MutatesInTo;

        WeedResistance = WeedResistance + _DefaultPlantData.WeedResistanceChange;
        WeedGrowthRate = WeedGrowthRate + _DefaultPlantData.WeedGrowthRateChange;
        GrowthSpeed    = GrowthSpeed + _DefaultPlantData.GrowthSpeedChange;
        Potency        = Potency + _DefaultPlantData.PotencyChange;
        Endurance      = Endurance + _DefaultPlantData.EnduranceChange;
        Yield          = Yield + _DefaultPlantData.YieldChange;
        Lifespan       = Lifespan + _DefaultPlantData.LifespanChange;


        PlantTrays = (_DefaultPlantData.PlantTrays.Union(PlantTrays)).ToList();
        CombineReagentProduction(_DefaultPlantData.ReagentProduction);
    }
コード例 #3
0
    /// <summary>
    /// Used for generating a single element within a The internal data holder
    /// </summary>
    /// <returns>The single sprite.</returns>
    /// <param name="textureAndData">Texture and data.</param>
    public static SpriteData SetupSingleSprite(SpriteSheetAndData textureAndData)
    {
        var SpriteInfos = new SpriteData();

        SpriteInfos.List = new List <List <List <SpriteHandler.SpriteInfo> > >();
        SpriteInfos.List.Add(CompleteSpriteSetup(textureAndData));
        return(SpriteInfos);
    }
コード例 #4
0
 /// <summary>
 /// Sets up the sprite for a specific customisation
 /// </summary>
 private void SetupCustomisationSprite(CustomisationType customisationType, string customisationKey, string customisationName, Color?color = null)
 {
     if (customisationName != "None")
     {
         SpriteSheetAndData spriteSheetAndData = PlayerCustomisationDataSOs.Instance.Get(customisationType, ThisCharacter.Gender, customisationName).Equipped;
         SetupSprite(spriteSheetAndData, customisationKey, color);
     }
 }
コード例 #5
0
    /// <summary>
    /// Used for generating an Internal data list a single element of
    /// </summary>
    /// <returns>The sprite setup.</returns>
    /// <param name="textureAndData">Texture and data.</param>
    public static List <List <SpriteHandler.SpriteInfo> > CompleteSpriteSetup(SpriteSheetAndData textureAndData)
    {
        var SpriteInfos = new List <List <SpriteHandler.SpriteInfo> >();

        if (textureAndData.Sprites.Length > 1)
        {
            SpriteJson spriteJson;

            if (textureAndData.EquippedData == null)
            {
                Logger.LogError("Generating texture and mission data, data is missing for texture " + textureAndData.Texture.name);
                return(new List <List <SpriteHandler.SpriteInfo> >());
            }
            spriteJson = JsonConvert.DeserializeObject <SpriteJson>(textureAndData.EquippedData.text);
            int variance = 0;
            int frame    = 0;
            for (int J = 0; J < spriteJson.Number_Of_Variants; J++)
            {
                SpriteInfos.Add(new List <SpriteHandler.SpriteInfo>());
            }

            foreach (var SP in textureAndData.Sprites)
            {
                var info = new SpriteHandler.SpriteInfo();
                info.sprite = SP;
                if (spriteJson.Delays.Count > 0)
                {
                    info.waitTime = spriteJson.Delays[variance][frame];
                }

                SpriteInfos[variance].Add(info);
                if (variance >= (spriteJson.Number_Of_Variants - 1))
                {
                    variance = 0;
                    frame++;
                }
                else
                {
                    variance++;
                }
            }
        }
        else
        {
            if (textureAndData.Sprites.Length > 0)
            {
                var info = new SpriteHandler.SpriteInfo()
                {
                    sprite   = textureAndData.Sprites[0],
                    waitTime = 0
                };
                SpriteInfos.Add(new List <SpriteHandler.SpriteInfo>());
                SpriteInfos[0].Add(info);
            }
        }
        return(SpriteInfos);
    }
コード例 #6
0
    public static List <List <SpriteDataHandler.SpriteInfo> > CompleteSpriteSetup(SpriteSheetAndData textureAndData)
    {
        var SpriteInfos = new List <List <SpriteDataHandler.SpriteInfo> >();

        if (textureAndData.Sprites.Length > 1)
        {
            SpriteDataHandler.SpriteJson spriteJson;
            spriteJson = JsonConvert.DeserializeObject <SpriteDataHandler.SpriteJson>(textureAndData.EquippedData.text);
            int c    = 0;
            int cone = 0;
            for (int J = 0; J < spriteJson.Number_Of_Variants; J++)
            {
                SpriteInfos.Add(new List <SpriteDataHandler.SpriteInfo>());
            }

            foreach (var SP in textureAndData.Sprites)
            {
                var info = new SpriteDataHandler.SpriteInfo();
                info.sprite = SP;
                if (spriteJson.Delays.Count > 0)
                {
                    info.waitTime = spriteJson.Delays[c][cone];
                }

                SpriteInfos[c].Add(info);
                if (c >= (spriteJson.Number_Of_Variants - 1))
                {
                    c = 0;
                    cone++;
                }
                else
                {
                    c++;
                }
            }
        }
        else
        {
            if (textureAndData.Sprites.Length > 0)
            {
                var info = new SpriteDataHandler.SpriteInfo()
                {
                    sprite   = textureAndData.Sprites[0],
                    waitTime = 0
                };
                SpriteInfos.Add(new List <SpriteDataHandler.SpriteInfo>());
                SpriteInfos[0].Add(info);
            }
            //else {
            //	Logger.LogError("HELP!!!!!"); // Nope, you got us into this mess
            //}
        }
        return(SpriteInfos);
    }
コード例 #7
0
    private void SetupSprite(SpriteSheetAndData spriteSheetAndData, string clothesDictKey, Color?color = null)
    {
        clothes[clothesDictKey].spriteHandler.spriteData = new SpriteData();
        clothes[clothesDictKey].spriteHandler.spriteData.List.Add(SpriteFunctions.CompleteSpriteSetup(spriteSheetAndData));

        if (color != null)
        {
            clothes[clothesDictKey].spriteHandler.SetColor(color.Value);
        }

        clothes[clothesDictKey].spriteHandler.PushTexture();
    }
コード例 #8
0
 /// <summary>
 /// Used to Set sprite handlers internal buffer to the single Texture specified and set Sprite
 /// </summary>
 /// <param name="_SpriteSheetAndData">specified Texture.</param>
 /// <param name="_variantIndex">Variant index.</param>
 public void SetSprite(SpriteSheetAndData _SpriteSheetAndData, int _variantIndex = 0)
 {
     spriteData.List.Clear();
     spriteData.List.Add(SpriteFunctions.CompleteSpriteSetup(_SpriteSheetAndData));
     variantIndex = _variantIndex;
     if (Initialised)
     {
         PushTexture();
     }
     else
     {
         SetSpriteOnStartUp = true;
     }
 }
コード例 #9
0
    /// <summary>
    /// Initializes plant with data from default plant
    /// </summary>
    /// <param name="DefaultPlantData">DefaultPlantData.plantdata's values are copied</param>
    private void SetValues(DefaultPlantData DefaultPlantData)
    {
        var _PlantData = DefaultPlantData.plantData;

        Name        = _PlantData.Name;
        Plantname   = _PlantData.Plantname;
        Description = _PlantData.Description;
        if (ProduceObject == null)
        {
            ProduceObject = _PlantData.ProduceObject;
        }
        if (PacketsSprite?.Texture == null)
        {
            PacketsSprite = _PlantData.PacketsSprite;
        }
        //if (ProduceSprite?.Texture == null)
        //{
        //	ProduceSprite = _PlantData.ProduceSprite;
        //}

        if (GrowthSprites.Count == 0)
        {
            GrowthSprites = _PlantData.GrowthSprites;
        }

        if (FullyGrownSprite?.Texture == null)
        {
            FullyGrownSprite = _PlantData.FullyGrownSprite;
        }
        if (DeadSprite?.Texture == null)
        {
            DeadSprite = _PlantData.DeadSprite;
        }
        WeedResistance = _PlantData.WeedResistance;
        WeedGrowthRate = _PlantData.WeedGrowthRate;
        GrowthSpeed    = _PlantData.GrowthSpeed;
        Potency        = _PlantData.Potency;
        Endurance      = _PlantData.Endurance;
        Yield          = _PlantData.Yield;
        Lifespan       = _PlantData.Lifespan;



        PlantTrays  = (_PlantData.PlantTrays.Union(PlantTrays)).ToList();
        MutatesInTo = (_PlantData.MutatesInTo.Union(MutatesInTo)).ToList();
        CombineReagentProduction(_PlantData.ReagentProduction);
    }
コード例 #10
0
 /// <summary>
 /// Initializes plant with data another plant object
 /// </summary>
 /// <param name="_PlantData">data to copy</param>
 private void SetValues(PlantData _PlantData)
 {
     Plantname     = _PlantData.Plantname;
     Description   = _PlantData.Description;
     Name          = _PlantData.Name;
     ProduceObject = _PlantData.ProduceObject;
     PacketsSprite = _PlantData.PacketsSprite;
     //ProduceSprite = _PlantData.ProduceSprite;
     GrowthSprites     = _PlantData.GrowthSprites;
     FullyGrownSprite  = _PlantData.FullyGrownSprite;
     DeadSprite        = _PlantData.DeadSprite;
     WeedResistance    = _PlantData.WeedResistance;
     WeedGrowthRate    = _PlantData.WeedGrowthRate;
     GrowthSpeed       = _PlantData.GrowthSpeed;
     Potency           = _PlantData.Potency;
     Endurance         = _PlantData.Endurance;
     Yield             = _PlantData.Yield;
     Lifespan          = _PlantData.Lifespan;
     PlantTrays        = _PlantData.PlantTrays;
     ReagentProduction = _PlantData.ReagentProduction;
     MutatesInTo       = _PlantData.MutatesInTo;
 }
コード例 #11
0
    public void Combine(EquippedData parent)
    {
        if (Equipped.Texture == null)
        {
            Equipped = parent.Equipped;
        }

        if (InHandsLeft.Texture == null)
        {
            InHandsLeft = parent.InHandsLeft;
        }

        if (InHandsRight.Texture == null)
        {
            InHandsRight = parent.InHandsRight;
        }

        if (ItemIcon.Texture == null)
        {
            ItemIcon = parent.ItemIcon;
        }
    }
コード例 #12
0
    public static void Generate()
    {
        DirectoryInfo d = new DirectoryInfo(Application.dataPath + @"\Textures\objects\hydroponics\growing");

        FileInfo[] Files                 = d.GetFiles("*.png");// \\Getting Text files
        var        ListFiles             = new List <string>();
        var        PlantDictionary       = new Dictionary <string, DefaultPlantData>();
        var        PlantDictionaryObject = new Dictionary <string, System.Object>();

        foreach (FileInfo file in Files)
        {
            ListFiles.Add(file.Name);
        }

        var food  = (Resources.Load(@"Prefabs\Items\Botany\food") as GameObject);
        var json  = (Resources.Load(@"Metadata\plants") as TextAsset).ToString();
        var plats = JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(json);

        foreach (var plat in plats)
        {
            //\\foreach (var Datapiece in plat)
            //\\{
            //\\	Logger.Log(Datapiece.Key);
            //\\}

            var plantdata = new PlantData
            {
                ProduceObject = food,
                Name          = plat["name"] as string
            };
            if (plat.ContainsKey("plantname"))
            {
                plantdata.Plantname = plat["plantname"] as string;
            }
            plantdata.Description = plat["Description"] as string;
            var seed_packet = "";
            if (plat.ContainsKey("species"))
            {
                seed_packet = (plat["species"] as string);
            }
            else
            {
                seed_packet = (plat["seed_packet"] as string);
                if (seed_packet.Contains("seed-"))
                {
                    seed_packet = seed_packet.Replace("seed-", "");
                }
                else if (seed_packet.Contains("mycelium-"))
                {
                    seed_packet = seed_packet.Replace("mycelium-", "");
                }
            }

            //
            Logger.Log(seed_packet);
            //Logger.Log(plat["seed_packet"] as string);
            //Logger.Log("harvest_" + seed_packet);

            plantdata.PacketsSprite         = new SpriteSheetAndData();
            plantdata.PacketsSprite.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\seeds\seeds_" + (plat["seed_packet"] as string) + ".png", typeof(Texture2D)) as Texture2D);
            plantdata.PacketsSprite.setSprites();

            plantdata.ProduceSprite         = new SpriteSheetAndData();
            plantdata.ProduceSprite.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\harvest\harvest_" + seed_packet + ".png", typeof(Texture2D)) as Texture2D);

            //Application.dataPath
            if (plantdata.ProduceSprite.Texture == null)
            {
                plantdata.ProduceSprite.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\harvest\harvest_" + seed_packet + "pile" + ".png", typeof(Texture2D)) as Texture2D);
            }
            if (plantdata.ProduceSprite.Texture == null)
            {
                var EEEseed_packet = (plat["seed_packet"] as string);
                if (EEEseed_packet.Contains("seed-"))
                {
                    EEEseed_packet = EEEseed_packet.Replace("seed-", "");
                }
                else if (EEEseed_packet.Contains("mycelium-"))
                {
                    EEEseed_packet = EEEseed_packet.Replace("mycelium-", "");
                }
                plantdata.ProduceSprite.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\harvest\harvest_" + EEEseed_packet + ".png", typeof(Texture2D)) as Texture2D);
                if (plantdata.ProduceSprite.Texture == null)
                {
                    plantdata.ProduceSprite.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\harvest\harvest_" + EEEseed_packet + "s" + ".png", typeof(Texture2D)) as Texture2D);
                }
                if (plantdata.ProduceSprite.Texture == null)
                {
                    plantdata.ProduceSprite.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\harvest\harvest_" + seed_packet + "s" + ".png", typeof(Texture2D)) as Texture2D);
                }
            }
            plantdata.ProduceSprite.setSprites();

            plantdata.GrowthSprites = new List <SpriteSheetAndData>();
            //var Growingsprites = new List<string>();
            foreach (var ListFile in ListFiles)
            {
                if (ListFile.Contains(seed_packet))
                {
                    var Namecheck = ListFile;
                    Namecheck = Namecheck.Replace("growing_flowers_", "");
                    Namecheck = Namecheck.Replace("growing_fruits_", "");
                    Namecheck = Namecheck.Replace("growing_mushrooms_", "");
                    Namecheck = Namecheck.Replace("growing_vegetables_", "");
                    Namecheck = Namecheck.Replace("growing_", "");
                    Namecheck = Namecheck.Split('-')[0];

                    if (Namecheck == seed_packet)
                    {
                        if (!ListFile.Contains("-dead"))
                        {
                            if (!ListFile.Contains("-harvest"))
                            {
                                //var _ListFile = ListFile.Replace(".png", "");
                                //\\Growingsprites.Add(ListFile);
                                //\Assets\Resources\textures\objects\hydroponics\growing\growing_ambrosia_gaia-grow6.png
                                var _SpriteSheetAndData = new SpriteSheetAndData();
                                _SpriteSheetAndData.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\growing\" + ListFile, typeof(Texture2D)) as Texture2D);
                                _SpriteSheetAndData.setSprites();
                                plantdata.GrowthSprites.Add(_SpriteSheetAndData);

                                //\\If not found do at end
                            }
                            else
                            {
                                //Logger.Log("got harvest");

                                var _SpriteSheetAndData = new SpriteSheetAndData();
                                _SpriteSheetAndData.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\growing\" + ListFile, typeof(Texture2D)) as Texture2D);
                                _SpriteSheetAndData.setSprites();
                                plantdata.FullyGrownSprite = _SpriteSheetAndData;
                            }
                        }
                        else
                        {
                            //Logger.Log("got DeadSprite");

                            //var _ListFile = ListFile.Replace(".png", "");
                            var _SpriteSheetAndData = new SpriteSheetAndData();
                            _SpriteSheetAndData.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\growing\" + ListFile, typeof(Texture2D)) as Texture2D);
                            _SpriteSheetAndData.setSprites();
                            plantdata.DeadSprite = _SpriteSheetAndData;
                        }
                    }
                }
                if (plantdata.FullyGrownSprite == null)
                {
                    if (plantdata.GrowthSprites.Count > 0)
                    {
                        plantdata.FullyGrownSprite = plantdata.GrowthSprites[plantdata.GrowthSprites.Count - 1];
                    }
                }
            }
            plantdata.WeedResistance = int.Parse(plat["weed_resistance"].ToString());
            plantdata.WeedGrowthRate = int.Parse(plat["weed_growth_rate"].ToString());
            plantdata.Potency        = int.Parse(plat["potency"].ToString());
            plantdata.Endurance      = int.Parse(plat["endurance"].ToString());
            plantdata.Yield          = int.Parse(plat["plant_yield"].ToString());
            plantdata.Lifespan       = int.Parse(plat["lifespan"].ToString());
            plantdata.GrowthSpeed    = int.Parse(plat["production"].ToString());

            if (plat.ContainsKey("genes"))
            {
                var genes = JsonConvert.DeserializeObject <List <string> >(plat["genes"].ToString());

                foreach (var gene in genes)
                {
                    if (gene == "Perennial_Growth")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Perennial_Growth);
                    }
                    else if (gene == "Fungal Vitality")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Fungal_Vitality);
                    }
                    else if (gene == "Liquid Contents")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Liquid_Content);
                    }
                    else if (gene == "Slippery Skin")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Slippery_Skin);
                    }
                    else if (gene == "Bluespace Activity")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Bluespace_Activity);
                    }
                    else if (gene == "Densified Chemicals")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Densified_Chemicals);
                    }
                    else if (gene == "Capacitive Cell Production")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Capacitive_Cell_Production);
                    }
                    else if (gene == "Weed Adaptation")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Weed_Adaptation);
                    }
                    else if (gene == "Hypodermic Prickles")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Hypodermic_Needles);
                    }
                    else if (gene == "Shadow Emission")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Shadow_Emission);
                    }
                    else if (gene == "Red Electrical Glow")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Red_Electrical_Glow);
                    }
                    else if (gene == "Electrical Activity")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Electrical_Activity);
                    }
                    else if (gene == "Strong Bioluminescence")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Strong_Bioluminescence);
                    }
                    else if (gene == "Bioluminescence")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Bioluminescence);
                    }
                    else if (gene == "Separated Chemicals")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Separated_Chemicals);
                    }
                }
            }
            if (plat.ContainsKey("reagents_add"))
            {
                var Chemicals = JsonConvert.DeserializeObject <Dictionary <string, float> >(plat["reagents_add"].ToString());

                foreach (var Chemical in Chemicals)
                {
                    var SInt = new Reagent();
                    SInt.Ammount = (int)(Chemical.Value * 100);
                    SInt.Name    = Chemical.Key;
                    plantdata.ReagentProduction.Add(SInt);
                }
            }

            var DefaultPlantData = new DefaultPlantData
            {
                plantData = plantdata
            };
            //\\ Creates the folder path


            //\\ Creates the file in the folder path
            Logger.Log(plantdata.Name + " < PlantDictionary");
            PlantDictionary[plantdata.Name] = DefaultPlantData;

            if (plat.ContainsKey("mutates_into"))
            {
                PlantDictionaryObject[plantdata.Name] = plat["mutates_into"];
            }


            //\\Logger.Log(plantdata.GrowthSprites.Count.ToString());
        }


        foreach (var pant in PlantDictionary)
        {
            if (PlantDictionaryObject.ContainsKey(pant.Value.plantData.Name))
            {
                var Mutations = JsonConvert.DeserializeObject <List <string> >(PlantDictionaryObject[pant.Value.plantData.Name].ToString());
                foreach (var Mutation in Mutations)
                {
                    if (Mutation.Length != 0)
                    {
                        if (PlantDictionary[Mutation] != null)
                        {
                            MutationComparison(pant.Value, PlantDictionary[Mutation]);
                            pant.Value.plantData.MutatesInTo.Add((DefaultPlantData)AssetDatabase.LoadAssetAtPath(@"Assets\Resources\ScriptableObjects\Plant default\" + PlantDictionary[Mutation].plantData.Name + ".asset", typeof(DefaultPlantData)));
                        }



                        if (PlantDictionary[Mutation].plantData.DeadSprite?.Texture == null)
                        {
                            if (pant.Value.plantData.DeadSprite?.Texture != null)
                            {
                                PlantDictionary[Mutation].plantData.DeadSprite         = new SpriteSheetAndData();
                                PlantDictionary[Mutation].plantData.DeadSprite.Texture = pant.Value.plantData.DeadSprite.Texture;
                                PlantDictionary[Mutation].plantData.DeadSprite.setSprites();
                            }
                        }

                        if (PlantDictionary[Mutation].plantData.GrowthSprites.Count == 0)
                        {
                            PlantDictionary[Mutation].plantData.GrowthSprites = pant.Value.plantData.GrowthSprites;
                        }
                    }
                }
            }
        }
        foreach (var pant in PlantDictionary)
        {
            AssetDatabase.CreateAsset(pant.Value, @"Assets\Resources\ScriptableObjects\Plant default\" + pant.Value.plantData.Name + ".asset");
        }
    }
コード例 #13
0
    public static void Generate()
    {
        float         progressbarStep;
        float         progressbarState;
        DirectoryInfo d = new DirectoryInfo(Application.dataPath + @"\Textures\objects\hydroponics\growing");

        FileInfo[] Files     = d.GetFiles("*.png");    // \\Getting Text files
        var        ListFiles = new List <string>();

        dictonaryErrors = new Dictionary <string, string>();
        var PlantDictionary       = new Dictionary <string, DefaultPlantData>();
        var PlantDictionaryObject = new Dictionary <string, System.Object>();

        foreach (FileInfo file in Files)
        {
            ListFiles.Add(file.Name);
        }

        var food  = (Resources.Load(@"Prefabs\Items\Botany\food") as GameObject);
        var json  = (Resources.Load(@"Metadata\plants") as TextAsset).ToString();
        var plats = JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(json);

        progressbarStep  = 1f / (plats.Count * ListFiles.Count);
        progressbarState = 0;
        foreach (var plat in plats)
        {
            EditorUtility.DisplayProgressBar("Step 1/3 Setting Sprites", "Loading plant: " + plat["name"], progressbarState);
            //\\foreach (var Datapiece in plat)
            //\\{
            //\\	Logger.Log(Datapiece.Key);
            //\\}

            var plantdata = PlantData.CreateNewPlant((PlantData)null);
            plantdata.ProduceObject = food;
            plantdata.Name          = plat["name"] as string;

            if (plat.ContainsKey("plantname"))
            {
                plantdata.Plantname = plat["plantname"] as string;
            }
            plantdata.Description = plat["Description"] as string;
            var species = "";
            if (plat.ContainsKey("species"))
            {
                species = (plat["species"] as string);
            }
            else
            {
                Debug.Log($"Unable to find 'species' tag for plant {plantdata.Name}, using 'seed_packet' instead");
                species = (plat["seed_packet"] as string);
                if (species.Contains("seed-"))
                {
                    species = species.Replace("seed-", "");
                }
                else if (species.Contains("mycelium-"))
                {
                    species = species.Replace("mycelium-", "");
                }
            };

            plantdata.PacketsSprite         = new SpriteSheetAndData();
            plantdata.PacketsSprite.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\seeds\" + (plat["seed_packet"] as string) + ".png", typeof(Texture2D)) as Texture2D);
            plantdata.PacketsSprite.setSprites();

            SpriteSheetAndData produceSprite = new SpriteSheetAndData();
            produceSprite.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\harvest\" + species + ".png", typeof(Texture2D)) as Texture2D);
            if (produceSprite.Texture == null)
            {
                produceSprite         = new SpriteSheetAndData();
                produceSprite.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\harvest\" + species + "pile.png", typeof(Texture2D)) as Texture2D);
            }
            if (produceSprite.Texture == null)
            {
                produceSprite         = new SpriteSheetAndData();
                produceSprite.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\harvest\" + species + "_leaves.png", typeof(Texture2D)) as Texture2D);
            }
            if (produceSprite.Texture == null)
            {
                produceSprite         = new SpriteSheetAndData();
                produceSprite.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\harvest\" + species + "pod.png", typeof(Texture2D)) as Texture2D);
            }
            if (produceSprite.Texture == null)
            {
                produceSprite         = new SpriteSheetAndData();
                produceSprite.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\harvest\" + species + "s.png", typeof(Texture2D)) as Texture2D);
            }
            if (produceSprite.Texture == null)
            {
                produceSprite         = new SpriteSheetAndData();
                produceSprite.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\harvest\" + species + "pepper.png", typeof(Texture2D)) as Texture2D);
            }
            produceSprite.setSprites();



            var dead_sprite = (plat.ContainsKey("dead_Sprite")) ? (plat["dead_Sprite"] as string) : species + "-dead";

            plantdata.DeadSprite         = new SpriteSheetAndData();
            plantdata.DeadSprite.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\growing\" + dead_sprite + ".png", typeof(Texture2D)) as Texture2D);
            plantdata.DeadSprite.setSprites();

            plantdata.GrowthSprites = new List <SpriteSheetAndData>();
            foreach (var ListFile in ListFiles)
            {
                if (ListFile.Contains(species))
                {
                    var Namecheck = ListFile;

                    /*Namecheck = Namecheck.Replace("growing_flowers_", "");
                     * Namecheck = Namecheck.Replace("growing_fruits_", "");
                     * Namecheck = Namecheck.Replace("growing_mushrooms_", "");
                     * Namecheck = Namecheck.Replace("growing_vegetables_", "");
                     * Namecheck = Namecheck.Replace("growing_", "");*/
                    Namecheck = Namecheck.Split('-')[0];

                    if (Namecheck == species)
                    {
                        EditorUtility.DisplayProgressBar("Step 1/3 Setting Sprites", $"Loading sprite '{ListFile}' for plant {plantdata.Name}", progressbarState);
                        if (!ListFile.Contains("-dead"))
                        {
                            if (!ListFile.Contains("-harvest"))
                            {
                                //\Assets\Resources\textures\objects\hydroponics\growing\growing_ambrosia_gaia-grow6.png
                                var _SpriteSheetAndData = new SpriteSheetAndData();
                                _SpriteSheetAndData.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\growing\" + ListFile, typeof(Texture2D)) as Texture2D);
                                _SpriteSheetAndData.setSprites();
                                plantdata.GrowthSprites.Add(_SpriteSheetAndData);

                                //If not found do at end
                            }
                            else
                            {
                                var _SpriteSheetAndData = new SpriteSheetAndData();
                                _SpriteSheetAndData.Texture = (AssetDatabase.LoadAssetAtPath(@"Assets\textures\objects\hydroponics\growing\" + ListFile, typeof(Texture2D)) as Texture2D);
                                _SpriteSheetAndData.setSprites();
                                plantdata.FullyGrownSprite = _SpriteSheetAndData;
                            }
                        }
                    }
                }
                if (plantdata.FullyGrownSprite == null)
                {
                    if (plantdata.GrowthSprites.Count > 0)
                    {
                        //This seems to be normal
                        plantdata.FullyGrownSprite = plantdata.GrowthSprites[plantdata.GrowthSprites.Count - 1];
                    }
                }

                progressbarState += progressbarStep;
            }
            //check if sprites are missing
            if (plantdata.PacketsSprite.Texture == null)
            {
                AppendError(plantdata.Name, $"Unable to find seed packet sprite for plant {plantdata.Name}");
            }
            //if (plantdata.ProduceSprite.Texture == null) {  }
            if (plantdata.DeadSprite.Texture == null)
            {
                AppendError(plantdata.Name, $"Unable to find dead sprite");
            }
            if (plantdata.GrowthSprites.Count == 0)
            {
                AppendError(plantdata.Name, $"Unable to find growth sprites for plant {plantdata.Name}");
            }
            if (plantdata.FullyGrownSprite == null)
            {
                AppendError(plantdata.Name, $"Unable to find fully grown sprite");
            }



            plantdata.WeedResistance = int.Parse(plat["weed_resistance"].ToString());
            plantdata.WeedGrowthRate = int.Parse(plat["weed_growth_rate"].ToString());
            plantdata.Potency        = int.Parse(plat["potency"].ToString());
            plantdata.Endurance      = int.Parse(plat["endurance"].ToString());
            plantdata.Yield          = int.Parse(plat["plant_yield"].ToString());
            plantdata.Lifespan       = int.Parse(plat["lifespan"].ToString());
            plantdata.GrowthSpeed    = int.Parse(plat["production"].ToString());

            if (plat.ContainsKey("genes"))
            {
                var genes = JsonConvert.DeserializeObject <List <string> >(plat["genes"].ToString());

                foreach (var gene in genes)
                {
                    if (gene == "Perennial_Growth")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Perennial_Growth);
                    }
                    else if (gene == "Fungal Vitality")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Fungal_Vitality);
                    }
                    else if (gene == "Liquid Contents")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Liquid_Content);
                    }
                    else if (gene == "Slippery Skin")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Slippery_Skin);
                    }
                    else if (gene == "Bluespace Activity")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Bluespace_Activity);
                    }
                    else if (gene == "Densified Chemicals")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Densified_Chemicals);
                    }
                    else if (gene == "Capacitive Cell Production")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Capacitive_Cell_Production);
                    }
                    else if (gene == "Weed Adaptation")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Weed_Adaptation);
                    }
                    else if (gene == "Hypodermic Prickles")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Hypodermic_Needles);
                    }
                    else if (gene == "Shadow Emission")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Shadow_Emission);
                    }
                    else if (gene == "Red Electrical Glow")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Red_Electrical_Glow);
                    }
                    else if (gene == "Electrical Activity")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Electrical_Activity);
                    }
                    else if (gene == "Strong Bioluminescence")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Strong_Bioluminescence);
                    }
                    else if (gene == "Bioluminescence")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Bioluminescence);
                    }
                    else if (gene == "Separated Chemicals")
                    {
                        plantdata.PlantTrays.Add(PlantTrays.Separated_Chemicals);
                    }
                }
            }



            //Creating/updating food prefabs
            if (plat.ContainsKey("produce_name"))
            {
                //load existing prefab variant if possible
                GameObject prefabVariant = (GameObject)AssetDatabase.LoadAssetAtPath(@"Assets/Resources/Prefabs/Items/Botany/" + plantdata.Name + ".prefab", typeof(GameObject));

                if (prefabVariant == null)
                {
                    GameObject originalPrefab = (GameObject)AssetDatabase.LoadAssetAtPath(@"Assets/Resources/Prefabs/Items/Botany/food.prefab", typeof(GameObject));
                    prefabVariant = PrefabUtility.InstantiatePrefab(originalPrefab) as GameObject;
                }
                else
                {
                    prefabVariant = PrefabUtility.InstantiatePrefab(prefabVariant) as GameObject;
                }



                var itemAttr = prefabVariant.GetComponent <ItemAttributesV2>();

                //Commented since this are normally private
                //itemAttr.initialName = plat["produce_name"] as string;
                //itemAttr.initialDescription = plat["description"] as string;
                //itemAttr.itemSprites = (new ItemsSprites() { InventoryIcon = produceSprite });

                //add sprite to food
                var spriteRenderer = prefabVariant.GetComponentInChildren <SpriteRenderer>();
                spriteRenderer.sprite = SpriteFunctions.SetupSingleSprite(produceSprite).ReturnFirstSprite();

                var newFood = prefabVariant.GetComponent <GrownFood>();

                //Set plant data for food
                newFood.plantData = plantdata;

                var newReagents = prefabVariant.GetComponent <ReagentContainer>();

                //add reagents to food
                if (plat.ContainsKey("reagents_add"))
                {
                    var Chemicals = JsonConvert.DeserializeObject <Dictionary <string, float> >(plat["reagents_add"].ToString());

                    var reagents = new List <string>();
                    var amounts  = new List <float>();
                    foreach (var Chemical in Chemicals)
                    {
                        //ChemicalDictionary[Chemical.Key] = (((int)(Chemical.Value * 100)) * (plantdata.Potency / 100f));
                        reagents.Add(Chemical.Key);
                        amounts.Add(((int)(Chemical.Value * 100)) * (plantdata.Potency / 100f));
                    }

                    //newReagents.Reagents = reagents;
                    //newReagents.Amounts = amounts;
                }

                plantdata.ProduceObject = PrefabUtility.SaveAsPrefabAsset(prefabVariant, @"Assets/Resources/Prefabs/Items/Botany/" + plantdata.Name + ".prefab");
            }
            else
            {
                plantdata.ProduceObject = null;
            }

            var DefaultPlantData = ScriptableObject.CreateInstance <DefaultPlantData>();
            DefaultPlantData.plantData = plantdata;
            //\\ Creates the folder path


            //\\ Creates the file in the folder path
            Logger.Log(plantdata.Name + " < PlantDictionary");
            PlantDictionary[plantdata.Name] = DefaultPlantData;

            if (plat.ContainsKey("mutates_into"))
            {
                PlantDictionaryObject[plantdata.Name] = plat["mutates_into"];
            }


            //\\Logger.Log(plantdata.GrowthSprites.Count.ToString());
        }



        progressbarStep  = 1f / PlantDictionary.Count;
        progressbarState = 0;
        var mutationNameList = new List <string>();

        foreach (var pant in PlantDictionary)
        {
            EditorUtility.DisplayProgressBar("Step 2/3 Setting Mutations", "Loading mutations for: " + pant.Value.plantData.Name, progressbarState += progressbarStep);
            if (PlantDictionaryObject.ContainsKey(pant.Value.plantData.Name))
            {
                var Mutations = JsonConvert.DeserializeObject <List <string> >(PlantDictionaryObject[pant.Value.plantData.Name].ToString());
                foreach (var Mutation in Mutations)
                {
                    if (!mutationNameList.Contains(Mutation))
                    {
                        mutationNameList.Add(Mutation);
                    }
                    if (Mutation.Length != 0)
                    {
                        if (PlantDictionary.ContainsKey(Mutation))
                        {
                            MutationComparison(pant.Value, PlantDictionary[Mutation]);
                            pant.Value.plantData.MutatesInTo.Add((DefaultPlantData)AssetDatabase.LoadAssetAtPath(@"Assets\Resources\ScriptableObjects\Plant default\" + PlantDictionary[Mutation].plantData.Name + ".asset", typeof(DefaultPlantData)));



                            if (PlantDictionary[Mutation].plantData.DeadSprite?.Texture == null)
                            {
                                if (pant.Value.plantData.DeadSprite?.Texture != null)
                                {
                                    PlantDictionary[Mutation].plantData.DeadSprite         = new SpriteSheetAndData();
                                    PlantDictionary[Mutation].plantData.DeadSprite.Texture = pant.Value.plantData.DeadSprite.Texture;
                                    PlantDictionary[Mutation].plantData.DeadSprite.setSprites();
                                }
                            }

                            if (PlantDictionary[Mutation].plantData.GrowthSprites.Count == 0)
                            {
                                PlantDictionary[Mutation].plantData.GrowthSprites = pant.Value.plantData.GrowthSprites;
                            }
                        }
                    }
                }
            }
        }
        progressbarStep  = 1f / PlantDictionary.Count;
        progressbarState = 0;
        foreach (var pant in PlantDictionary)
        {
            DefaultPlantData defaultPlant = AssetDatabase.LoadMainAssetAtPath(@"Assets\Resources\ScriptableObjects\Plant default\" + pant.Value.plantData.Name + ".asset") as DefaultPlantData;
            if (defaultPlant != null)
            {
                EditorUtility.DisplayProgressBar("Step 3/3 Saving ScriptObjects", "Updating asset: " + pant.Value.plantData.Name, progressbarState += progressbarStep);
                EditorUtility.CopySerialized(pant.Value, defaultPlant);
                AssetDatabase.SaveAssets();
            }
            else
            {
                EditorUtility.DisplayProgressBar("Step 3/3 Saving ScriptObjects", "Creating asset: " + pant.Value.plantData.Name, progressbarState += progressbarStep);
                defaultPlant = ScriptableObject.CreateInstance <DefaultPlantData>();
                EditorUtility.CopySerialized(pant.Value, defaultPlant);
                AssetDatabase.CreateAsset(pant.Value, @"Assets\Resources\ScriptableObjects\Plant default\" + pant.Value.plantData.Name + ".asset");
            }

            if (dictonaryErrors.ContainsKey(pant.Value.plantData.Name))
            {
                if (mutationNameList.Contains(pant.Value.plantData.Name))
                {
                    dictonaryErrors[pant.Value.plantData.Name] = $"Mutation {pant.Value.plantData.Name} has some missing sprites\n{dictonaryErrors[pant.Value.plantData.Name]}";
                    Debug.LogWarning(dictonaryErrors[pant.Value.plantData.Name]);
                }
                else
                {
                    dictonaryErrors[pant.Value.plantData.Name] = $"Plant {pant.Value.plantData.Name} has some missing sprites\n{dictonaryErrors[pant.Value.plantData.Name]}";
                    Debug.LogError(dictonaryErrors[pant.Value.plantData.Name]);
                }
            }
        }


        EditorUtility.ClearProgressBar();
        EditorUtility.DisplayDialog("Complete", "Generating default plant ScriptObjects complete", "Close");
    }