/// <summary> /// Retrieves import options for the resource we're currently inspecting. /// </summary> /// <returns>Script code import options object.</returns> private ScriptCodeImportOptions GetImportOptions() { ScriptCode scriptCode = InspectedObject as ScriptCode; ScriptCodeImportOptions output = null; if (scriptCode != null) { LibraryEntry libEntry = ProjectLibrary.GetEntry(ProjectLibrary.GetPath(scriptCode)); if (libEntry != null && libEntry.Type == LibraryEntryType.File) { FileEntry fileEntry = (FileEntry)libEntry; output = fileEntry.Options as ScriptCodeImportOptions; } } if (output == null) { if (importOptions == null) { output = new ScriptCodeImportOptions(); } else { output = importOptions; } } return(output); }
/// <summary> /// Constructs a new script code manager. /// </summary> internal ScriptCodeManager() { ProjectLibrary.OnEntryAdded += OnEntryAdded; ProjectLibrary.OnEntryRemoved += OnEntryRemoved; ProjectLibrary.OnEntryImported += OnEntryImported; // Check for missing or out of date assemblies DateTime lastModifiedGameScript = DateTime.MinValue; DateTime lastModifiedEditorScript = DateTime.MinValue; LibraryEntry[] scriptEntries = ProjectLibrary.Search("*.cs", new ResourceType[] { ResourceType.ScriptCode }); for (int i = 0; i < scriptEntries.Length; i++) { if (scriptEntries[i].Type != LibraryEntryType.File) { continue; } FileEntry fileEntry = (FileEntry)scriptEntries[i]; string absPath = Path.Combine(ProjectLibrary.ResourceFolder, fileEntry.Path); ScriptCodeImportOptions io = (ScriptCodeImportOptions)fileEntry.Options; if (io.EditorScript) { lastModifiedEditorScript = File.GetLastWriteTime(absPath); } else { lastModifiedGameScript = File.GetLastWriteTime(absPath); } } DateTime lastCompileTime = new DateTime(EditorApplication.PersistentData.lastCompileTime); if (lastModifiedGameScript != DateTime.MinValue) { string gameAssemblyPath = Path.Combine(EditorApplication.ScriptAssemblyPath, EditorApplication.ScriptGameAssemblyName); isGameAssemblyDirty = (!File.Exists(gameAssemblyPath) || File.GetLastWriteTime(gameAssemblyPath) < lastModifiedGameScript) && (lastModifiedGameScript > lastCompileTime); } if (lastModifiedEditorScript != DateTime.MinValue) { string editorAssemblyPath = Path.Combine(EditorApplication.ScriptAssemblyPath, EditorApplication.ScriptEditorAssemblyName); isEditorAssemblyDirty = (!File.Exists(editorAssemblyPath) || File.GetLastWriteTime(editorAssemblyPath) < lastModifiedEditorScript) && (lastModifiedEditorScript > lastCompileTime); } }
/// <inheritdoc/> protected internal override void Initialize() { LoadResource(); ScriptCode scriptCode = InspectedObject as ScriptCode; if (scriptCode == null) { return; } importOptions = GetImportOptions(); isEditorField.OnChanged += x => { importOptions.EditorScript = x; }; GUIPanel textPanel = Layout.AddPanel(); GUILayout textLayoutY = textPanel.AddLayoutY(); textLayoutY.AddSpace(5); GUILayout textLayoutX = textLayoutY.AddLayoutX(); textLayoutX.AddSpace(5); textLayoutX.AddElement(textLabel); textLayoutX.AddSpace(5); textLayoutY.AddSpace(5); GUIPanel textBgPanel = textPanel.AddPanel(1); textBgPanel.AddElement(textBg); Layout.AddElement(isEditorField); GUIButton reimportButton = new GUIButton(new LocEdString("Reimport")); reimportButton.OnClick += TriggerReimport; GUILayout reimportButtonLayout = Layout.AddLayoutX(); reimportButtonLayout.AddElement(reimportButton); reimportButtonLayout.AddFlexibleSpace(); }
/// <inheritdoc/> protected internal override void Initialize() { LoadResource(); ScriptCode scriptCode = InspectedObject as ScriptCode; if (scriptCode == null) { return; } importOptions = GetImportOptions(); isEditorField.OnChanged += x => { importOptions.EditorScript = x; }; GUIPanel textPanel = Layout.AddPanel(); GUILayout textLayoutY = textPanel.AddLayoutY(); textLayoutY.AddSpace(5); GUILayout textLayoutX = textLayoutY.AddLayoutX(); textLayoutX.AddSpace(5); textLayoutX.AddElement(textLabel); textLayoutX.AddSpace(5); textLayoutY.AddSpace(5); GUIPanel textBgPanel = textPanel.AddPanel(1); textBgPanel.AddElement(textBg); Layout.AddElement(isEditorField); Layout.AddSpace(10); reimportButton = new GUIReimportButton(InspectedResourcePath, Layout, () => { ProjectLibrary.Reimport(InspectedResourcePath, importOptions, true); }); UpdateGUIValues(); }
/// <summary> /// Starts compilation of the script files in the project for the specified assembly for the specified platform. /// </summary> /// <param name="type">Type of the assembly to compile. This determines which script files are used as input.</param> /// <param name="platform">Platform to compile the assemblies for.</param> /// <param name="debug">Determines should the assemblies contain debug information.</param> /// <param name="outputDir">Absolute path to the directory where to output the assemblies.</param> /// <returns>Compiler instance that contains the compiler process. Caller must ensure to properly dispose /// of this object when done.</returns> public static CompilerInstance CompileAsync(ScriptAssemblyType type, PlatformType platform, bool debug, string outputDir) { LibraryEntry[] scriptEntries = ProjectLibrary.Search("*", new ResourceType[] { ResourceType.ScriptCode }); List <string> scriptFiles = new List <string>(); for (int i = 0; i < scriptEntries.Length; i++) { if (scriptEntries[i].Type != LibraryEntryType.File) { continue; } FileEntry fileEntry = (FileEntry)scriptEntries[i]; ScriptCodeImportOptions io = (ScriptCodeImportOptions)fileEntry.Options; if (io.EditorScript && type == ScriptAssemblyType.Editor || !io.EditorScript && type == ScriptAssemblyType.Game) { scriptFiles.Add(Path.Combine(ProjectLibrary.ResourceFolder, scriptEntries[i].Path)); } } string[] assemblyFolders; string[] assemblies; string outputFile; string builtinAssemblyPath = debug ? EditorApplication.BuiltinDebugAssemblyPath : EditorApplication.BuiltinReleaseAssemblyPath; string[] frameworkAssemblies = BuildManager.GetFrameworkAssemblies(platform); if (type == ScriptAssemblyType.Game) { assemblyFolders = new string[] { builtinAssemblyPath, EditorApplication.FrameworkAssemblyPath }; assemblies = new string[frameworkAssemblies.Length + 1]; assemblies[assemblies.Length - 1] = EditorApplication.EngineAssemblyName; outputFile = Path.Combine(outputDir, EditorApplication.ScriptGameAssemblyName); } else { assemblyFolders = new string[] { builtinAssemblyPath, EditorApplication.FrameworkAssemblyPath, EditorApplication.ScriptAssemblyPath }; assemblies = new string[frameworkAssemblies.Length + 3]; assemblies[assemblies.Length - 1] = EditorApplication.EngineAssemblyName; assemblies[assemblies.Length - 2] = EditorApplication.EditorAssemblyName; assemblies[assemblies.Length - 3] = EditorApplication.ScriptGameAssemblyName; outputFile = Path.Combine(outputDir, EditorApplication.ScriptEditorAssemblyName); } Array.Copy(frameworkAssemblies, assemblies, frameworkAssemblies.Length); string defines = BuildManager.GetDefines(platform); return(new CompilerInstance(scriptFiles.ToArray(), defines, assemblyFolders, assemblies, debug, outputFile)); }
private static extern void Internal_create(ScriptCodeImportOptions managedInstance);