예제 #1
0
    public void SetData(Dictionary <string, object> data, FoodIngredientDatabase ingredientDatabase)
    {
        // name	description
        nameStr     = (string)data["name"];
        description = (string)data["description"];
        value       = (int)data["value"];

        for (int i = 1; i <= ingredientDatabase.ingredients.Count; i++)
        {
            string key = "ing_" + i;
            if (data.ContainsKey(key) && data[key] != null)
            {
                int count;
                try
                {
                    count = (int)data[key];
                }
                catch
                {
                    continue;
                }

                var ingredient = ingredientDatabase.GetIngredient(i);
                ingrediensEntries.Add(new RecipeEntry(ingredient, count));
            }
        }
    }
예제 #2
0
    public static void BuildRecipeDatabase()
    {
        // CSV 데이터 파일 체크 및 파싱
        var dataDic = CSVParser.Read(rootDataPath + "/recipeDB");

        if (dataDic == null)
        {
            Debug.LogError("[Recp.DB Build] CSV parsing result is null");
            return;
        }

        // 데이터베이스 파일 생성 또는 초기화
        FoodRecipeDatabase db = Resources.Load <FoodRecipeDatabase>(rootDataPath + "/RecipeDatabase");

        if (db == null)
        {
            db = ScriptableObject.CreateInstance <FoodRecipeDatabase>();

            string databasePath = "Assets/Resources/" + rootDataPath + "/RecipeDatabase.asset";
            AssetDatabase.CreateAsset(db, databasePath);
            EditorUtility.SetDirty(db);
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();

            Debug.Log("[Recp.DB Build] SO is created at " + databasePath);
        }
        else
        {
            db.Clear();
        }

        // 서브 데이터 디렉토리 체크
        string dataDirectoryPath = "Assets/Resources/" + rootDataPath + "/Recipes";

        if (!Directory.Exists(dataDirectoryPath))
        {
            Directory.CreateDirectory(dataDirectoryPath);
        }

        FoodIngredientDatabase ingredientDb = Resources.Load <FoodIngredientDatabase>(rootDataPath + "/IngredientDatabase");

        if (!ingredientDb)
        {
            Debug.LogError("[Recp.DB Build] Ingredient DB is null");
            return;
        }

        // 기존 파일 탐색
        FoodRecipe[] unconnectedData = Resources.LoadAll <FoodRecipe>(rootDataPath + "/Recipes");
        for (int i = 0; i < unconnectedData.Length; i++)
        {
            db.recipes.Add(unconnectedData[i]);
            db.recipes[i].SetData(dataDic[i], ingredientDb);
            EditorUtility.SetDirty(db.recipes[i]);
        }

        // 재사용할 데이터 파일 없으면 생성
        int charCount = dataDic.Count;

        for (int i = unconnectedData.Length; i < charCount; i++)
        {
            FoodRecipe newData = ScriptableObject.CreateInstance <FoodRecipe>();
            newData.SetData(dataDic[i], ingredientDb);

            string subDataPath = dataDirectoryPath + "/recp_" + i.ToString("0") + ".asset";
            AssetDatabase.CreateAsset(newData, subDataPath);
            EditorUtility.SetDirty(newData);
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();

            db.recipes.Add(newData);
        }
        EditorUtility.SetDirty(db);
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();

        Debug.Log("[Recp.DB Build] Success.");
    }