public static RectTransform ExtendHeight(this RectTransform rectTransform, float extraHeight = 0.0f, bool recursive = false) { ProfilingUtility.BeginSample("UI-ExtendHeight"); ExtendHeightInternal(rectTransform, extraHeight, recursive); ProfilingUtility.EndSample(); return(rectTransform); }
static Codebase() { using (ProfilingUtility.SampleBlock("Bayat - Codebase initialization")) { _assemblies = new List <Assembly>(); _runtimeAssemblies = new List <Assembly>(); _editorAssemblies = new List <Assembly>(); _types = new List <Type>(); _runtimeTypes = new List <Type>(); _editorTypes = new List <Type>(); foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { _assemblies.Add(assembly); var isRuntimeAssembly = IsRuntimeAssembly(assembly); var isEditorAssembly = IsEditorDependentAssembly(assembly); if (isRuntimeAssembly) { _runtimeAssemblies.Add(assembly); } if (isEditorAssembly) { _editorAssemblies.Add(assembly); } foreach (var type in assembly.GetTypesSafely()) { _types.Add(type); if (isRuntimeAssembly) { _runtimeTypes.Add(type); } if (isEditorAssembly) { _editorTypes.Add(type); } } } Assemblies = _assemblies.AsReadOnly(); RuntimeAssemblies = _runtimeAssemblies.AsReadOnly(); EditorAssemblies = _editorAssemblies.AsReadOnly(); Types = _types.AsReadOnly(); RuntimeTypes = _runtimeTypes.AsReadOnly(); EditorTypes = _editorTypes.AsReadOnly(); } }
public IUnitOption ToOption() { using (ProfilingUtility.SampleBlock("Row to option")) { var optionType = Codebase.DeserializeType(this.optionType); IUnitOption option; option = (IUnitOption)Activator.CreateInstance(optionType); option.Deserialize(this); return(option); } }
public static void CollectTypes() { ProfilingUtility.BeginSample("Reflection<T>.CollectTypes_", msAssemblyOfT.FullName); GlobalReflectionCache.CollectTypes(GetAssembly()); ProfilingUtility.EndSample(); }
public void LoadRobot(LitJson.JsonData jsonData, Action <IRobot> onCompleted) { if (jsonData == null) { Misc.SafeInvoke(onCompleted, null); return; } IRobot robot = null; bool hideLines = Application.isPlaying; try { ProfilingUtility.BeginSample("RobotFactory.LoadRobot"); DefaultRobotSerializer defaultRobotSerializer = new DefaultRobotSerializer(); var dataModel = defaultRobotSerializer.FromJson(jsonData); if (dataModel != null) { ProfilingUtility.BeginSample("RobotFactory.LoadRobot.PrepareParts"); var parts = new Dictionary <string, Queue <GameObject> >(dataModel.assetDatas.Count); foreach (var item in dataModel.assetDatas) { string resID = item.Key; // 去掉线 if (hideLines && resID.StartsWith("W") && resID.IndexOf('_') > 0) { continue; } var count = item.Value; while (count > 0) { var part = UbtrobotSettings.GetOrLoad().partsLibrary.Instantiate(resID); if (part == null) { DebugUtility.LogError(LoggerTags.Project, "Missing part : {0}", resID); break; } if (hideLines && resID == "Battery") { part.transform.SetActive("Battery_02", false); } if (!parts.TryGetValue(resID, out var list)) { list = new Queue <GameObject>(); parts[resID] = list; } count--; list.Enqueue(part.gameObject); } } ProfilingUtility.EndSample(); ProfilingUtility.BeginSample("RobotFactory.LoadRobot.Rebuild"); var robotTransform = dataModel.Rebuild(null, parts); ProfilingUtility.EndSample(); robot = robotTransform != null?robotTransform.GetComponent <IRobot>() : null; if (robot != null) { if (Application.isPlaying) { RobotManager.GetOrAlloc().AddRobot(robot); } else { robot.AutoInitialize(); } } } ProfilingUtility.EndSample(); } catch (Exception ex) { DebugUtility.LogException(ex); } Misc.SafeInvoke(onCompleted, robot); }
private static void Load() { if (File.Exists(BoltFlow.Paths.unitOptions)) { // Update before loading if required, ensuring no "in-between" state // where the loaded options are not yet loaded. // The update code will not touch the options array if it is null. if (BoltFlow.Configuration.updateUnitsAutomatically) { try { ProgressUtility.DisplayProgressBar("Checking for codebase changes...", null, 0); if (requiresUpdate) { Update(); } } catch (Exception ex) { Debug.LogError($"Failed to update unit options.\nRetry with 'Tools > Bolt > Update Unit Options...'.\n{ex}"); } finally { ProgressUtility.ClearProgressBar(); } } lock (@lock) { using (ProfilingUtility.SampleBlock("Load Unit Database")) { using (NativeUtility.Module("sqlite3.dll")) { ProgressUtility.DisplayProgressBar("Loading unit database...", null, 0); SQLiteConnection database = null; try { database = new SQLiteConnection(BoltFlow.Paths.unitOptions, SQLiteOpenFlags.ReadOnly); int total; total = database.Table <UnitOptionRow>().Count(); var progress = 0f; options = new HashSet <IUnitOption>(); var failedOptions = new Dictionary <UnitOptionRow, Exception>(); foreach (var row in database.Table <UnitOptionRow>()) { try { var option = row.ToOption(); options.Add(option); } catch (Exception rowEx) { failedOptions.Add(row, rowEx); } ProgressUtility.DisplayProgressBar("Loading unit database...", LudiqCore.Configuration.humanNaming ? row.labelHuman : row.labelProgrammer, progress++ / total); } if (failedOptions.Count > 0) { var sb = new StringBuilder(); sb.AppendLine($"{failedOptions.Count} unit options failed to load and were skipped."); sb.AppendLine("Try rebuilding the unit options with 'Tools > Bolt > Build Unit Options' to purge outdated units."); sb.AppendLine(); foreach (var failedOption in failedOptions) { sb.AppendLine(failedOption.Key.favoriteKey); } sb.AppendLine(); foreach (var failedOption in failedOptions) { sb.AppendLine(failedOption.Key.favoriteKey + ": "); sb.AppendLine(failedOption.Value.ToString()); sb.AppendLine(); } Debug.LogWarning(sb.ToString()); } } catch (Exception ex) { options = new HashSet <IUnitOption>(); Debug.LogError($"Failed to load unit options.\nTry to rebuild them with 'Tools > Bolt > Build Unit Options'.\n\n{ex}"); } finally { database?.Close(); //ConsoleProfiler.Dump(); ProgressUtility.ClearProgressBar(); } } } } } else if (!BoltFlow.Configuration.editorSetupCompleted) { Debug.LogWarning("Missing unit options.\nCreate them with 'Tools > Bolt > Unit Options Wizard...'."); } }
public static void Update() { if (!File.Exists(BoltFlow.Paths.unitOptions)) { Build(); return; } lock (@lock) { using (ProfilingUtility.SampleBlock("Update Unit Database")) { using (NativeUtility.Module("sqlite3.dll")) { var progressTitle = "Updating unit database..."; SQLiteConnection database = null; try { VersionControlUtility.Unlock(BoltFlow.Paths.unitOptions); var steps = 7f; var step = 0f; ProgressUtility.DisplayProgressBar(progressTitle, "Connecting to database...", step++ / steps); database = new SQLiteConnection(BoltFlow.Paths.unitOptions); ProgressUtility.DisplayProgressBar(progressTitle, "Updating type mappings...", step++ / steps); UpdateTypeMappings(); ProgressUtility.DisplayProgressBar(progressTitle, "Fetching modified scripts...", step++ / steps); var modifiedScriptGuids = GetModifiedScriptGuids().Distinct().ToHashSet(); ProgressUtility.DisplayProgressBar(progressTitle, "Fetching deleted scripts...", step++ / steps); var deletedScriptGuids = GetDeletedScriptGuids().Distinct().ToHashSet(); ProgressUtility.DisplayProgressBar(progressTitle, "Updating codebase...", step++ / steps); var modifiedScriptTypes = modifiedScriptGuids.SelectMany(GetScriptTypes).ToArray(); UpdateCodebase(modifiedScriptTypes); var outdatedScriptGuids = new HashSet <string>(); outdatedScriptGuids.UnionWith(modifiedScriptGuids); outdatedScriptGuids.UnionWith(deletedScriptGuids); ProgressUtility.DisplayProgressBar(progressTitle, "Removing outdated unit options...", step++ / steps); options?.RemoveWhere(option => outdatedScriptGuids.Overlaps(option.sourceScriptGuids)); // We want to use the database level WHERE here for speed, // so we'll run multiple queries, one for each outdated script GUID. foreach (var outdatedScriptGuid in outdatedScriptGuids) { foreach (var outdatedRowId in database.Table <UnitOptionRow>() .Where(row => row.sourceScriptGuids.Contains(outdatedScriptGuid)) .Select(row => row.id)) { database.Delete <UnitOptionRow>(outdatedRowId); } } ProgressUtility.DisplayProgressBar(progressTitle, "Converting codebase to unit options...", step++ / steps); var newOptions = new HashSet <IUnitOption>(modifiedScriptGuids.SelectMany(GetScriptTypes) .Distinct() .SelectMany(GetIncrementalOptions)); var rows = new HashSet <UnitOptionRow>(); float progress = 0; foreach (var newOption in newOptions) { options?.Add(newOption); try { ProgressUtility.DisplayProgressBar(progressTitle, newOption.label, (step / steps) + ((1 / step) * (progress / newOptions.Count))); rows.Add(newOption.Serialize()); } catch (Exception ex) { Debug.LogError($"Failed to serialize option '{newOption.GetType()}'.\n{ex}"); } progress++; } ProgressUtility.DisplayProgressBar(progressTitle, "Writing to database...", 1); try { database.InsertAll(rows); } catch (Exception ex) { Debug.LogError($"Failed to write options to database.\n{ex}"); } // Make sure the database is touched to the current date, // even if we didn't do any change. This will avoid unnecessary // analysis in future update checks. File.SetLastWriteTimeUtc(BoltFlow.Paths.unitOptions, DateTime.UtcNow); } finally { database?.Close(); ProgressUtility.ClearProgressBar(); UnityAPI.Async(AssetDatabase.Refresh); //ConsoleProfiler.Dump(); } } } } }
public static void Build() { var progressTitle = "Building unit database..."; lock (@lock) { using (ProfilingUtility.SampleBlock("Update Unit Database")) { using (NativeUtility.Module("sqlite3.dll")) { SQLiteConnection database = null; try { ProgressUtility.DisplayProgressBar(progressTitle, "Creating database...", 0); if (File.Exists(BoltFlow.Paths.unitOptions)) { VersionControlUtility.Unlock(BoltFlow.Paths.unitOptions); File.Delete(BoltFlow.Paths.unitOptions); } PathUtility.CreateParentDirectoryIfNeeded(BoltFlow.Paths.unitOptions); database = new SQLiteConnection(BoltFlow.Paths.unitOptions); database.CreateTable <UnitOptionRow>(); ProgressUtility.DisplayProgressBar(progressTitle, "Updating codebase...", 0); UpdateCodebase(); ProgressUtility.DisplayProgressBar(progressTitle, "Updating type mappings...", 0); UpdateTypeMappings(); ProgressUtility.DisplayProgressBar(progressTitle, "Converting codebase to unit options...", 0); options = new HashSet <IUnitOption>(GetStaticOptions()); var rows = new HashSet <UnitOptionRow>(); var progress = 0; var lastShownProgress = 0f; foreach (var option in options) { try { var shownProgress = (float)progress / options.Count; if (shownProgress > lastShownProgress + 0.01f) { ProgressUtility.DisplayProgressBar(progressTitle, "Converting codebase to unit options...", shownProgress); lastShownProgress = shownProgress; } rows.Add(option.Serialize()); } catch (Exception ex) { Debug.LogError($"Failed to save option '{option.GetType()}'.\n{ex}"); } progress++; } ProgressUtility.DisplayProgressBar(progressTitle, "Writing to database...", 1); try { database.CreateTable <UnitOptionRow>(); database.InsertAll(rows); } catch (Exception ex) { Debug.LogError($"Failed to write options to database.\n{ex}"); } } finally { database?.Close(); ProgressUtility.ClearProgressBar(); AssetDatabase.Refresh(); //ConsoleProfiler.Dump(); } } } } }