public RobotSourceCode GetRobotSourceCode(RobotSourceCode robotSourceCode)
    {
        if (this.StoredRobotSourceCodes.Contains(robotSourceCode) == false)
        {
            return(null);
        }


        return(this.StoredRobotSourceCodes.Find(x => x == robotSourceCode));
    }
    public RobotSourceCode CreateRobotSourceCode(string sourceCodeName)
    {
        RobotSourceCode createdRobotSourceCode = new RobotSourceCode(sourceCodeName);

        if (createdRobotSourceCode != null)
        {
            this.AddStoredRobotSourceCodeTemplate(createdRobotSourceCode);
        }
        return(createdRobotSourceCode);
    }
 protected virtual void OnSetEditingRobotSourceCode(RobotSourceCode robotSourceCode)
 {
     if (robotSourceCode != null)
     {
         this.InitSourceCodeViewer();
     }
     else
     {
         this.ClearAllSpawnedBlockEditorUnitInSourceCode();
     }
 }
    public void LoadAllRobotSourceCodes()
    {
        foreach (string file in Directory.EnumerateFiles(SaveFolderPath, "*.json"))
        {
            string          json = File.ReadAllText(file);
            RobotSourceCode createdRobotSourceCode = JsonConvert.DeserializeObject <RobotSourceCode>(json, Utility.JsonSerializerSettings);
            this.AddStoredRobotSourceCodeTemplate(createdRobotSourceCode);
#if UNITY_EDITOR
            Debug.Log(Utility.TraceWriter.ToString());
#endif
        }


        System.GC.Collect();
    }
    protected override void OnSetEditingRobotSourceCode(RobotSourceCode robotSourceCode)
    {
        base.OnSetEditingRobotSourceCode(robotSourceCode);

        if (robotSourceCode != null)
        {
            this.InitCustomBlockOnBlockShop();
            this.InitRobotGlobalVariableOnBlockShop();
        }
        else
        {
            //Should Clear This
            //this.InitCustomBlockOnBlockShop();
            //this.InitRobotGlobalVariableOnBlockShop();
        }
    }
    private bool AddStoredRobotSourceCodeTemplate(RobotSourceCode robotSourceCode)
    {
        if (robotSourceCode == null)
        {
            return(false);
        }

        if (this.StoredRobotSourceCodes.Contains(robotSourceCode) == true)
        {
            Debug.LogError("Try AddStoredRobotSourceCodeTemplate. SourceCodeName : " + robotSourceCode.SourceCodeName);
            return(false);
        }

        this.StoredRobotSourceCodes.Add(robotSourceCode);
        return(true);
    }
    private void OnSetRobotSourceCode(RobotSourceCode robotSourceCode)
    {
        this.InitRobotGlobalVariable(robotSourceCode.GetDeepCopyOfRobotGlobalVariableTemplate());  // Deep copy MemoryVariable

        DefinitionCustomBlock[] definitionCustomBlocks = robotSourceCode.StoredCustomBlockDefinitionBlockArray;

        if (definitionCustomBlocks != null && definitionCustomBlocks.Length > 0)
        {
            for (int i = 0; i < definitionCustomBlocks.Length; i++)
            {
                this.InitCustomBlockParameterVariables(definitionCustomBlocks[i]);
            }
        }

        this.BlockCallStack.Clear(); // Cleare BlockCallStack
        this.PushToBlockCallStack(this.installedRobotSourceCode.InitBlock);

        this.WaitingTime = 0;
    }
    public bool InstallRobotSourceCode(RobotSourceCode robotSourceCode)
    {
        if (robotSourceCode == null)
        {
            Debug.LogError("robotSourceCode is null");
            return(false);
        }

        if (this.installedRobotSourceCode != null)
        {
            this.installedRobotSourceCode.RemoveFromInstalledRobotList(this);
            this.installedRobotSourceCode = null; // Clear Reference Of Installed Robot Source Code
        }

        this.installedRobotSourceCode = robotSourceCode; //shallow Copy
        this.installedRobotSourceCode.AddToInstalledRobotList(this);

        OnSetRobotSourceCode(robotSourceCode);

        return(true);
    }
    public void SaveRobotSourceCode(RobotSourceCode robotSourceCode)
    {
        if (robotSourceCode == null)
        {
            return;
        }



        string json     = JsonConvert.SerializeObject(robotSourceCode, Formatting.Indented, Utility.JsonSerializerSettings);
        string savePath = GetSaveFilePath(robotSourceCode);

        Debug.Log(savePath);

        File.WriteAllText(savePath, json);
#if UNITY_EDITOR
        Utility.stringBuilderCache.Clear();
        Utility.stringBuilderCache.Append("Success Serialize RobotSourceCode To Json : ");
        Utility.stringBuilderCache.Append(robotSourceCode.SourceCodeName);
        Utility.stringBuilderCache.Append("\n\n");
        Utility.stringBuilderCache.Append(json);
        Debug.Log(Utility.stringBuilderCache.ToString());
#endif
    }
 private string GetSaveFilePath(RobotSourceCode robotSourceCode)
 {
     return(this.SaveFolderPath + robotSourceCode.SourceCodeName + ".json");
 }