Full Code of VirtueSky/sunflower for AI

main 58d97baec1c0 cached
2099 files
3.6 MB
1.1M tokens
5712 symbols
1 requests
Download .txt
Showing preview only (4,276K chars total). Download the full file or copy to clipboard to get everything.
Repository: VirtueSky/sunflower
Branch: main
Commit: 58d97baec1c0
Files: 2099
Total size: 3.6 MB

Directory structure:
gitextract_ddb6gc8r/

├── .github/
│   └── workflows/
│       └── notify-discord-on-release.yml
├── LICENSE
├── LICENSE.meta
├── README.md
├── README.md.meta
├── VirtueSky/
│   ├── Advertising/
│   │   ├── Editor/
│   │   │   ├── AdSettingEditor.cs
│   │   │   ├── AdSettingEditor.cs.meta
│   │   │   ├── AdsWindowEditor.cs
│   │   │   ├── AdsWindowEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.Advertising.Editor.asmdef
│   │   │   └── Virtuesky.Sunflower.Advertising.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── Admob/
│   │   │   │   ├── AdmobAdClient.cs
│   │   │   │   ├── AdmobAdClient.cs.meta
│   │   │   │   ├── AdmobAdUnitVariable.cs
│   │   │   │   ├── AdmobAdUnitVariable.cs.meta
│   │   │   │   ├── AdmodUnitVariable/
│   │   │   │   │   ├── AdmobAppOpenVariable.cs
│   │   │   │   │   ├── AdmobAppOpenVariable.cs.meta
│   │   │   │   │   ├── AdmobBannerVariable.cs
│   │   │   │   │   ├── AdmobBannerVariable.cs.meta
│   │   │   │   │   ├── AdmobInterVariable.cs
│   │   │   │   │   ├── AdmobInterVariable.cs.meta
│   │   │   │   │   ├── AdmobNativeOverlayVariable.cs
│   │   │   │   │   ├── AdmobNativeOverlayVariable.cs.meta
│   │   │   │   │   ├── AdmobRewardInterVariable.cs
│   │   │   │   │   ├── AdmobRewardInterVariable.cs.meta
│   │   │   │   │   ├── AdmobRewardVariable.cs
│   │   │   │   │   └── AdmobRewardVariable.cs.meta
│   │   │   │   └── AdmodUnitVariable.meta
│   │   │   ├── Admob.meta
│   │   │   ├── General/
│   │   │   │   ├── AdClient.cs
│   │   │   │   ├── AdClient.cs.meta
│   │   │   │   ├── AdInfo.cs
│   │   │   │   ├── AdInfo.cs.meta
│   │   │   │   ├── AdSetting.cs
│   │   │   │   ├── AdSetting.cs.meta
│   │   │   │   ├── AdStatic.cs
│   │   │   │   ├── AdStatic.cs.meta
│   │   │   │   ├── AdUnitVariable.cs
│   │   │   │   ├── AdUnitVariable.cs.meta
│   │   │   │   ├── Advertising.cs
│   │   │   │   ├── Advertising.cs.meta
│   │   │   │   ├── IAdUnit.cs
│   │   │   │   └── IAdUnit.cs.meta
│   │   │   ├── General.meta
│   │   │   ├── LevelPlay/
│   │   │   │   ├── LevelPlayAdClient.cs
│   │   │   │   ├── LevelPlayAdClient.cs.meta
│   │   │   │   ├── LevelPlayAdUnitVariable.cs
│   │   │   │   ├── LevelPlayAdUnitVariable.cs.meta
│   │   │   │   ├── LevelPlayUnitVariable/
│   │   │   │   │   ├── LevelPlayBannerVariable.cs
│   │   │   │   │   ├── LevelPlayBannerVariable.cs.meta
│   │   │   │   │   ├── LevelPlayInterVariable.cs
│   │   │   │   │   ├── LevelPlayInterVariable.cs.meta
│   │   │   │   │   ├── LevelPlayRewardVariable.cs
│   │   │   │   │   └── LevelPlayRewardVariable.cs.meta
│   │   │   │   └── LevelPlayUnitVariable.meta
│   │   │   ├── LevelPlay.meta
│   │   │   ├── Max/
│   │   │   │   ├── MaxAdClient.cs
│   │   │   │   ├── MaxAdClient.cs.meta
│   │   │   │   ├── MaxAdUnitVariable.cs
│   │   │   │   ├── MaxAdUnitVariable.cs.meta
│   │   │   │   ├── MaxUnitVariable/
│   │   │   │   │   ├── MaxAppOpenVariable.cs
│   │   │   │   │   ├── MaxAppOpenVariable.cs.meta
│   │   │   │   │   ├── MaxBannerVariable.cs
│   │   │   │   │   ├── MaxBannerVariable.cs.meta
│   │   │   │   │   ├── MaxInterVariable.cs
│   │   │   │   │   ├── MaxInterVariable.cs.meta
│   │   │   │   │   ├── MaxRewardVariable.cs
│   │   │   │   │   └── MaxRewardVariable.cs.meta
│   │   │   │   └── MaxUnitVariable.meta
│   │   │   ├── Max.meta
│   │   │   ├── Virtuesky.Sunflower.Advertising.asmdef
│   │   │   └── Virtuesky.Sunflower.Advertising.asmdef.meta
│   │   └── Runtime.meta
│   ├── Advertising.meta
│   ├── AssetFinder/
│   │   ├── Editor/
│   │   │   ├── Script/
│   │   │   │   ├── AssetFinder.cs
│   │   │   │   ├── AssetFinder.cs.meta
│   │   │   │   ├── AssetFinderAssetType.cs
│   │   │   │   ├── AssetFinderAssetType.cs.meta
│   │   │   │   ├── AssetFinderCacheEditor.cs
│   │   │   │   ├── AssetFinderCacheEditor.cs.meta
│   │   │   │   ├── AssetFinderDuplicate.cs
│   │   │   │   ├── AssetFinderDuplicate.cs.meta
│   │   │   │   ├── AssetFinderRef.cs
│   │   │   │   ├── AssetFinderRef.cs.meta
│   │   │   │   ├── AssetFinderWindowExtension.cs
│   │   │   │   ├── AssetFinderWindowExtension.cs.meta
│   │   │   │   ├── Core/
│   │   │   │   │   ├── AssetFinderAsset.AssetState.cs
│   │   │   │   │   ├── AssetFinderAsset.AssetState.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.AssetType.cs
│   │   │   │   │   ├── AssetFinderAsset.AssetType.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.Classes.cs
│   │   │   │   │   ├── AssetFinderAsset.Classes.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.Constants.cs
│   │   │   │   │   ├── AssetFinderAsset.Constants.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.ContentLoader.cs
│   │   │   │   │   ├── AssetFinderAsset.ContentLoader.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.Drawing.cs
│   │   │   │   │   ├── AssetFinderAsset.Drawing.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.FileInfo.cs
│   │   │   │   │   ├── AssetFinderAsset.FileInfo.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.GuidManager.cs
│   │   │   │   │   ├── AssetFinderAsset.GuidManager.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.PathInfo.cs
│   │   │   │   │   ├── AssetFinderAsset.PathInfo.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.cs
│   │   │   │   │   ├── AssetFinderAsset.cs.meta
│   │   │   │   │   ├── AssetFinderAutoRefreshMode.cs
│   │   │   │   │   ├── AssetFinderAutoRefreshMode.cs.meta
│   │   │   │   │   ├── AssetFinderCache.AssetSearch.cs
│   │   │   │   │   ├── AssetFinderCache.AssetSearch.cs.meta
│   │   │   │   │   ├── AssetFinderCache.AsyncProcessor.cs
│   │   │   │   │   ├── AssetFinderCache.AsyncProcessor.cs.meta
│   │   │   │   │   ├── AssetFinderCache.Constants.cs
│   │   │   │   │   ├── AssetFinderCache.Constants.cs.meta
│   │   │   │   │   ├── AssetFinderCache.Lifecycle.cs
│   │   │   │   │   ├── AssetFinderCache.Lifecycle.cs.meta
│   │   │   │   │   ├── AssetFinderCache.ProjectManager.cs
│   │   │   │   │   ├── AssetFinderCache.ProjectManager.cs.meta
│   │   │   │   │   ├── AssetFinderCache.Scanner.cs
│   │   │   │   │   ├── AssetFinderCache.Scanner.cs.meta
│   │   │   │   │   ├── AssetFinderCache.Search.cs
│   │   │   │   │   ├── AssetFinderCache.Search.cs.meta
│   │   │   │   │   ├── AssetFinderCache.cs
│   │   │   │   │   ├── AssetFinderCache.cs.meta
│   │   │   │   │   ├── AssetFinderGitUtil.cs
│   │   │   │   │   ├── AssetFinderGitUtil.cs.meta
│   │   │   │   │   ├── AssetFinderNavigationHistory.cs
│   │   │   │   │   ├── AssetFinderNavigationHistory.cs.meta
│   │   │   │   │   ├── AssetFinderSelectionManager.cs
│   │   │   │   │   ├── AssetFinderSelectionManager.cs.meta
│   │   │   │   │   ├── AssetFinderSettingExt.cs
│   │   │   │   │   ├── AssetFinderSettingExt.cs.meta
│   │   │   │   │   ├── AssetFinderSmartLock.cs
│   │   │   │   │   ├── AssetFinderSmartLock.cs.meta
│   │   │   │   │   ├── AssetFinderWindowFocus.cs
│   │   │   │   │   └── AssetFinderWindowFocus.cs.meta
│   │   │   │   ├── Core.meta
│   │   │   │   ├── Dev/
│   │   │   │   │   ├── AssetFinderDefine.cs
│   │   │   │   │   ├── AssetFinderDefine.cs.meta
│   │   │   │   │   ├── AssetFinderDev.cs
│   │   │   │   │   ├── AssetFinderDev.cs.meta
│   │   │   │   │   ├── AssetFinderReferenceValidator.cs
│   │   │   │   │   ├── AssetFinderReferenceValidator.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.Validator.cs
│   │   │   │   │   └── AssetFinderWindowAll.Validator.cs.meta
│   │   │   │   ├── Dev.meta
│   │   │   │   ├── Drawer/
│   │   │   │   │   ├── AssetFinderAddressableDrawer.cs
│   │   │   │   │   ├── AssetFinderAddressableDrawer.cs.meta
│   │   │   │   │   ├── AssetFinderAssetGroup.cs
│   │   │   │   │   ├── AssetFinderAssetGroup.cs.meta
│   │   │   │   │   ├── AssetFinderAssetGroupDrawer.cs
│   │   │   │   │   ├── AssetFinderAssetGroupDrawer.cs.meta
│   │   │   │   │   ├── AssetFinderAssetOrganizer.cs
│   │   │   │   │   ├── AssetFinderAssetOrganizer.cs.meta
│   │   │   │   │   ├── AssetFinderBookmark.cs
│   │   │   │   │   ├── AssetFinderBookmark.cs.meta
│   │   │   │   │   ├── AssetFinderDeleteEmptyFolder.cs
│   │   │   │   │   ├── AssetFinderDeleteEmptyFolder.cs.meta
│   │   │   │   │   ├── AssetFinderIgnoreDrawer.cs
│   │   │   │   │   ├── AssetFinderIgnoreDrawer.cs.meta
│   │   │   │   │   ├── AssetFinderMissingReference.cs
│   │   │   │   │   ├── AssetFinderMissingReference.cs.meta
│   │   │   │   │   ├── AssetFinderSetting.cs
│   │   │   │   │   ├── AssetFinderSetting.cs.meta
│   │   │   │   │   ├── AssetFinderUsedInBuild.cs
│   │   │   │   │   └── AssetFinderUsedInBuild.cs.meta
│   │   │   │   ├── Drawer.meta
│   │   │   │   ├── Duplicate/
│   │   │   │   │   ├── AssetFinderChunk.cs
│   │   │   │   │   ├── AssetFinderChunk.cs.meta
│   │   │   │   │   ├── AssetFinderDuplicateTree2.cs
│   │   │   │   │   ├── AssetFinderDuplicateTree2.cs.meta
│   │   │   │   │   ├── AssetFinderFileCompare.cs
│   │   │   │   │   ├── AssetFinderFileCompare.cs.meta
│   │   │   │   │   ├── AssetFinderHead.cs
│   │   │   │   │   └── AssetFinderHead.cs.meta
│   │   │   │   ├── Duplicate.meta
│   │   │   │   ├── Extension/
│   │   │   │   │   ├── AssetFinderExtension.cs
│   │   │   │   │   ├── AssetFinderExtension.cs.meta
│   │   │   │   │   ├── AssetFinderHelper.cs
│   │   │   │   │   ├── AssetFinderHelper.cs.meta
│   │   │   │   │   ├── AssetFinderUnity.cs
│   │   │   │   │   ├── AssetFinderUnity.cs.meta
│   │   │   │   │   ├── GUI2.cs
│   │   │   │   │   └── GUI2.cs.meta
│   │   │   │   ├── Extension.meta
│   │   │   │   ├── Extensions/
│   │   │   │   │   ├── AssetFinderWindowExtensions.cs
│   │   │   │   │   ├── AssetFinderWindowExtensions.cs.meta
│   │   │   │   │   ├── CollectionExtensions.cs
│   │   │   │   │   ├── CollectionExtensions.cs.meta
│   │   │   │   │   ├── ColorExtensions.cs
│   │   │   │   │   ├── ColorExtensions.cs.meta
│   │   │   │   │   ├── DictionaryExtensions.cs
│   │   │   │   │   ├── DictionaryExtensions.cs.meta
│   │   │   │   │   ├── GameObjectExtensions.cs
│   │   │   │   │   ├── GameObjectExtensions.cs.meta
│   │   │   │   │   ├── RectExtensions.cs
│   │   │   │   │   ├── RectExtensions.cs.meta
│   │   │   │   │   ├── RectGUIExtensions.cs
│   │   │   │   │   ├── RectGUIExtensions.cs.meta
│   │   │   │   │   ├── SerializedObjectExtensions.cs
│   │   │   │   │   ├── SerializedObjectExtensions.cs.meta
│   │   │   │   │   ├── TabExtensions.cs
│   │   │   │   │   ├── TabExtensions.cs.meta
│   │   │   │   │   ├── UnityObjectExtensions.cs
│   │   │   │   │   └── UnityObjectExtensions.cs.meta
│   │   │   │   ├── Extensions.meta
│   │   │   │   ├── Modules/
│   │   │   │   │   ├── Addressable/
│   │   │   │   │   │   ├── AssetFinderAddressable.ASMStatus.cs
│   │   │   │   │   │   ├── AssetFinderAddressable.ASMStatus.cs.meta
│   │   │   │   │   │   ├── AssetFinderAddressable.AddressInfo.cs
│   │   │   │   │   │   ├── AssetFinderAddressable.AddressInfo.cs.meta
│   │   │   │   │   │   ├── AssetFinderAddressable.ProjectStatus.cs
│   │   │   │   │   │   ├── AssetFinderAddressable.ProjectStatus.cs.meta
│   │   │   │   │   │   ├── AssetFinderAddressable.cs
│   │   │   │   │   │   └── AssetFinderAddressable.cs.meta
│   │   │   │   │   ├── Addressable.meta
│   │   │   │   │   ├── AssetFinderCSV.cs
│   │   │   │   │   ├── AssetFinderCSV.cs.meta
│   │   │   │   │   ├── AssetFinderExport.cs
│   │   │   │   │   ├── AssetFinderExport.cs.meta
│   │   │   │   │   ├── AssetFinderSceneCache.cs
│   │   │   │   │   ├── AssetFinderSceneCache.cs.meta
│   │   │   │   │   ├── AssetFinderSelection.cs
│   │   │   │   │   ├── AssetFinderSelection.cs.meta
│   │   │   │   │   ├── Lightmap/
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenRendererInformation.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenRendererInformation.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenSceneMapping.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenSceneMapping.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenSystemAtlasInformation.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenSystemAtlasInformation.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenSystemInformation.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenSystemInformation.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenTerrainChunksInformation.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenTerrainChunksInformation.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.LightBakingOutput.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.LightBakingOutput.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.LightingDataAssetRoot.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.LightingDataAssetRoot.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.LightmapData.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.LightmapData.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.RendererData.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.RendererData.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.SceneObjectIdentifier.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.SceneObjectIdentifier.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.cs
│   │   │   │   │   │   └── AssetFinderLightmap.cs.meta
│   │   │   │   │   └── Lightmap.meta
│   │   │   │   ├── Modules.meta
│   │   │   │   ├── Monitor/
│   │   │   │   │   ├── AssetFinderCacheHelper.cs
│   │   │   │   │   └── AssetFinderCacheHelper.cs.meta
│   │   │   │   ├── Monitor.meta
│   │   │   │   ├── TreeUI/
│   │   │   │   │   ├── AssetFinderRef.cs
│   │   │   │   │   ├── AssetFinderRef.cs.meta
│   │   │   │   │   ├── AssetFinderRefDrawer.Mode.cs
│   │   │   │   │   ├── AssetFinderRefDrawer.Mode.cs.meta
│   │   │   │   │   ├── AssetFinderRefDrawer.Sort.cs
│   │   │   │   │   ├── AssetFinderRefDrawer.Sort.cs.meta
│   │   │   │   │   ├── AssetFinderRefDrawer.cs
│   │   │   │   │   ├── AssetFinderRefDrawer.cs.meta
│   │   │   │   │   ├── AssetFinderSceneRef.cs
│   │   │   │   │   ├── AssetFinderSceneRef.cs.meta
│   │   │   │   │   ├── AssetFinderTreeUI2.cs
│   │   │   │   │   └── AssetFinderTreeUI2.cs.meta
│   │   │   │   ├── TreeUI.meta
│   │   │   │   ├── UI/
│   │   │   │   │   ├── AssetFinderDeleteButton.cs
│   │   │   │   │   ├── AssetFinderDeleteButton.cs.meta
│   │   │   │   │   ├── AssetFinderEnumDrawer.cs
│   │   │   │   │   ├── AssetFinderEnumDrawer.cs.meta
│   │   │   │   │   ├── AssetFinderGUIContent.cs
│   │   │   │   │   ├── AssetFinderGUIContent.cs.meta
│   │   │   │   │   ├── AssetFinderIcon.cs
│   │   │   │   │   ├── AssetFinderIcon.cs.meta
│   │   │   │   │   ├── AssetFinderObjectDrawer.cs
│   │   │   │   │   ├── AssetFinderObjectDrawer.cs.meta
│   │   │   │   │   ├── AssetFinderSearchView.cs
│   │   │   │   │   ├── AssetFinderSearchView.cs.meta
│   │   │   │   │   ├── AssetFinderSplitView.cs
│   │   │   │   │   ├── AssetFinderSplitView.cs.meta
│   │   │   │   │   ├── AssetFinderTabView.cs
│   │   │   │   │   ├── AssetFinderTabView.cs.meta
│   │   │   │   │   ├── AssetFinderToggleList.cs
│   │   │   │   │   ├── AssetFinderToggleList.cs.meta
│   │   │   │   │   ├── Theme/
│   │   │   │   │   │   ├── AssetFinderTheme.Dark.cs
│   │   │   │   │   │   ├── AssetFinderTheme.Dark.cs.meta
│   │   │   │   │   │   ├── AssetFinderTheme.Light.cs
│   │   │   │   │   │   ├── AssetFinderTheme.Light.cs.meta
│   │   │   │   │   │   ├── AssetFinderTheme.cs
│   │   │   │   │   │   └── AssetFinderTheme.cs.meta
│   │   │   │   │   └── Theme.meta
│   │   │   │   ├── UI.meta
│   │   │   │   ├── Window/
│   │   │   │   │   ├── AssetFinderWindowAll.CacheManager.cs
│   │   │   │   │   ├── AssetFinderWindowAll.CacheManager.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.Drawing.cs
│   │   │   │   │   ├── AssetFinderWindowAll.Drawing.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.GuidManager.cs
│   │   │   │   │   ├── AssetFinderWindowAll.GuidManager.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.Initialization.cs
│   │   │   │   │   ├── AssetFinderWindowAll.Initialization.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.PanelSettings.cs
│   │   │   │   │   ├── AssetFinderWindowAll.PanelSettings.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.SelectionManager.cs
│   │   │   │   │   ├── AssetFinderWindowAll.SelectionManager.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.SettingsPanel.cs
│   │   │   │   │   ├── AssetFinderWindowAll.SettingsPanel.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.ToolsPanel.cs
│   │   │   │   │   ├── AssetFinderWindowAll.ToolsPanel.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.UILayout.cs
│   │   │   │   │   ├── AssetFinderWindowAll.UILayout.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.cs
│   │   │   │   │   ├── AssetFinderWindowAll.cs.meta
│   │   │   │   │   ├── AssetFinderWindowBase.cs
│   │   │   │   │   ├── AssetFinderWindowBase.cs.meta
│   │   │   │   │   ├── IRefDraw.cs
│   │   │   │   │   ├── IRefDraw.cs.meta
│   │   │   │   │   ├── IWindow.cs
│   │   │   │   │   └── IWindow.cs.meta
│   │   │   │   └── Window.meta
│   │   │   ├── Script.meta
│   │   │   ├── Virtuesky.Sunflower.AssetFinder.Editor.asmdef
│   │   │   ├── Virtuesky.Sunflower.AssetFinder.Editor.asmdef.meta
│   │   │   ├── v2/
│   │   │   │   ├── AssetFinder.cs
│   │   │   │   ├── AssetFinder.cs.meta
│   │   │   │   ├── Core/
│   │   │   │   │   ├── AssetFinderAssetDB.cs
│   │   │   │   │   ├── AssetFinderAssetDB.cs.meta
│   │   │   │   │   ├── AssetFinderAssetFile.cs
│   │   │   │   │   ├── AssetFinderAssetFile.cs.meta
│   │   │   │   │   ├── AssetFinderCacheAsset.cs
│   │   │   │   │   ├── AssetFinderCacheAsset.cs.meta
│   │   │   │   │   ├── AssetFinderID.cs
│   │   │   │   │   ├── AssetFinderID.cs.meta
│   │   │   │   │   ├── AssetFinderIDRef.cs
│   │   │   │   │   ├── AssetFinderIDRef.cs.meta
│   │   │   │   │   ├── AssetFinderSceneObject.cs
│   │   │   │   │   ├── AssetFinderSceneObject.cs.meta
│   │   │   │   │   ├── SubAssetDetail.cs
│   │   │   │   │   └── SubAssetDetail.cs.meta
│   │   │   │   ├── Core.meta
│   │   │   │   ├── Drawer/
│   │   │   │   │   ├── AssetFinderAssetFileDrawer.cs
│   │   │   │   │   ├── AssetFinderAssetFileDrawer.cs.meta
│   │   │   │   │   ├── AssetFinderCacheAssetEditor.cs
│   │   │   │   │   ├── AssetFinderCacheAssetEditor.cs.meta
│   │   │   │   │   ├── AssetFinderIDDrawer.cs
│   │   │   │   │   └── AssetFinderIDDrawer.cs.meta
│   │   │   │   ├── Drawer.meta
│   │   │   │   ├── GUI/
│   │   │   │   │   ├── AssetFinderAssetGUI.cs
│   │   │   │   │   ├── AssetFinderAssetGUI.cs.meta
│   │   │   │   │   ├── AssetFinderAssetInfo.cs
│   │   │   │   │   └── AssetFinderAssetInfo.cs.meta
│   │   │   │   ├── GUI.meta
│   │   │   │   ├── Parser/
│   │   │   │   │   ├── AssetFinderParser.BinaryAsset.cs
│   │   │   │   │   ├── AssetFinderParser.BinaryAsset.cs.meta
│   │   │   │   │   ├── AssetFinderParser.LightMap.cs
│   │   │   │   │   ├── AssetFinderParser.LightMap.cs.meta
│   │   │   │   │   ├── AssetFinderParser.Model3D.cs
│   │   │   │   │   ├── AssetFinderParser.Model3D.cs.meta
│   │   │   │   │   ├── AssetFinderParser.Shader.cs
│   │   │   │   │   ├── AssetFinderParser.Shader.cs.meta
│   │   │   │   │   ├── AssetFinderParser.ShaderGraph.cs
│   │   │   │   │   ├── AssetFinderParser.ShaderGraph.cs.meta
│   │   │   │   │   ├── AssetFinderParser.Terrain.cs
│   │   │   │   │   ├── AssetFinderParser.Terrain.cs.meta
│   │   │   │   │   ├── AssetFinderParser.UIToolkit.cs
│   │   │   │   │   ├── AssetFinderParser.UIToolkit.cs.meta
│   │   │   │   │   ├── AssetFinderParser.Yaml.cs
│   │   │   │   │   ├── AssetFinderParser.Yaml.cs.meta
│   │   │   │   │   ├── AssetFinderParser.cs
│   │   │   │   │   └── AssetFinderParser.cs.meta
│   │   │   │   ├── Parser.meta
│   │   │   │   ├── UI/
│   │   │   │   │   ├── AssetRefUI.cs
│   │   │   │   │   ├── AssetRefUI.cs.meta
│   │   │   │   │   ├── AssetUI.cs
│   │   │   │   │   ├── AssetUI.cs.meta
│   │   │   │   │   ├── FileUI.cs
│   │   │   │   │   ├── FileUI.cs.meta
│   │   │   │   │   ├── FolderUI.cs
│   │   │   │   │   └── FolderUI.cs.meta
│   │   │   │   ├── UI.meta
│   │   │   │   ├── Unity/
│   │   │   │   │   ├── AssetFinderInitializer.cs
│   │   │   │   │   ├── AssetFinderInitializer.cs.meta
│   │   │   │   │   ├── AssetFinderLightmap.cs
│   │   │   │   │   ├── AssetFinderLightmap.cs.meta
│   │   │   │   │   ├── AssetFinderTerrain.cs
│   │   │   │   │   ├── AssetFinderTerrain.cs.meta
│   │   │   │   │   ├── AssetFinderUSelection.cs
│   │   │   │   │   └── AssetFinderUSelection.cs.meta
│   │   │   │   ├── Unity.meta
│   │   │   │   ├── Utils/
│   │   │   │   │   ├── AssetFinderTimeSlice.cs
│   │   │   │   │   └── AssetFinderTimeSlice.cs.meta
│   │   │   │   └── Utils.meta
│   │   │   └── v2.meta
│   │   └── Editor.meta
│   ├── AssetFinder.meta
│   ├── Audio/
│   │   ├── Editor/
│   │   │   ├── AudioWindowEditor.cs
│   │   │   ├── AudioWindowEditor.cs.meta
│   │   │   ├── EditorAudioPreview.cs
│   │   │   ├── EditorAudioPreview.cs.meta
│   │   │   ├── SoundDataEditor.cs
│   │   │   ├── SoundDataEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.Audio.Editor.asmdef
│   │   │   └── Virtuesky.Sunflower.Audio.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── AudioHelper.cs
│   │   │   ├── AudioHelper.cs.meta
│   │   │   ├── AudioManager.cs
│   │   │   ├── AudioManager.cs.meta
│   │   │   ├── Music_Event/
│   │   │   │   ├── PauseMusicEvent.cs
│   │   │   │   ├── PauseMusicEvent.cs.meta
│   │   │   │   ├── PlayMusicEvent.cs
│   │   │   │   ├── PlayMusicEvent.cs.meta
│   │   │   │   ├── ResumeMusicEvent.cs
│   │   │   │   ├── ResumeMusicEvent.cs.meta
│   │   │   │   ├── StopMusicEvent.cs
│   │   │   │   └── StopMusicEvent.cs.meta
│   │   │   ├── Music_Event.meta
│   │   │   ├── Sfx_Event/
│   │   │   │   ├── FinishSfxEvent.cs
│   │   │   │   ├── FinishSfxEvent.cs.meta
│   │   │   │   ├── PauseSfxEvent.cs
│   │   │   │   ├── PauseSfxEvent.cs.meta
│   │   │   │   ├── PlaySfxEvent.cs
│   │   │   │   ├── PlaySfxEvent.cs.meta
│   │   │   │   ├── ResumeSfxEvent.cs
│   │   │   │   ├── ResumeSfxEvent.cs.meta
│   │   │   │   ├── StopAllSfxEvent.cs
│   │   │   │   ├── StopAllSfxEvent.cs.meta
│   │   │   │   ├── StopSfxEvent.cs
│   │   │   │   └── StopSfxEvent.cs.meta
│   │   │   ├── Sfx_Event.meta
│   │   │   ├── SoundCache.cs
│   │   │   ├── SoundCache.cs.meta
│   │   │   ├── SoundComponent.cs
│   │   │   ├── SoundComponent.cs.meta
│   │   │   ├── SoundData.cs
│   │   │   ├── SoundData.cs.meta
│   │   │   ├── Volume_Variable/
│   │   │   │   ├── MusicVolumeChange.cs
│   │   │   │   ├── MusicVolumeChange.cs.meta
│   │   │   │   ├── SfxVolumeChange.cs
│   │   │   │   └── SfxVolumeChange.cs.meta
│   │   │   ├── Volume_Variable.meta
│   │   │   ├── virtuesky.sunflower.audio.asmdef
│   │   │   └── virtuesky.sunflower.audio.asmdef.meta
│   │   └── Runtime.meta
│   ├── Audio.meta
│   ├── Button/
│   │   ├── Editor/
│   │   │   ├── ButtomCustomEditor.cs
│   │   │   ├── ButtomCustomEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.Button.Editor.asmdef
│   │   │   └── Virtuesky.Sunflower.Button.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── ButtonCustom.cs
│   │   │   ├── ButtonCustom.cs.meta
│   │   │   ├── ButtonTMP.cs
│   │   │   ├── ButtonTMP.cs.meta
│   │   │   ├── ButtonText.cs
│   │   │   ├── ButtonText.cs.meta
│   │   │   ├── ButtonUI.cs
│   │   │   ├── ButtonUI.cs.meta
│   │   │   ├── ButtonUI_TMP.cs
│   │   │   ├── ButtonUI_TMP.cs.meta
│   │   │   ├── ButtonUI_Text.cs
│   │   │   ├── ButtonUI_Text.cs.meta
│   │   │   ├── Virtuesky.Sunflower.Button.asmdef
│   │   │   └── Virtuesky.Sunflower.Button.asmdef.meta
│   │   └── Runtime.meta
│   ├── Button.meta
│   ├── Component/
│   │   ├── AnimancerComponent/
│   │   │   ├── HandleAnimancerComponent.cs
│   │   │   └── HandleAnimancerComponent.cs.meta
│   │   ├── AnimancerComponent.meta
│   │   ├── BounceComponent.cs
│   │   ├── BounceComponent.cs.meta
│   │   ├── Buoyancy2DComponent.cs
│   │   ├── Buoyancy2DComponent.cs.meta
│   │   ├── BuoyancyComponent.cs
│   │   ├── BuoyancyComponent.cs.meta
│   │   ├── EffectAppearComponent.cs
│   │   ├── EffectAppearComponent.cs.meta
│   │   ├── EffectZoomInOutComponent.cs
│   │   ├── EffectZoomInOutComponent.cs.meta
│   │   ├── FollowTargetComponent.cs
│   │   ├── FollowTargetComponent.cs.meta
│   │   ├── MoveComponent.cs
│   │   ├── MoveComponent.cs.meta
│   │   ├── ResizeCameraOrthographicComponent.cs
│   │   ├── ResizeCameraOrthographicComponent.cs.meta
│   │   ├── ResizeMatchCanvasScalerComponent.cs
│   │   ├── ResizeMatchCanvasScalerComponent.cs.meta
│   │   ├── RotateComponent.cs
│   │   ├── RotateComponent.cs.meta
│   │   ├── SafeAreaComponent.cs
│   │   ├── SafeAreaComponent.cs.meta
│   │   ├── SkeletonComponent/
│   │   │   ├── AnimationSkeleton/
│   │   │   │   ├── AnimationSkeleton.cs
│   │   │   │   ├── AnimationSkeleton.cs.meta
│   │   │   │   ├── AnimationSkeletonComponent.cs
│   │   │   │   ├── AnimationSkeletonComponent.cs.meta
│   │   │   │   ├── AnimationSkeletonUIComponent.cs
│   │   │   │   └── AnimationSkeletonUIComponent.cs.meta
│   │   │   ├── AnimationSkeleton.meta
│   │   │   ├── SkinSkeleton/
│   │   │   │   ├── SkinSkeleton.cs
│   │   │   │   ├── SkinSkeleton.cs.meta
│   │   │   │   ├── SkinSkeletonComponent.cs
│   │   │   │   ├── SkinSkeletonComponent.cs.meta
│   │   │   │   ├── SkinSkeletonUIComponent.cs
│   │   │   │   └── SkinSkeletonUIComponent.cs.meta
│   │   │   └── SkinSkeleton.meta
│   │   ├── SkeletonComponent.meta
│   │   ├── TimeRemainingComponent.cs
│   │   ├── TimeRemainingComponent.cs.meta
│   │   ├── virtuesky.sunflower.component.asmdef
│   │   └── virtuesky.sunflower.component.asmdef.meta
│   ├── Component.meta
│   ├── ControlPanel/
│   │   ├── CPAboutDrawer.cs
│   │   ├── CPAboutDrawer.cs.meta
│   │   ├── CPAdjustDrawer.cs
│   │   ├── CPAdjustDrawer.cs.meta
│   │   ├── CPAdvertisingDrawer.cs
│   │   ├── CPAdvertisingDrawer.cs.meta
│   │   ├── CPAppsFlyerDrawer.cs
│   │   ├── CPAppsFlyerDrawer.cs.meta
│   │   ├── CPAssetFinderDrawer.cs
│   │   ├── CPAssetFinderDrawer.cs.meta
│   │   ├── CPAudioDrawer.cs
│   │   ├── CPAudioDrawer.cs.meta
│   │   ├── CPExtensionsDrawer.cs
│   │   ├── CPExtensionsDrawer.cs.meta
│   │   ├── CPFirebaseDrawer.cs
│   │   ├── CPFirebaseDrawer.cs.meta
│   │   ├── CPFolderIconDrawer.cs
│   │   ├── CPFolderIconDrawer.cs.meta
│   │   ├── CPGameServiceDrawer.cs
│   │   ├── CPGameServiceDrawer.cs.meta
│   │   ├── CPHierarchyDrawer.cs
│   │   ├── CPHierarchyDrawer.cs.meta
│   │   ├── CPIapDrawer.cs
│   │   ├── CPIapDrawer.cs.meta
│   │   ├── CPInAppReviewDrawer.cs
│   │   ├── CPInAppReviewDrawer.cs.meta
│   │   ├── CPLevelEditorDrawer.cs
│   │   ├── CPLevelEditorDrawer.cs.meta
│   │   ├── CPLocalizationDrawer.cs
│   │   ├── CPLocalizationDrawer.cs.meta
│   │   ├── CPNotificationChanelDrawer.cs
│   │   ├── CPNotificationChanelDrawer.cs.meta
│   │   ├── CPRegisterPackageDrawer.cs
│   │   ├── CPRegisterPackageDrawer.cs.meta
│   │   ├── CPScriptingDefineSymbolsDrawer.cs
│   │   ├── CPScriptingDefineSymbolsDrawer.cs.meta
│   │   ├── CPSoEventDrawer.cs
│   │   ├── CPSoEventDrawer.cs.meta
│   │   ├── CPSoVariableDrawer.cs
│   │   ├── CPSoVariableDrawer.cs.meta
│   │   ├── CPUtility.cs
│   │   ├── CPUtility.cs.meta
│   │   ├── ConstantControlPanel.cs
│   │   ├── ConstantControlPanel.cs.meta
│   │   ├── ConstantPackage.cs
│   │   ├── ConstantPackage.cs.meta
│   │   ├── ControlPanelWindowEditor.cs
│   │   ├── ControlPanelWindowEditor.cs.meta
│   │   ├── Virtuesky.Sunflower.ControlPanel.Editor.asmdef
│   │   └── Virtuesky.Sunflower.ControlPanel.Editor.asmdef.meta
│   ├── ControlPanel.meta
│   ├── Core/
│   │   ├── Editor/
│   │   │   ├── OptionalPropertyDrawer.cs
│   │   │   ├── OptionalPropertyDrawer.cs.meta
│   │   │   ├── VirtueSky.Sunflower.Core.Editor.asmdef
│   │   │   └── VirtueSky.Sunflower.Core.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── App.cs
│   │   │   ├── App.cs.meta
│   │   │   ├── BaseMono.cs
│   │   │   ├── BaseMono.cs.meta
│   │   │   ├── BaseSO.cs
│   │   │   ├── BaseSO.cs.meta
│   │   │   ├── CacheComponent.cs
│   │   │   ├── CacheComponent.cs.meta
│   │   │   ├── DelayHandle.cs
│   │   │   ├── DelayHandle.cs.meta
│   │   │   ├── IEntity.cs
│   │   │   ├── IEntity.cs.meta
│   │   │   ├── MonoGlobal.cs
│   │   │   ├── MonoGlobal.cs.meta
│   │   │   ├── Optional.cs
│   │   │   ├── Optional.cs.meta
│   │   │   ├── RuntimeInitialize.cs
│   │   │   ├── RuntimeInitialize.cs.meta
│   │   │   ├── UnityServiceInitialization.cs
│   │   │   ├── UnityServiceInitialization.cs.meta
│   │   │   ├── virtuesky.sunflower.core.asmdef
│   │   │   └── virtuesky.sunflower.core.asmdef.meta
│   │   └── Runtime.meta
│   ├── Core.meta
│   ├── DataStorage/
│   │   ├── Editor/
│   │   │   ├── DataWindowEditor.cs
│   │   │   ├── DataWindowEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.DataStorage.Editor.asmdef
│   │   │   └── Virtuesky.Sunflower.DataStorage.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── GameData.cs
│   │   │   ├── GameData.cs.meta
│   │   │   ├── SerializeAdapter.cs
│   │   │   ├── SerializeAdapter.cs.meta
│   │   │   ├── Virtuesky.Sunflower.DataStorage.asmdef
│   │   │   └── Virtuesky.Sunflower.DataStorage.asmdef.meta
│   │   └── Runtime.meta
│   ├── DataStorage.meta
│   ├── DataType/
│   │   ├── DictionaryCustom.cs
│   │   ├── DictionaryCustom.cs.meta
│   │   ├── ShortDouble.Units.cs
│   │   ├── ShortDouble.Units.cs.meta
│   │   ├── ShortDouble.cs
│   │   ├── ShortDouble.cs.meta
│   │   ├── virtuesky.sunflower.datatype.asmdef
│   │   └── virtuesky.sunflower.datatype.asmdef.meta
│   ├── DataType.meta
│   ├── Events/
│   │   ├── Editor/
│   │   │   ├── BaseEventEditor.cs
│   │   │   ├── BaseEventEditor.cs.meta
│   │   │   ├── EventWindowEditor.cs
│   │   │   ├── EventWindowEditor.cs.meta
│   │   │   ├── virtuesky.sunflower.event.editor.asmdef
│   │   │   └── virtuesky.sunflower.event.editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── Base_Event/
│   │   │   │   ├── BaseEvent.cs
│   │   │   │   ├── BaseEvent.cs.meta
│   │   │   │   ├── BaseEventListener.cs
│   │   │   │   ├── BaseEventListener.cs.meta
│   │   │   │   ├── BaseEventResponse.cs
│   │   │   │   ├── BaseEventResponse.cs.meta
│   │   │   │   ├── EventListenerMono.cs
│   │   │   │   └── EventListenerMono.cs.meta
│   │   │   ├── Base_Event.meta
│   │   │   ├── Boolean_Event/
│   │   │   │   ├── BooleanEvent.cs
│   │   │   │   ├── BooleanEvent.cs.meta
│   │   │   │   ├── BooleanEventListener.cs
│   │   │   │   ├── BooleanEventListener.cs.meta
│   │   │   │   ├── BooleanEventResponse.cs
│   │   │   │   ├── BooleanEventResponse.cs.meta
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── BoolEventBoolResult.cs
│   │   │   │   │   ├── BoolEventBoolResult.cs.meta
│   │   │   │   │   ├── BoolEventFloatResult.cs
│   │   │   │   │   ├── BoolEventFloatResult.cs.meta
│   │   │   │   │   ├── BoolEventGameObjectResult.cs
│   │   │   │   │   ├── BoolEventGameObjectResult.cs.meta
│   │   │   │   │   ├── BoolEventIntResult.cs
│   │   │   │   │   ├── BoolEventIntResult.cs.meta
│   │   │   │   │   ├── BoolEventObjectResult.cs
│   │   │   │   │   ├── BoolEventObjectResult.cs.meta
│   │   │   │   │   ├── BoolEventStringResult.cs
│   │   │   │   │   ├── BoolEventStringResult.cs.meta
│   │   │   │   │   ├── BoolEventTransformResult.cs
│   │   │   │   │   ├── BoolEventTransformResult.cs.meta
│   │   │   │   │   ├── BoolEventVector3Result.cs
│   │   │   │   │   └── BoolEventVector3Result.cs.meta
│   │   │   │   └── Event_Result.meta
│   │   │   ├── Boolean_Event.meta
│   │   │   ├── Custom/
│   │   │   │   ├── ClickButtonEvent.cs
│   │   │   │   └── ClickButtonEvent.cs.meta
│   │   │   ├── Custom.meta
│   │   │   ├── Dictionary_Event/
│   │   │   │   ├── DictionaryEvent.cs
│   │   │   │   ├── DictionaryEvent.cs.meta
│   │   │   │   ├── DictionaryEventListener.cs
│   │   │   │   ├── DictionaryEventListener.cs.meta
│   │   │   │   ├── DictionaryEventResponse.cs
│   │   │   │   └── DictionaryEventResponse.cs.meta
│   │   │   ├── Dictionary_Event.meta
│   │   │   ├── Event_NoParam/
│   │   │   │   ├── EventListenerNoParam.cs
│   │   │   │   ├── EventListenerNoParam.cs.meta
│   │   │   │   ├── EventNoParam.cs
│   │   │   │   ├── EventNoParam.cs.meta
│   │   │   │   ├── EventResponse.cs
│   │   │   │   ├── EventResponse.cs.meta
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── EventNoParamBoolResult.cs
│   │   │   │   │   ├── EventNoParamBoolResult.cs.meta
│   │   │   │   │   ├── EventNoParamFloatResult.cs
│   │   │   │   │   ├── EventNoParamFloatResult.cs.meta
│   │   │   │   │   ├── EventNoParamGameObjectResult.cs
│   │   │   │   │   ├── EventNoParamGameObjectResult.cs.meta
│   │   │   │   │   ├── EventNoParamIntResult.cs
│   │   │   │   │   ├── EventNoParamIntResult.cs.meta
│   │   │   │   │   ├── EventNoParamObjectResult.cs
│   │   │   │   │   ├── EventNoParamObjectResult.cs.meta
│   │   │   │   │   ├── EventNoParamResult.cs
│   │   │   │   │   ├── EventNoParamResult.cs.meta
│   │   │   │   │   ├── EventNoParamStringResult.cs
│   │   │   │   │   ├── EventNoParamStringResult.cs.meta
│   │   │   │   │   ├── EventNoParamTransformResult.cs
│   │   │   │   │   ├── EventNoParamTransformResult.cs.meta
│   │   │   │   │   ├── EventNoParamVector3Result.cs
│   │   │   │   │   └── EventNoParamVector3Result.cs.meta
│   │   │   │   └── Event_Result.meta
│   │   │   ├── Event_NoParam.meta
│   │   │   ├── Float_Event/
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── FloatEventBoolResult.cs
│   │   │   │   │   ├── FloatEventBoolResult.cs.meta
│   │   │   │   │   ├── FloatEventFloatResult.cs
│   │   │   │   │   ├── FloatEventFloatResult.cs.meta
│   │   │   │   │   ├── FloatEventGameObjectResult.cs
│   │   │   │   │   ├── FloatEventGameObjectResult.cs.meta
│   │   │   │   │   ├── FloatEventIntResult.cs
│   │   │   │   │   ├── FloatEventIntResult.cs.meta
│   │   │   │   │   ├── FloatEventObjectResult.cs
│   │   │   │   │   ├── FloatEventObjectResult.cs.meta
│   │   │   │   │   ├── FloatEventStringResult.cs
│   │   │   │   │   ├── FloatEventStringResult.cs.meta
│   │   │   │   │   ├── FloatEventTransformResult.cs
│   │   │   │   │   ├── FloatEventTransformResult.cs.meta
│   │   │   │   │   ├── FloatEventVector3Result.cs
│   │   │   │   │   └── FloatEventVector3Result.cs.meta
│   │   │   │   ├── Event_Result.meta
│   │   │   │   ├── FloatEvent.cs
│   │   │   │   ├── FloatEvent.cs.meta
│   │   │   │   ├── FloatEventListener.cs
│   │   │   │   ├── FloatEventListener.cs.meta
│   │   │   │   ├── FloatEventResponse.cs
│   │   │   │   └── FloatEventResponse.cs.meta
│   │   │   ├── Float_Event.meta
│   │   │   ├── GameObject_Event/
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── GameObjectEventBoolResult.cs
│   │   │   │   │   ├── GameObjectEventBoolResult.cs.meta
│   │   │   │   │   ├── GameObjectEventFloatResult.cs
│   │   │   │   │   ├── GameObjectEventFloatResult.cs.meta
│   │   │   │   │   ├── GameObjectEventGameObjectResult.cs
│   │   │   │   │   ├── GameObjectEventGameObjectResult.cs.meta
│   │   │   │   │   ├── GameObjectEventIntResult.cs
│   │   │   │   │   ├── GameObjectEventIntResult.cs.meta
│   │   │   │   │   ├── GameObjectEventObjectResult.cs
│   │   │   │   │   ├── GameObjectEventObjectResult.cs.meta
│   │   │   │   │   ├── GameObjectEventStringResult.cs
│   │   │   │   │   ├── GameObjectEventStringResult.cs.meta
│   │   │   │   │   ├── GameObjectEventTransformResult.cs
│   │   │   │   │   ├── GameObjectEventTransformResult.cs.meta
│   │   │   │   │   ├── GameObjectEventVector3Result.cs
│   │   │   │   │   └── GameObjectEventVector3Result.cs.meta
│   │   │   │   ├── Event_Result.meta
│   │   │   │   ├── GameObjectEvent.cs
│   │   │   │   ├── GameObjectEvent.cs.meta
│   │   │   │   ├── GameObjectEventListener.cs
│   │   │   │   ├── GameObjectEventListener.cs.meta
│   │   │   │   ├── GameObjectEventResponse.cs
│   │   │   │   └── GameObjectEventResponse.cs.meta
│   │   │   ├── GameObject_Event.meta
│   │   │   ├── Integer_Event/
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── IntEventBoolResult.cs
│   │   │   │   │   ├── IntEventBoolResult.cs.meta
│   │   │   │   │   ├── IntEventFloatResult.cs
│   │   │   │   │   ├── IntEventFloatResult.cs.meta
│   │   │   │   │   ├── IntEventGameObjectResult.cs
│   │   │   │   │   ├── IntEventGameObjectResult.cs.meta
│   │   │   │   │   ├── IntEventIntResult.cs
│   │   │   │   │   ├── IntEventIntResult.cs.meta
│   │   │   │   │   ├── IntEventObjectResult.cs
│   │   │   │   │   ├── IntEventObjectResult.cs.meta
│   │   │   │   │   ├── IntEventStringResult.cs
│   │   │   │   │   ├── IntEventStringResult.cs.meta
│   │   │   │   │   ├── IntEventTransformResult.cs
│   │   │   │   │   ├── IntEventTransformResult.cs.meta
│   │   │   │   │   ├── IntEventVector3Result.cs
│   │   │   │   │   └── IntEventVector3Result.cs.meta
│   │   │   │   ├── Event_Result.meta
│   │   │   │   ├── IntegerEvent.cs
│   │   │   │   ├── IntegerEvent.cs.meta
│   │   │   │   ├── IntegerEventListener.cs
│   │   │   │   ├── IntegerEventListener.cs.meta
│   │   │   │   ├── IntegerEventResponse.cs
│   │   │   │   └── IntegerEventResponse.cs.meta
│   │   │   ├── Integer_Event.meta
│   │   │   ├── Interface_Event/
│   │   │   │   ├── IEvent.cs
│   │   │   │   ├── IEvent.cs.meta
│   │   │   │   ├── IEventListener.cs
│   │   │   │   ├── IEventListener.cs.meta
│   │   │   │   ├── IEventResponse.cs
│   │   │   │   └── IEventResponse.cs.meta
│   │   │   ├── Interface_Event.meta
│   │   │   ├── Object_Event/
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── ObjectEventBoolResult.cs
│   │   │   │   │   ├── ObjectEventBoolResult.cs.meta
│   │   │   │   │   ├── ObjectEventFloatResult.cs
│   │   │   │   │   ├── ObjectEventFloatResult.cs.meta
│   │   │   │   │   ├── ObjectEventGameObjectResult.cs
│   │   │   │   │   ├── ObjectEventGameObjectResult.cs.meta
│   │   │   │   │   ├── ObjectEventIntResult.cs
│   │   │   │   │   ├── ObjectEventIntResult.cs.meta
│   │   │   │   │   ├── ObjectEventObjectResult.cs
│   │   │   │   │   ├── ObjectEventObjectResult.cs.meta
│   │   │   │   │   ├── ObjectEventStringResult.cs
│   │   │   │   │   ├── ObjectEventStringResult.cs.meta
│   │   │   │   │   ├── ObjectEventTransformResult.cs
│   │   │   │   │   ├── ObjectEventTransformResult.cs.meta
│   │   │   │   │   ├── ObjectEventVector3Result.cs
│   │   │   │   │   └── ObjectEventVector3Result.cs.meta
│   │   │   │   ├── Event_Result.meta
│   │   │   │   ├── ObjectEvent.cs
│   │   │   │   ├── ObjectEvent.cs.meta
│   │   │   │   ├── ObjectEventListener.cs
│   │   │   │   ├── ObjectEventListener.cs.meta
│   │   │   │   ├── ObjectEventResponse.cs
│   │   │   │   └── ObjectEventResponse.cs.meta
│   │   │   ├── Object_Event.meta
│   │   │   ├── ShortDouble_Event/
│   │   │   │   ├── ShortDoubleEvent.cs
│   │   │   │   ├── ShortDoubleEvent.cs.meta
│   │   │   │   ├── ShortDoubleEventListener.cs
│   │   │   │   ├── ShortDoubleEventListener.cs.meta
│   │   │   │   ├── ShortDoubleEventResponse.cs
│   │   │   │   └── ShortDoubleEventResponse.cs.meta
│   │   │   ├── ShortDouble_Event.meta
│   │   │   ├── String_Event/
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── StringEventBoolResult.cs
│   │   │   │   │   ├── StringEventBoolResult.cs.meta
│   │   │   │   │   ├── StringEventFloatResult.cs
│   │   │   │   │   ├── StringEventFloatResult.cs.meta
│   │   │   │   │   ├── StringEventGameObjectResult.cs
│   │   │   │   │   ├── StringEventGameObjectResult.cs.meta
│   │   │   │   │   ├── StringEventIntResult.cs
│   │   │   │   │   ├── StringEventIntResult.cs.meta
│   │   │   │   │   ├── StringEventObjectResult.cs
│   │   │   │   │   ├── StringEventObjectResult.cs.meta
│   │   │   │   │   ├── StringEventStringResult.cs
│   │   │   │   │   ├── StringEventStringResult.cs.meta
│   │   │   │   │   ├── StringEventTransformResult.cs
│   │   │   │   │   ├── StringEventTransformResult.cs.meta
│   │   │   │   │   ├── StringEventVector3Result.cs
│   │   │   │   │   └── StringEventVector3Result.cs.meta
│   │   │   │   ├── Event_Result.meta
│   │   │   │   ├── StringEvent.cs
│   │   │   │   ├── StringEvent.cs.meta
│   │   │   │   ├── StringEventListener.cs
│   │   │   │   ├── StringEventListener.cs.meta
│   │   │   │   ├── StringEventResponse.cs
│   │   │   │   └── StringEventResponse.cs.meta
│   │   │   ├── String_Event.meta
│   │   │   ├── Transform_Event/
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── TransformEventBoolResult.cs
│   │   │   │   │   ├── TransformEventBoolResult.cs.meta
│   │   │   │   │   ├── TransformEventFloatResult.cs
│   │   │   │   │   ├── TransformEventFloatResult.cs.meta
│   │   │   │   │   ├── TransformEventGameObjectResult.cs
│   │   │   │   │   ├── TransformEventGameObjectResult.cs.meta
│   │   │   │   │   ├── TransformEventIntResult.cs
│   │   │   │   │   ├── TransformEventIntResult.cs.meta
│   │   │   │   │   ├── TransformEventObjectResult.cs
│   │   │   │   │   ├── TransformEventObjectResult.cs.meta
│   │   │   │   │   ├── TransformEventStringResult.cs
│   │   │   │   │   ├── TransformEventStringResult.cs.meta
│   │   │   │   │   ├── TransformEventTransformResult.cs
│   │   │   │   │   ├── TransformEventTransformResult.cs.meta
│   │   │   │   │   ├── TransformEventVector3Result.cs
│   │   │   │   │   └── TransformEventVector3Result.cs.meta
│   │   │   │   ├── Event_Result.meta
│   │   │   │   ├── TransformEvent.cs
│   │   │   │   ├── TransformEvent.cs.meta
│   │   │   │   ├── TransformEventListener.cs
│   │   │   │   ├── TransformEventListener.cs.meta
│   │   │   │   ├── TransformEventResponse.cs
│   │   │   │   └── TransformEventResponse.cs.meta
│   │   │   ├── Transform_Event.meta
│   │   │   ├── Vector2_Event/
│   │   │   │   ├── Vector2Event.cs
│   │   │   │   ├── Vector2Event.cs.meta
│   │   │   │   ├── Vector2EventListener.cs
│   │   │   │   ├── Vector2EventListener.cs.meta
│   │   │   │   ├── Vector2EventResponse.cs
│   │   │   │   └── Vector2EventResponse.cs.meta
│   │   │   ├── Vector2_Event.meta
│   │   │   ├── Vector3_Event/
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── Vector3EventBoolResult.cs
│   │   │   │   │   ├── Vector3EventBoolResult.cs.meta
│   │   │   │   │   ├── Vector3EventFloatResult.cs
│   │   │   │   │   ├── Vector3EventFloatResult.cs.meta
│   │   │   │   │   ├── Vector3EventGameObjectResult.cs
│   │   │   │   │   ├── Vector3EventGameObjectResult.cs.meta
│   │   │   │   │   ├── Vector3EventIntResult.cs
│   │   │   │   │   ├── Vector3EventIntResult.cs.meta
│   │   │   │   │   ├── Vector3EventObjectResult.cs
│   │   │   │   │   ├── Vector3EventObjectResult.cs.meta
│   │   │   │   │   ├── Vector3EventStringResult.cs
│   │   │   │   │   ├── Vector3EventStringResult.cs.meta
│   │   │   │   │   ├── Vector3EventTransformResult.cs
│   │   │   │   │   ├── Vector3EventTransformResult.cs.meta
│   │   │   │   │   ├── Vector3EventVector3Result.cs
│   │   │   │   │   └── Vector3EventVector3Result.cs.meta
│   │   │   │   ├── Event_Result.meta
│   │   │   │   ├── Vector3Event.cs
│   │   │   │   ├── Vector3Event.cs.meta
│   │   │   │   ├── Vector3EventListener.cs
│   │   │   │   ├── Vector3EventListener.cs.meta
│   │   │   │   ├── Vector3EventResponse.cs
│   │   │   │   └── Vector3EventResponse.cs.meta
│   │   │   ├── Vector3_Event.meta
│   │   │   ├── virtuesky.sunflower.event.asmdef
│   │   │   └── virtuesky.sunflower.event.asmdef.meta
│   │   └── Runtime.meta
│   ├── Events.meta
│   ├── FolderIcon/
│   │   ├── Editor/
│   │   │   ├── CustomFolder.cs
│   │   │   ├── CustomFolder.cs.meta
│   │   │   ├── FolderIconSettings.cs
│   │   │   ├── FolderIconSettings.cs.meta
│   │   │   ├── IconDictionaryCreator.cs
│   │   │   ├── IconDictionaryCreator.cs.meta
│   │   │   ├── PackageIcon/
│   │   │   │   ├── icon_folder.unitypackage
│   │   │   │   └── icon_folder.unitypackage.meta
│   │   │   ├── PackageIcon.meta
│   │   │   ├── Virtuesky.Sunflower.FolderIcon.asmdef
│   │   │   └── Virtuesky.Sunflower.FolderIcon.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Icons/
│   │   │   ├── Animations.png.meta
│   │   │   ├── Audio.png.meta
│   │   │   ├── Default/
│   │   │   │   └── Default.png.meta
│   │   │   ├── Default.meta
│   │   │   ├── Editor.png.meta
│   │   │   ├── Fonts.png.meta
│   │   │   ├── Materials.png.meta
│   │   │   ├── Models.png.meta
│   │   │   ├── Plugins.png.meta
│   │   │   ├── Prefabs.png.meta
│   │   │   ├── Presets.png.meta
│   │   │   ├── Resources.png.meta
│   │   │   ├── Scenes.png.meta
│   │   │   ├── Scripts.png.meta
│   │   │   ├── Settings.png.meta
│   │   │   ├── Shaders.png.meta
│   │   │   ├── Sprites.png.meta
│   │   │   └── Textures.png.meta
│   │   └── Icons.meta
│   ├── FolderIcon.meta
│   ├── GameService/
│   │   ├── Runtime/
│   │   │   ├── AppleAuthentication.cs
│   │   │   ├── AppleAuthentication.cs.meta
│   │   │   ├── GooglePlayGamesAuthentication.cs
│   │   │   ├── GooglePlayGamesAuthentication.cs.meta
│   │   │   ├── ServiceAuthentication.cs
│   │   │   ├── ServiceAuthentication.cs.meta
│   │   │   ├── Variable/
│   │   │   │   ├── StatusLoginVariable.cs
│   │   │   │   └── StatusLoginVariable.cs.meta
│   │   │   ├── Variable.meta
│   │   │   ├── Virtuesky.Sunflower.GameService.asmdef
│   │   │   └── Virtuesky.Sunflower.GameService.asmdef.meta
│   │   └── Runtime.meta
│   ├── GameService.meta
│   ├── Hierarchy/
│   │   ├── Attribute/
│   │   │   ├── HierarchyNullable.asmdef
│   │   │   ├── HierarchyNullable.asmdef.meta
│   │   │   ├── HierarchyNullable.cs
│   │   │   └── HierarchyNullable.cs.meta
│   │   ├── Attribute.meta
│   │   ├── Editor/
│   │   │   ├── HierarchyEditor.asmdef
│   │   │   ├── HierarchyEditor.asmdef.meta
│   │   │   ├── Scripts/
│   │   │   │   ├── Component/
│   │   │   │   │   ├── Base/
│   │   │   │   │   │   ├── BaseComponent.cs
│   │   │   │   │   │   └── BaseComponent.cs.meta
│   │   │   │   │   ├── Base.meta
│   │   │   │   │   ├── ChildrenCountComponent.cs
│   │   │   │   │   ├── ChildrenCountComponent.cs.meta
│   │   │   │   │   ├── ColorComponent.cs
│   │   │   │   │   ├── ColorComponent.cs.meta
│   │   │   │   │   ├── ComponentsComponent.cs
│   │   │   │   │   ├── ComponentsComponent.cs.meta
│   │   │   │   │   ├── ErrorComponent.cs
│   │   │   │   │   ├── ErrorComponent.cs.meta
│   │   │   │   │   ├── GameObjectIconComponent.cs
│   │   │   │   │   ├── GameObjectIconComponent.cs.meta
│   │   │   │   │   ├── LayerIconComponent.cs
│   │   │   │   │   ├── LayerIconComponent.cs.meta
│   │   │   │   │   ├── LockComponent.cs
│   │   │   │   │   ├── LockComponent.cs.meta
│   │   │   │   │   ├── MonoBehaviorIconComponent.cs
│   │   │   │   │   ├── MonoBehaviorIconComponent.cs.meta
│   │   │   │   │   ├── PrefabComponent.cs
│   │   │   │   │   ├── PrefabComponent.cs.meta
│   │   │   │   │   ├── RendererComponent.cs
│   │   │   │   │   ├── RendererComponent.cs.meta
│   │   │   │   │   ├── SeparatorComponent.cs
│   │   │   │   │   ├── SeparatorComponent.cs.meta
│   │   │   │   │   ├── StaticComponent.cs
│   │   │   │   │   ├── StaticComponent.cs.meta
│   │   │   │   │   ├── TagIconComponent.cs
│   │   │   │   │   ├── TagIconComponent.cs.meta
│   │   │   │   │   ├── TagLayerComponent.cs
│   │   │   │   │   ├── TagLayerComponent.cs.meta
│   │   │   │   │   ├── TreeMapComponent.cs
│   │   │   │   │   ├── TreeMapComponent.cs.meta
│   │   │   │   │   ├── VerticesAndTrianglesCountComponent.cs
│   │   │   │   │   ├── VerticesAndTrianglesCountComponent.cs.meta
│   │   │   │   │   ├── VisibilityComponent.cs
│   │   │   │   │   └── VisibilityComponent.cs.meta
│   │   │   │   ├── Component.meta
│   │   │   │   ├── Data/
│   │   │   │   │   ├── HierarchyResources.cs
│   │   │   │   │   ├── HierarchyResources.cs.meta
│   │   │   │   │   ├── HierarchySettings.cs
│   │   │   │   │   ├── HierarchySettings.cs.meta
│   │   │   │   │   ├── HierarchySettingsObject.cs
│   │   │   │   │   ├── HierarchySettingsObject.cs.meta
│   │   │   │   │   ├── QSettingsObjectAsset.asset
│   │   │   │   │   └── QSettingsObjectAsset.asset.meta
│   │   │   │   ├── Data.meta
│   │   │   │   ├── Helper/
│   │   │   │   │   ├── HierarchyColorPickerWindow.cs
│   │   │   │   │   ├── HierarchyColorPickerWindow.cs.meta
│   │   │   │   │   ├── HierarchyColorUtils.cs
│   │   │   │   │   ├── HierarchyColorUtils.cs.meta
│   │   │   │   │   ├── HierarchyComponentsOrderList.cs
│   │   │   │   │   ├── HierarchyComponentsOrderList.cs.meta
│   │   │   │   │   ├── HierarchyObjectListInspector.cs
│   │   │   │   │   ├── HierarchyObjectListInspector.cs.meta
│   │   │   │   │   ├── HierarchyObjectListManager.cs
│   │   │   │   │   └── HierarchyObjectListManager.cs.meta
│   │   │   │   ├── Helper.meta
│   │   │   │   ├── QHierarchyInitializer.cs
│   │   │   │   ├── QHierarchyInitializer.cs.meta
│   │   │   │   ├── VHierarchy/
│   │   │   │   │   ├── HierarchySettingsWindow.cs
│   │   │   │   │   ├── HierarchySettingsWindow.cs.meta
│   │   │   │   │   ├── VHierarchy.cs
│   │   │   │   │   └── VHierarchy.cs.meta
│   │   │   │   └── VHierarchy.meta
│   │   │   └── Scripts.meta
│   │   ├── Editor.meta
│   │   ├── FolderHierarchy/
│   │   │   ├── HeaderHierarchy.cs
│   │   │   ├── HeaderHierarchy.cs.meta
│   │   │   ├── HeaderHierarchyIcon.cs
│   │   │   ├── HeaderHierarchyIcon.cs.meta
│   │   │   ├── HierarchyHeader.asmdef
│   │   │   ├── HierarchyHeader.asmdef.meta
│   │   │   ├── InspectorUtility.cs
│   │   │   └── InspectorUtility.cs.meta
│   │   ├── FolderHierarchy.meta
│   │   ├── Icons/
│   │   │   └── HierarchyHighlight.png.meta
│   │   ├── Icons.meta
│   │   ├── Scripts/
│   │   │   ├── HierarchyRuntime.asmdef
│   │   │   ├── HierarchyRuntime.asmdef.meta
│   │   │   ├── ObjectList.cs
│   │   │   └── ObjectList.cs.meta
│   │   └── Scripts.meta
│   ├── Hierarchy.meta
│   ├── Iap/
│   │   ├── Editor/
│   │   │   ├── IapSettingEditor.cs
│   │   │   ├── IapSettingEditor.cs.meta
│   │   │   ├── ObfuscationGenerator.cs
│   │   │   ├── ObfuscationGenerator.cs.meta
│   │   │   ├── TangleFileConsts.cs
│   │   │   ├── TangleFileConsts.cs.meta
│   │   │   ├── TangleObfuscator.cs
│   │   │   ├── TangleObfuscator.cs.meta
│   │   │   ├── Virtusky.Sunflower.Iap.Editor.asmdef
│   │   │   └── Virtusky.Sunflower.Iap.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── IapDataVariable.cs
│   │   │   ├── IapDataVariable.cs.meta
│   │   │   ├── IapManager.cs
│   │   │   ├── IapManager.cs.meta
│   │   │   ├── IapPurchaseFailed.cs
│   │   │   ├── IapPurchaseFailed.cs.meta
│   │   │   ├── IapPurchaseSuccess.cs
│   │   │   ├── IapPurchaseSuccess.cs.meta
│   │   │   ├── IapSetting.cs
│   │   │   ├── IapSetting.cs.meta
│   │   │   ├── IapStatic.cs
│   │   │   ├── IapStatic.cs.meta
│   │   │   ├── Virtusky.Sunflower.Iap.asmdef
│   │   │   └── Virtusky.Sunflower.Iap.asmdef.meta
│   │   └── Runtime.meta
│   ├── Iap.meta
│   ├── Inspector/
│   │   ├── .editorconfig
│   │   ├── .github/
│   │   │   ├── ISSUE_TEMPLATE/
│   │   │   │   ├── bug_report.md
│   │   │   │   └── config.yml
│   │   │   └── release.yml
│   │   ├── .gitignore
│   │   ├── Editor/
│   │   │   ├── AssemblyInfo.cs
│   │   │   ├── AssemblyInfo.cs.meta
│   │   │   ├── Attributes.cs
│   │   │   ├── Attributes.cs.meta
│   │   │   ├── CustomizeDraw/
│   │   │   │   ├── EditorIconPostProcessor.cs
│   │   │   │   ├── EditorIconPostProcessor.cs.meta
│   │   │   │   ├── EnumAttribue/
│   │   │   │   │   ├── ExtendEnumDrawer.cs
│   │   │   │   │   ├── ExtendEnumDrawer.cs.meta
│   │   │   │   │   ├── SearchableEnumDrawer.cs
│   │   │   │   │   ├── SearchableEnumDrawer.cs.meta
│   │   │   │   │   ├── SearchablePopup.cs
│   │   │   │   │   └── SearchablePopup.cs.meta
│   │   │   │   ├── EnumAttribue.meta
│   │   │   │   ├── HeaderLineDrawer.cs
│   │   │   │   ├── HeaderLineDrawer.cs.meta
│   │   │   │   ├── HelpDrawer.cs
│   │   │   │   ├── HelpDrawer.cs.meta
│   │   │   │   ├── HighlightDrawer.cs
│   │   │   │   ├── HighlightDrawer.cs.meta
│   │   │   │   ├── LayerAttributeDraw.cs
│   │   │   │   ├── LayerAttributeDraw.cs.meta
│   │   │   │   ├── TagAttributeDraw.cs
│   │   │   │   ├── TagAttributeDraw.cs.meta
│   │   │   │   ├── TitleColorAttributeDrawer.cs
│   │   │   │   ├── TitleColorAttributeDrawer.cs.meta
│   │   │   │   ├── UtilityDraw.cs
│   │   │   │   └── UtilityDraw.cs.meta
│   │   │   ├── CustomizeDraw.meta
│   │   │   ├── Editors/
│   │   │   │   ├── TriEditor.cs
│   │   │   │   ├── TriEditor.cs.meta
│   │   │   │   ├── TriEditorCore.cs
│   │   │   │   ├── TriEditorCore.cs.meta
│   │   │   │   ├── TriMonoBehaviourEditor.cs
│   │   │   │   ├── TriMonoBehaviourEditor.cs.meta
│   │   │   │   ├── TriScriptableObjectEditor.cs
│   │   │   │   ├── TriScriptableObjectEditor.cs.meta
│   │   │   │   ├── TriScriptedImporterEditor.cs
│   │   │   │   ├── TriScriptedImporterEditor.cs.meta
│   │   │   │   ├── TriSettingsProvider.cs
│   │   │   │   └── TriSettingsProvider.cs.meta
│   │   │   ├── Editors.meta
│   │   │   ├── Elements/
│   │   │   │   ├── InlineEditorElement.cs
│   │   │   │   ├── InlineEditorElement.cs.meta
│   │   │   │   ├── TriBoxGroupElement.cs
│   │   │   │   ├── TriBoxGroupElement.cs.meta
│   │   │   │   ├── TriBuiltInPropertyElement.cs
│   │   │   │   ├── TriBuiltInPropertyElement.cs.meta
│   │   │   │   ├── TriDropdownElement.cs
│   │   │   │   ├── TriDropdownElement.cs.meta
│   │   │   │   ├── TriFoldoutElement.cs
│   │   │   │   ├── TriFoldoutElement.cs.meta
│   │   │   │   ├── TriHeaderGroupBaseElement.cs
│   │   │   │   ├── TriHeaderGroupBaseElement.cs.meta
│   │   │   │   ├── TriHorizontalGroupElement.cs
│   │   │   │   ├── TriHorizontalGroupElement.cs.meta
│   │   │   │   ├── TriInfoBoxElement.cs
│   │   │   │   ├── TriInfoBoxElement.cs.meta
│   │   │   │   ├── TriInlineGenericElement.cs
│   │   │   │   ├── TriInlineGenericElement.cs.meta
│   │   │   │   ├── TriLabelElement.cs
│   │   │   │   ├── TriLabelElement.cs.meta
│   │   │   │   ├── TriListElement.cs
│   │   │   │   ├── TriListElement.cs.meta
│   │   │   │   ├── TriMultiEditNotSupportedElement.cs
│   │   │   │   ├── TriMultiEditNotSupportedElement.cs.meta
│   │   │   │   ├── TriNoDrawerElement.cs
│   │   │   │   ├── TriNoDrawerElement.cs.meta
│   │   │   │   ├── TriPropertyCollectionBaseElement.cs
│   │   │   │   ├── TriPropertyCollectionBaseElement.cs.meta
│   │   │   │   ├── TriPropertyElement.cs
│   │   │   │   ├── TriPropertyElement.cs.meta
│   │   │   │   ├── TriReferenceElement.cs
│   │   │   │   ├── TriReferenceElement.cs.meta
│   │   │   │   ├── TriTabGroupElement.cs
│   │   │   │   ├── TriTabGroupElement.cs.meta
│   │   │   │   ├── TriUiToolkitPropertyElemenet.cs
│   │   │   │   ├── TriUiToolkitPropertyElemenet.cs.meta
│   │   │   │   ├── TriVerticalGroupElement.cs
│   │   │   │   └── TriVerticalGroupElement.cs.meta
│   │   │   ├── Elements.meta
│   │   │   ├── Resolvers/
│   │   │   │   ├── ActionResolver.cs
│   │   │   │   ├── ActionResolver.cs.meta
│   │   │   │   ├── DropdownValuesResolver.cs
│   │   │   │   ├── DropdownValuesResolver.cs.meta
│   │   │   │   ├── ErrorActionResolver.cs
│   │   │   │   ├── ErrorActionResolver.cs.meta
│   │   │   │   ├── ErrorValueResolver.cs
│   │   │   │   ├── ErrorValueResolver.cs.meta
│   │   │   │   ├── InstanceActionResolver.cs
│   │   │   │   ├── InstanceActionResolver.cs.meta
│   │   │   │   ├── InstanceFieldValueResolver.cs
│   │   │   │   ├── InstanceFieldValueResolver.cs.meta
│   │   │   │   ├── InstanceMethodValueResolver.cs
│   │   │   │   ├── InstanceMethodValueResolver.cs.meta
│   │   │   │   ├── InstancePropertyValueResolver.cs
│   │   │   │   ├── InstancePropertyValueResolver.cs.meta
│   │   │   │   ├── StaticFieldValueResolver.cs
│   │   │   │   ├── StaticFieldValueResolver.cs.meta
│   │   │   │   ├── StaticMethodValueResolver.cs
│   │   │   │   ├── StaticMethodValueResolver.cs.meta
│   │   │   │   ├── StaticPropertyValueResolver.cs
│   │   │   │   ├── StaticPropertyValueResolver.cs.meta
│   │   │   │   ├── ValueResolver.cs
│   │   │   │   └── ValueResolver.cs.meta
│   │   │   ├── Resolvers.meta
│   │   │   ├── Resources/
│   │   │   │   ├── TriInspector_Box_Bg.png.meta
│   │   │   │   ├── TriInspector_Box_Bg_Dark.png.meta
│   │   │   │   ├── TriInspector_Content_Bg.png.meta
│   │   │   │   └── TriInspector_Content_Bg_Dark.png.meta
│   │   │   ├── Resources.meta
│   │   │   ├── TriAttributeDrawer.cs
│   │   │   ├── TriAttributeDrawer.cs.meta
│   │   │   ├── TriCustomDrawer.cs
│   │   │   ├── TriCustomDrawer.cs.meta
│   │   │   ├── TriDrawerOrder.cs
│   │   │   ├── TriDrawerOrder.cs.meta
│   │   │   ├── TriEditorStyles.cs
│   │   │   ├── TriEditorStyles.cs.meta
│   │   │   ├── TriElement.cs
│   │   │   ├── TriElement.cs.meta
│   │   │   ├── TriGroupDrawer.cs
│   │   │   ├── TriGroupDrawer.cs.meta
│   │   │   ├── TriProperty.cs
│   │   │   ├── TriProperty.cs.meta
│   │   │   ├── TriPropertyDefinition.cs
│   │   │   ├── TriPropertyDefinition.cs.meta
│   │   │   ├── TriPropertyDisableProcessor.cs
│   │   │   ├── TriPropertyDisableProcessor.cs.meta
│   │   │   ├── TriPropertyExtension.cs
│   │   │   ├── TriPropertyExtension.cs.meta
│   │   │   ├── TriPropertyHideProcessor.cs
│   │   │   ├── TriPropertyHideProcessor.cs.meta
│   │   │   ├── TriPropertyOverrideContext.cs
│   │   │   ├── TriPropertyOverrideContext.cs.meta
│   │   │   ├── TriPropertyTree.cs
│   │   │   ├── TriPropertyTree.cs.meta
│   │   │   ├── TriPropertyTreeForSerializedObject.cs
│   │   │   ├── TriPropertyTreeForSerializedObject.cs.meta
│   │   │   ├── TriTypeDefinition.cs
│   │   │   ├── TriTypeDefinition.cs.meta
│   │   │   ├── TriTypeProcessor.cs
│   │   │   ├── TriTypeProcessor.cs.meta
│   │   │   ├── TriValidator.cs
│   │   │   ├── TriValidator.cs.meta
│   │   │   ├── TriValue.cs
│   │   │   ├── TriValue.cs.meta
│   │   │   ├── TriValueDrawer.cs
│   │   │   ├── TriValueDrawer.cs.meta
│   │   │   ├── TypeProcessors/
│   │   │   │   ├── TriGroupNextTypeProcessor.cs
│   │   │   │   ├── TriGroupNextTypeProcessor.cs.meta
│   │   │   │   ├── TriRectOffsetTypeProcessor.cs
│   │   │   │   ├── TriRectOffsetTypeProcessor.cs.meta
│   │   │   │   ├── TriRegisterButtonsTypeProcessor.cs
│   │   │   │   ├── TriRegisterButtonsTypeProcessor.cs.meta
│   │   │   │   ├── TriRegisterShownByTriFieldsTypeProcessor.cs
│   │   │   │   ├── TriRegisterShownByTriFieldsTypeProcessor.cs.meta
│   │   │   │   ├── TriRegisterShownByTriPropertiesTypeProcessor.cs
│   │   │   │   ├── TriRegisterShownByTriPropertiesTypeProcessor.cs.meta
│   │   │   │   ├── TriRegisterUnitySerializedFieldsTypeProcessor.cs
│   │   │   │   ├── TriRegisterUnitySerializedFieldsTypeProcessor.cs.meta
│   │   │   │   ├── TriSortPropertiesTypeProcessor.cs
│   │   │   │   └── TriSortPropertiesTypeProcessor.cs.meta
│   │   │   ├── TypeProcessors.meta
│   │   │   ├── Utilities/
│   │   │   │   ├── TriAttributeUtilities.cs
│   │   │   │   ├── TriAttributeUtilities.cs.meta
│   │   │   │   ├── TriDrawersUtilities.cs
│   │   │   │   ├── TriDrawersUtilities.cs.meta
│   │   │   │   ├── TriEditorGUI.cs
│   │   │   │   ├── TriEditorGUI.cs.meta
│   │   │   │   ├── TriEqualityComparer.cs
│   │   │   │   ├── TriEqualityComparer.cs.meta
│   │   │   │   ├── TriGuiHelper.cs
│   │   │   │   ├── TriGuiHelper.cs.meta
│   │   │   │   ├── TriManagedReferenceGui.cs
│   │   │   │   ├── TriManagedReferenceGui.cs.meta
│   │   │   │   ├── TriReflectionUtilities.cs
│   │   │   │   ├── TriReflectionUtilities.cs.meta
│   │   │   │   ├── TriTypeUtilities.cs
│   │   │   │   ├── TriTypeUtilities.cs.meta
│   │   │   │   ├── TriUnityInspectorUtilities.cs
│   │   │   │   ├── TriUnityInspectorUtilities.cs.meta
│   │   │   │   ├── TriUnitySerializationUtilities.cs
│   │   │   │   └── TriUnitySerializationUtilities.cs.meta
│   │   │   ├── Utilities.meta
│   │   │   ├── ValidatorsDrawer.cs
│   │   │   ├── ValidatorsDrawer.cs.meta
│   │   │   ├── VirtueSky.Sunflower.Inspector.Editor.asmdef
│   │   │   └── VirtueSky.Sunflower.Inspector.Editor.asmdef.meta
│   │   ├── Editor.Extras/
│   │   │   ├── Drawers/
│   │   │   │   ├── BuiltinDrawerBase.cs
│   │   │   │   ├── BuiltinDrawerBase.cs.meta
│   │   │   │   ├── BuiltinDrawers.cs
│   │   │   │   ├── BuiltinDrawers.cs.meta
│   │   │   │   ├── ButtonDrawer.cs
│   │   │   │   ├── ButtonDrawer.cs.meta
│   │   │   │   ├── CustomBuiltInDrawer.cs
│   │   │   │   ├── CustomBuiltInDrawer.cs.meta
│   │   │   │   ├── DisplayAsStringDrawer.cs
│   │   │   │   ├── DisplayAsStringDrawer.cs.meta
│   │   │   │   ├── DropdownDrawer.cs
│   │   │   │   ├── DropdownDrawer.cs.meta
│   │   │   │   ├── EnumToggleButtonsDrawer.cs
│   │   │   │   ├── EnumToggleButtonsDrawer.cs.meta
│   │   │   │   ├── GUIColorDrawer.cs
│   │   │   │   ├── GUIColorDrawer.cs.meta
│   │   │   │   ├── IndentDrawer.cs
│   │   │   │   ├── IndentDrawer.cs.meta
│   │   │   │   ├── InlineEditorDrawer.cs
│   │   │   │   ├── InlineEditorDrawer.cs.meta
│   │   │   │   ├── LabelWidthDrawer.cs
│   │   │   │   ├── LabelWidthDrawer.cs.meta
│   │   │   │   ├── ObjectReferenceDrawer.cs
│   │   │   │   ├── ObjectReferenceDrawer.cs.meta
│   │   │   │   ├── OnValueChangedDrawer.cs
│   │   │   │   ├── OnValueChangedDrawer.cs.meta
│   │   │   │   ├── PreviewMeshDrawer.cs
│   │   │   │   ├── PreviewMeshDrawer.cs.meta
│   │   │   │   ├── PropertySpaceDrawer.cs
│   │   │   │   ├── PropertySpaceDrawer.cs.meta
│   │   │   │   ├── SceneDrawer.cs
│   │   │   │   ├── SceneDrawer.cs.meta
│   │   │   │   ├── ShowDrawerChainDrawer.cs
│   │   │   │   ├── ShowDrawerChainDrawer.cs.meta
│   │   │   │   ├── TableListDrawer.cs
│   │   │   │   ├── TableListDrawer.cs.meta
│   │   │   │   ├── TitleDrawer.cs
│   │   │   │   ├── TitleDrawer.cs.meta
│   │   │   │   ├── UnitDrawer.cs
│   │   │   │   └── UnitDrawer.cs.meta
│   │   │   ├── Drawers.meta
│   │   │   ├── GroupDrawers/
│   │   │   │   ├── TriBoxGroupDrawer.cs
│   │   │   │   ├── TriBoxGroupDrawer.cs.meta
│   │   │   │   ├── TriFoldoutGroupDrawer.cs
│   │   │   │   ├── TriFoldoutGroupDrawer.cs.meta
│   │   │   │   ├── TriHorizontalGroupDrawer.cs
│   │   │   │   ├── TriHorizontalGroupDrawer.cs.meta
│   │   │   │   ├── TriTabGroupDrawer.cs
│   │   │   │   ├── TriTabGroupDrawer.cs.meta
│   │   │   │   ├── TriToggleGroupDrawer.cs
│   │   │   │   ├── TriToggleGroupDrawer.cs.meta
│   │   │   │   ├── TriVerticalGroupDrawer.cs
│   │   │   │   └── TriVerticalGroupDrawer.cs.meta
│   │   │   ├── GroupDrawers.meta
│   │   │   ├── Processors/
│   │   │   │   ├── DisableIfProcessor.cs
│   │   │   │   ├── DisableIfProcessor.cs.meta
│   │   │   │   ├── DisableInEditModeProcessor.cs
│   │   │   │   ├── DisableInEditModeProcessor.cs.meta
│   │   │   │   ├── DisableInPlayModeProcessor.cs
│   │   │   │   ├── DisableInPlayModeProcessor.cs.meta
│   │   │   │   ├── HIdeInEditModeProcessor.cs
│   │   │   │   ├── HIdeInEditModeProcessor.cs.meta
│   │   │   │   ├── HideIfProcessor.cs
│   │   │   │   ├── HideIfProcessor.cs.meta
│   │   │   │   ├── HideInPlayModeProcessor.cs
│   │   │   │   └── HideInPlayModeProcessor.cs.meta
│   │   │   ├── Processors.meta
│   │   │   ├── Validators/
│   │   │   │   ├── AssetsOnlyValidator.cs
│   │   │   │   ├── AssetsOnlyValidator.cs.meta
│   │   │   │   ├── DropdownValidator.cs
│   │   │   │   ├── DropdownValidator.cs.meta
│   │   │   │   ├── InfoBoxValidator.cs
│   │   │   │   ├── InfoBoxValidator.cs.meta
│   │   │   │   ├── MissingReferenceValidator.cs
│   │   │   │   ├── MissingReferenceValidator.cs.meta
│   │   │   │   ├── RequiredValidator.cs
│   │   │   │   ├── RequiredValidator.cs.meta
│   │   │   │   ├── SceneObjectsOnlyValidator.cs
│   │   │   │   ├── SceneObjectsOnlyValidator.cs.meta
│   │   │   │   ├── SceneValidator.cs
│   │   │   │   ├── SceneValidator.cs.meta
│   │   │   │   ├── TypeMismatchValidator.cs
│   │   │   │   ├── TypeMismatchValidator.cs.meta
│   │   │   │   ├── ValidateInputValidator.cs
│   │   │   │   └── ValidateInputValidator.cs.meta
│   │   │   ├── Validators.meta
│   │   │   ├── VirtueSky.Sunflower.Inspector.Editor.Extras.asmdef
│   │   │   └── VirtueSky.Sunflower.Inspector.Editor.Extras.asmdef.meta
│   │   ├── Editor.Extras.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── Attributes/
│   │   │   │   ├── Buttons/
│   │   │   │   │   ├── ButtonAttribute.cs
│   │   │   │   │   ├── ButtonAttribute.cs.meta
│   │   │   │   │   ├── EnumToggleButtonsAttribute.cs
│   │   │   │   │   └── EnumToggleButtonsAttribute.cs.meta
│   │   │   │   ├── Buttons.meta
│   │   │   │   ├── Collections/
│   │   │   │   │   ├── ListDrawerSettings.cs
│   │   │   │   │   ├── ListDrawerSettings.cs.meta
│   │   │   │   │   ├── TableListAttribute.cs
│   │   │   │   │   └── TableListAttribute.cs.meta
│   │   │   │   ├── Collections.meta
│   │   │   │   ├── Conditionals/
│   │   │   │   │   ├── DisableIfAttribute.cs
│   │   │   │   │   ├── DisableIfAttribute.cs.meta
│   │   │   │   │   ├── DisableInEditModeAttribute.cs
│   │   │   │   │   ├── DisableInEditModeAttribute.cs.meta
│   │   │   │   │   ├── DisableInPlayModeAttribute.cs
│   │   │   │   │   ├── DisableInPlayModeAttribute.cs.meta
│   │   │   │   │   ├── EnableIfAttribute.cs
│   │   │   │   │   ├── EnableIfAttribute.cs.meta
│   │   │   │   │   ├── EnableInEditModeAttribute.cs
│   │   │   │   │   ├── EnableInEditModeAttribute.cs.meta
│   │   │   │   │   ├── EnableInPlayModeAttribute.cs
│   │   │   │   │   ├── EnableInPlayModeAttribute.cs.meta
│   │   │   │   │   ├── HideIfAttribute.cs
│   │   │   │   │   ├── HideIfAttribute.cs.meta
│   │   │   │   │   ├── HideInEditModeAttribute.cs
│   │   │   │   │   ├── HideInEditModeAttribute.cs.meta
│   │   │   │   │   ├── HideInPlayModeAttribute.cs
│   │   │   │   │   ├── HideInPlayModeAttribute.cs.meta
│   │   │   │   │   ├── ShowIfAttribute.cs
│   │   │   │   │   ├── ShowIfAttribute.cs.meta
│   │   │   │   │   ├── ShowInEditModeAttribute.cs
│   │   │   │   │   ├── ShowInEditModeAttribute.cs.meta
│   │   │   │   │   ├── ShowInPlayModeAttribute.cs
│   │   │   │   │   └── ShowInPlayModeAttribute.cs.meta
│   │   │   │   ├── Conditionals.meta
│   │   │   │   ├── Debug/
│   │   │   │   │   ├── ShowDrawerChainAttribute.cs
│   │   │   │   │   └── ShowDrawerChainAttribute.cs.meta
│   │   │   │   ├── Debug.meta
│   │   │   │   ├── Decorators/
│   │   │   │   │   ├── DisplayAsStringAttribute.cs
│   │   │   │   │   ├── DisplayAsStringAttribute.cs.meta
│   │   │   │   │   ├── DropdownAttribute.cs
│   │   │   │   │   ├── DropdownAttribute.cs.meta
│   │   │   │   │   ├── InlineEditorAttribute.cs
│   │   │   │   │   ├── InlineEditorAttribute.cs.meta
│   │   │   │   │   ├── PreviewMeshAttribute.cs
│   │   │   │   │   ├── PreviewMeshAttribute.cs.meta
│   │   │   │   │   ├── SceneAttribute.cs
│   │   │   │   │   ├── SceneAttribute.cs.meta
│   │   │   │   │   ├── UnitAttribute.cs
│   │   │   │   │   └── UnitAttribute.cs.meta
│   │   │   │   ├── Decorators.meta
│   │   │   │   ├── Groups/
│   │   │   │   │   ├── DeclareBoxGroupAttribute.cs
│   │   │   │   │   ├── DeclareBoxGroupAttribute.cs.meta
│   │   │   │   │   ├── DeclareFoldoutGroupAttribute.cs
│   │   │   │   │   ├── DeclareFoldoutGroupAttribute.cs.meta
│   │   │   │   │   ├── DeclareGroupBaseAttribute.cs
│   │   │   │   │   ├── DeclareGroupBaseAttribute.cs.meta
│   │   │   │   │   ├── DeclareHorizontalGroupAttribute.cs
│   │   │   │   │   ├── DeclareHorizontalGroupAttribute.cs.meta
│   │   │   │   │   ├── DeclareTabGroupAttribute.cs
│   │   │   │   │   ├── DeclareTabGroupAttribute.cs.meta
│   │   │   │   │   ├── DeclareToggleGroupAttribute.cs
│   │   │   │   │   ├── DeclareToggleGroupAttribute.cs.meta
│   │   │   │   │   ├── DeclareVerticalGroupAttribute.cs
│   │   │   │   │   ├── DeclareVerticalGroupAttribute.cs.meta
│   │   │   │   │   ├── GroupAttribute.cs
│   │   │   │   │   ├── GroupAttribute.cs.meta
│   │   │   │   │   ├── GroupNextAttribute.cs
│   │   │   │   │   ├── GroupNextAttribute.cs.meta
│   │   │   │   │   ├── TabAttribute.cs
│   │   │   │   │   └── TabAttribute.cs.meta
│   │   │   │   ├── Groups.meta
│   │   │   │   ├── Misc/
│   │   │   │   │   ├── HideMonoScriptAttribute.cs
│   │   │   │   │   ├── HideMonoScriptAttribute.cs.meta
│   │   │   │   │   ├── HideReferencePickerAttribute.cs
│   │   │   │   │   ├── HideReferencePickerAttribute.cs.meta
│   │   │   │   │   ├── OnValueChangedAttribute.cs
│   │   │   │   │   ├── OnValueChangedAttribute.cs.meta
│   │   │   │   │   ├── PropertyOrderAttribute.cs
│   │   │   │   │   ├── PropertyOrderAttribute.cs.meta
│   │   │   │   │   ├── ReadOnlyAttribute.cs
│   │   │   │   │   ├── ReadOnlyAttribute.cs.meta
│   │   │   │   │   ├── ShowInInspector.cs
│   │   │   │   │   └── ShowInInspector.cs.meta
│   │   │   │   ├── Misc.meta
│   │   │   │   ├── Others/
│   │   │   │   │   ├── DrawWithTriInspectorAttribute.cs
│   │   │   │   │   ├── DrawWithTriInspectorAttribute.cs.meta
│   │   │   │   │   ├── DrawWithUnityAttribute.cs
│   │   │   │   │   └── DrawWithUnityAttribute.cs.meta
│   │   │   │   ├── Others.meta
│   │   │   │   ├── Styling/
│   │   │   │   │   ├── GUIColorAttribute.cs
│   │   │   │   │   ├── GUIColorAttribute.cs.meta
│   │   │   │   │   ├── HideLabelAttribute.cs
│   │   │   │   │   ├── HideLabelAttribute.cs.meta
│   │   │   │   │   ├── IndentAttribute.cs
│   │   │   │   │   ├── IndentAttribute.cs.meta
│   │   │   │   │   ├── InlinePropertyAttribute.cs
│   │   │   │   │   ├── InlinePropertyAttribute.cs.meta
│   │   │   │   │   ├── LabelTextAttribute.cs
│   │   │   │   │   ├── LabelTextAttribute.cs.meta
│   │   │   │   │   ├── LabelWidthAttribute.cs
│   │   │   │   │   ├── LabelWidthAttribute.cs.meta
│   │   │   │   │   ├── PropertySpaceAttribute.cs
│   │   │   │   │   ├── PropertySpaceAttribute.cs.meta
│   │   │   │   │   ├── PropertyTooltipAttribute.cs
│   │   │   │   │   ├── PropertyTooltipAttribute.cs.meta
│   │   │   │   │   ├── TitleAttribute.cs
│   │   │   │   │   └── TitleAttribute.cs.meta
│   │   │   │   ├── Styling.meta
│   │   │   │   ├── Validators/
│   │   │   │   │   ├── AssetsOnlyAttribute.cs
│   │   │   │   │   ├── AssetsOnlyAttribute.cs.meta
│   │   │   │   │   ├── InfoBoxAttribute.cs
│   │   │   │   │   ├── InfoBoxAttribute.cs.meta
│   │   │   │   │   ├── RequiredAttribute.cs
│   │   │   │   │   ├── RequiredAttribute.cs.meta
│   │   │   │   │   ├── SceneObjectsOnlyAttribute.cs
│   │   │   │   │   ├── SceneObjectsOnlyAttribute.cs.meta
│   │   │   │   │   ├── ValidateInputAttribute.cs
│   │   │   │   │   └── ValidateInputAttribute.cs.meta
│   │   │   │   └── Validators.meta
│   │   │   ├── Attributes.meta
│   │   │   ├── ButtonSizes.cs
│   │   │   ├── ButtonSizes.cs.meta
│   │   │   ├── CustomizeAttribute/
│   │   │   │   ├── Attribute/
│   │   │   │   │   ├── EditorIconAttribute.cs
│   │   │   │   │   ├── EditorIconAttribute.cs.meta
│   │   │   │   │   ├── EnumAttribue/
│   │   │   │   │   │   ├── ExtendEnumAttribute.cs
│   │   │   │   │   │   ├── ExtendEnumAttribute.cs.meta
│   │   │   │   │   │   ├── SearchableEnumAttribute.cs
│   │   │   │   │   │   └── SearchableEnumAttribute.cs.meta
│   │   │   │   │   ├── EnumAttribue.meta
│   │   │   │   │   ├── HeaderLineAttribute.cs
│   │   │   │   │   ├── HeaderLineAttribute.cs.meta
│   │   │   │   │   ├── HelpBoxAttribute.cs
│   │   │   │   │   ├── HelpBoxAttribute.cs.meta
│   │   │   │   │   ├── HighlightAttribute.cs
│   │   │   │   │   ├── HighlightAttribute.cs.meta
│   │   │   │   │   ├── LayerAttribute.cs
│   │   │   │   │   ├── LayerAttribute.cs.meta
│   │   │   │   │   ├── TagAttribute.cs
│   │   │   │   │   ├── TagAttribute.cs.meta
│   │   │   │   │   ├── TitleColorAttribute.cs
│   │   │   │   │   └── TitleColorAttribute.cs.meta
│   │   │   │   ├── Attribute.meta
│   │   │   │   ├── GUIDAttribute.cs
│   │   │   │   ├── GUIDAttribute.cs.meta
│   │   │   │   ├── NamedIdAttribute.cs
│   │   │   │   └── NamedIdAttribute.cs.meta
│   │   │   ├── CustomizeAttribute.meta
│   │   │   ├── InlineEditorModes.cs
│   │   │   ├── InlineEditorModes.cs.meta
│   │   │   ├── PreviewMeshRotationMethod.cs
│   │   │   ├── PreviewMeshRotationMethod.cs.meta
│   │   │   ├── TriDropdownList.cs
│   │   │   ├── TriDropdownList.cs.meta
│   │   │   ├── TriValidationResult.cs
│   │   │   ├── TriValidationResult.cs.meta
│   │   │   ├── VirtueSky.Sunflower.Inspector.asmdef
│   │   │   └── VirtueSky.Sunflower.Inspector.asmdef.meta
│   │   ├── Runtime.meta
│   │   ├── Unity.InternalAPIEditorBridge.012/
│   │   │   ├── AdvancedDropdownProxy.cs
│   │   │   ├── AdvancedDropdownProxy.cs.meta
│   │   │   ├── AssemblyInfo.cs
│   │   │   ├── AssemblyInfo.cs.meta
│   │   │   ├── EditorGUIUtilityProxy.cs
│   │   │   ├── EditorGUIUtilityProxy.cs.meta
│   │   │   ├── EditorProxy.cs
│   │   │   ├── EditorProxy.cs.meta
│   │   │   ├── GUIClipProxy.cs
│   │   │   ├── GUIClipProxy.cs.meta
│   │   │   ├── InternalEditorUtilityProxy.cs
│   │   │   ├── InternalEditorUtilityProxy.cs.meta
│   │   │   ├── ReorderableListProxy.cs
│   │   │   ├── ReorderableListProxy.cs.meta
│   │   │   ├── ScriptAttributeUtilityProxy.cs
│   │   │   ├── ScriptAttributeUtilityProxy.cs.meta
│   │   │   ├── Unity.InternalAPIEditorBridge.013.asmdef
│   │   │   └── Unity.InternalAPIEditorBridge.013.asmdef.meta
│   │   ├── Unity.InternalAPIEditorBridge.012.meta
│   │   ├── Version.txt
│   │   └── Version.txt.meta
│   ├── Inspector.meta
│   ├── LevelEditor/
│   │   ├── LevelEditor.cs
│   │   ├── LevelEditor.cs.meta
│   │   ├── LevelSystemEditorSetting.cs
│   │   ├── LevelSystemEditorSetting.cs.meta
│   │   ├── PickObject.cs
│   │   ├── PickObject.cs.meta
│   │   ├── PreviewGenerator.cs
│   │   ├── PreviewGenerator.cs.meta
│   │   ├── Probe.cs
│   │   ├── Probe.cs.meta
│   │   ├── virtuesky.sunflower.leveleditor.asmdef
│   │   └── virtuesky.sunflower.leveleditor.asmdef.meta
│   ├── LevelEditor.meta
│   ├── Linq/
│   │   ├── Aggregate.cs
│   │   ├── Aggregate.cs.meta
│   │   ├── AnyAll.cs
│   │   ├── AnyAll.cs.meta
│   │   ├── Average.cs
│   │   ├── Average.cs.meta
│   │   ├── Chunk.cs
│   │   ├── Chunk.cs.meta
│   │   ├── Contains.cs
│   │   ├── Contains.cs.meta
│   │   ├── Count.cs
│   │   ├── Count.cs.meta
│   │   ├── Distinct.cs
│   │   ├── Distinct.cs.meta
│   │   ├── First.cs
│   │   ├── First.cs.meta
│   │   ├── Flatten.cs
│   │   ├── Flatten.cs.meta
│   │   ├── Last.cs
│   │   ├── Last.cs.meta
│   │   ├── Max.cs
│   │   ├── Max.cs.meta
│   │   ├── Min.cs
│   │   ├── Min.cs.meta
│   │   ├── OrderBy.cs
│   │   ├── OrderBy.cs.meta
│   │   ├── Range.cs
│   │   ├── Range.cs.meta
│   │   ├── Repeat.cs
│   │   ├── Repeat.cs.meta
│   │   ├── Reverse.cs
│   │   ├── Reverse.cs.meta
│   │   ├── Select.cs
│   │   ├── Select.cs.meta
│   │   ├── SelectMany.cs
│   │   ├── SelectMany.cs.meta
│   │   ├── SelectWhere.cs
│   │   ├── SelectWhere.cs.meta
│   │   ├── SequenceEqual.cs
│   │   ├── SequenceEqual.cs.meta
│   │   ├── Single.cs
│   │   ├── Single.cs.meta
│   │   ├── Skip.cs
│   │   ├── Skip.cs.meta
│   │   ├── Sum.cs
│   │   ├── Sum.cs.meta
│   │   ├── Take.cs
│   │   ├── Take.cs.meta
│   │   ├── Utils/
│   │   │   ├── ComparerMagic.cs
│   │   │   ├── ComparerMagic.cs.meta
│   │   │   ├── CustomPartition.cs
│   │   │   ├── CustomPartition.cs.meta
│   │   │   ├── GenericOperators.cs
│   │   │   ├── GenericOperators.cs.meta
│   │   │   ├── SliceHelper.cs
│   │   │   └── SliceHelper.cs.meta
│   │   ├── Utils.meta
│   │   ├── VirtueSky.Sunflower.Linq.asmdef
│   │   ├── VirtueSky.Sunflower.Linq.asmdef.meta
│   │   ├── Where.cs
│   │   ├── Where.cs.meta
│   │   ├── WhereAggregate.cs
│   │   ├── WhereAggregate.cs.meta
│   │   ├── WhereSelect.cs
│   │   ├── WhereSelect.cs.meta
│   │   ├── WhereSum.cs
│   │   ├── WhereSum.cs.meta
│   │   ├── Zip.cs
│   │   └── Zip.cs.meta
│   ├── Linq.meta
│   ├── Localization/
│   │   ├── Editor/
│   │   │   ├── AssetTreeViewItem.cs
│   │   │   ├── AssetTreeViewItem.cs.meta
│   │   │   ├── CsvSerialization.cs
│   │   │   ├── CsvSerialization.cs.meta
│   │   │   ├── EditorMenu.cs
│   │   │   ├── EditorMenu.cs.meta
│   │   │   ├── LanguagePropertyDrawer.cs
│   │   │   ├── LanguagePropertyDrawer.cs.meta
│   │   │   ├── LocaleEditorUtil.cs
│   │   │   ├── LocaleEditorUtil.cs.meta
│   │   │   ├── LocaleSettingsEditor.cs
│   │   │   ├── LocaleSettingsEditor.cs.meta
│   │   │   ├── LocaleTreeView.cs
│   │   │   ├── LocaleTreeView.cs.meta
│   │   │   ├── LocaleTreeViewItem.cs
│   │   │   ├── LocaleTreeViewItem.cs.meta
│   │   │   ├── PostBuildProcessor.cs
│   │   │   ├── PostBuildProcessor.cs.meta
│   │   │   ├── ScriptableLocaleEditor.cs
│   │   │   ├── ScriptableLocaleEditor.cs.meta
│   │   │   ├── VirtueSky.Sunflower.Localization.Editor.asmdef
│   │   │   └── VirtueSky.Sunflower.Localization.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── Implement/
│   │   │   │   ├── Behaviour/
│   │   │   │   │   ├── LocaleAudioClipComponent.cs
│   │   │   │   │   ├── LocaleAudioClipComponent.cs.meta
│   │   │   │   │   ├── LocaleComponent.cs
│   │   │   │   │   ├── LocaleComponent.cs.meta
│   │   │   │   │   ├── LocaleComponentGeneric.cs
│   │   │   │   │   ├── LocaleComponentGeneric.cs.meta
│   │   │   │   │   ├── LocaleComponentGenericBase.cs
│   │   │   │   │   ├── LocaleComponentGenericBase.cs.meta
│   │   │   │   │   ├── LocaleFontComponent.cs
│   │   │   │   │   ├── LocaleFontComponent.cs.meta
│   │   │   │   │   ├── LocaleMaterialComponent.cs
│   │   │   │   │   ├── LocaleMaterialComponent.cs.meta
│   │   │   │   │   ├── LocalePrefabComponent.cs
│   │   │   │   │   ├── LocalePrefabComponent.cs.meta
│   │   │   │   │   ├── LocaleRendererComponent.cs
│   │   │   │   │   ├── LocaleRendererComponent.cs.meta
│   │   │   │   │   ├── LocaleSharedMaterialComponent.cs
│   │   │   │   │   ├── LocaleSharedMaterialComponent.cs.meta
│   │   │   │   │   ├── LocaleSpriteComponent.cs
│   │   │   │   │   ├── LocaleSpriteComponent.cs.meta
│   │   │   │   │   ├── LocaleTMPFontComponent.cs
│   │   │   │   │   ├── LocaleTMPFontComponent.cs.meta
│   │   │   │   │   ├── LocaleTextAssetComponent.cs
│   │   │   │   │   ├── LocaleTextAssetComponent.cs.meta
│   │   │   │   │   ├── LocaleTextComponent.cs
│   │   │   │   │   ├── LocaleTextComponent.cs.meta
│   │   │   │   │   ├── LocaleTextCompositeComponent.cs
│   │   │   │   │   ├── LocaleTextCompositeComponent.cs.meta
│   │   │   │   │   ├── LocaleTextureComponent.cs
│   │   │   │   │   ├── LocaleTextureComponent.cs.meta
│   │   │   │   │   ├── LocaleTextureMaterialComponent.cs
│   │   │   │   │   ├── LocaleTextureMaterialComponent.cs.meta
│   │   │   │   │   ├── LocaleVideoClipComponent.cs
│   │   │   │   │   └── LocaleVideoClipComponent.cs.meta
│   │   │   │   ├── Behaviour.meta
│   │   │   │   ├── Event/
│   │   │   │   │   ├── ScriptableEventLocaleText.cs
│   │   │   │   │   └── ScriptableEventLocaleText.cs.meta
│   │   │   │   ├── Event.meta
│   │   │   │   ├── Variable/
│   │   │   │   │   ├── LocaleAudioClip.cs
│   │   │   │   │   ├── LocaleAudioClip.cs.meta
│   │   │   │   │   ├── LocaleFont.cs
│   │   │   │   │   ├── LocaleFont.cs.meta
│   │   │   │   │   ├── LocaleMaterial.cs
│   │   │   │   │   ├── LocaleMaterial.cs.meta
│   │   │   │   │   ├── LocalePrefab.cs
│   │   │   │   │   ├── LocalePrefab.cs.meta
│   │   │   │   │   ├── LocaleSprite.cs
│   │   │   │   │   ├── LocaleSprite.cs.meta
│   │   │   │   │   ├── LocaleTMPFont.cs
│   │   │   │   │   ├── LocaleTMPFont.cs.meta
│   │   │   │   │   ├── LocaleText.cs
│   │   │   │   │   ├── LocaleText.cs.meta
│   │   │   │   │   ├── LocaleTextAsset.cs
│   │   │   │   │   ├── LocaleTextAsset.cs.meta
│   │   │   │   │   ├── LocaleTexture.cs
│   │   │   │   │   ├── LocaleTexture.cs.meta
│   │   │   │   │   ├── LocaleVariable.cs
│   │   │   │   │   ├── LocaleVariable.cs.meta
│   │   │   │   │   ├── LocaleVideoClip.cs
│   │   │   │   │   ├── LocaleVideoClip.cs.meta
│   │   │   │   │   ├── ScriptableLocaleBase.cs
│   │   │   │   │   └── ScriptableLocaleBase.cs.meta
│   │   │   │   └── Variable.meta
│   │   │   ├── Implement.meta
│   │   │   ├── Language.cs
│   │   │   ├── Language.cs.meta
│   │   │   ├── Locale.cs
│   │   │   ├── Locale.cs.meta
│   │   │   ├── LocaleChangedEventArgs.cs
│   │   │   ├── LocaleChangedEventArgs.cs.meta
│   │   │   ├── LocaleItem.cs
│   │   │   ├── LocaleItem.cs.meta
│   │   │   ├── LocaleItemBase.cs
│   │   │   ├── LocaleItemBase.cs.meta
│   │   │   ├── LocaleSettings.cs
│   │   │   ├── LocaleSettings.cs.meta
│   │   │   ├── Translate/
│   │   │   │   ├── GoogleTranslateRequest.cs
│   │   │   │   ├── GoogleTranslateRequest.cs.meta
│   │   │   │   ├── GoogleTranslateResponse.cs
│   │   │   │   ├── GoogleTranslateResponse.cs.meta
│   │   │   │   ├── GoogleTranslator.cs
│   │   │   │   └── GoogleTranslator.cs.meta
│   │   │   ├── Translate.meta
│   │   │   ├── VirtueSky.Sunflower.Localization.asmdef
│   │   │   └── VirtueSky.Sunflower.Localization.asmdef.meta
│   │   └── Runtime.meta
│   ├── Localization.meta
│   ├── Misc/
│   │   ├── Common.Animancer.cs
│   │   ├── Common.Animancer.cs.meta
│   │   ├── Common.Collections.cs
│   │   ├── Common.Collections.cs.meta
│   │   ├── Common.Colors.cs
│   │   ├── Common.Colors.cs.meta
│   │   ├── Common.Math.cs
│   │   ├── Common.Math.cs.meta
│   │   ├── Common.Physics.cs
│   │   ├── Common.Physics.cs.meta
│   │   ├── Common.SkeletonAnimation.cs
│   │   ├── Common.SkeletonAnimation.cs.meta
│   │   ├── Common.SkeletonGraphic.cs
│   │   ├── Common.SkeletonGraphic.cs.meta
│   │   ├── Common.Tag.cs
│   │   ├── Common.Tag.cs.meta
│   │   ├── Common.Text.cs
│   │   ├── Common.Text.cs.meta
│   │   ├── Common.Transform.cs
│   │   ├── Common.Transform.cs.meta
│   │   ├── Common.cs
│   │   ├── Common.cs.meta
│   │   ├── virtuesky.sunflower.misc.asmdef
│   │   └── virtuesky.sunflower.misc.asmdef.meta
│   ├── Misc.meta
│   ├── Notifications/
│   │   ├── Editor/
│   │   │   ├── NotificationWindowEditor.cs
│   │   │   ├── NotificationWindowEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.Notifications.Editor.asmdef
│   │   │   └── Virtuesky.Sunflower.Notifications.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── NotificationAndroid.cs
│   │   │   ├── NotificationAndroid.cs.meta
│   │   │   ├── NotificationConsole.cs
│   │   │   ├── NotificationConsole.cs.meta
│   │   │   ├── NotificationIOS.cs
│   │   │   ├── NotificationIOS.cs.meta
│   │   │   ├── NotificationPrepare.cs
│   │   │   ├── NotificationPrepare.cs.meta
│   │   │   ├── NotificationVariable.cs
│   │   │   ├── NotificationVariable.cs.meta
│   │   │   ├── virtuesky.sunflower.notifications.asmdef
│   │   │   └── virtuesky.sunflower.notifications.asmdef.meta
│   │   └── Runtime.meta
│   ├── Notifications.meta
│   ├── ObjectPooling/
│   │   ├── Pool.cs
│   │   ├── Pool.cs.meta
│   │   ├── PoolData.cs
│   │   ├── PoolData.cs.meta
│   │   ├── PoolHandle.cs
│   │   ├── PoolHandle.cs.meta
│   │   ├── PooledObjectId.cs
│   │   ├── PooledObjectId.cs.meta
│   │   ├── virtuesky.sunflower.objectpooling.asmdef
│   │   └── virtuesky.sunflower.objectpooling.asmdef.meta
│   ├── ObjectPooling.meta
│   ├── Rating/
│   │   ├── Editor/
│   │   │   ├── RatingWindowEditor.cs
│   │   │   ├── RatingWindowEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.Rating.Editor.asmdef
│   │   │   └── Virtuesky.Sunflower.Rating.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── InAppReview.cs
│   │   │   ├── InAppReview.cs.meta
│   │   │   ├── virtuesky.sunflower.rating.asmdef
│   │   │   └── virtuesky.sunflower.rating.asmdef.meta
│   │   └── Runtime.meta
│   ├── Rating.meta
│   ├── RemoteConfig/
│   │   ├── FirebaseRemoteConfigData.cs
│   │   ├── FirebaseRemoteConfigData.cs.meta
│   │   ├── FirebaseRemoteConfigManager.cs
│   │   ├── FirebaseRemoteConfigManager.cs.meta
│   │   ├── Virtuesky.Sunflower.RemoteConfigs.asmdef
│   │   └── Virtuesky.Sunflower.RemoteConfigs.asmdef.meta
│   ├── RemoteConfig.meta
│   ├── SimpleJSON/
│   │   ├── SimpleJSON.cs
│   │   ├── SimpleJSON.cs.meta
│   │   ├── SimpleJSONBinary.cs
│   │   ├── SimpleJSONBinary.cs.meta
│   │   ├── SimpleJSONDotNetTypes.cs
│   │   ├── SimpleJSONDotNetTypes.cs.meta
│   │   ├── SimpleJSONUnity.cs
│   │   ├── SimpleJSONUnity.cs.meta
│   │   ├── Virtuesky.Sunflower.SimpleJson.asmdef
│   │   └── Virtuesky.Sunflower.SimpleJson.asmdef.meta
│   ├── SimpleJSON.meta
│   ├── TouchInput/
│   │   ├── Editor/
│   │   │   ├── TouchInputManagerEditor.cs
│   │   │   ├── TouchInputManagerEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.TouchInput.Editor.asmdef
│   │   │   └── Virtuesky.Sunflower.TouchInput.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── InputTouchEvent/
│   │   │   │   ├── InputEventTouchBegin.cs
│   │   │   │   ├── InputEventTouchBegin.cs.meta
│   │   │   │   ├── InputEventTouchCancel.cs
│   │   │   │   ├── InputEventTouchCancel.cs.meta
│   │   │   │   ├── InputEventTouchEnd.cs
│   │   │   │   ├── InputEventTouchEnd.cs.meta
│   │   │   │   ├── InputEventTouchMove.cs
│   │   │   │   ├── InputEventTouchMove.cs.meta
│   │   │   │   ├── InputEventTouchStationary.cs
│   │   │   │   ├── InputEventTouchStationary.cs.meta
│   │   │   │   ├── InputPreventTouchVariable.cs
│   │   │   │   └── InputPreventTouchVariable.cs.meta
│   │   │   ├── InputTouchEvent.meta
│   │   │   ├── TouchInputManager.cs
│   │   │   ├── TouchInputManager.cs.meta
│   │   │   ├── Virtuesky.Sunflower.TouchInput.asmdef
│   │   │   └── Virtuesky.Sunflower.TouchInput.asmdef.meta
│   │   └── Runtime.meta
│   ├── TouchInput.meta
│   ├── Tracking/
│   │   ├── Editor/
│   │   │   ├── TrackingWindowEditor.cs
│   │   │   ├── TrackingWindowEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.TrackingEditor.asmdef
│   │   │   └── Virtuesky.Sunflower.TrackingEditor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── AdjustTracking/
│   │   │   │   ├── AdjustConfig.cs
│   │   │   │   ├── AdjustConfig.cs.meta
│   │   │   │   ├── AdjustTrackingRevenue.cs
│   │   │   │   ├── AdjustTrackingRevenue.cs.meta
│   │   │   │   ├── TrackingAdjust.cs
│   │   │   │   └── TrackingAdjust.cs.meta
│   │   │   ├── AdjustTracking.meta
│   │   │   ├── AppTracking.cs
│   │   │   ├── AppTracking.cs.meta
│   │   │   ├── AppsFlyerTracking/
│   │   │   │   ├── AppsFlyerConfig.cs
│   │   │   │   ├── AppsFlyerConfig.cs.meta
│   │   │   │   ├── AppsFlyerObject.cs
│   │   │   │   ├── AppsFlyerObject.cs.meta
│   │   │   │   ├── AppsFlyerTrackingRevenue.cs
│   │   │   │   ├── AppsFlyerTrackingRevenue.cs.meta
│   │   │   │   ├── TrackingAppsFlyer.cs
│   │   │   │   ├── TrackingAppsFlyer.cs.meta
│   │   │   │   ├── TrackingAppsFlyerFiveParam.cs
│   │   │   │   ├── TrackingAppsFlyerFiveParam.cs.meta
│   │   │   │   ├── TrackingAppsFlyerFourParam.cs
│   │   │   │   ├── TrackingAppsFlyerFourParam.cs.meta
│   │   │   │   ├── TrackingAppsFlyerHasParam.cs
│   │   │   │   ├── TrackingAppsFlyerHasParam.cs.meta
│   │   │   │   ├── TrackingAppsFlyerNoParam.cs
│   │   │   │   ├── TrackingAppsFlyerNoParam.cs.meta
│   │   │   │   ├── TrackingAppsFlyerOneParam.cs
│   │   │   │   ├── TrackingAppsFlyerOneParam.cs.meta
│   │   │   │   ├── TrackingAppsFlyerThreeParam.cs
│   │   │   │   ├── TrackingAppsFlyerThreeParam.cs.meta
│   │   │   │   ├── TrackingAppsFlyerTwoParam.cs
│   │   │   │   └── TrackingAppsFlyerTwoParam.cs.meta
│   │   │   ├── AppsFlyerTracking.meta
│   │   │   ├── FirebaseAnalyticTracking/
│   │   │   │   ├── FirebaseAnalyticTrackingRevenue.cs
│   │   │   │   ├── FirebaseAnalyticTrackingRevenue.cs.meta
│   │   │   │   ├── TrackingFirebase.cs
│   │   │   │   ├── TrackingFirebase.cs.meta
│   │   │   │   ├── TrackingFirebaseFiveParam.cs
│   │   │   │   ├── TrackingFirebaseFiveParam.cs.meta
│   │   │   │   ├── TrackingFirebaseFourParam.cs
│   │   │   │   ├── TrackingFirebaseFourParam.cs.meta
│   │   │   │   ├── TrackingFirebaseNoParam.cs
│   │   │   │   ├── TrackingFirebaseNoParam.cs.meta
│   │   │   │   ├── TrackingFirebaseOneParam.cs
│   │   │   │   ├── TrackingFirebaseOneParam.cs.meta
│   │   │   │   ├── TrackingFirebaseSixParam.cs
│   │   │   │   ├── TrackingFirebaseSixParam.cs.meta
│   │   │   │   ├── TrackingFirebaseThreeParam.cs
│   │   │   │   ├── TrackingFirebaseThreeParam.cs.meta
│   │   │   │   ├── TrackingFirebaseTwoParam.cs
│   │   │   │   └── TrackingFirebaseTwoParam.cs.meta
│   │   │   ├── FirebaseAnalyticTracking.meta
│   │   │   ├── Virtuesky.Sunflower.Tracking.asmdef
│   │   │   └── Virtuesky.Sunflower.Tracking.asmdef.meta
│   │   └── Runtime.meta
│   ├── Tracking.meta
│   ├── Utils/
│   │   ├── Editor/
│   │   │   ├── ConstantDefineSymbols.cs
│   │   │   ├── ConstantDefineSymbols.cs.meta
│   │   │   ├── CreateAsset.cs
│   │   │   ├── CreateAsset.cs.meta
│   │   │   ├── EditorCoroutine.cs
│   │   │   ├── EditorCoroutine.cs.meta
│   │   │   ├── EditorGUIUtils.cs
│   │   │   ├── EditorGUIUtils.cs.meta
│   │   │   ├── EditorGeneric.cs
│   │   │   ├── EditorGeneric.cs.meta
│   │   │   ├── EditorResources.cs
│   │   │   ├── EditorResources.cs.meta
│   │   │   ├── EditorScriptDefineSymbols.cs
│   │   │   ├── EditorScriptDefineSymbols.cs.meta
│   │   │   ├── ExSearchWindow.cs
│   │   │   ├── ExSearchWindow.cs.meta
│   │   │   ├── FileExtension.cs
│   │   │   ├── FileExtension.cs.meta
│   │   │   ├── GameViewUtils.cs
│   │   │   ├── GameViewUtils.cs.meta
│   │   │   ├── Icons/
│   │   │   │   ├── box_bg_dark.psd
│   │   │   │   ├── box_bg_dark.psd.meta
│   │   │   │   ├── box_content_dark.psd
│   │   │   │   ├── box_content_dark.psd.meta
│   │   │   │   ├── even_bg.png.meta
│   │   │   │   ├── even_bg_dark.png.meta
│   │   │   │   ├── even_bg_select.png.meta
│   │   │   │   ├── icon_about.png.meta
│   │   │   │   ├── icon_adjust.png.meta
│   │   │   │   ├── icon_ads.png.meta
│   │   │   │   ├── icon_appsflyer.png.meta
│   │   │   │   ├── icon_audio.png.meta
│   │   │   │   ├── icon_authentication.png.meta
│   │   │   │   ├── icon_button.png.meta
│   │   │   │   ├── icon_controller.png.meta
│   │   │   │   ├── icon_csharp.png.meta
│   │   │   │   ├── icon_extension.png.meta
│   │   │   │   ├── icon_firebase.png.meta
│   │   │   │   ├── icon_folder.png.meta
│   │   │   │   ├── icon_game_service.png.meta
│   │   │   │   ├── icon_gamemanager.png.meta
│   │   │   │   ├── icon_generator.png.meta
│   │   │   │   ├── icon_hierarchy.png.meta
│   │   │   │   ├── icon_iap.png.meta
│   │   │   │   ├── icon_in_app_review.png.meta
│   │   │   │   ├── icon_leaderboard.png.meta
│   │   │   │   ├── icon_locale.png.meta
│   │   │   │   ├── icon_manager.png.meta
│   │   │   │   ├── icon_package.png.meta
│   │   │   │   ├── icon_scriptable.png.meta
│   │   │   │   ├── icon_service.png.meta
│   │   │   │   ├── icon_sound.png.meta
│   │   │   │   ├── icon_sound_mixer.png.meta
│   │   │   │   ├── icon_unity.png.meta
│   │   │   │   ├── script_noti.png.meta
│   │   │   │   ├── scriptable_adjust.png.meta
│   │   │   │   ├── scriptable_adjust2.png.meta
│   │   │   │   ├── scriptable_af.png.meta
│   │   │   │   ├── scriptable_audio.png.meta
│   │   │   │   ├── scriptable_audioclip.png.meta
│   │   │   │   ├── scriptable_event.png.meta
│   │   │   │   ├── scriptable_event_listener.png.meta
│   │   │   │   ├── scriptable_factory.png.meta
│   │   │   │   ├── scriptable_firebase.png.meta
│   │   │   │   ├── scriptable_iap.png.meta
│   │   │   │   ├── scriptable_notification.png.meta
│   │   │   │   ├── scriptable_particle_system.png.meta
│   │   │   │   ├── scriptable_pool.png.meta
│   │   │   │   ├── scriptable_variable.png.meta
│   │   │   │   ├── scriptable_yellow_audioclip.png.meta
│   │   │   │   ├── scriptable_yellow_font.png.meta
│   │   │   │   ├── scriptable_yellow_fontasset.png.meta
│   │   │   │   ├── scriptable_yellow_gameobject.png.meta
│   │   │   │   ├── scriptable_yellow_material.png.meta
│   │   │   │   ├── scriptable_yellow_sprite.png.meta
│   │   │   │   ├── scriptable_yellow_text.png.meta
│   │   │   │   ├── scriptable_yellow_textasset.png.meta
│   │   │   │   ├── scriptable_yellow_texture.png.meta
│   │   │   │   ├── scriptable_yellow_videoclip.png.meta
│   │   │   │   └── virtuesky_removebg.png.meta
│   │   │   ├── Icons.meta
│   │   │   ├── RegistryManager.cs
│   │   │   ├── RegistryManager.cs.meta
│   │   │   ├── TemplateAssembly/
│   │   │   │   ├── PurchasingGeneratedAsmdef.txt
│   │   │   │   ├── PurchasingGeneratedAsmdef.txt.meta
│   │   │   │   ├── PurchasingGeneratedAsmdefMeta.txt
│   │   │   │   └── PurchasingGeneratedAsmdefMeta.txt.meta
│   │   │   ├── TemplateAssembly.meta
│   │   │   ├── TextureUtils.cs
│   │   │   ├── TextureUtils.cs.meta
│   │   │   ├── Uniform.cs
│   │   │   ├── Uniform.cs.meta
│   │   │   ├── UnityPackage/
│   │   │   │   ├── Note_Package.txt
│   │   │   │   ├── Note_Package.txt.meta
│   │   │   │   ├── google-play-game.unitypackage
│   │   │   │   ├── google-play-game.unitypackage.meta
│   │   │   │   ├── max-sdk.unitypackage
│   │   │   │   └── max-sdk.unitypackage.meta
│   │   │   ├── UnityPackage.meta
│   │   │   ├── Virtuesky.Sunflower.UtilsEdtitor.asmdef
│   │   │   └── Virtuesky.Sunflower.UtilsEdtitor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── ColorExtensions.cs
│   │   │   ├── ColorExtensions.cs.meta
│   │   │   ├── ExtensionUtils.cs
│   │   │   ├── ExtensionUtils.cs.meta
│   │   │   ├── InputUtils.cs
│   │   │   ├── InputUtils.cs.meta
│   │   │   ├── InterfaceUtils.cs
│   │   │   ├── InterfaceUtils.cs.meta
│   │   │   ├── ReflectionUtils.cs
│   │   │   ├── ReflectionUtils.cs.meta
│   │   │   ├── ScriptableSettings.cs
│   │   │   ├── ScriptableSettings.cs.meta
│   │   │   ├── SimpleMath.cs
│   │   │   ├── SimpleMath.cs.meta
│   │   │   ├── StoreUtils.cs
│   │   │   ├── StoreUtils.cs.meta
│   │   │   ├── TimeUtils.cs
│   │   │   ├── TimeUtils.cs.meta
│   │   │   ├── TweenStatic.cs
│   │   │   ├── TweenStatic.cs.meta
│   │   │   ├── Virtuesky.Sunflower.Utils.asmdef
│   │   │   └── Virtuesky.Sunflower.Utils.asmdef.meta
│   │   └── Runtime.meta
│   ├── Utils.meta
│   ├── Variables/
│   │   ├── Editor/
│   │   │   ├── VariableGenerateGuid.cs
│   │   │   ├── VariableGenerateGuid.cs.meta
│   │   │   ├── VariableWindowEditor.cs
│   │   │   ├── VariableWindowEditor.cs.meta
│   │   │   ├── virtuesky.sunflower.variable.Editor.asmdef
│   │   │   └── virtuesky.sunflower.variable.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── Base_Variable/
│   │   │   │   ├── BaseReference.cs
│   │   │   │   ├── BaseReference.cs.meta
│   │   │   │   ├── BaseVariable.cs
│   │   │   │   ├── BaseVariable.cs.meta
│   │   │   │   ├── BaseVariableListener.cs
│   │   │   │   ├── BaseVariableListener.cs.meta
│   │   │   │   ├── IGuidVariable.cs
│   │   │   │   └── IGuidVariable.cs.meta
│   │   │   ├── Base_Variable.meta
│   │   │   ├── Boolean_Variable/
│   │   │   │   ├── BooleanReference.cs
│   │   │   │   ├── BooleanReference.cs.meta
│   │   │   │   ├── BooleanVariable.cs
│   │   │   │   ├── BooleanVariable.cs.meta
│   │   │   │   ├── BooleanVariableListener.cs
│   │   │   │   └── BooleanVariableListener.cs.meta
│   │   │   ├── Boolean_Variable.meta
│   │   │   ├── Float_Variable/
│   │   │   │   ├── FloatReference.cs
│   │   │   │   ├── FloatReference.cs.meta
│   │   │   │   ├── FloatVariable.cs
│   │   │   │   ├── FloatVariable.cs.meta
│   │   │   │   ├── FloatVariableListener.cs
│   │   │   │   └── FloatVariableListener.cs.meta
│   │   │   ├── Float_Variable.meta
│   │   │   ├── Integer_Variable/
│   │   │   │   ├── IntegerReference.cs
│   │   │   │   ├── IntegerReference.cs.meta
│   │   │   │   ├── IntegerVariable.cs
│   │   │   │   ├── IntegerVariable.cs.meta
│   │   │   │   ├── IntegerVariableListener.cs
│   │   │   │   └── IntegerVariableListener.cs.meta
│   │   │   ├── Integer_Variable.meta
│   │   │   ├── Interface_Variable/
│   │   │   │   ├── IReference.cs
│   │   │   │   ├── IReference.cs.meta
│   │   │   │   ├── IVariable.cs
│   │   │   │   └── IVariable.cs.meta
│   │   │   ├── Interface_Variable.meta
│   │   │   ├── Object_Variable/
│   │   │   │   ├── ObjectReference.cs
│   │   │   │   ├── ObjectReference.cs.meta
│   │   │   │   ├── ObjectVariable.cs
│   │   │   │   ├── ObjectVariable.cs.meta
│   │   │   │   ├── ObjectVariableListener.cs
│   │   │   │   └── ObjectVariableListener.cs.meta
│   │   │   ├── Object_Variable.meta
│   │   │   ├── Rect_Variable/
│   │   │   │   ├── RectVariable.cs
│   │   │   │   └── RectVariable.cs.meta
│   │   │   ├── Rect_Variable.meta
│   │   │   ├── ShortDouble_Variable/
│   │   │   │   ├── ShortDoubleReference.cs
│   │   │   │   ├── ShortDoubleReference.cs.meta
│   │   │   │   ├── ShortDoubleVariable.cs
│   │   │   │   ├── ShortDoubleVariable.cs.meta
│   │   │   │   ├── ShortDoubleVariableListener.cs
│   │   │   │   └── ShortDoubleVariableListener.cs.meta
│   │   │   ├── ShortDouble_Variable.meta
│   │   │   ├── String_Variable/
│   │   │   │   ├── StringVariable.cs
│   │   │   │   ├── StringVariable.cs.meta
│   │   │   │   ├── StringVariableListener.cs
│   │   │   │   └── StringVariableListener.cs.meta
│   │   │   ├── String_Variable.meta
│   │   │   ├── Trasform_Variable/
│   │   │   │   ├── TransformReference.cs
│   │   │   │   ├── TransformReference.cs.meta
│   │   │   │   ├── TransformVariable.cs
│   │   │   │   └── TransformVariable.cs.meta
│   │   │   ├── Trasform_Variable.meta
│   │   │   ├── Vector2_Variable/
│   │   │   │   ├── Vector2Reference.cs
│   │   │   │   ├── Vector2Reference.cs.meta
│   │   │   │   ├── Vector2Variable.cs
│   │   │   │   ├── Vector2Variable.cs.meta
│   │   │   │   ├── Vector2VariableListener.cs
│   │   │   │   └── Vector2VariableListener.cs.meta
│   │   │   ├── Vector2_Variable.meta
│   │   │   ├── Vector3_Variable/
│   │   │   │   ├── Vector3Reference.cs
│   │   │   │   ├── Vector3Reference.cs.meta
│   │   │   │   ├── Vector3Variable.cs
│   │   │   │   ├── Vector3Variable.cs.meta
│   │   │   │   ├── Vector3VariableListener.cs
│   │   │   │   └── Vector3VariableListener.cs.meta
│   │   │   ├── Vector3_Variable.meta
│   │   │   ├── virtuesky.sunflower.variable.asmdef
│   │   │   └── virtuesky.sunflower.variable.asmdef.meta
│   │   └── Runtime.meta
│   ├── Variables.meta
│   ├── Vibration/
│   │   ├── Plugins/
│   │   │   ├── iOS/
│   │   │   │   ├── Vibration/
│   │   │   │   │   ├── HapticFeedback.mm
│   │   │   │   │   ├── HapticFeedback.mm.meta
│   │   │   │   │   ├── Vibration.h
│   │   │   │   │   ├── Vibration.h.meta
│   │   │   │   │   ├── Vibration.mm
│   │   │   │   │   └── Vibration.mm.meta
│   │   │   │   └── Vibration.meta
│   │   │   └── iOS.meta
│   │   ├── Plugins.meta
│   │   ├── README.md
│   │   ├── README.md.meta
│   │   ├── Vibration.cs
│   │   ├── Vibration.cs.meta
│   │   ├── virtuesky.sunflower.vibration.asmdef
│   │   └── virtuesky.sunflower.vibration.asmdef.meta
│   └── Vibration.meta
├── VirtueSky.meta
├── package.json
└── package.json.meta

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/workflows/notify-discord-on-release.yml
================================================
name: Notify Discord on Release or Tag

on:
  release:
    types: [published]
  push:
    tags:
      - '*'

jobs:
  notify-discord:
    runs-on: ubuntu-latest
    steps:
      - name: Send release/tag info to Discord
        env:
          DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
          EVENT_NAME: ${{ github.event_name }}
          RELEASE_TITLE: ${{ github.event.release.name }}
          RELEASE_TAG_NAME: ${{ github.event.release.tag_name }}
          RELEASE_NOTE: ${{ github.event.release.body }}
          RELEASE_AUTHOR: ${{ github.event.release.author.login }}
          PUSH_TAG_NAME: ${{ github.ref_name }}
          REPO: ${{ github.repository }}
          ACTOR: ${{ github.actor }}
        run: |
          if [ "$EVENT_NAME" = "release" ]; then
            TITLE="${RELEASE_TITLE:-No release title}"
            TAG="${RELEASE_TAG_NAME:-Unknown tag}"
            NOTE="${RELEASE_NOTE}"
            AUTHOR="${RELEASE_AUTHOR:-$ACTOR}"
            EVENT_LABEL="GitHub Release"
          else
            TITLE="Tag created"
            TAG="${PUSH_TAG_NAME:-Unknown tag}"
            NOTE="A new tag was pushed without creating a GitHub Release."
            AUTHOR="$ACTOR"
            EVENT_LABEL="Git Tag"
          fi

          if [ -z "$NOTE" ]; then
            NOTE="(empty)"
          fi

          if [ ${#NOTE} -gt 1000 ]; then
            NOTE="${NOTE:0:1000}..."
          fi

          jq -n \
            --arg event "$EVENT_LABEL" \
            --arg title "$TITLE" \
            --arg tag "$TAG" \
            --arg note "$NOTE" \
            --arg repo "$REPO" \
            --arg actor "$ACTOR" \
            --arg author "$AUTHOR" \
            '{
              embeds: [
                {
                  title: $event,
                  fields: [
                    { "name": "Repository", "value": $repo, "inline": false },
                    { "name": "Triggered By", "value": $actor, "inline": false },
                    { "name": "Author", "value": $author, "inline": false },
                    { "name": "Title", "value": $title, "inline": false },
                    { "name": "Tag Name", "value": $tag, "inline": false },
                    { "name": "Note", "value": $note, "inline": false }
                  ]
                }
              ]
            }' > payload.json

          cat payload.json

          curl --fail-with-body \
               -H "Content-Type: application/json" \
               -X POST \
               -d @payload.json \
               "$DISCORD_WEBHOOK_URL"


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2024 VirtueSky

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: LICENSE.meta
================================================
fileFormatVersion: 2
guid: 602f2b07fec879a41853f704b2b884a5
DefaultImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: README.md
================================================
# Core scriptable object architecture for building Unity games (Android & iOS)

<p align="left">
  <a>
    <img alt="Made With Unity" src="https://img.shields.io/badge/made%20with-Unity-57b9d3.svg?logo=Unity">
  </a>
  <a>
    <img alt="License" src="https://img.shields.io/github/license/VirtueSky/sunflower?logo=github">
  </a>
  <a>
    <img alt="Last Commit" src="https://img.shields.io/github/last-commit/VirtueSky/sunflower?logo=Mapbox&color=orange">
  </a>
  <a>
    <img alt="Repo Size" src="https://img.shields.io/github/repo-size/VirtueSky/sunflower?logo=VirtualBox">
  </a>
  <a>
    <img alt="Last Release" src="https://img.shields.io/github/v/release/VirtueSky/sunflower?include_prereleases&logo=Dropbox&color=yellow">
  </a>
</p>

### Unity 2022.3 LTS
## How To Install
### 1: Download the repository and drop it into folder `Assets`
### 2: Add the line below to `Packages/manifest.json`

- for version `3.5.4`
```json
{
  "scopedRegistries": [
    {
      "name": "npm",
      "url": "https://registry.npmjs.org/",
      "scopes": [
        "com.kyrylokuzyk"
      ]
    }
  ],
  "dependencies": {
    "com.virtuesky.sunflower":"https://github.com/VirtueSky/sunflower.git#3.5.4"
  }
}

```
- depencies:
```json
"com.unity.nuget.newtonsoft-json": "3.2.1",
"com.unity.serialization": "3.1.1",
"com.unity.collections": "2.1.4",
"com.unity.textmeshpro": "3.0.8",
"com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#2.5.10",
"com.kyrylokuzyk.primetween": "1.3.8",
```
## Includes modules

```bash
├── Core (Update only called once in Monobehaviour, Delay...)
├── Advertising (Support for Max, Admob and IronSource)
├── In App Purchase (IAP)
├── Asset Finder
├── Audio
├── Button
├── Data
├── Scriptable Event
├── Scriptable Variable
├── Firebase Remote Config
├── Tracking (Firebase Analytics, Adjust, AppsFlyer)
├── Tri-Inspector
├── Level Editor
├── Mobile Notification
├── Object Pooling
├── Localization
├── FolderIcons
├── Hierarchy
├── In app review
├── SimpleJSON
├── Tracking Revenue (by Firebase analytic, Adjust or Appsflyer)
├── Vibration (Vibration native support for android & ios)
├── Game Service (Sign in with apple id / google play games service)
├── Misc (Extension support Transform, SafeArea, Play Animancer, Skeleton,...)
├── Touch Input
├── Component
```

#### Note:

- [See Document](https://github.com/VirtueSky/sunflower/wiki)
- [Project implementation](https://github.com/VirtueSky/TheBeginning)
- [Core has similar modules but does not use scriptable architecture](https://github.com/wolf-package/unity-common)

[Join Discord to receive update notifications](https://discord.gg/bpcUyHRZ)


================================================
FILE: README.md.meta
================================================
fileFormatVersion: 2
guid: 7b4ab53c22cea684aa8898738b406520
TextScriptImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Editor/AdSettingEditor.cs
================================================
#if UNITY_EDITOR
using System;
using UnityEditor;
using UnityEngine;
using VirtueSky.Inspector;
using VirtueSky.UtilsEditor;

namespace VirtueSky.Ads
{
    [CustomEditor(typeof(AdSetting), true)]
    public class AdSettingEditor : Editor
    {
        private AdSetting _adSetting;

        private SerializedProperty _useApplovin;
        private SerializedProperty _useAdmob;
        private SerializedProperty _useLevelPlay;
        private SerializedProperty _enableTrackAdRevenue;
        private SerializedProperty _adCheckingInterval;
        private SerializedProperty _adLoadingInterval;

        private SerializedProperty _sdkKey;

        private SerializedProperty _maxBannerVariable;
        private SerializedProperty _maxInterVariable;
        private SerializedProperty _maxRewardVariable;
        private SerializedProperty _maxAppOpenVariable;


        private SerializedProperty _admobBannerVariable;
        private SerializedProperty _admobInterVariable;
        private SerializedProperty _admobRewardVariable;
        private SerializedProperty _admobRewardInterVariable;
        private SerializedProperty _admobAppOpenVariable;
        private SerializedProperty _admobNativeOverlayVariable;
        private SerializedProperty _autoTrackingAdImpressionAdmob;
        private SerializedProperty _admobEnableTestMode;
        private SerializedProperty _enableGDPR;
        private SerializedProperty _enableGDPRTestMode;
        private SerializedProperty _admobDevicesTest;

        private SerializedProperty _androidAppKey;
        private SerializedProperty _iOSAppKey;
        private SerializedProperty _useTestAppKey;
        private SerializedProperty _levelPlayBannerVariable;
        private SerializedProperty _levelPlayInterVariable;
        private SerializedProperty _levelPlayRewardVariable;

        const string pathMax = "/Ads/Applovin";
        const string pathAdmob = "/Ads/Admob";
        const string pathIronSource = "/Ads/LevelPlay";

        void Initialize()
        {
            _adSetting = target as AdSetting;
            _useApplovin = serializedObject.FindProperty("useAppLovin");
            _useAdmob = serializedObject.FindProperty("useAdmob");
            _useLevelPlay = serializedObject.FindProperty("useLevelPlay");
            _enableTrackAdRevenue = serializedObject.FindProperty("enableTrackAdRevenue");
            _adCheckingInterval = serializedObject.FindProperty("adCheckingInterval");
            _adLoadingInterval = serializedObject.FindProperty("adLoadingInterval");

            _sdkKey = serializedObject.FindProperty("sdkKey");
            _maxBannerVariable = serializedObject.FindProperty("maxBannerVariable");
            _maxInterVariable = serializedObject.FindProperty("maxInterVariable");
            _maxRewardVariable = serializedObject.FindProperty("maxRewardVariable");
            _maxAppOpenVariable = serializedObject.FindProperty("maxAppOpenVariable");

            _admobBannerVariable = serializedObject.FindProperty("admobBannerVariable");
            _admobInterVariable = serializedObject.FindProperty("admobInterVariable");
            _admobRewardVariable = serializedObject.FindProperty("admobRewardVariable");
            _admobRewardInterVariable = serializedObject.FindProperty("admobRewardInterVariable");
            _admobAppOpenVariable = serializedObject.FindProperty("admobAppOpenVariable");
            _admobNativeOverlayVariable = serializedObject.FindProperty("admobNativeOverlayVariable");
            _autoTrackingAdImpressionAdmob = serializedObject.FindProperty("autoTrackingAdImpressionAdmob");
            _admobEnableTestMode = serializedObject.FindProperty("admobEnableTestMode");
            _admobDevicesTest = serializedObject.FindProperty("admobDevicesTest");
            _enableGDPR = serializedObject.FindProperty("enableGDPR");
            _enableGDPRTestMode = serializedObject.FindProperty("enableGDPRTestMode");

            _androidAppKey = serializedObject.FindProperty("androidAppKey");
            _iOSAppKey = serializedObject.FindProperty("iOSAppKey");
            _useTestAppKey = serializedObject.FindProperty("useTestAppKey");
            _levelPlayBannerVariable = serializedObject.FindProperty("levelPlayBannerVariable");
            _levelPlayInterVariable = serializedObject.FindProperty("levelPlayInterVariable");
            _levelPlayRewardVariable = serializedObject.FindProperty("levelPlayRewardVariable");
        }

        void Draw()
        {
            serializedObject.Update();
            Initialize();
            // EditorGUILayout.LabelField("ADS SETTING", EditorStyles.boldLabel);
            //GuiLine(2);
            GUILayout.Space(10);
            EditorGUILayout.PropertyField(_adCheckingInterval);
            EditorGUILayout.PropertyField(_adLoadingInterval);
            EditorGUILayout.PropertyField(_useApplovin);
            EditorGUILayout.PropertyField(_useAdmob);
            EditorGUILayout.PropertyField(_useLevelPlay);
            EditorGUILayout.PropertyField(_enableTrackAdRevenue);
            EditorGUILayout.PropertyField(_enableGDPR);
            if (_enableGDPR.boolValue)
            {
                EditorGUILayout.PropertyField(_enableGDPRTestMode);
            }

            GUILayout.Space(10);
            if (_useApplovin.boolValue) SetupMax();
            if (_useAdmob.boolValue) SetupAdmob();
            if (_useLevelPlay.boolValue) SetupIronSource();

            EditorUtility.SetDirty(target);
            serializedObject.ApplyModifiedProperties();
        }


        public override void OnInspectorGUI()
        {
            Draw();
        }

        void SetupMax()
        {
            EditorGUILayout.LabelField("Applovin - Max", StyleLabel());
            GuiLine(1);
            GUILayout.Space(10);
            EditorGUILayout.PropertyField(_sdkKey);
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PropertyField(_maxBannerVariable);
            if (_maxBannerVariable.objectReferenceValue == null)
            {
                GUILayout.Space(2);
                if (GUILayout.Button("Create", GUILayout.Width(55)))
                {
                    _maxBannerVariable.objectReferenceValue =
                        CreateAsset.CreateAndGetScriptableAsset<MaxBannerVariable>(pathMax);
                }
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PropertyField(_maxInterVariable);
            if (_maxInterVariable.objectReferenceValue == null)
            {
                GUILayout.Space(2);
                if (GUILayout.Button("Create", GUILayout.Width(55)))
                {
                    _maxInterVariable.objectReferenceValue =
                        CreateAsset.CreateAndGetScriptableAsset<MaxInterVariable>(pathMax);
                }
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PropertyField(_maxRewardVariable);
            if (_maxRewardVariable.objectReferenceValue == null)
            {
                GUILayout.Space(2);
                if (GUILayout.Button("Create", GUILayout.Width(55)))
                {
                    _maxRewardVariable.objectReferenceValue =
                        CreateAsset.CreateAndGetScriptableAsset<MaxRewardVariable>(pathMax);
                }
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PropertyField(_maxAppOpenVariable);
            if (_maxAppOpenVariable.objectReferenceValue == null)
            {
                GUILayout.Space(2);
                if (GUILayout.Button("Create", GUILayout.Width(55)))
                {
                    _maxAppOpenVariable.objectReferenceValue =
                        CreateAsset.CreateAndGetScriptableAsset<MaxAppOpenVariable>(pathMax);
                }
            }

            EditorGUILayout.EndHorizontal();
            GUILayout.Space(10);
        }

        void SetupAdmob()
        {
            EditorGUILayout.LabelField("Google - Admob", StyleLabel());
            GuiLine(1);
            GUILayout.Space(10);
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PropertyField(_admobBannerVariable);
            if (_admobBannerVariable.objectReferenceValue == null)
            {
                GUILayout.Space(2);
                if (GUILayout.Button("Create", GUILayout.Width(55)))
                {
                    _admobBannerVariable.objectReferenceValue =
                        CreateAsset.CreateAndGetScriptableAsset<AdmobBannerVariable>(pathAdmob);
                }
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PropertyField(_admobInterVariable);
            if (_admobInterVariable.objectReferenceValue == null)
            {
                GUILayout.Space(2);
                if (GUILayout.Button("Create", GUILayout.Width(55)))
                {
                    _admobInterVariable.objectReferenceValue =
                        CreateAsset.CreateAndGetScriptableAsset<AdmobInterVariable>(pathAdmob);
                }
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PropertyField(_admobRewardVariable);
            if (_admobRewardVariable.objectReferenceValue == null)
            {
                GUILayout.Space(2);
                if (GUILayout.Button("Create", GUILayout.Width(55)))
                {
                    _admobRewardVariable.objectReferenceValue =
                        CreateAsset.CreateAndGetScriptableAsset<AdmobRewardVariable>(pathAdmob);
                }
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PropertyField(_admobRewardInterVariable);
            if (_admobRewardInterVariable.objectReferenceValue == null)
            {
                GUILayout.Space(2);
                if (GUILayout.Button("Create", GUILayout.Width(55)))
                {
                    _admobRewardInterVariable.objectReferenceValue =
                        CreateAsset
                            .CreateAndGetScriptableAsset<AdmobRewardInterVariable>(pathAdmob);
                }
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PropertyField(_admobAppOpenVariable);
            if (_admobAppOpenVariable.objectReferenceValue == null)
            {
                GUILayout.Space(2);
                if (GUILayout.Button("Create", GUILayout.Width(55)))
                {
                    _admobAppOpenVariable.objectReferenceValue =
                        CreateAsset.CreateAndGetScriptableAsset<AdmobAppOpenVariable>(pathAdmob);
                }
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PropertyField(_admobNativeOverlayVariable);
            if (_admobNativeOverlayVariable.objectReferenceValue == null)
            {
                GUILayout.Space(2);
                if (GUILayout.Button("Create", GUILayout.Width(55)))
                {
                    _admobNativeOverlayVariable.objectReferenceValue =
                        CreateAsset.CreateAndGetScriptableAsset<AdmobNativeOverlayVariable>(pathAdmob);
                }
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.PropertyField(_autoTrackingAdImpressionAdmob);
            EditorGUILayout.PropertyField(_admobEnableTestMode);
            EditorGUILayout.PropertyField(_admobDevicesTest);
            GUI.enabled = false;
            EditorGUILayout.TextField("App Id Test", "ca-app-pub-3940256099942544~3347511713");
            GUI.enabled = true;
            GUILayout.Space(10);
            if (GUILayout.Button("Open GoogleAdmobSetting", GUILayout.Height(20)))
            {
                EditorApplication.ExecuteMenuItem("Assets/Google Mobile Ads/Settings...");
            }

            GUILayout.Space(10);
        }

        void SetupIronSource()
        {
            EditorGUILayout.LabelField("Unity - LevelPlay", StyleLabel());
            GuiLine(1);
            GUILayout.Space(10);
            EditorGUILayout.PropertyField(_androidAppKey);
            EditorGUILayout.PropertyField(_iOSAppKey);
            EditorGUILayout.PropertyField(_useTestAppKey);
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PropertyField(_levelPlayBannerVariable);
            if (_levelPlayBannerVariable.objectReferenceValue == null)
            {
                GUILayout.Space(2);
                if (GUILayout.Button("Create", GUILayout.Width(55)))
                {
                    _levelPlayBannerVariable.objectReferenceValue =
                        CreateAsset.CreateAndGetScriptableAsset<LevelPlayBannerVariable>(pathIronSource);
                }
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PropertyField(_levelPlayInterVariable);
            if (_levelPlayInterVariable.objectReferenceValue == null)
            {
                GUILayout.Space(2);
                if (GUILayout.Button("Create", GUILayout.Width(55)))
                {
                    _levelPlayInterVariable.objectReferenceValue =
                        CreateAsset.CreateAndGetScriptableAsset<LevelPlayInterVariable>(pathIronSource);
                }
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PropertyField(_levelPlayRewardVariable);
            if (_levelPlayRewardVariable.objectReferenceValue == null)
            {
                GUILayout.Space(2);
                if (GUILayout.Button("Create", GUILayout.Width(55)))
                {
                    _levelPlayRewardVariable.objectReferenceValue =
                        CreateAsset.CreateAndGetScriptableAsset<LevelPlayRewardVariable>(pathIronSource);
                }
            }

            EditorGUILayout.EndHorizontal();
            GUILayout.Space(10);
        }

        GUIStyle StyleLabel()
        {
            var style = new GUIStyle();
            style.fontSize = 14;
            style.normal.textColor = Color.white;
            return style;
        }

        void GuiLine(int i_height = 1)
        {
            Rect rect = EditorGUILayout.GetControlRect(false, i_height);

            rect.height = i_height;

            EditorGUI.DrawRect(rect, new Color32(0, 0, 0, 255));
        }
    }
}
#endif

================================================
FILE: VirtueSky/Advertising/Editor/AdSettingEditor.cs.meta
================================================
fileFormatVersion: 2
guid: 6439b65cc7b34375ace31c6d3f331f3e
timeCreated: 1700021422

================================================
FILE: VirtueSky/Advertising/Editor/AdsWindowEditor.cs
================================================
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
using VirtueSky.Inspector;
using VirtueSky.UtilsEditor;

namespace VirtueSky.Ads
{
    public class AdsWindowEditor : EditorWindow
    {
        //     private Vector2 _scrollPosition;
        //     private Editor _editor;
        //
        //     private AdSetting _adSetting;
        //
        //     private bool isSetupTheme = false;
        //
        //     [MenuItem("Sunflower/Ads/AdSetting &4", false)]
        //     public static void OpenAdSettingsWindows()
        //     {
        //         var adSetting =
        //             CreateAsset.CreateAndGetScriptableAsset<VirtueSky.Ads.AdSetting>("/Ads");
        //         AdsWindowEditor adWindow = GetWindow<AdsWindowEditor>("Ads Settings");
        //         adWindow._adSetting = adSetting;
        //         if (adWindow == null)
        //         {
        //             Debug.LogError("Couldn't open the ads settings window!");
        //             return;
        //         }
        //
        //         adWindow.minSize = new Vector2(275, 0);
        //         adWindow.Show();
        //         EditorGUIUtility.PingObject(adSetting);
        //     }
        //
        //     private void OnGUI()
        //     {
        //         EditorGUI.DrawRect(new Rect(0, 0, position.width, position.height),
        //             GameDataEditor.ColorBackgroundRectWindowSunflower.ToColor());
        //         GUI.contentColor = GameDataEditor.ColorTextContentWindowSunflower.ToColor();
        //         GUI.backgroundColor = GameDataEditor.ColorContentWindowSunflower.ToColor();
        //         if (_editor == null) _editor = UnityEditor.Editor.CreateEditor(_adSetting);
        //
        //         if (_editor == null)
        //         {
        //             EditorGUILayout.HelpBox("Couldn't create the settings resources editor.",
        //                 MessageType.Error);
        //             return;
        //         }
        //
        //         //    _editor.DrawHeader();
        //         _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition);
        //         EditorGUILayout.BeginVertical(new GUIStyle { padding = new RectOffset(6, 3, 3, 3) });
        //         _editor.OnInspectorGUI();
        //
        //         GUILayout.Space(10);
        //         Handles.color = Color.black;
        //         Handles.DrawAAPolyLine(3, new Vector3(0, GUILayoutUtility.GetLastRect().y + 10),
        //             new Vector3(position.width, GUILayoutUtility.GetLastRect().y + 10));
        //         GUILayout.Space(10);
        //
        //
        //         EditorGUILayout.EndVertical();
        //         EditorGUILayout.EndScrollView();
        //     }
        //
        //     #region Applovin
        //
        //     private const string pathMax = "/Ads/Applovin";
        //
        //     [MenuItem("Sunflower/Ads/Applovin/Max Client")]
        //     public static void CreateMaxClient()
        //     {
        //         CreateAsset.CreateScriptableAssets<MaxAdClient>(pathMax, "max_ad_client");
        //     }
        //
        //     [MenuItem("Sunflower/Ads/Applovin/Max Banner")]
        //     public static void CreateMaxBanner()
        //     {
        //         CreateAsset.CreateScriptableAssets<MaxBannerVariable>(pathMax, "max_banner_variable");
        //     }
        //
        //     [MenuItem("Sunflower/Ads/Applovin/Max Inter")]
        //     public static void CreateMaxInter()
        //     {
        //         CreateAsset.CreateScriptableAssets<MaxInterVariable>(pathMax, "max_inter_variable");
        //     }
        //
        //     [MenuItem("Sunflower/Ads/Applovin/Max Reward")]
        //     public static void CreateMaxReward()
        //     {
        //         CreateAsset.CreateScriptableAssets<MaxRewardVariable>(pathMax, "max_reward_variable");
        //     }
        //
        //     [MenuItem("Sunflower/Ads/Applovin/Max App Open")]
        //     public static void CreateMaxAppOpen()
        //     {
        //         CreateAsset.CreateScriptableAssets<MaxAppOpenVariable>(pathMax,
        //             "max_app_open_variable");
        //     }
        //
        //     [MenuItem("Sunflower/Ads/Applovin/Max Reward Inter")]
        //     public static void CreateMaxRewardInter()
        //     {
        //         CreateAsset.CreateScriptableAssets<MaxRewardInterVariable>(pathMax,
        //             "max_reward_inter_variable");
        //     }
        //
        //     #endregion
        //
        //     #region Admob
        //
        //     private const string pathAdmob = "/Ads/Admob";
        //
        //     [MenuItem("Sunflower/Ads/Admob/Admob Client")]
        //     public static void CreateAdmobClient()
        //     {
        //         CreateAsset.CreateScriptableAssets<AdmobAdClient>(pathAdmob, "admob_ad_client");
        //     }
        //
        //     [MenuItem("Sunflower/Ads/Admob/Admob Banner")]
        //     public static void CreateAdmobBanner()
        //     {
        //         CreateAsset.CreateScriptableAssets<AdmobBannerVariable>(pathAdmob,
        //             "admob_banner_variable");
        //     }
        //
        //     [MenuItem("Sunflower/Ads/Admob/Admob Inter")]
        //     public static void CreateAdmobInter()
        //     {
        //         CreateAsset.CreateScriptableAssets<AdmobInterVariable>(pathAdmob,
        //             "admob_inter_variable");
        //     }
        //
        //     [MenuItem("Sunflower/Ads/Admob/Admob Reward")]
        //     public static void CreateAdmobReward()
        //     {
        //         CreateAsset.CreateScriptableAssets<AdmobRewardVariable>(pathAdmob,
        //             "admob_reward_variable");
        //     }
        //
        //     [MenuItem("Sunflower/Ads/Admob/Admob App Open")]
        //     public static void CreateAdmobAppOpen()
        //     {
        //         CreateAsset.CreateScriptableAssets<AdmobAppOpenVariable>(pathAdmob,
        //             "admob_app_open_variable");
        //     }
        //
        //     [MenuItem("Sunflower/Ads/Admob/Admob Reward Inter")]
        //     public static void CreateAdmobRewardInter()
        //     {
        //         CreateAsset.CreateScriptableAssets<AdmobRewardInterVariable>(pathAdmob,
        //             "admob_reward_inter_variable");
        //     }
        //
        //     #endregion
    }
}
#endif

================================================
FILE: VirtueSky/Advertising/Editor/AdsWindowEditor.cs.meta
================================================
fileFormatVersion: 2
guid: 6fd65ccaee60423bbab98afe628d2016
timeCreated: 1695461341

================================================
FILE: VirtueSky/Advertising/Editor/Virtuesky.Sunflower.Advertising.Editor.asmdef
================================================
{
    "name": "Virtuesky.Sunflower.Advertising.Editor",
    "rootNamespace": "",
    "references": [
        "GUID:abd57f653a468a04c8d4e281527ff293",
        "GUID:c904f6d969e991d459a0843b71c22ec5",
        "GUID:324caed91501a9c47a04ebfd87b68794",
        "GUID:0b6289df6f84a6f4b982ff72d23e0273"
    ],
    "includePlatforms": [
        "Editor"
    ],
    "excludePlatforms": [],
    "allowUnsafeCode": false,
    "overrideReferences": false,
    "precompiledReferences": [],
    "autoReferenced": true,
    "defineConstraints": [],
    "versionDefines": [],
    "noEngineReferences": false
}

================================================
FILE: VirtueSky/Advertising/Editor/Virtuesky.Sunflower.Advertising.Editor.asmdef.meta
================================================
fileFormatVersion: 2
guid: ea1af3c654880af4ca6bb44b012e055e
AssemblyDefinitionImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Editor.meta
================================================
fileFormatVersion: 2
guid: c0fa69d79e042904290c060082316cf1
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmobAdClient.cs
================================================
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
using GoogleMobileAds.Api;
#endif
using VirtueSky.Core;
using VirtueSky.Tracking;

namespace VirtueSky.Ads
{
    public sealed class AdmobAdClient : AdClient
    {
        public AdmobAdClient(AdSetting _adSetting)
        {
            adSetting = _adSetting;
        }

        public override void Initialize()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
#if UNITY_IOS
            // On Android, Unity is paused when displaying interstitial or rewarded video.
            // This setting makes iOS behave consistently with Android.
            MobileAds.SetiOSAppPauseOnBackground(true);         
#endif

            // When true all events raised by GoogleMobileAds will be raised
            // on the Unity main thread. The default value is false.
            // https://developers.google.com/admob/unity/quick-start#raise_ad_events_on_the_unity_main_thread
            MobileAds.RaiseAdEventsOnUnityMainThread = true;

            MobileAds.Initialize(initStatus =>
            {
                App.RunOnMainThread(() =>
                {
                    if (!adSetting.AdmobEnableTestMode) return;
                    var configuration = new RequestConfiguration
                        { TestDeviceIds = adSetting.AdmobDevicesTest };
                    MobileAds.SetRequestConfiguration(configuration);
                });
            });
            FirebaseAnalyticTrackingRevenue.autoTrackAdImpressionAdmob = adSetting.AutoTrackingAdImpressionAdmob;
            adSetting.AdmobBannerVariable.Init();
            adSetting.AdmobInterVariable.Init();
            adSetting.AdmobRewardVariable.Init();
            adSetting.AdmobRewardInterVariable.Init();
            adSetting.AdmobAppOpenVariable.Init();
            adSetting.AdmobNativeOverlayVariable.Init();

            RegisterAppStateChange();
            LoadInterstitial();
            LoadRewarded();
            LoadRewardedInterstitial();
            LoadAppOpen();
            LoadBanner();
            LoadNativeOverlay();
#endif
        }


#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
        void RegisterAppStateChange()
        {
            GoogleMobileAds.Api.AppStateEventNotifier.AppStateChanged += OnAppStateChanged;
        }

        void OnAppStateChanged(GoogleMobileAds.Common.AppState state)
        {
            if (state == GoogleMobileAds.Common.AppState.Foreground && adSetting.AdmobAppOpenVariable.autoShow)
            {
                if (adSetting.UseAdmob) ShowAppOpen();
            }
        }
#endif
        public override void LoadBanner()
        {
            if (adSetting.AdmobBannerVariable == null) return;
            adSetting.AdmobBannerVariable.Load();
        }

        public override void LoadInterstitial()
        {
            if (adSetting.AdmobInterVariable == null) return;
            if (!adSetting.AdmobInterVariable.IsReady()) adSetting.AdmobInterVariable.Load();
        }

        public override void LoadRewarded()
        {
            if (adSetting.AdmobRewardVariable == null) return;
            if (!adSetting.AdmobRewardVariable.IsReady()) adSetting.AdmobRewardVariable.Load();
        }

        public override void LoadRewardedInterstitial()
        {
            if (adSetting.AdmobRewardInterVariable == null) return;
            if (!adSetting.AdmobRewardInterVariable.IsReady()) adSetting.AdmobRewardInterVariable.Load();
        }

        public override void LoadAppOpen()
        {
            if (adSetting.AdmobAppOpenVariable == null) return;
            if (!adSetting.AdmobAppOpenVariable.IsReady()) adSetting.AdmobAppOpenVariable.Load();
        }

        public override void ShowAppOpen()
        {
            if (statusAppOpenFirstIgnore) adSetting.AdmobAppOpenVariable.Show();
            statusAppOpenFirstIgnore = true;
        }

        public override void LoadNativeOverlay()
        {
            if (adSetting.AdmobNativeOverlayVariable == null) return;
            if (!adSetting.AdmobNativeOverlayVariable.IsReady()) adSetting.AdmobNativeOverlayVariable.Load();
        }
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmobAdClient.cs.meta
================================================
fileFormatVersion: 2
guid: 9dfd25949deb4dd5b2c3d85ef6e79929
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmobAdUnitVariable.cs
================================================
using System;
using UnityEngine;

namespace VirtueSky.Ads
{
    public class AdmobAdUnitVariable : AdUnitVariable
    {
        [SerializeField] protected string androidId;
        [SerializeField] protected string iOSId;
        [NonSerialized] private string idRuntime = string.Empty;

        public override bool IsShowing { get; internal set; }

        public override string Id
        {
            get
            {
                if (idRuntime == String.Empty)
                {
#if UNITY_ANDROID
                    return androidId;
#elif UNITY_IOS
                    return iOSId;
#else
                    return string.Empty;
#endif
                }

                return idRuntime;
            }
        }

        public override AdUnitVariable Show(string placement = null)
        {
            ResetChainCallback();
            if (!Application.isMobilePlatform || string.IsNullOrEmpty(Id) || AdStatic.IsRemoveAd ||
                !IsReady()) return this;
            ShowImpl(placement);
            return this;
        }

        public void SetIdRuntime(string unitId)
        {
            idRuntime = unitId;
        }
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmobAdUnitVariable.cs.meta
================================================
fileFormatVersion: 2
guid: 87d7f6324d01404eb012e525818f93de
timeCreated: 1728634495

================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobAppOpenVariable.cs
================================================
using System;
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
using GoogleMobileAds.Api;
using VirtueSky.Tracking;
#endif
using UnityEngine;
using VirtueSky.Inspector;
using VirtueSky.Misc;

namespace VirtueSky.Ads
{
    [Serializable]
    [EditorIcon("icon_scriptable")]
    public class AdmobAppOpenVariable : AdmobAdUnitVariable
    {
        [Tooltip("Automatically show AppOpenAd when app status is changed")]
        public bool autoShow = false;

        [Tooltip("Time between closing the previous full-screen ad and starting to show the app open ad - in seconds")]
        public float timeBetweenFullScreenAd = 2f;

        public bool useTestId;
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
        private AppOpenAd _appOpenAd;
#endif
        private DateTime _expireTime;

        public override void Init()
        {
            if (useTestId)
            {
                GetUnitTest();
            }
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (AdStatic.IsRemoveAd || string.IsNullOrEmpty(Id)) return;
            paidedCallback += AppTracking.TrackRevenue;
#endif
        }

        public override void Load()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (AdStatic.IsRemoveAd || string.IsNullOrEmpty(Id)) return;

            Destroy();
            AppOpenAd.Load(Id, new AdRequest(), OnAdLoadCallback);
#endif
        }

        public override bool IsReady()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            return _appOpenAd != null && _appOpenAd.CanShowAd() && DateTime.Now < _expireTime &&
                   (DateTime.Now - AdStatic.AdClosingTime).TotalSeconds > timeBetweenFullScreenAd;
#else
            return false;
#endif
        }

        protected override void ShowImpl(string placement = null)
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            _appOpenAd.Show();
#endif
        }

        public override void Destroy()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (_appOpenAd == null) return;
            _appOpenAd.Destroy();
            _appOpenAd = null;
#endif
        }

#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
        private void OnAdLoadCallback(AppOpenAd ad, LoadAdError error)
        {
            // if error is not null, the load request failed.
            if (error != null || ad == null)
            {
                OnAdFailedToLoad(error);
                return;
            }

            _appOpenAd = ad;
            _appOpenAd.OnAdPaid += OnAdPaided;
            _appOpenAd.OnAdFullScreenContentClosed += OnAdClosed;
            _appOpenAd.OnAdFullScreenContentFailed += OnAdFailedToShow;
            _appOpenAd.OnAdFullScreenContentOpened += OnAdOpening;
            _appOpenAd.OnAdClicked += OnAdClicked;
            OnAdLoaded();

            // App open ads can be preloaded for up to 4 hours.
            _expireTime = DateTime.Now + TimeSpan.FromHours(4);
        }

        private void OnAdClicked()
        {
            Common.CallActionAndClean(ref clickedCallback);
            OnClickedAdEvent?.Invoke();
        }

        private void OnAdOpening()
        {
            AdStatic.waitAppOpenDisplayedAction?.Invoke();
            AdStatic.IsShowingAd = true;
            IsShowing = true;
            Common.CallActionAndClean(ref displayedCallback);
            OnDisplayedAdEvent?.Invoke();
        }

        private void OnAdFailedToShow(AdError obj)
        {
            Common.CallActionAndClean(ref failedToDisplayCallback);
            OnFailedToDisplayAdEvent?.Invoke(obj.GetMessage());
        }

        private void OnAdClosed()
        {
            AdStatic.waitAppOpenClosedAction?.Invoke();
            AdStatic.IsShowingAd = false;
            IsShowing = false;
            Common.CallActionAndClean(ref closedCallback);
            OnClosedAdEvent?.Invoke();
            Destroy();
        }

        private void OnAdPaided(AdValue value)
        {
            paidedCallback?.Invoke(value.Value / 1000000f,
                "Admob",
                Id,
                "AppOpenAd", AdMediation.Admob.ToString());
        }

        private void OnAdLoaded()
        {
            Common.CallActionAndClean(ref loadedCallback);
            OnLoadAdEvent?.Invoke();
        }

        private void OnAdFailedToLoad(LoadAdError error)
        {
            Common.CallActionAndClean(ref failedToLoadCallback);
            OnFailedToLoadAdEvent?.Invoke(error.GetMessage());
        }

#endif

        [ContextMenu("Get Id test")]
        void GetUnitTest()
        {
#if UNITY_ANDROID
            androidId = "ca-app-pub-3940256099942544/9257395921";
#elif UNITY_IOS
            iOSId = "ca-app-pub-3940256099942544/5575463023";
#endif
        }
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobAppOpenVariable.cs.meta
================================================
fileFormatVersion: 2
guid: bcb8d284edcd4713bbddf482061bd612
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobBannerVariable.cs
================================================
using System;
using System.Collections;
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
using GoogleMobileAds.Api;
using VirtueSky.Tracking;
#endif
using UnityEngine;
using VirtueSky.Core;
using VirtueSky.Inspector;
using VirtueSky.Misc;

namespace VirtueSky.Ads
{
    [Serializable]
    [EditorIcon("icon_scriptable")]
    public class AdmobBannerVariable : AdmobAdUnitVariable
    {
        public AdsSize size = AdsSize.Adaptive;
        public AdsPosition position = AdsPosition.Bottom;
        public bool useCollapsible;
        public bool useTestId;
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
        private BannerView _bannerView;
#endif

        private readonly WaitForSeconds _waitBannerReload = new WaitForSeconds(5f);
        private IEnumerator _reload;
        private bool _isBannerShowing;
        private bool _previousBannerShowStatus;

        public override void Init()
        {
            if (useTestId)
            {
                GetUnitTest();
            }
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (AdStatic.IsRemoveAd || string.IsNullOrEmpty(Id)) return;
            paidedCallback += AppTracking.TrackRevenue;
#endif
        }

        public override void Load()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (AdStatic.IsRemoveAd || string.IsNullOrEmpty(Id)) return;
            Destroy();
            _bannerView = new BannerView(Id, ConvertSize(), ConvertPosition());
            _bannerView.OnAdFullScreenContentClosed += OnAdClosed;
            _bannerView.OnBannerAdLoadFailed += OnAdFailedToLoad;
            _bannerView.OnBannerAdLoaded += OnAdLoaded;
            _bannerView.OnAdFullScreenContentOpened += OnAdOpening;
            _bannerView.OnAdPaid += OnAdPaided;
            _bannerView.OnAdClicked += OnAdClicked;
            var adRequest = new AdRequest();
            if (useCollapsible)
            {
                adRequest.Extras.Add("collapsible", ConvertPlacementCollapsible());
            }

            _bannerView.LoadAd(adRequest);
#endif
        }

        public bool IsCollapsible()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (_bannerView == null) return false;
            return _bannerView.IsCollapsible();
#else
            return false;
#endif
        }

        void OnWaitAppOpenClosed()
        {
            if (_previousBannerShowStatus)
            {
                _previousBannerShowStatus = false;
                Show();
            }
        }

        void OnWaitAppOpenDisplayed()
        {
            _previousBannerShowStatus = _isBannerShowing;
            if (_isBannerShowing) HideBanner();
        }

        public override bool IsReady()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            return _bannerView != null;
#else
            return false;
#endif
        }

        protected override void ShowImpl(string placement = null)
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            _isBannerShowing = true;
            IsShowing = true;
            AdStatic.waitAppOpenClosedAction = OnWaitAppOpenClosed;
            AdStatic.waitAppOpenDisplayedAction = OnWaitAppOpenDisplayed;
            if (_bannerView == null)
            {
                Load();
            }

            _bannerView.Show();
#endif
        }

        public override void Destroy()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (_bannerView == null) return;
            _isBannerShowing = false;
            IsShowing = false;
            AdStatic.waitAppOpenClosedAction = null;
            AdStatic.waitAppOpenDisplayedAction = null;
            _bannerView.Destroy();
            _bannerView = null;
#endif
        }

        public override void HideBanner()
        {
            base.HideBanner();
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            _isBannerShowing = false;
            IsShowing = false;
            if (_bannerView != null) _bannerView.Hide();
#endif
        }


#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
        public AdSize ConvertSize()
        {
            switch (size)
            {
                case AdsSize.Adaptive:
                    return AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(
                        AdSize.FullWidth);
                case AdsSize.MediumRectangle: return AdSize.MediumRectangle;
                case AdsSize.Leaderboard: return AdSize.Leaderboard;
                case AdsSize.IABBanner: return AdSize.IABBanner;
                //case BannerSize.SmartBanner: return AdSize.SmartBanner;
                default: return AdSize.Banner;
            }
        }

        public AdPosition ConvertPosition()
        {
            switch (position)
            {
                case AdsPosition.Top: return AdPosition.Top;
                case AdsPosition.Bottom: return AdPosition.Bottom;
                case AdsPosition.TopLeft: return AdPosition.TopLeft;
                case AdsPosition.TopRight: return AdPosition.TopRight;
                case AdsPosition.BottomLeft: return AdPosition.BottomLeft;
                case AdsPosition.BottomRight: return AdPosition.BottomRight;
                default: return AdPosition.Bottom;
            }
        }

        public string ConvertPlacementCollapsible()
        {
            if (position == AdsPosition.Top)
            {
                return "top";
            }
            else if (position == AdsPosition.Bottom)
            {
                return "bottom";
            }

            return "bottom";
        }

        private void OnAdPaided(AdValue value)
        {
            paidedCallback?.Invoke(value.Value / 1000000f,
                "Admob",
                Id,
                "BannerAd", AdMediation.Admob.ToString());
        }

        private void OnAdClicked()
        {
            Common.CallActionAndClean(ref clickedCallback);
            OnClickedAdEvent?.Invoke();
        }

        private void OnAdOpening()
        {
            Common.CallActionAndClean(ref displayedCallback);
            OnDisplayedAdEvent?.Invoke();
        }

        private void OnAdLoaded()
        {
            Common.CallActionAndClean(ref loadedCallback);
            OnLoadAdEvent?.Invoke();
        }

        private void OnAdFailedToLoad(LoadAdError error)
        {
            Common.CallActionAndClean(ref failedToLoadCallback);
            OnFailedToLoadAdEvent?.Invoke(error.GetMessage());
            if (_reload != null) App.StopCoroutine(_reload);
            _reload = DelayBannerReload();
            App.StartCoroutine(_reload);
        }

        private void OnAdClosed()
        {
            Common.CallActionAndClean(ref closedCallback);
            OnClosedAdEvent?.Invoke();
        }

        private IEnumerator DelayBannerReload()
        {
            yield return _waitBannerReload;
            Load();
        }
#endif

        [ContextMenu("Get Id test")]
        void GetUnitTest()
        {
#if UNITY_ANDROID
            androidId = "ca-app-pub-3940256099942544/6300978111";
#elif UNITY_IOS
            iOSId = "ca-app-pub-3940256099942544/2934735716";
#endif
        }
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobBannerVariable.cs.meta
================================================
fileFormatVersion: 2
guid: 87ac8fce1cfb4b09805621d419310150
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobInterVariable.cs
================================================
using System;
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
using GoogleMobileAds.Api;
using VirtueSky.Tracking;
#endif
using UnityEngine;
using VirtueSky.Inspector;
using VirtueSky.Misc;

namespace VirtueSky.Ads
{
    [Serializable]
    [EditorIcon("icon_scriptable")]
    public class AdmobInterVariable : AdmobAdUnitVariable
    {
        public bool useTestId;
        [NonSerialized] internal Action completedCallback;
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
        private InterstitialAd _interstitialAd;
#endif
        public override void Init()
        {
            if (useTestId)
            {
                GetUnitTest();
            }
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (AdStatic.IsRemoveAd || string.IsNullOrEmpty(Id)) return;
            paidedCallback += AppTracking.TrackRevenue;
#endif
        }

        public override void Load()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (AdStatic.IsRemoveAd || string.IsNullOrEmpty(Id)) return;

            Destroy();
            InterstitialAd.Load(Id, new AdRequest(), AdLoadCallback);

#endif
        }

        public override bool IsReady()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            return _interstitialAd != null && _interstitialAd.CanShowAd();
#else
            return false;
#endif
        }

        protected override void ShowImpl(string placement = null)
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            _interstitialAd.Show();
#endif
        }

        protected override void ResetChainCallback()
        {
            base.ResetChainCallback();
            completedCallback = null;
        }

        public override void Destroy()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (_interstitialAd == null) return;
            _interstitialAd.Destroy();
            _interstitialAd = null;
#endif
        }

#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
        private void AdLoadCallback(InterstitialAd ad, LoadAdError error)
        {
            // if error is not null, the load request failed.
            if (error != null || ad == null)
            {
                OnAdFailedToLoad(error);
                return;
            }

            _interstitialAd = ad;
            _interstitialAd.OnAdPaid += OnAdPaided;
            _interstitialAd.OnAdFullScreenContentClosed += OnAdClosed;
            _interstitialAd.OnAdFullScreenContentFailed += OnAdFailedToShow;
            _interstitialAd.OnAdFullScreenContentOpened += OnAdOpening;
            _interstitialAd.OnAdClicked += OnAdClicked;
            OnAdLoaded();
        }

        private void OnAdClicked()
        {
            Common.CallActionAndClean(ref clickedCallback);
            OnClickedAdEvent?.Invoke();
        }

        private void OnAdOpening()
        {
            AdStatic.IsShowingAd = true;
            IsShowing = true;
            Common.CallActionAndClean(ref displayedCallback);
            OnDisplayedAdEvent?.Invoke();
        }

        private void OnAdFailedToShow(AdError error)
        {
            Common.CallActionAndClean(ref failedToDisplayCallback);
            OnFailedToDisplayAdEvent?.Invoke(error.GetMessage());
        }

        private void OnAdClosed()
        {
            AdStatic.IsShowingAd = false;
            IsShowing = false;
            Common.CallActionAndClean(ref completedCallback);
            OnClosedAdEvent?.Invoke();
            Destroy();
        }

        private void OnAdPaided(AdValue value)
        {
            paidedCallback?.Invoke(value.Value / 1000000f,
                "Admob",
                Id,
                "InterstitialAd", AdMediation.Admob.ToString());
        }

        private void OnAdLoaded()
        {
            Common.CallActionAndClean(ref loadedCallback);
            OnLoadAdEvent?.Invoke();
        }

        private void OnAdFailedToLoad(LoadAdError error)
        {
            Common.CallActionAndClean(ref failedToLoadCallback);
            OnFailedToLoadAdEvent?.Invoke(error.GetMessage());
        }
#endif

        [ContextMenu("Get Id test")]
        void GetUnitTest()
        {
#if UNITY_ANDROID
            androidId = "ca-app-pub-3940256099942544/1033173712";
#elif UNITY_IOS
            iOSId = "ca-app-pub-3940256099942544/4411468910";
#endif
        }
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobInterVariable.cs.meta
================================================
fileFormatVersion: 2
guid: b04367785ed74ad986055150f5961286
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobNativeOverlayVariable.cs
================================================
using System;
using UnityEngine;
using VirtueSky.Inspector;
using VirtueSky.Utils;
using System.Collections;
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
using GoogleMobileAds.Api;
#endif
using VirtueSky.Core;
using VirtueSky.Misc;
using VirtueSky.Tracking;

namespace VirtueSky.Ads
{
    [Serializable]
    [EditorIcon("icon_scriptable")]
    public class AdmobNativeOverlayVariable : AdmobAdUnitVariable
    {
        public enum NativeTemplate
        {
            Small,
            Medium
        }

        [SerializeField] private bool useTestId;
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
        [HeaderLine("NativeAd Options", false)] [SerializeField]
        private AdChoicesPlacement adChoicesPlacement;

        [SerializeField] private MediaAspectRatio mediaAspectRatio;
        [SerializeField] private VideoOptions videoOptions;


        [HeaderLine("NativeAd Style", false)] public NativeTemplate nativeTemplate;
        public Color mainBackgroundColor = Color.white;
        public AdsSize adsSize = AdsSize.MediumRectangle;
        public AdsPosition adsPosition = AdsPosition.Bottom;

        //  public NativeTemplateFontStyle nativeTemplateFontStyle;
        private NativeOverlayAd _nativeOverlayAd;
#endif
        private readonly WaitForSeconds _waitReload = new WaitForSeconds(5f);
        private IEnumerator _reload;

        /// <summary>
        /// Init ads and register callback tracking
        /// </summary>
        public override void Init()
        {
            if (useTestId)
            {
                GetUnitTest();
            }
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (AdStatic.IsRemoveAd || string.IsNullOrEmpty(Id)) return;
            paidedCallback += AppTracking.TrackRevenue;
#endif
        }

        /// <summary>
        /// Load ads
        /// </summary>
        public override void Load()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (AdStatic.IsRemoveAd || string.IsNullOrEmpty(Id)) return;
            if (_nativeOverlayAd != null)
            {
                Destroy();
            }

            var adRequest = new AdRequest();
            var option = new NativeAdOptions
            {
                AdChoicesPlacement = adChoicesPlacement,
                MediaAspectRatio = mediaAspectRatio,
                VideoOptions = videoOptions
            };
            NativeOverlayAd.Load(Id, adRequest, option, AdLoadCallback);
#endif
        }

        public override bool IsReady()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            return _nativeOverlayAd != null;
#else
            return false;
#endif
        }

        protected override void ShowImpl(string placement = null)
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (_nativeOverlayAd != null)
                _nativeOverlayAd.Show();
#endif
        }

        /// <summary>
        /// destroy native overlay ads
        /// </summary>
        public override void Destroy()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (_nativeOverlayAd != null)
            {
                _nativeOverlayAd.Destroy();
                _nativeOverlayAd = null;
            }
#endif
        }

        /// <summary>
        /// Hide native overlay ads
        /// </summary>
        public void Hide()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (_nativeOverlayAd != null) _nativeOverlayAd.Hide();
#endif
        }


        /// <summary>
        /// Render native overlay ads default
        /// </summary>
        public void RenderAd()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (_nativeOverlayAd == null) return;
            _nativeOverlayAd.RenderTemplate(Style(), ConvertSize(), ConvertPosition(adsPosition));
#endif
        }

        /// <summary>
        /// Render native ads according to uiElement, use canvas overlay
        /// </summary>
        /// <param name="uiElement">RectTransform of uiElement, used to determine position for native overlay ads</param>
        public void RenderAd(RectTransform uiElement)
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (_nativeOverlayAd == null) return;
            (int admobX, int admobY) = ConvertUiElementPosToNativeAdsPos(uiElement);
            _nativeOverlayAd.RenderTemplate(Style(), admobX, admobY);
#endif
        }

        /// <summary>
        /// Render native ads according to uiElement, use canvas overlay
        /// </summary>
        /// <param name="uiElement">RectTransform of uiElement, used to determine position for native overlay ads</param>
        /// <param name="width">Custom width for native overlay ads</param>
        /// <param name="height">Custom height for native overlay ads</param>
        public void RenderAd(RectTransform uiElement, int width, int height)
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (_nativeOverlayAd == null) return;
            (int admobX, int admobY) = ConvertUiElementPosToNativeAdsPos(uiElement);
            _nativeOverlayAd.RenderTemplate(Style(), new AdSize(width, height), admobX, admobY);
#endif
        }

        /// <summary>
        /// Render native ads according to uiElement, use canvas screen-space camera
        /// Can use position and size of uiElement for native overlay ads
        /// </summary>
        /// <param name="uiElement">RectTransform of uiElement, used to determine position for native overlay ads</param>
        /// <param name="camera">Camera render uiElement</param>
        public void RenderAd(RectTransform uiElement, Camera camera, bool useSizeUiElement = true)
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (_nativeOverlayAd == null) return;
            (int admobX, int admobY) = ConvertUiElementPosToNativeAdsPos(uiElement, camera);
            if (useSizeUiElement)
            {
                _nativeOverlayAd?.RenderTemplate(Style(),
                    new AdSize((int)uiElement.rect.width, (int)uiElement.rect.height), admobX, admobY);
            }
            else
            {
                _nativeOverlayAd?.RenderTemplate(Style(), admobX, admobY);
            }
#endif
        }

        /// <summary>
        /// Render native ads according to uiElement, use canvas screen-space camera
        /// Can use position of uiElement and custom size for native overlay ads
        /// </summary>
        /// <param name="uiElement">RectTransform of uiElement, used to determine position for native overlay ads</param>
        /// <param name="camera">Camera render uiElement</param>
        /// <param name="width">Custom width for native overlay ads</param>
        /// <param name="height">Custom height for native overlay ads</param>
        public void RenderAd(RectTransform uiElement, Camera camera, int width, int height)
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (_nativeOverlayAd == null) return;
            (int admobX, int admobY) = ConvertUiElementPosToNativeAdsPos(uiElement, camera, width, height);
            _nativeOverlayAd?.RenderTemplate(Style(), new AdSize(width, height), admobX, admobY);
#endif
        }

        (int, int) ConvertUiElementPosToNativeAdsPos(RectTransform uiElement, Camera camera, int width, int height)
        {
            var worldPosition = uiElement.TransformPoint(uiElement.position);
            Vector2 screenPosition = camera.WorldToScreenPoint(worldPosition);

            float dpi = Screen.dpi / 160f;
            var admobX = (int)((screenPosition.x - width / 2) / dpi);
            var admobY = (int)(((Screen.height - (int)screenPosition.y) - height / 2) / dpi);
            return (admobX, admobY);
        }

        (int, int) ConvertUiElementPosToNativeAdsPos(RectTransform uiElement, Camera camera)
        {
            var worldPosition = uiElement.TransformPoint(uiElement.position);
            Vector2 screenPosition = camera.WorldToScreenPoint(worldPosition);

            float dpi = Screen.dpi / 160f;
            var admobX = (int)((screenPosition.x - (int)uiElement.rect.width / 2) / dpi);
            var admobY = (int)(((Screen.height - (int)screenPosition.y) - (int)uiElement.rect.height / 2) / dpi);
            return (admobX, admobY);
        }

        (int, int) ConvertUiElementPosToNativeAdsPos(RectTransform uiElement)
        {
            var screenPosition = uiElement.ToWorldPosition();
            float dpi = Screen.dpi / 160f;
            var admobX = (int)(screenPosition.x / dpi);
            var admobY = (int)((Screen.height - (int)screenPosition.y) / dpi);
            return (admobX, admobY);
        }

        public void SetPosition(AdsPosition adsPosition)
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            _nativeOverlayAd.SetTemplatePosition(ConvertPosition(adsPosition));
#endif
        }

        public void SetPosition(int x, int y)
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            _nativeOverlayAd.SetTemplatePosition(x, y);
#endif
        }

        public void SetPosition(RectTransform uiElement)
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            (int x, int y) = ConvertUiElementPosToNativeAdsPos(uiElement);
            _nativeOverlayAd.SetTemplatePosition(x, y);
#endif
        }

        public void SetPosition(RectTransform uiElement, Camera camera)
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            (int x, int y) = ConvertUiElementPosToNativeAdsPos(uiElement, camera);
            _nativeOverlayAd.SetTemplatePosition(x, y);
#endif
        }


#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
        public NativeTemplateStyle Style()
        {
            return new NativeTemplateStyle
            {
                TemplateId = nativeTemplate.ToString().ToLower(),
                MainBackgroundColor = mainBackgroundColor,
                // CallToActionText = new NativeTemplateTextStyle
                // {
                //     BackgroundColor = Color.green,
                //     TextColor = Color.white,
                //     FontSize = 9,
                //     Style = nativeTemplateFontStyle
                // }
            };
        }

        AdPosition ConvertPosition(AdsPosition _adsPosition)
        {
            return _adsPosition switch
            {
                AdsPosition.Top => AdPosition.Top,
                AdsPosition.Bottom => AdPosition.Bottom,
                AdsPosition.TopLeft => AdPosition.TopLeft,
                AdsPosition.TopRight => AdPosition.TopRight,
                AdsPosition.BottomLeft => AdPosition.BottomLeft,
                AdsPosition.BottomRight => AdPosition.BottomRight,
                _ => AdPosition.Center
            };
        }

        AdSize ConvertSize()
        {
            return adsSize switch
            {
                AdsSize.Banner => AdSize.Banner,
                AdsSize.MediumRectangle => AdSize.MediumRectangle,
                AdsSize.IABBanner => AdSize.IABBanner,
                AdsSize.Leaderboard => AdSize.Leaderboard,
                _ => AdSize.MediumRectangle,
            };
        }

        private void AdLoadCallback(NativeOverlayAd ad, LoadAdError error)
        {
            if (error != null || ad == null)
            {
                OnAdFailedToLoad(error);
                return;
            }

            _nativeOverlayAd = ad;
            _nativeOverlayAd.OnAdPaid += OnAdPaided;
            _nativeOverlayAd.OnAdClicked += OnAdClicked;
            _nativeOverlayAd.OnAdFullScreenContentOpened += OnAdOpening;
            _nativeOverlayAd.OnAdFullScreenContentClosed += OnAdClosed;
            OnAdLoaded();
        }

        private void OnAdLoaded()
        {
            Common.CallActionAndClean(ref loadedCallback);
            OnLoadAdEvent?.Invoke();
        }

        private void OnAdClosed()
        {
            IsShowing = false;
            Common.CallActionAndClean(ref closedCallback);
            OnClosedAdEvent?.Invoke();
        }

        private void OnAdOpening()
        {
            IsShowing = true;
            Common.CallActionAndClean(ref displayedCallback);
            OnDisplayedAdEvent?.Invoke();
        }

        private void OnAdClicked()
        {
            Common.CallActionAndClean(ref clickedCallback);
            OnClickedAdEvent?.Invoke();
        }

        private void OnAdPaided(AdValue value)
        {
            paidedCallback?.Invoke(value.Value / 1000000f,
                "Admob",
                Id,
                "NativeOverlayAd", AdMediation.Admob.ToString());
        }

        private void OnAdFailedToLoad(LoadAdError error)
        {
            Common.CallActionAndClean(ref failedToLoadCallback);
            OnFailedToLoadAdEvent?.Invoke(error.GetMessage());
            if (_reload != null) App.StopCoroutine(_reload);
            _reload = DelayReload();
            App.StartCoroutine(_reload);
        }

        private IEnumerator DelayReload()
        {
            yield return _waitReload;
            Load();
        }
#endif
        [ContextMenu("Get Id test")]
        void GetUnitTest()
        {
#if UNITY_ANDROID
            androidId = "ca-app-pub-3940256099942544/2247696110";
#elif UNITY_IOS
            iOSId = "ca-app-pub-3940256099942544/3986624511";
#endif
        }
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobNativeOverlayVariable.cs.meta
================================================
fileFormatVersion: 2
guid: 8b15194a160445d694586481bfdc91cb
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobRewardInterVariable.cs
================================================
using System;
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
using GoogleMobileAds.Api;
#endif
using UnityEngine;
using VirtueSky.Inspector;
using VirtueSky.Misc;
using VirtueSky.Tracking;

namespace VirtueSky.Ads
{
    [Serializable]
    [EditorIcon("icon_scriptable")]
    public class AdmobRewardInterVariable : AdmobAdUnitVariable
    {
        public bool useTestId;
        [NonSerialized] internal Action completedCallback;
        [NonSerialized] internal Action skippedCallback;
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
        private RewardedInterstitialAd _rewardedInterstitialAd;
#endif
        public override void Init()
        {
            if (useTestId)
            {
                GetUnitTest();
            }
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (string.IsNullOrEmpty(Id)) return;
            paidedCallback += AppTracking.TrackRevenue;
#endif
        }

        public bool IsEarnRewarded { get; private set; }

        public override void Load()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (string.IsNullOrEmpty(Id)) return;
            Destroy();
            RewardedInterstitialAd.Load(Id, new AdRequest(), OnAdLoadCallback);
#endif
        }

        public override bool IsReady()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            return _rewardedInterstitialAd != null && _rewardedInterstitialAd.CanShowAd();
#else
            return false;
#endif
        }

        protected override void ShowImpl(string placement = null)
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            _rewardedInterstitialAd.Show(UserEarnedRewardCallback);
#endif
        }

        protected override void ResetChainCallback()
        {
            base.ResetChainCallback();
            completedCallback = null;
            skippedCallback = null;
        }

        public override AdUnitVariable Show(string placement = null)
        {
            ResetChainCallback();
            if (!UnityEngine.Application.isMobilePlatform || string.IsNullOrEmpty(Id) || !IsReady())
                return this;
            ShowImpl(placement);
            return this;
        }

        public override void Destroy()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (_rewardedInterstitialAd == null) return;
            _rewardedInterstitialAd.Destroy();
            _rewardedInterstitialAd = null;
            IsEarnRewarded = false;
#endif
        }

#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
        private void OnAdLoadCallback(RewardedInterstitialAd ad, LoadAdError error)
        {
            // if error is not null, the load request failed.
            if (error != null || ad == null)
            {
                OnAdFailedToLoad(error);
                return;
            }

            _rewardedInterstitialAd = ad;
            _rewardedInterstitialAd.OnAdFullScreenContentClosed += OnAdClosed;
            _rewardedInterstitialAd.OnAdFullScreenContentOpened += OnAdOpening;
            _rewardedInterstitialAd.OnAdFullScreenContentFailed += OnAdFailedToShow;
            _rewardedInterstitialAd.OnAdPaid += OnAdPaided;
            _rewardedInterstitialAd.OnAdClicked += OnAdClicked;
            OnAdLoaded();
        }

        private void OnAdClicked()
        {
            Common.CallActionAndClean(ref clickedCallback);
            OnClickedAdEvent?.Invoke();
        }

        private void OnAdFailedToLoad(LoadAdError error)
        {
            Common.CallActionAndClean(ref failedToLoadCallback);
            OnFailedToLoadAdEvent?.Invoke(error.GetMessage());
        }

        private void OnAdLoaded()
        {
            Common.CallActionAndClean(ref loadedCallback);
            OnLoadAdEvent?.Invoke();
        }

        private void OnAdPaided(AdValue value)
        {
            paidedCallback?.Invoke(value.Value / 1000000f,
                "Admob",
                Id,
                "RewardedInterstitialAd", AdMediation.Admob.ToString());
        }

        private void OnAdFailedToShow(AdError error)
        {
            Common.CallActionAndClean(ref failedToDisplayCallback);
            OnFailedToDisplayAdEvent?.Invoke(error.GetMessage());
        }

        private void OnAdOpening()
        {
            AdStatic.IsShowingAd = true;
            IsShowing = true;
            Common.CallActionAndClean(ref displayedCallback);
            OnDisplayedAdEvent?.Invoke();
        }

        private void OnAdClosed()
        {
            AdStatic.IsShowingAd = false;
            IsShowing = false;
            Common.CallActionAndClean(ref closedCallback);
            OnClosedAdEvent?.Invoke();
            if (IsEarnRewarded)
            {
                Common.CallActionAndClean(ref completedCallback);
                _rewardedInterstitialAd.Destroy();
                return;
            }

            Common.CallActionAndClean(ref skippedCallback);
            _rewardedInterstitialAd.Destroy();
        }

        private void UserEarnedRewardCallback(Reward reward)
        {
            IsEarnRewarded = true;
        }
#endif

        [ContextMenu("Get Id test")]
        void GetUnitTest()
        {
#if UNITY_ANDROID
            androidId = "ca-app-pub-3940256099942544/5354046379";
#elif UNITY_IOS
            iOSId = "ca-app-pub-3940256099942544/6978759866";
#endif
        }
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobRewardInterVariable.cs.meta
================================================
fileFormatVersion: 2
guid: ddd2127be5434974aa775c9d809bc25f
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobRewardVariable.cs
================================================
using System;
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
using GoogleMobileAds.Api;
#endif
using UnityEngine;
using VirtueSky.Inspector;
using VirtueSky.Misc;
using VirtueSky.Tracking;

namespace VirtueSky.Ads
{
    [Serializable]
    [EditorIcon("icon_scriptable")]
    public class AdmobRewardVariable : AdmobAdUnitVariable
    {
        public bool useTestId;
        [NonSerialized] internal Action completedCallback;
        [NonSerialized] internal Action skippedCallback;
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
        private RewardedAd _rewardedAd;
#endif
        public override void Init()
        {
            if (useTestId)
            {
                GetUnitTest();
            }
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (string.IsNullOrEmpty(Id)) return;
            paidedCallback += AppTracking.TrackRevenue;
#endif
        }

        public bool IsEarnRewarded { get; private set; }

        public override void Load()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (string.IsNullOrEmpty(Id)) return;
            Destroy();
            RewardedAd.Load(Id, new AdRequest(), AdLoadCallback);
#endif
        }

        public override bool IsReady()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            return _rewardedAd != null && _rewardedAd.CanShowAd();
#else
            return false;
#endif
        }

        protected override void ShowImpl(string placement = null)
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            _rewardedAd.Show(UserRewardEarnedCallback);
#endif
        }

        public override AdUnitVariable Show(string placement = null)
        {
            ResetChainCallback();
            if (!UnityEngine.Application.isMobilePlatform || string.IsNullOrEmpty(Id) || !IsReady())
                return this;
            ShowImpl(placement);
            return this;
        }

        protected override void ResetChainCallback()
        {
            base.ResetChainCallback();
            completedCallback = null;
            skippedCallback = null;
        }

        public override void Destroy()
        {
#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
            if (_rewardedAd == null) return;
            _rewardedAd.Destroy();
            _rewardedAd = null;
            IsEarnRewarded = false;
#endif
        }

#if VIRTUESKY_ADS && VIRTUESKY_ADMOB
        private void AdLoadCallback(RewardedAd ad, LoadAdError error)
        {
            // if error is not null, the load request failed.
            if (error != null || ad == null)
            {
                OnAdFailedToLoad(error);
                return;
            }

            _rewardedAd = ad;
            _rewardedAd.OnAdFullScreenContentClosed += OnAdClosed;
            _rewardedAd.OnAdFullScreenContentFailed += OnAdFailedToShow;
            _rewardedAd.OnAdFullScreenContentOpened += OnAdOpening;
            _rewardedAd.OnAdPaid += OnAdPaided;
            _rewardedAd.OnAdClicked += OnAdClicked;
            OnAdLoaded();
        }

        private void OnAdClicked()
        {
            Common.CallActionAndClean(ref clickedCallback);
            OnClickedAdEvent?.Invoke();
        }

        private void OnAdPaided(AdValue value)
        {
            paidedCallback?.Invoke(value.Value / 1000000f,
                "Admob",
                Id,
                "RewardedAd", AdMediation.Admob.ToString());
        }

        private void OnAdOpening()
        {
            AdStatic.IsShowingAd = true;
            IsShowing = true;
            Common.CallActionAndClean(ref displayedCallback);
            OnDisplayedAdEvent?.Invoke();
        }

        private void OnAdFailedToShow(AdError obj)
        {
            Common.CallActionAndClean(ref failedToDisplayCallback);
            OnFailedToDisplayAdEvent?.Invoke(obj.GetMessage());
        }

        private void OnAdClosed()
        {
            AdStatic.IsShowingAd = false;
            IsShowing = false;
            Common.CallActionAndClean(ref closedCallback);
            OnClosedAdEvent?.Invoke();
            if (IsEarnRewarded)
            {
                Common.CallActionAndClean(ref completedCallback);
                Destroy();
                return;
            }

            Common.CallActionAndClean(ref skippedCallback);
            Destroy();
        }

        private void OnAdLoaded()
        {
            Common.CallActionAndClean(ref loadedCallback);
            OnLoadAdEvent?.Invoke();
        }

        private void OnAdFailedToLoad(LoadAdError error)
        {
            Common.CallActionAndClean(ref failedToLoadCallback);
            OnFailedToLoadAdEvent?.Invoke(error.GetMessage());
        }

        private void UserRewardEarnedCallback(Reward reward)
        {
            IsEarnRewarded = true;
        }
#endif

        [ContextMenu("Get Id test")]
        void GetUnitTest()
        {
#if UNITY_ANDROID
            androidId = "ca-app-pub-3940256099942544/5224354917";
#elif UNITY_IOS
            iOSId = "ca-app-pub-3940256099942544/1712485313";
#endif
        }
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobRewardVariable.cs.meta
================================================
fileFormatVersion: 2
guid: 0199f7cf7b5f44cfa63f780b9ff50857
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable.meta
================================================
fileFormatVersion: 2
guid: 5a8d9ff9a56c4478887d3a9190da2563
timeCreated: 1695462336

================================================
FILE: VirtueSky/Advertising/Runtime/Admob.meta
================================================
fileFormatVersion: 2
guid: 488c040c267923f4e91f3c963c4e9536
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/General/AdClient.cs
================================================
using VirtueSky.Tracking;

namespace VirtueSky.Ads
{
    public abstract class AdClient
    {
        protected AdSetting adSetting;
        protected bool statusAppOpenFirstIgnore;

        // public AdClient(AdSetting _adSetting)
        // {
        //     adSetting = _adSetting;
        // }

        public void SetupAdSetting(AdSetting _adSetting)
        {
            this.adSetting = _adSetting;
        }

        public abstract void Initialize();
        public abstract void LoadBanner();
        public abstract void LoadInterstitial();
        public abstract void LoadRewarded();
        public abstract void LoadRewardedInterstitial();
        public abstract void LoadAppOpen();
        public abstract void ShowAppOpen();

        //Currently, native overlay ads is only available for admob.
        public abstract void LoadNativeOverlay();
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/General/AdClient.cs.meta
================================================
fileFormatVersion: 2
guid: 7af305bf9c13403badeef5393ca8283a
timeCreated: 1695566887

================================================
FILE: VirtueSky/Advertising/Runtime/General/AdInfo.cs
================================================
namespace VirtueSky.Ads
{
    public class AdsInfo
    {
        public string AdUnitId { get; private set; }
        public string AdFormat { get; private set; }
        public string Placement { get; private set; }
        public string AdNetwork { get; private set; }
        public double Revenue { get; private set; }
        public string AdMediation { get; private set; }
        public string AuctionId { get; private set; }
        
#if VIRTUESKY_APPLOVIN
        public AdsInfo(MaxSdkBase.AdInfo info)
        {
            AdUnitId = info.AdUnitIdentifier;
            AdFormat = info.AdFormat;
            Placement = info.Placement;
            AdNetwork = info.NetworkName;
            Revenue = info.Revenue;
            AdMediation = Ads.AdMediation.AppLovin.ToString();
            AuctionId = "";
        }    
#endif

#if VIRTUESKY_LEVELPLAY
        public AdsInfo(Unity.Services.LevelPlay.LevelPlayAdInfo info)
        {
            AdUnitId = info.AdUnitId;
            AdFormat = info.AdFormat;
            Placement = info.PlacementName;
            AdNetwork = info.AdNetwork;
            Revenue = (double)info.Revenue;
            AdMediation = Ads.AdMediation.LevelPlay.ToString();
            AuctionId = info.AuctionId;
        }
#endif
        
        public AdsInfo(string adUnitId, string adFormat, string placement, string adNetwork, double revenue, string adMediation, string auctionId)
        {
            AdUnitId = adUnitId;
            AdFormat = adFormat;
            Placement = placement;
            AdNetwork = adNetwork;
            Revenue = revenue;
            AdMediation = adMediation;
            AuctionId = auctionId;
        }
    }
    
    public class AdsError
    {
        public int ErrorCode { get; private set; }
        public string ErrorMessage { get; private set; }
        
#if VIRTUESKY_APPLOVIN
        public AdsError(MaxSdkBase.ErrorInfo info)
        {
            ErrorCode = (int)info.Code;
            ErrorMessage = info.Message;
        }
#endif

#if VIRTUESKY_LEVELPLAY
        public AdsError(Unity.Services.LevelPlay.LevelPlayAdError adError)
        {
            ErrorCode = adError.ErrorCode;
            ErrorMessage = adError.ErrorMessage;
        }
#endif

#if VIRTUESKY_ADMOB
        public AdsError(GoogleMobileAds.Api.AdError adError)
        {
            ErrorCode = adError.GetCode();
            ErrorMessage = adError.GetMessage();
        }
#endif
        public AdsError(int errorCode, string errorMessage)
        {
            ErrorCode = errorCode;
            ErrorMessage = errorMessage;
        }

    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/General/AdInfo.cs.meta
================================================
fileFormatVersion: 2
guid: 12c07896615a460a871b51f30257302f
timeCreated: 1776757990

================================================
FILE: VirtueSky/Advertising/Runtime/General/AdSetting.cs
================================================
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Serialization;
using VirtueSky.Inspector;
#if UNITY_EDITOR
using VirtueSky.UtilsEditor;
#endif


namespace VirtueSky.Ads
{
    [EditorIcon("icon_scriptable")]
    public class AdSetting : ScriptableObject
    {
        [Range(5, 100), SerializeField] private float adCheckingInterval = 8f;

        [Range(5, 100), SerializeField] private float adLoadingInterval = 15f;

        [SerializeField] private bool useAppLovin = true;
        [SerializeField] private bool useAdmob;
        [SerializeField] private bool useLevelPlay;
        [SerializeField] private bool enableTrackAdRevenue = true;

        [Tooltip("Install google-mobile-ads sdk to use GDPR"), SerializeField]
        private bool enableGDPR;

        [SerializeField] private bool enableGDPRTestMode;
        public float AdCheckingInterval => adCheckingInterval;
        public float AdLoadingInterval => adLoadingInterval;
        public bool UseAppLovin => useAppLovin;
        public bool UseAdmob => useAdmob;
        public bool UseLevelPlay => useLevelPlay;
        public bool EnableTrackAdRevenue => enableTrackAdRevenue;
        public bool EnableGDPR => enableGDPR;
        public bool EnableGDPRTestMode => enableGDPRTestMode;

        #region AppLovin

        [TextArea, SerializeField] private string sdkKey;
        [SerializeField] private MaxBannerVariable maxBannerVariable;
        [SerializeField] private MaxInterVariable maxInterVariable;
        [SerializeField] private MaxRewardVariable maxRewardVariable;
        [SerializeField] private MaxAppOpenVariable maxAppOpenVariable;

        public string SdkKey => sdkKey;
        public MaxBannerVariable MaxBannerVariable => maxBannerVariable;
        public MaxInterVariable MaxInterVariable => maxInterVariable;
        public MaxRewardVariable MaxRewardVariable => maxRewardVariable;
        public MaxAppOpenVariable MaxAppOpenVariable => maxAppOpenVariable;

        #endregion

        #region Admob

        // [HeaderLine("Admob")] 
        [SerializeField] private AdmobBannerVariable admobBannerVariable;
        [SerializeField] private AdmobInterVariable admobInterVariable;
        [SerializeField] private AdmobRewardVariable admobRewardVariable;
        [SerializeField] private AdmobRewardInterVariable admobRewardInterVariable;
        [SerializeField] private AdmobAppOpenVariable admobAppOpenVariable;
        [SerializeField] private AdmobNativeOverlayVariable admobNativeOverlayVariable;

        [Tooltip(
             "If you enable and connect admob with firebase, ad_impression will be automatically tracked. If you disable and disconnect admob with firebase, ad_impression will be tracked manually."),
         SerializeField]
        private bool autoTrackingAdImpressionAdmob = true;

        [SerializeField] private bool admobEnableTestMode;
        [SerializeField] private List<string> admobDevicesTest;
        public AdmobBannerVariable AdmobBannerVariable => admobBannerVariable;
        public AdmobInterVariable AdmobInterVariable => admobInterVariable;
        public AdmobRewardVariable AdmobRewardVariable => admobRewardVariable;
        public AdmobRewardInterVariable AdmobRewardInterVariable => admobRewardInterVariable;
        public AdmobAppOpenVariable AdmobAppOpenVariable => admobAppOpenVariable;
        public AdmobNativeOverlayVariable AdmobNativeOverlayVariable => admobNativeOverlayVariable;
        public bool AdmobEnableTestMode => admobEnableTestMode;
        public bool AutoTrackingAdImpressionAdmob => autoTrackingAdImpressionAdmob;

        public List<string> AdmobDevicesTest => admobDevicesTest;

        #endregion

        #region LevelPlay

        [SerializeField] private string androidAppKey;
        [SerializeField] private string iOSAppKey;
        [SerializeField] private bool useTestAppKey;

        [SerializeField] private LevelPlayBannerVariable levelPlayBannerVariable;
        [SerializeField] private LevelPlayInterVariable levelPlayInterVariable;
        [SerializeField] private LevelPlayRewardVariable levelPlayRewardVariable;

        public string AndroidAppKey
        {
            get => androidAppKey;
            set => androidAppKey = value;
        }

        public string IosAppKey
        {
            get => iOSAppKey;
            set => iOSAppKey = value;
        }

        public string AppKey
        {
            get
            {
#if UNITY_ANDROID
                return androidAppKey;
#elif UNITY_IOS
                return iOSAppKey;
#else
                return string.Empty;
#endif
            }
            set
            {
#if UNITY_ANDROID
                androidAppKey = value;
#elif UNITY_IOS
                iOSAppKey = value;
#endif
            }
        }

        public bool UseTestAppKey => useTestAppKey;
        public LevelPlayBannerVariable LevelPlayBannerVariable => levelPlayBannerVariable;
        public LevelPlayInterVariable LevelPlayInterVariable => levelPlayInterVariable;
        public LevelPlayRewardVariable LevelPlayRewardVariable => levelPlayRewardVariable;

        #endregion
    }

    public enum AdMediation
    {
        AppLovin,
        Admob,
        LevelPlay
    }

    public enum AdsPosition
    {
        Top = 1,
        Bottom = 0,
        TopLeft = 2,
        TopRight = 3,
        BottomLeft = 4,
        BottomRight = 5,
        Center = 6,
    }

    public enum AdsSize
    {
        Banner = 0, // 320x50
        Adaptive = 5, // full width
        MediumRectangle = 1, // 300x250
        IABBanner = 2, // 468x60
        Leaderboard = 3, // 728x90
        // SmartBanner = 4,
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/General/AdSetting.cs.meta
================================================
fileFormatVersion: 2
guid: 4faf330974234e808669c796dc78cdee
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/General/AdStatic.cs
================================================
using System;
using UnityEngine;
using VirtueSky.DataStorage;

namespace VirtueSky.Ads
{
    public static class AdStatic
    {
        public static bool IsRemoveAd
        {
            get => GameData.Get($"{Application.identifier}_removeads", false);
            set => GameData.Set($"{Application.identifier}_removeads", value);
        }

        public static DateTime AdClosingTime { get; internal set; }

        private static bool isShowingAd;

        public static bool IsShowingAd
        {
            get => isShowingAd;
            internal set
            {
                isShowingAd = value;
                if (!value)
                {
                    AdClosingTime = DateTime.Now;
                }
            }
        }

        internal static Action waitAppOpenDisplayedAction;
        internal static Action waitAppOpenClosedAction;

        public static AdUnitVariable OnDisplayed(this AdUnitVariable unit, Action onDisplayed)
        {
            unit.displayedCallback = onDisplayed;
            return unit;
        }

        public static AdUnitVariable OnClosed(this AdUnitVariable unit, Action onClosed)
        {
            unit.closedCallback = onClosed;
            return unit;
        }

        public static AdUnitVariable OnLoaded(this AdUnitVariable unit, Action onLoaded)
        {
            unit.loadedCallback = onLoaded;
            return unit;
        }

        public static AdUnitVariable OnFailedToLoad(this AdUnitVariable unit, Action onFailedToLoad)
        {
            unit.failedToLoadCallback = onFailedToLoad;
            return unit;
        }

        public static AdUnitVariable OnFailedToDisplay(this AdUnitVariable unit, Action onFailedToDisplay)
        {
            unit.failedToDisplayCallback = onFailedToDisplay;
            return unit;
        }

        public static AdUnitVariable OnClicked(this AdUnitVariable unit, Action onClicked)
        {
            unit.clickedCallback = onClicked;
            return unit;
        }

        public static AdUnitVariable OnCompleted(this AdUnitVariable unit, Action onCompleted)
        {
            if (!Application.isMobilePlatform)
            {
                onCompleted?.Invoke();
            }

            switch (unit)
            {
                case AdmobInterVariable admobInter:
                    admobInter.completedCallback = onCompleted;
                    return unit;
                case AdmobRewardVariable admobReward:
                    admobReward.completedCallback = onCompleted;
                    return unit;
                case AdmobRewardInterVariable admobRewardInter:
                    admobRewardInter.completedCallback = onCompleted;
                    return unit;
                case MaxInterVariable maxInter:
                    maxInter.completedCallback = onCompleted;
                    return unit;
                case MaxRewardVariable maxReward:
                    maxReward.completedCallback = onCompleted;
                    return unit;
                case LevelPlayInterVariable ironSourceInterVariable:
                    ironSourceInterVariable.completedCallback = onCompleted;
                    return unit;
                case LevelPlayRewardVariable ironSourceRewardVariable:
                    ironSourceRewardVariable.completedCallback = onCompleted;
                    return unit;
            }

            return unit;
        }

        public static AdUnitVariable OnSkipped(this AdUnitVariable unit, Action onSkipped)
        {
            switch (unit)
            {
                case AdmobRewardVariable admobReward:
                    admobReward.skippedCallback = onSkipped;
                    return unit;
                case AdmobRewardInterVariable admobRewardInter:
                    admobRewardInter.skippedCallback = onSkipped;
                    return unit;
                case MaxRewardVariable maxReward:
                    maxReward.skippedCallback = onSkipped;
                    return unit;
                case LevelPlayRewardVariable ironSourceRewardVariable:
                    ironSourceRewardVariable.skippedCallback = onSkipped;
                    return unit;
            }

            return unit;
        }
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/General/AdStatic.cs.meta
================================================
fileFormatVersion: 2
guid: 4132cc5be9fa4959a8bafd62a51bb7ca
timeCreated: 1695460884

================================================
FILE: VirtueSky/Advertising/Runtime/General/AdUnitVariable.cs
================================================
using System;
using UnityEngine;


namespace VirtueSky.Ads
{
    public abstract class AdUnitVariable : ScriptableObject, IAdUnit
    {
        [NonSerialized] internal Action loadedCallback;
        [NonSerialized] internal Action failedToLoadCallback;
        [NonSerialized] internal Action displayedCallback;
        [NonSerialized] internal Action failedToDisplayCallback;
        [NonSerialized] internal Action closedCallback;
        [NonSerialized] internal Action clickedCallback;
        [NonSerialized] public Action<double, string, string, string, string> paidedCallback;

        public Action OnLoadAdEvent;
        public Action<string> OnFailedToLoadAdEvent;
        public Action OnDisplayedAdEvent;
        public Action<string> OnFailedToDisplayAdEvent;
        public Action OnClosedAdEvent;
        public Action OnClickedAdEvent;

        public abstract bool IsShowing { get; internal set; }
        public virtual string Id
        {
            get => "";
        }

        protected virtual void ShowImpl(string placement = null)
        {
        }

        protected virtual void ResetChainCallback()
        {
            loadedCallback = null;
            failedToDisplayCallback = null;
            failedToLoadCallback = null;
            closedCallback = null;
        }

        public virtual void HideBanner()
        {
        }

        public abstract AdUnitVariable Show(string placement = null);

        public virtual void Init()
        {
        }

        public virtual void Load()
        {
        }

        public virtual bool IsReady()
        {
            return false;
        }

        public virtual void Destroy()
        {
        }
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/General/AdUnitVariable.cs.meta
================================================
fileFormatVersion: 2
guid: 0a0b123368074cd1a359dea0f1ef9233
timeCreated: 1695460627

================================================
FILE: VirtueSky/Advertising/Runtime/General/Advertising.cs
================================================
using System;
using System.Collections;
using System.Collections.Generic;
#if VIRTUESKY_ADMOB
using GoogleMobileAds.Api;
using GoogleMobileAds.Ump.Api;
#endif

#if UNITY_IOS
using Unity.Advertisement.IosSupport;
#endif

using UnityEngine;
using UnityEngine.Serialization;
#if UNITY_EDITOR
using VirtueSky.UtilsEditor;
#endif
using VirtueSky.Events;
using VirtueSky.Inspector;
using VirtueSky.Misc;
using VirtueSky.Tracking;
using VirtueSky.Utils;

namespace VirtueSky.Ads
{
    [EditorIcon("icon_controller"), HideMonoScript]
    public class Advertising : MonoBehaviour
    {
        [Space] [SerializeField] private bool dontDestroyOnLoad = false;
        [Tooltip("Require"), SerializeField] private AdSetting adSetting;

        [Tooltip("Allows nulls"), SerializeField]
        private BooleanEvent changePreventDisplayAppOpenEvent;

#if VIRTUESKY_ADMOB
        [Space] [HeaderLine("Admob GDPR")] [Tooltip("Allows nulls"), SerializeField]
        private EventNoParam callShowAgainGDPREvent;
#endif


        private IEnumerator autoLoadAdCoroutine;
        private float _lastTimeLoadInterstitialAdTimestamp = DEFAULT_TIMESTAMP;
        private float _lastTimeLoadRewardedTimestamp = DEFAULT_TIMESTAMP;
        private float _lastTimeLoadRewardedInterstitialTimestamp = DEFAULT_TIMESTAMP;
        private float _lastTimeLoadAppOpenTimestamp = DEFAULT_TIMESTAMP;
        private const float DEFAULT_TIMESTAMP = -1000;

        // private AdClient currentAdClient;
        private AdClient maxAdClient;
        private AdClient admobAdClient;
        private AdClient ironSourceAdClient;

        private void Awake()
        {
            if (dontDestroyOnLoad)
            {
                DontDestroyOnLoad(this.gameObject);
            }
        }

        private void OnEnable()
        {
#if VIRTUESKY_ADMOB
            if (callShowAgainGDPREvent != null)
            {
                callShowAgainGDPREvent.AddListener(ShowPrivacyOptionsForm);
            }
#endif
        }

        private void OnDisable()
        {
#if VIRTUESKY_ADMOB
            if (callShowAgainGDPREvent != null)
            {
                callShowAgainGDPREvent.RemoveListener(ShowPrivacyOptionsForm);
            }
#endif
        }

        private void Start()
        {
            if (changePreventDisplayAppOpenEvent != null)
                changePreventDisplayAppOpenEvent.AddListener(OnChangePreventDisplayOpenAd);
            if (adSetting.EnableGDPR)
            {
#if VIRTUESKY_ADMOB
#if UNITY_IOS
                if (ATTrackingStatusBinding.GetAuthorizationTrackingStatus() ==
                    ATTrackingStatusBinding.AuthorizationTrackingStatus.AUTHORIZED)
                {
                    InitGdpr();
                }
                else
                {
                    InitAdClient();
                }
#else
                InitGdpr();
#endif


#endif
            }
            else
            {
                InitAdClient();
            }
        }

        void InitAdClient()
        {
            AppTracking.Init(adSetting.EnableTrackAdRevenue);
            if (adSetting.UseAppLovin)
            {
                maxAdClient = new MaxAdClient(adSetting);
                maxAdClient.Initialize();
                Debug.Log($"Use: {maxAdClient}".SetColor(CustomColor.Cyan));
            }

            if (adSetting.UseAdmob)
            {
                admobAdClient = new AdmobAdClient(adSetting);
                admobAdClient.Initialize();
                Debug.Log($"Use: {admobAdClient}".SetColor(CustomColor.Cyan));
            }

            if (adSetting.UseLevelPlay)
            {
                ironSourceAdClient = new LevelPlayAdClient(adSetting);
                ironSourceAdClient.Initialize();
                Debug.Log($"Use: {ironSourceAdClient}".SetColor(CustomColor.Cyan));
            }

            InitAutoLoadAds();
        }

        private void InitAutoLoadAds()
        {
            if (autoLoadAdCoroutine != null) StopCoroutine(autoLoadAdCoroutine);
            autoLoadAdCoroutine = IeAutoLoadAll();
            StartCoroutine(autoLoadAdCoroutine);
        }

        private void OnChangePreventDisplayOpenAd(bool state)
        {
            AdStatic.IsShowingAd = state;
        }

        IEnumerator IeAutoLoadAll(float delay = 0)
        {
            if (delay > 0) yield return new WaitForSeconds(delay);
            while (true)
            {
                AutoLoadInterAds();
                AutoLoadRewardAds();
                AutoLoadRewardInterAds();
                AutoLoadAppOpenAds();
                yield return new WaitForSeconds(adSetting.AdCheckingInterval);
            }
        }

        #region Func Load Ads

        void AutoLoadInterAds()
        {
            if (Time.realtimeSinceStartup - _lastTimeLoadInterstitialAdTimestamp <
                adSetting.AdLoadingInterval) return;
            if (adSetting.UseAppLovin) maxAdClient.LoadInterstitial();
            if (adSetting.UseAdmob) admobAdClient.LoadInterstitial();
            if (adSetting.UseLevelPlay) ironSourceAdClient.LoadInterstitial();
            _lastTimeLoadInterstitialAdTimestamp = Time.realtimeSinceStartup;
        }

        void AutoLoadRewardAds()
        {
            if (Time.realtimeSinceStartup - _lastTimeLoadRewardedTimestamp <
                adSetting.AdLoadingInterval) return;
            if (adSetting.UseAppLovin) maxAdClient.LoadRewarded();
            if (adSetting.UseAdmob) admobAdClient.LoadRewarded();
            if (adSetting.UseLevelPlay) ironSourceAdClient.LoadRewarded();
            _lastTimeLoadRewardedTimestamp = Time.realtimeSinceStartup;
        }

        void AutoLoadRewardInterAds()
        {
            if (Time.realtimeSinceStartup - _lastTimeLoadRewardedInterstitialTimestamp <
                adSetting.AdLoadingInterval) return;
            if (adSetting.UseAppLovin) maxAdClient.LoadRewardedInterstitial();
            if (adSetting.UseAdmob) admobAdClient.LoadRewardedInterstitial();
            if (adSetting.UseLevelPlay) ironSourceAdClient.LoadRewardedInterstitial();
            _lastTimeLoadRewardedInterstitialTimestamp = Time.realtimeSinceStartup;
        }

        void AutoLoadAppOpenAds()
        {
            if (Time.realtimeSinceStartup - _lastTimeLoadAppOpenTimestamp <
                adSetting.AdLoadingInterval) return;
            if (adSetting.UseAppLovin) maxAdClient.LoadAppOpen();
            if (adSetting.UseAdmob) admobAdClient.LoadAppOpen();
            if (adSetting.UseLevelPlay) ironSourceAdClient.LoadAppOpen();
            _lastTimeLoadAppOpenTimestamp = Time.realtimeSinceStartup;
        }

        #endregion

        #region Admob GDPR

#if VIRTUESKY_ADMOB
        private void InitGdpr()
        {
#if UNITY_EDITOR
            InitAdClient();
#else
            string deviceID = SystemInfo.deviceUniqueIdentifier;
            string deviceIDUpperCase = deviceID.ToUpper();

            Debug.Log("TestDeviceHashedId = " + deviceIDUpperCase);
            ConsentRequestParameters request = new ConsentRequestParameters { TagForUnderAgeOfConsent = false };
            if (adSetting.EnableGDPRTestMode)
            {
                List<string> listDeviceIdTestMode = new List<string>();
                listDeviceIdTestMode.Add(deviceIDUpperCase);
                request.ConsentDebugSettings = new ConsentDebugSettings
                {
                    DebugGeography = DebugGeography.EEA,
                    TestDeviceHashedIds = listDeviceIdTestMode
                };
            }

            ConsentInformation.Update(request, OnConsentInfoUpdated);
#endif
        }

        private void OnConsentInfoUpdated(FormError consentError)
        {
            if (consentError != null)
            {
                Debug.Log("error consentError = " + consentError);
                return;
            }

            ConsentForm.LoadAndShowConsentFormIfRequired((FormError formError) =>
                {
                    if (formError != null)
                    {
                        Debug.Log("error consentError = " + consentError);
                        return;
                    }

                    Debug.Log("ConsentStatus = " + ConsentInformation.ConsentStatus.ToString());
                    Debug.Log("CanRequestAds = " + ConsentInformation.CanRequestAds());

                    if (ConsentInformation.CanRequestAds())
                    {
                        MobileAds.RaiseAdEventsOnUnityMainThread = true;
                        InitAdClient();
                    }
                }
            );
        }

        public void LoadAndShowConsentForm()
        {
            Debug.Log("LoadAndShowConsentForm Start!");

            ConsentForm.Load((consentForm, loadError) =>
            {
                if (loadError != null)
                {
                    Debug.Log("error loadError = " + loadError);
                    return;
                }


                consentForm.Show(showError =>
                {
                    if (showError != null)
                    {
                        Debug.Log("error showError = " + showError);
                        return;
                    }
                });
            });
        }

        private void ShowPrivacyOptionsForm()
        {
            Debug.Log("Showing privacy options form.");

            ConsentForm.ShowPrivacyOptionsForm((FormError showError) =>
            {
                if (showError != null)
                {
                    Debug.LogError("Error showing privacy options form with error: " + showError.Message);
                }
            });
        }
#endif

        #endregion

#if UNITY_EDITOR
        private void Reset()
        {
            adSetting = CreateAsset.CreateAndGetScriptableAsset<VirtueSky.Ads.AdSetting>("/Ads/Setting");
        }
#endif
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/General/Advertising.cs.meta
================================================
fileFormatVersion: 2
guid: e380b752cb6c40aaace317083692044f
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: 1c63e3b6583d6b54a8de6efcd2a86725, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/General/IAdUnit.cs
================================================
namespace VirtueSky.Ads
{
    public interface IAdUnit
    {
        public void Init();
        public void Load();
        public bool IsReady();
        public void Destroy();
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/General/IAdUnit.cs.meta
================================================
fileFormatVersion: 2
guid: 5114c7ef942a40ff9e7dbf458d6ed339
timeCreated: 1728631990

================================================
FILE: VirtueSky/Advertising/Runtime/General.meta
================================================
fileFormatVersion: 2
guid: f3d6f74e978547a43947efa49ed48e87
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayAdClient.cs
================================================
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
using Unity.Services.LevelPlay;
#endif
using VirtueSky.Core;
using VirtueSky.Tracking;

namespace VirtueSky.Ads
{
    public sealed class LevelPlayAdClient : AdClient
    {
        public LevelPlayAdClient(AdSetting _adSetting)
        {
            adSetting = _adSetting;
        }

        public bool SdkInitializationCompleted { get; private set; }

        public override void Initialize()
        {
            SdkInitializationCompleted = false;
            if (adSetting.UseTestAppKey)
            {
                adSetting.AndroidAppKey = "85460dcd";
                adSetting.IosAppKey = "8545d445";
            }
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
            App.AddPauseCallback(OnAppStateChange);
            LevelPlay.OnInitSuccess += SdkInitializationCompletedEvent;
            LevelPlay.OnImpressionDataReady += ImpressionDataReadyEvent;
            adSetting.LevelPlayBannerVariable.Init();
            adSetting.LevelPlayInterVariable.Init();
            adSetting.LevelPlayRewardVariable.Init();
            LevelPlay.ValidateIntegration();
            LevelPlay.Init(adSetting.AppKey);
#endif
        }

#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
        private void ImpressionDataReadyEvent(LevelPlayImpressionData impressionData)
        {
            if (impressionData.Revenue != null)
            {
                AppTracking.TrackRevenue((double)impressionData.Revenue, impressionData.AdNetwork,
                    impressionData.MediationAdUnitId,
                    impressionData.AdFormat, AdMediation.LevelPlay.ToString());
            }
        }

        private void OnAppStateChange(bool pauseStatus)
        {
            LevelPlay.SetPauseGame(pauseStatus);
        }

        void SdkInitializationCompletedEvent(LevelPlayConfiguration config)
        {
            SdkInitializationCompleted = true;
            LoadInterstitial();
            LoadRewarded();
            LoadBanner();
        }
#endif


        public override void LoadBanner()
        {
            if (adSetting.LevelPlayBannerVariable == null) return;
            adSetting.LevelPlayBannerVariable.Load();
        }

        public override void LoadInterstitial()
        {
            if (adSetting.LevelPlayInterVariable == null) return;
            if (!adSetting.LevelPlayInterVariable.IsReady()) adSetting.LevelPlayInterVariable.Load();
        }

        public override void LoadRewarded()
        {
            if (adSetting.LevelPlayRewardVariable == null) return;
            if (!adSetting.LevelPlayRewardVariable.IsReady()) adSetting.LevelPlayRewardVariable.Load();
        }

        public override void LoadRewardedInterstitial()
        {
        }

        public override void LoadAppOpen()
        {
        }

        public override void ShowAppOpen()
        {
        }

        public override void LoadNativeOverlay()
        {
        }
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayAdClient.cs.meta
================================================
fileFormatVersion: 2
guid: 163589e8de4d4fcaaac2df3fbf96f414
timeCreated: 1719850536

================================================
FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayAdUnitVariable.cs
================================================
using System;
using UnityEngine;

namespace VirtueSky.Ads
{
    public class LevelPlayAdUnitVariable : AdUnitVariable
    {
        [SerializeField] protected string androidId;
        [SerializeField] protected string iOSId;
        [NonSerialized] private string idRuntime = string.Empty;

        public override bool IsShowing { get; internal set; }

        public override string Id
        {
            get
            {
                if (idRuntime == String.Empty)
                {
#if UNITY_ANDROID
                    return androidId;
#elif UNITY_IOS
                    return iOSId;
#else
                    return string.Empty;
#endif
                }

                return idRuntime;
            }
        }

        public override AdUnitVariable Show(string placement = null)
        {
            ResetChainCallback();
            if (!Application.isMobilePlatform || AdStatic.IsRemoveAd || !IsReady()) return this;
            ShowImpl(placement);
            return this;
        }

        public void SetIdRuntime(string unitId)
        {
            idRuntime = unitId;
        }
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayAdUnitVariable.cs.meta
================================================
fileFormatVersion: 2
guid: 591b3c010489423bba0d8576ef5fbe49
timeCreated: 1728631885

================================================
FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable/LevelPlayBannerVariable.cs
================================================
using System;
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
using Unity.Services.LevelPlay;
using VirtueSky.Core;
#endif
using System.Collections;
using UnityEngine;
using VirtueSky.Inspector;
using VirtueSky.Misc;

namespace VirtueSky.Ads
{
    [Serializable]
    [EditorIcon("icon_scriptable")]
    public class LevelPlayBannerVariable : LevelPlayAdUnitVariable
    {
        public AdsSize size;
        public AdsPosition position;
        public bool isShowOnLoad;
        private bool _isBannerDestroyed = true;
        private bool _isBannerShowing;
        private bool _previousBannerShowStatus;
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
        private LevelPlayBannerAd bannerAd;
        private readonly WaitForSeconds _waitBannerReload = new WaitForSeconds(5f);
        private IEnumerator _reload;
#endif
        public override void Init()
        {
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
            if (AdStatic.IsRemoveAd) return;
            _isBannerDestroyed = true;
#endif
        }

        public override void Load()
        {
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
            if (AdStatic.IsRemoveAd) return;
            Destroy();
            LevelPlayBannerAd.Config.Builder builder = new LevelPlayBannerAd.Config.Builder();
            builder.SetPosition(ConvertBannerPosition());
            builder.SetSize(ConvertBannerSize());
            builder.SetDisplayOnLoad(isShowOnLoad);
            var config = builder.Build();
            bannerAd = new LevelPlayBannerAd(Id, config);
            bannerAd.OnAdLoaded += BannerOnAdLoadedEvent;
            bannerAd.OnAdLoadFailed += BannerOnAdLoadFailedEvent;
            bannerAd.OnAdClicked += BannerOnAdClickedEvent;
            bannerAd.OnAdDisplayed += BannerOnAdDisplayedEvent;
            bannerAd.OnAdDisplayFailed += BannerOnAdDisplayFailedEvent;
            bannerAd.OnAdLeftApplication += BannerOnAdLeftApplicationEvent;
            bannerAd.LoadAd();
            _isBannerDestroyed = false;
#endif
        }

        void OnWaitAppOpenClosed()
        {
            if (_previousBannerShowStatus)
            {
                _previousBannerShowStatus = false;
                Show();
            }
        }

        void OnWaitAppOpenDisplayed()
        {
            _previousBannerShowStatus = _isBannerShowing;
            if (_isBannerShowing) HideBanner();
        }

        public override bool IsReady()
        {
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
            return bannerAd != null;
#else
            return false;
#endif
        }

        protected override void ShowImpl(string placement = null)
        {
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
            _isBannerShowing = true;
            IsShowing = true;
            AdStatic.waitAppOpenClosedAction = OnWaitAppOpenClosed;
            AdStatic.waitAppOpenDisplayedAction = OnWaitAppOpenDisplayed;
            Load();
            bannerAd.ShowAd();
#endif
        }

        public override void Destroy()
        {
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
            _isBannerShowing = false;
            _isBannerDestroyed = true;
            IsShowing = false;
            AdStatic.waitAppOpenClosedAction = null;
            AdStatic.waitAppOpenDisplayedAction = null;
            bannerAd.DestroyAd();
#endif
        }

        public override void HideBanner()
        {
            base.HideBanner();
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
            _isBannerShowing = false;
            IsShowing = false;
            bannerAd.HideAd();
#endif
        }


#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY

        private LevelPlayAdSize ConvertBannerSize()
        {
            switch (size)
            {
                case AdsSize.Banner: return LevelPlayAdSize.BANNER;
                case AdsSize.Adaptive: return LevelPlayAdSize.LARGE;
                case AdsSize.MediumRectangle: return LevelPlayAdSize.MEDIUM_RECTANGLE;
                case AdsSize.Leaderboard: return LevelPlayAdSize.LEADERBOARD;
                default: return LevelPlayAdSize.BANNER;
            }
        }

        private LevelPlayBannerPosition ConvertBannerPosition()
        {
            switch (position)
            {
                case AdsPosition.Bottom: return LevelPlayBannerPosition.BottomCenter;
                case AdsPosition.Top: return LevelPlayBannerPosition.TopCenter;
                default: return LevelPlayBannerPosition.BottomCenter;
            }
        }

        #region Fun Callback

        void BannerOnAdLoadedEvent(LevelPlayAdInfo adInfo)
        {
            Common.CallActionAndClean(ref loadedCallback);
            OnLoadAdEvent?.Invoke();
        }

        void BannerOnAdLoadFailedEvent(LevelPlayAdError ironSourceError)
        {
            Common.CallActionAndClean(ref failedToLoadCallback);
            OnFailedToLoadAdEvent?.Invoke(ironSourceError.ErrorMessage);
            if (_reload != null) App.StopCoroutine(_reload);
            _reload = DelayBannerReload();
            App.StartCoroutine(_reload);
        }

        private IEnumerator DelayBannerReload()
        {
            yield return _waitBannerReload;
            Load();
        }

        void BannerOnAdClickedEvent(LevelPlayAdInfo adInfo)
        {
            Common.CallActionAndClean(ref clickedCallback);
            OnClickedAdEvent?.Invoke();
        }

        void BannerOnAdDisplayedEvent(LevelPlayAdInfo adInfo)
        {
            IsShowing = true;
            Common.CallActionAndClean(ref displayedCallback);
            OnDisplayedAdEvent?.Invoke();
        }

        void BannerOnAdDisplayFailedEvent(LevelPlayAdInfo adInfo, LevelPlayAdError adError)
        {
            Common.CallActionAndClean(ref failedToDisplayCallback);
            OnFailedToDisplayAdEvent?.Invoke(adError.ErrorMessage);
        }

        void BannerOnAdLeftApplicationEvent(LevelPlayAdInfo adInfo)
        {
        }

        #endregion

#endif
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable/LevelPlayBannerVariable.cs.meta
================================================
fileFormatVersion: 2
guid: f5151f19197e497aa56422344920b819
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable/LevelPlayInterVariable.cs
================================================
using System;
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
using Unity.Services.LevelPlay;
#endif
using UnityEngine;
using VirtueSky.Inspector;
using VirtueSky.Misc;

namespace VirtueSky.Ads
{
    [Serializable]
    [EditorIcon("icon_scriptable")]
    public class LevelPlayInterVariable : LevelPlayAdUnitVariable
    {
        [NonSerialized] internal Action completedCallback;
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
        private LevelPlayInterstitialAd interstitialAd;
#endif
        public override void Init()
        {
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
            if (AdStatic.IsRemoveAd) return;
#endif
        }

        public override void Load()
        {
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
            if (AdStatic.IsRemoveAd) return;
            var configBuilder = new LevelPlayInterstitialAd.Config.Builder();
            var config = configBuilder.Build();
            interstitialAd = new LevelPlayInterstitialAd(Id, config);
            interstitialAd.OnAdLoaded += InterstitialOnAdLoadedEvent;
            interstitialAd.OnAdLoadFailed += InterstitialOnAdLoadFailed;
            interstitialAd.OnAdDisplayed += InterstitialOnAdDisplayEvent;
            interstitialAd.OnAdClicked += InterstitialOnAdClickedEvent;
            interstitialAd.OnAdDisplayFailed += InterstitialOnAdDisplayFailedEvent;
            interstitialAd.OnAdClosed += InterstitialOnAdClosedEvent;
            interstitialAd.LoadAd();
#endif
        }

        public override bool IsReady()
        {
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
            return interstitialAd.IsAdReady();
#else
            return false;
#endif
        }

        protected override void ShowImpl(string placement = null)
        {
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
            interstitialAd.ShowAd(placement);
#endif
        }

        public override void Destroy()
        {
        }

        protected override void ResetChainCallback()
        {
            base.ResetChainCallback();
            completedCallback = null;
        }


#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY

        #region Fun Callback

        void InterstitialOnAdLoadedEvent(LevelPlayAdInfo adInfo)
        {
            Common.CallActionAndClean(ref loadedCallback);
            OnLoadAdEvent?.Invoke();
        }

        void InterstitialOnAdLoadFailed(LevelPlayAdError ironSourceError)
        {
            Common.CallActionAndClean(ref failedToLoadCallback);
            OnFailedToLoadAdEvent?.Invoke(ironSourceError.ErrorMessage);
        }

        void InterstitialOnAdDisplayEvent(LevelPlayAdInfo adInfo)
        {
            AdStatic.IsShowingAd = true;
            IsShowing = true;
            Common.CallActionAndClean(ref displayedCallback);
            OnDisplayedAdEvent?.Invoke();
        }

        void InterstitialOnAdClickedEvent(LevelPlayAdInfo adInfo)
        {
            Common.CallActionAndClean(ref clickedCallback);
            OnClickedAdEvent?.Invoke();
        }

        void InterstitialOnAdDisplayFailedEvent(LevelPlayAdInfo adInfo, LevelPlayAdError adError)
        {
            Common.CallActionAndClean(ref failedToDisplayCallback);
            OnFailedToDisplayAdEvent?.Invoke(adError.ErrorMessage);
        }

        void InterstitialOnAdClosedEvent(LevelPlayAdInfo adInfo)
        {
            AdStatic.IsShowingAd = false;
            IsShowing = false;
            Common.CallActionAndClean(ref completedCallback);
            OnClosedAdEvent?.Invoke();
            Load();
        }

        #endregion

#endif
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable/LevelPlayInterVariable.cs.meta
================================================
fileFormatVersion: 2
guid: d1c4f30e37f14d78abad68a6b2d0a847
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable/LevelPlayRewardVariable.cs
================================================
using System;
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
using Unity.Services.LevelPlay;
#endif
using VirtueSky.Inspector;
using VirtueSky.Misc;

namespace VirtueSky.Ads
{
    [Serializable]
    [EditorIcon("icon_scriptable")]
    public class LevelPlayRewardVariable : LevelPlayAdUnitVariable
    {
        [NonSerialized] internal Action completedCallback;
        [NonSerialized] internal Action skippedCallback;
        public bool IsEarnRewarded { get; private set; }
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
        LevelPlayRewardedAd rewardedAd;
#endif
        public override void Init()
        {
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
            if (AdStatic.IsRemoveAd) return;
#endif
        }


        public override void Load()
        {
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
            if (AdStatic.IsRemoveAd) return;
            var configBuilder = new LevelPlayRewardedAd.Config.Builder();
            var config = configBuilder.Build();
            rewardedAd = new LevelPlayRewardedAd(Id, config);
            rewardedAd.OnAdLoaded += OnAdLoaded;
            rewardedAd.OnAdDisplayed += RewardedVideoOnAdDisplayedEvent;
            rewardedAd.OnAdClosed += RewardedVideoOnAdClosedEvent;
            rewardedAd.OnAdDisplayFailed += RewardedVideoOnAdDisplayFailedEvent;
            rewardedAd.OnAdRewarded += RewardedVideoOnAdRewardedEvent;
            rewardedAd.OnAdClicked += RewardedVideoOnAdClickedEvent;
            rewardedAd.OnAdLoadFailed += RewardedVideoOnAdLoadFailedEvent;
            rewardedAd.LoadAd();
#endif
        }

        public override bool IsReady()
        {
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
            return rewardedAd != null && rewardedAd.IsAdReady();
#else
            return false;
#endif
        }

        protected override void ShowImpl(string placement = null)
        {
#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY
            rewardedAd.ShowAd(placement);
#endif
        }

        public override AdUnitVariable Show(string placement = null)
        {
            ResetChainCallback();
            if (!UnityEngine.Application.isMobilePlatform || !IsReady()) return this;
            ShowImpl(placement);
            return this;
        }

        public override void Destroy()
        {
        }

        protected override void ResetChainCallback()
        {
            base.ResetChainCallback();
            completedCallback = null;
            skippedCallback = null;
        }


#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY

        #region Fun Callback

        void OnAdLoaded(LevelPlayAdInfo adInfo)
        {
            Common.CallActionAndClean(ref loadedCallback);
            OnLoadAdEvent?.Invoke();
        }

        private void RewardedVideoOnAdLoadFailedEvent(LevelPlayAdError ironSourceError)
        {
            Common.CallActionAndClean(ref failedToLoadCallback);
            OnFailedToLoadAdEvent?.Invoke(ironSourceError.ToString());
        }

        void RewardedVideoOnAdDisplayedEvent(LevelPlayAdInfo adInfo)
        {
            AdStatic.IsShowingAd = true;
            IsShowing = true;
            Common.CallActionAndClean(ref displayedCallback);
            OnDisplayedAdEvent?.Invoke();
        }

        void RewardedVideoOnAdClosedEvent(LevelPlayAdInfo adInfo)
        {
            AdStatic.IsShowingAd = false;
            IsShowing = false;
            Common.CallActionAndClean(ref closedCallback);
            OnClosedAdEvent?.Invoke();
            if (!IsReady()) rewardedAd.LoadAd();
            if (IsEarnRewarded)
            {
                Common.CallActionAndClean(ref completedCallback);
                IsEarnRewarded = false;
                return;
            }

            Common.CallActionAndClean(ref skippedCallback);
        }

        void RewardedVideoOnAdDisplayFailedEvent(LevelPlayAdInfo adInfo, LevelPlayAdError ironSourceError)
        {
            Common.CallActionAndClean(ref failedToDisplayCallback);
            OnFailedToDisplayAdEvent?.Invoke(ironSourceError.ToString());
        }

        void RewardedVideoOnAdRewardedEvent(LevelPlayAdInfo info, LevelPlayReward reward)
        {
            IsEarnRewarded = true;
        }

        void RewardedVideoOnAdClickedEvent(LevelPlayAdInfo adInfo)
        {
            Common.CallActionAndClean(ref clickedCallback);
            OnClickedAdEvent?.Invoke();
        }

        #endregion

#endif
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable/LevelPlayRewardVariable.cs.meta
================================================
fileFormatVersion: 2
guid: 6cb21eb6778e4c0ea10445060b08a271
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable.meta
================================================
fileFormatVersion: 2
guid: 7d50cc93b33f4995a04161afc0514175
timeCreated: 1719850500

================================================
FILE: VirtueSky/Advertising/Runtime/LevelPlay.meta
================================================
fileFormatVersion: 2
guid: 1170ec045aef4f39ba9d642d37973423
timeCreated: 1719850368

================================================
FILE: VirtueSky/Advertising/Runtime/Max/MaxAdClient.cs
================================================
using VirtueSky.Core;

namespace VirtueSky.Ads
{
    public sealed class MaxAdClient : AdClient
    {
        public MaxAdClient(AdSetting _adSetting)
        {
            adSetting = _adSetting;
        }

        public override void Initialize()
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            MaxSdk.SetSdkKey(adSetting.SdkKey);
            MaxSdk.InitializeSdk();
            adSetting.MaxBannerVariable.Init();
            adSetting.MaxInterVariable.Init();
            adSetting.MaxRewardVariable.Init();
            adSetting.MaxAppOpenVariable.Init();
            App.AddPauseCallback(OnAppStateChange);
            LoadInterstitial();
            LoadRewarded();
            LoadRewardedInterstitial();
            LoadAppOpen();
            LoadBanner();
#endif
        }


#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
        private void OnAppStateChange(bool pauseStatus)
        {
            if (!pauseStatus && adSetting.MaxAppOpenVariable.autoShow)
            {
                if (adSetting.UseAppLovin) ShowAppOpen();
            }
        }
#endif

        public override void LoadBanner()
        {
            if (adSetting.MaxBannerVariable == null) return;
            adSetting.MaxBannerVariable.Load();
        }

        public override void LoadInterstitial()
        {
            if (adSetting.MaxInterVariable == null) return;
            if (!adSetting.MaxInterVariable.IsReady()) adSetting.MaxInterVariable.Load();
        }

        public override void LoadRewarded()
        {
            if (adSetting.MaxRewardVariable == null) return;
            if (!adSetting.MaxRewardVariable.IsReady()) adSetting.MaxRewardVariable.Load();
        }

        public override void LoadRewardedInterstitial()
        {
        }

        public override void LoadAppOpen()
        {
            if (adSetting.MaxAppOpenVariable == null) return;
            if (!adSetting.MaxAppOpenVariable.IsReady()) adSetting.MaxAppOpenVariable.Load();
        }

        public override void ShowAppOpen()
        {
            if (statusAppOpenFirstIgnore) adSetting.MaxAppOpenVariable.Show();
            statusAppOpenFirstIgnore = true;
        }

        public override void LoadNativeOverlay()
        {
        }
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/Max/MaxAdClient.cs.meta
================================================
fileFormatVersion: 2
guid: ccaea541beb11497691c82e48d3e2bf7
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/Max/MaxAdUnitVariable.cs
================================================
using System;
using UnityEngine;

namespace VirtueSky.Ads
{
    public class MaxAdUnitVariable : AdUnitVariable
    {
        [SerializeField] protected string androidId;
        [SerializeField] protected string iOSId;
        [NonSerialized] private string idRuntime = string.Empty;

        public override bool IsShowing { get; internal set; }

        public override string Id
        {
            get
            {
                if (idRuntime == String.Empty)
                {
#if UNITY_ANDROID
                    return androidId;
#elif UNITY_IOS
                    return iOSId;
#else
                    return string.Empty;
#endif
                }

                return idRuntime;
            }
        }

        public override AdUnitVariable Show(string placement = null)
        {
            ResetChainCallback();
            if (!Application.isMobilePlatform || string.IsNullOrEmpty(Id) || AdStatic.IsRemoveAd ||
                !IsReady()) return this;
            ShowImpl(placement);
            return this;
        }

        public void SetIdRuntime(string unitId)
        {
            idRuntime = unitId;
        }

        
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/Max/MaxAdUnitVariable.cs.meta
================================================
fileFormatVersion: 2
guid: 8d49a7d460324b64bf0e810452eb8db6
timeCreated: 1728632190

================================================
FILE: VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxAppOpenVariable.cs
================================================
using System;
using UnityEngine;
using VirtueSky.Inspector;
using VirtueSky.Misc;
using VirtueSky.Tracking;

namespace VirtueSky.Ads
{
    [Serializable]
    [EditorIcon("icon_scriptable")]
    public class MaxAppOpenVariable : MaxAdUnitVariable
    {
        [Tooltip("Automatically show AppOpenAd when app status is changed")]
        public bool autoShow = false;

        [Tooltip("Time between closing the previous full-screen ad and starting to show the app open ad - in seconds")]
        public float timeBetweenFullScreenAd = 2f;

        public override void Init()
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            if (AdStatic.IsRemoveAd || string.IsNullOrEmpty(Id)) return;
            paidedCallback += AppTracking.TrackRevenue;
            MaxSdkCallbacks.AppOpen.OnAdDisplayedEvent += OnAdDisplayed;
            MaxSdkCallbacks.AppOpen.OnAdHiddenEvent += OnAdHidden;
            MaxSdkCallbacks.AppOpen.OnAdLoadedEvent += OnAdLoaded;
            MaxSdkCallbacks.AppOpen.OnAdDisplayFailedEvent += OnAdDisplayFailed;
            MaxSdkCallbacks.AppOpen.OnAdLoadFailedEvent += OnAdLoadFailed;
            MaxSdkCallbacks.AppOpen.OnAdRevenuePaidEvent += OnAdRevenuePaid;
            MaxSdkCallbacks.AppOpen.OnAdClickedEvent += OnAdClicked;
#endif
        }

        public override void Load()
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            if (AdStatic.IsRemoveAd || string.IsNullOrEmpty(Id)) return;
            MaxSdk.LoadAppOpenAd(Id);
#endif
        }

        public override bool IsReady()
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            return !string.IsNullOrEmpty(Id) && MaxSdk.IsAppOpenAdReady(Id) &&
                   (DateTime.Now - AdStatic.AdClosingTime).TotalSeconds > timeBetweenFullScreenAd;
#else
            return false;
#endif
        }

        protected override void ShowImpl(string placement = null)
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            MaxSdk.ShowAppOpenAd(Id, placement: placement);
#endif
        }

        public override void Destroy()
        {
        }

        #region Func Callback

#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
        private void OnAdLoaded(string unit, MaxSdkBase.AdInfo info)
        {
            Common.CallActionAndClean(ref loadedCallback);
            OnLoadAdEvent?.Invoke();
        }

        private void OnAdRevenuePaid(string unit, MaxSdkBase.AdInfo info)
        {
            paidedCallback?.Invoke(info.Revenue,
                info.NetworkName,
                unit,
                info.AdFormat, AdMediation.AppLovin.ToString());
        }

        private void OnAdLoadFailed(string unit, MaxSdkBase.ErrorInfo info)
        {
            Common.CallActionAndClean(ref failedToLoadCallback);
            OnFailedToLoadAdEvent?.Invoke(info.Message);
        }

        private void OnAdDisplayFailed(string unit, MaxSdkBase.ErrorInfo errorInfo,
            MaxSdkBase.AdInfo info)
        {
            Common.CallActionAndClean(ref failedToDisplayCallback);
            OnFailedToDisplayAdEvent?.Invoke(errorInfo.Message);
        }

        private void OnAdHidden(string unit, MaxSdkBase.AdInfo info)
        {
            AdStatic.waitAppOpenClosedAction?.Invoke();
            AdStatic.IsShowingAd = false;
            IsShowing = false;
            Common.CallActionAndClean(ref closedCallback);
            OnClosedAdEvent?.Invoke();
            if (!string.IsNullOrEmpty(Id)) MaxSdk.LoadAppOpenAd(Id);
        }

        private void OnAdDisplayed(string unit, MaxSdkBase.AdInfo info)
        {
            AdStatic.waitAppOpenDisplayedAction?.Invoke();
            AdStatic.IsShowingAd = true;
            IsShowing = true;
            Common.CallActionAndClean(ref displayedCallback);
            OnDisplayedAdEvent?.Invoke();
        }

        private void OnAdClicked(string unit, MaxSdkBase.AdInfo info)
        {
            Common.CallActionAndClean(ref clickedCallback);
            OnClickedAdEvent?.Invoke();
        }
#endif

        #endregion
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxAppOpenVariable.cs.meta
================================================
fileFormatVersion: 2
guid: 1e29fec6165f4c3baceac878abc88638
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxBannerVariable.cs
================================================
using System;
using UnityEngine;
using VirtueSky.Inspector;
using VirtueSky.Misc;
using VirtueSky.Tracking;

namespace VirtueSky.Ads
{
    [Serializable]
    [EditorIcon("icon_scriptable")]
    public class MaxBannerVariable : MaxAdUnitVariable
    {
        public AdsSize size;
        public AdsPosition position;

        private bool _isBannerDestroyed = true;
        private bool _isBannerShowing;
        private bool _previousBannerShowStatus;

        public override void Init()
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            if (AdStatic.IsRemoveAd || string.IsNullOrEmpty(Id)) return;
            paidedCallback += AppTracking.TrackRevenue;
            MaxSdkCallbacks.Banner.OnAdLoadedEvent += OnAdLoaded;
            MaxSdkCallbacks.Banner.OnAdExpandedEvent += OnAdExpanded;
            MaxSdkCallbacks.Banner.OnAdLoadFailedEvent += OnAdLoadFailed;
            MaxSdkCallbacks.Banner.OnAdCollapsedEvent += OnAdCollapsed;
            MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnAdRevenuePaid;
            MaxSdkCallbacks.Banner.OnAdClickedEvent += OnAdClicked;
            if (size != AdsSize.Adaptive)
            {
                MaxSdk.SetBannerExtraParameter(Id, "adaptive_banner", "false");
            }
#endif
        }

        public override void Load()
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            if (AdStatic.IsRemoveAd || string.IsNullOrEmpty(Id)) return;
            if (_isBannerDestroyed)
            {
                MaxSdk.CreateBanner(Id, ConvertPosition());
                _isBannerDestroyed = false;
            }
#endif
        }

        void OnWaitAppOpenClosed()
        {
            if (_previousBannerShowStatus)
            {
                _previousBannerShowStatus = false;
                Show();
            }
        }

        void OnWaitAppOpenDisplayed()
        {
            _previousBannerShowStatus = _isBannerShowing;
            if (_isBannerShowing) HideBanner();
        }

        public override bool IsReady()
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            return !string.IsNullOrEmpty(Id);
#else
            return false;
#endif
        }

        protected override void ShowImpl(string placement = null)
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            _isBannerShowing = true;
            IsShowing = true;
            AdStatic.waitAppOpenClosedAction = OnWaitAppOpenClosed;
            AdStatic.waitAppOpenDisplayedAction = OnWaitAppOpenDisplayed;
            Load();
            MaxSdk.ShowBanner(Id);
#endif
        }

        public override void Destroy()
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            if (string.IsNullOrEmpty(Id)) return;
            _isBannerShowing = false;
            _isBannerDestroyed = true;
            IsShowing = false;
            AdStatic.waitAppOpenClosedAction = null;
            AdStatic.waitAppOpenDisplayedAction = null;
            MaxSdk.DestroyBanner(Id);
#endif
        }

        public override void HideBanner()
        {
            base.HideBanner();
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            _isBannerShowing = false;
            IsShowing = false;
            if (string.IsNullOrEmpty(Id)) return;
            MaxSdk.HideBanner(Id);
#endif
        }

        #region Fun Callback

#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
        public MaxSdkBase.BannerPosition ConvertPosition()
        {
            switch (position)
            {
                case AdsPosition.Top: return MaxSdkBase.BannerPosition.TopCenter;
                case AdsPosition.Bottom: return MaxSdkBase.BannerPosition.BottomCenter;
                case AdsPosition.TopLeft: return MaxSdkBase.BannerPosition.TopLeft;
                case AdsPosition.TopRight: return MaxSdkBase.BannerPosition.TopRight;
                case AdsPosition.BottomLeft: return MaxSdkBase.BannerPosition.BottomLeft;
                case AdsPosition.BottomRight: return MaxSdkBase.BannerPosition.BottomRight;
                default:
                    return MaxSdkBase.BannerPosition.BottomCenter;
            }
        }

        private void OnAdRevenuePaid(string unit, MaxSdkBase.AdInfo info)
        {
            paidedCallback?.Invoke(info.Revenue,
                info.NetworkName,
                unit,
                info.AdFormat, AdMediation.AppLovin.ToString());
        }

        private void OnAdLoaded(string unit, MaxSdkBase.AdInfo info)
        {
            Common.CallActionAndClean(ref loadedCallback);
            OnLoadAdEvent?.Invoke();
        }

        private void OnAdExpanded(string unit, MaxSdkBase.AdInfo info)
        {
            Common.CallActionAndClean(ref displayedCallback);
            OnDisplayedAdEvent?.Invoke();
        }

        private void OnAdLoadFailed(string unit, MaxSdkBase.ErrorInfo info)
        {
            Common.CallActionAndClean(ref failedToLoadCallback);
            OnFailedToLoadAdEvent?.Invoke(info.Message);
            Destroy();
        }

        private void OnAdCollapsed(string unit, MaxSdkBase.AdInfo info)
        {
            Common.CallActionAndClean(ref closedCallback);
            OnClosedAdEvent?.Invoke();
        }

        private void OnAdClicked(string arg1, MaxSdkBase.AdInfo arg2)
        {
            Common.CallActionAndClean(ref clickedCallback);
            OnClickedAdEvent?.Invoke();
        }

#endif

        #endregion
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxBannerVariable.cs.meta
================================================
fileFormatVersion: 2
guid: 2d54005e18d14434a4feed9988bfd43c
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxInterVariable.cs
================================================
using System;
using UnityEngine;
using VirtueSky.Ads;
using VirtueSky.Inspector;
using VirtueSky.Misc;
using VirtueSky.Tracking;

namespace VirtueSky.Ads
{
    [Serializable]
    [EditorIcon("icon_scriptable")]
    public class MaxInterVariable : MaxAdUnitVariable
    {
        [NonSerialized] internal Action completedCallback;


        public override void Init()
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            if (AdStatic.IsRemoveAd || string.IsNullOrEmpty(Id)) return;
            paidedCallback += AppTracking.TrackRevenue;
            MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnAdLoaded;
            MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnAdLoadFailed;
            MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnAdRevenuePaid;
            MaxSdkCallbacks.Interstitial.OnAdDisplayedEvent += OnAdDisplayed;
            MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnAdHidden;
            MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnAdDisplayFailed;
            MaxSdkCallbacks.Interstitial.OnAdClickedEvent += OnAdClicked;
#endif
        }

        public override void Load()
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            if (AdStatic.IsRemoveAd || string.IsNullOrEmpty(Id)) return;
            MaxSdk.LoadInterstitial(Id);
#endif
        }

        public override bool IsReady()
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            return !string.IsNullOrEmpty(Id) && MaxSdk.IsInterstitialReady(Id);
#else
            return false;
#endif
        }

        protected override void ShowImpl(string placement = null)
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            MaxSdk.ShowInterstitial(Id, placement: placement);
#endif
        }

        public override void Destroy()
        {
        }

        protected override void ResetChainCallback()
        {
            base.ResetChainCallback();
            completedCallback = null;
        }

        #region Func Callback

#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
        private void OnAdDisplayFailed(string unit, MaxSdkBase.ErrorInfo error,
            MaxSdkBase.AdInfo info)
        {
            Common.CallActionAndClean(ref failedToDisplayCallback);
            OnFailedToDisplayAdEvent?.Invoke(error.Message);
        }

        private void OnAdHidden(string unit, MaxSdkBase.AdInfo info)
        {
            AdStatic.IsShowingAd = false;
            IsShowing = false;
            Common.CallActionAndClean(ref completedCallback);
            OnClosedAdEvent?.Invoke();
            if (!string.IsNullOrEmpty(Id)) MaxSdk.LoadInterstitial(Id);
        }

        private void OnAdDisplayed(string unit, MaxSdkBase.AdInfo info)
        {
            AdStatic.IsShowingAd = true;
            IsShowing = true;
            Common.CallActionAndClean(ref displayedCallback);
            OnDisplayedAdEvent?.Invoke();
        }

        private void OnAdRevenuePaid(string unit, MaxSdkBase.AdInfo info)
        {
            paidedCallback?.Invoke(info.Revenue,
                info.NetworkName,
                unit,
                info.AdFormat, AdMediation.AppLovin.ToString());
        }

        private void OnAdLoadFailed(string unit, MaxSdkBase.ErrorInfo info)
        {
            Common.CallActionAndClean(ref failedToLoadCallback);
            OnFailedToLoadAdEvent?.Invoke(info.Message);
        }

        private void OnAdLoaded(string unit, MaxSdkBase.AdInfo info)
        {
            Common.CallActionAndClean(ref loadedCallback);
            OnLoadAdEvent?.Invoke();
        }

        private void OnAdClicked(string unit, MaxSdkBase.AdInfo info)
        {
            Common.CallActionAndClean(ref clickedCallback);
            OnClickedAdEvent?.Invoke();
        }
#endif

        #endregion
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxInterVariable.cs.meta
================================================
fileFormatVersion: 2
guid: 7f2517077a9341d38d7486727d83a132
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxRewardVariable.cs
================================================
using System;
using UnityEngine;
using VirtueSky.Inspector;
using VirtueSky.Misc;
using VirtueSky.Tracking;

namespace VirtueSky.Ads
{
    [Serializable]
    [EditorIcon("icon_scriptable")]
    public class MaxRewardVariable : MaxAdUnitVariable
    {
        [NonSerialized] internal Action completedCallback;
        [NonSerialized] internal Action skippedCallback;
        public bool IsEarnRewarded { get; private set; }

        public override void Init()
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            if (string.IsNullOrEmpty(Id)) return;
            paidedCallback += AppTracking.TrackRevenue;
            MaxSdkCallbacks.Rewarded.OnAdDisplayedEvent += OnAdDisplayed;
            MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnAdHidden;
            MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnAdLoaded;
            MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnAdDisplayFailed;
            MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnAdLoadFailed;
            MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnAdRevenuePaid;
            MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnAdReceivedReward;
            MaxSdkCallbacks.Rewarded.OnAdClickedEvent += OnAdClicked;
#endif
        }

        public override void Load()
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            if (string.IsNullOrEmpty(Id)) return;
            MaxSdk.LoadRewardedAd(Id);
#endif
        }

        public override bool IsReady()
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            return !string.IsNullOrEmpty(Id) && MaxSdk.IsRewardedAdReady(Id);
#else
            return false;
#endif
        }

        protected override void ShowImpl(string placement = null)
        {
#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
            MaxSdk.ShowRewardedAd(Id, placement: placement);
#endif
        }

        public override AdUnitVariable Show(string placement = null)
        {
            ResetChainCallback();
            if (!UnityEngine.Application.isMobilePlatform || !IsReady()) return this;
            ShowImpl(placement);
            return this;
        }

        public override void Destroy()
        {
        }

        protected override void ResetChainCallback()
        {
            base.ResetChainCallback();
            completedCallback = null;
            skippedCallback = null;
        }

        #region Func Callback

#if VIRTUESKY_ADS && VIRTUESKY_APPLOVIN
        private void OnAdReceivedReward(string unit, MaxSdkBase.Reward reward,
            MaxSdkBase.AdInfo info)
        {
            IsEarnRewarded = true;
        }

        private void OnAdRevenuePaid(string unit, MaxSdkBase.AdInfo info)
        {
            paidedCallback?.Invoke(info.Revenue,
                info.NetworkName,
                unit,
                info.AdFormat, AdMediation.AppLovin.ToString());
        }

        private void OnAdLoadFailed(string unit, MaxSdkBase.ErrorInfo info)
        {
            Common.CallActionAndClean(ref failedToLoadCallback);
            OnFailedToLoadAdEvent?.Invoke(info.Message);
        }

        private void OnAdDisplayFailed(string unit, MaxSdkBase.ErrorInfo errorInfo,
            MaxSdkBase.AdInfo info)
        {
            Common.CallActionAndClean(ref failedToDisplayCallback);
            OnFailedToDisplayAdEvent?.Invoke(errorInfo.Message);
        }

        private void OnAdLoaded(string unit, MaxSdkBase.AdInfo info)
        {
            Common.CallActionAndClean(ref loadedCallback);
            OnLoadAdEvent?.Invoke();
        }

        private void OnAdHidden(string unit, MaxSdkBase.AdInfo info)
        {
            AdStatic.IsShowingAd = false;
            IsShowing = false;
            Common.CallActionAndClean(ref closedCallback);
            OnClosedAdEvent?.Invoke();
            if (!IsReady()) MaxSdk.LoadRewardedAd(Id);
            if (IsEarnRewarded)
            {
                Common.CallActionAndClean(ref completedCallback);
                IsEarnRewarded = false;
                return;
            }

            Common.CallActionAndClean(ref skippedCallback);
        }

        private void OnAdDisplayed(string unit, MaxSdkBase.AdInfo info)
        {
            AdStatic.IsShowingAd = true;
            IsShowing = true;
            Common.CallActionAndClean(ref displayedCallback);
            OnDisplayedAdEvent?.Invoke();
        }

        private void OnAdClicked(string unit, MaxSdkBase.AdInfo info)
        {
            Common.CallActionAndClean(ref clickedCallback);
            OnClickedAdEvent?.Invoke();
        }
#endif

        #endregion
    }
}

================================================
FILE: VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxRewardVariable.cs.meta
================================================
fileFormatVersion: 2
guid: 20d8d1652da34664a50db28dbc997814
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {fileID: 2800000, guid: ed5ec0bb4ec55df47af0ecc2bd7be5f9, type: 3}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/Max/MaxUnitVariable.meta
================================================
fileFormatVersion: 2
guid: 74b6a60977c643ee956805295399665c
timeCreated: 1695462087

================================================
FILE: VirtueSky/Advertising/Runtime/Max.meta
================================================
fileFormatVersion: 2
guid: f30fd55eb75a48b4691e1a17d8ad50c2
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime/Virtuesky.Sunflower.Advertising.asmdef
================================================
{
    "name": "Virtuesky.Sunflower.Advertising",
    "rootNamespace": "",
    "references": [
        "GUID:fca7ec166e04dc948b624a983315e2c9",
        "GUID:acb3cac55c622ec459c8caadf707623a",
        "GUID:32dbaa332e571bf429b7de517f75f074",
        "GUID:bd40169efe8642149b1d2b72ba4903ce",
        "GUID:c904f6d969e991d459a0843b71c22ec5",
        "GUID:324caed91501a9c47a04ebfd87b68794",
        "GUID:a4cfc1a18fa3a469b96d885db522f42e",
        "GUID:35d694408290717499b3838802212c7f",
        "GUID:5e9107a8f2499184ea26564811dda246",
        "GUID:760a4c7888534400e882b82c5b3fba06",
        "GUID:00c479e63b1c74419820a39073267645",
        "GUID:c282fd4f3fc2c7540914e85842a013c7"
    ],
    "includePlatforms": [],
    "excludePlatforms": [],
    "allowUnsafeCode": false,
    "overrideReferences": false,
    "precompiledReferences": [],
    "autoReferenced": true,
    "defineConstraints": [],
    "versionDefines": [],
    "noEngineReferences": false
}

================================================
FILE: VirtueSky/Advertising/Runtime/Virtuesky.Sunflower.Advertising.asmdef.meta
================================================
fileFormatVersion: 2
guid: abd57f653a468a04c8d4e281527ff293
AssemblyDefinitionImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising/Runtime.meta
================================================
fileFormatVersion: 2
guid: f71c7d92eeff8c34492800ba35756ee8
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/Advertising.meta
================================================
fileFormatVersion: 2
guid: 4a6fce59e6956244e8e4045dcfa6387c
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/AssetFinder/Editor/Script/AssetFinder.cs
================================================
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;
using UnityObject = UnityEngine.Object;

namespace VirtueSky.AssetFinder.Editor
{
    public enum Dependency
    {
        All,
        Direct,
        Indirect
    }

    public enum DepthFilter
    {
        All,
        Equal,
        NotEqual,
        Less,
        LessEqual,
        Greater,
        GreaterEqual
    }

    public enum Sorting
    {
        None,
        Type,
        Path,
        Size
    }

    [Serializable]
    public class AssetFinderInfo
    {
        public string guid;
        public string assetPath;
        public string fileName;
        public string extension;
        public System.Type assetType;
        public int usageCount;
        public int usedByCount;
        public bool isInBuild;
        public long fileSize;
        public bool isFolder;
        public bool isBuiltin;

        public AssetFinderInfo(string guid)
        {
            this.guid = guid;
            RefreshInfo();
        }

        internal void RefreshInfo()
        {
            if (string.IsNullOrEmpty(guid)) return;

            assetPath = AssetDatabase.GUIDToAssetPath(guid);
            if (string.IsNullOrEmpty(assetPath))
            {
                fileName = "Missing";
                extension = "";
                assetType = null;
                fileSize = 0;
                isFolder = false;
                isBuiltin = false;
                return;
            }

            fileName = Path.GetFileName(assetPath);
            extension = Path.GetExtension(assetPath);
            
            // Check if it's a folder
            isFolder = AssetDatabase.IsValidFolder(assetPath);
            
            // Check if it's builtin using the proper constant
            isBuiltin = AssetFinderAsset.BUILT_IN_ASSETS.Contains(guid);

            if (!isFolder)
            {
                UnityObject obj = AssetDatabase.LoadAssetAtPath<UnityObject>(assetPath);
                assetType = obj?.GetType();

                // Get file size
                try
                {
                    if (File.Exists(assetPath))
                    {
                        var fileInfo = new FileInfo(assetPath);
                        fileSize = fileInfo.Length;
                    }
                }
                catch
                {
                    fileSize = 0;
                }
            }
            else
            {
                assetType = typeof(DefaultAsset);
                fileSize = 0;
            }

            // Get usage counts from AssetFinderAsset if available
            if (AssetFinderCache.isReady)
            {
                AssetFinderAsset asset = AssetFinderCache.Api.Get(guid);
                if (asset != null)
                {
                    usageCount = asset.UseGUIDsCount;
                    usedByCount = asset.UsedByMap.Count;
                }
            }
        }

        internal void UpdateBuildStatus(HashSet<string> buildGuids)
        {
            isInBuild = buildGuids != null && buildGuids.Contains(guid);
        }
    }

    public static class AssetFinder
    {
        public static bool IsReady => AssetFinderCache.isReady;

        public static void ScanProject()
        {
            AssetFinderCache.DeleteCache();
            AssetFinderCache.CreateCache();
        }

        public static void Refresh()
        {
            if (!AssetFinderCache.hasCache)
            {
                AssetFinderLOG.LogWarning("AssetFinder cache not found. Use AssetFinder.ScanProject() first.");
                return;
            }

            AssetFinderCache.Api.Check4Changes(true);
        }

        public static List<AssetFinderInfo> GetUses(string[] guids, Dependency dep = Dependency.All, int depth = 0, DepthFilter filter = DepthFilter.All, Sorting sort = Sorting.None)
        {
            if (!IsReady)
            {
                AssetFinderLOG.LogWarning("AssetFinder cache not ready. Use AssetFinder.ScanProject() first.");
                return new List<AssetFinderInfo>();
            }

            if (guids == null || guids.Length == 0) return new List<AssetFinderInfo>();

            Dictionary<string, AssetFinderRef> refs = AssetFinderRef.FindUsage(guids);
            return ProcessResults(refs, dep, depth, filter, sort);
        }

        public static List<AssetFinderInfo> GetUsedBy(string[] guids, Dependency dep = Dependency.All, int depth = 0, DepthFilter filter = DepthFilter.All, Sorting sort = Sorting.None)
        {
            if (!IsReady)
            {
                AssetFinderLOG.LogWarning("AssetFinder cache not ready. Use AssetFinder.ScanProject() first.");
                return new List<AssetFinderInfo>();
            }

            if (guids == null || guids.Length == 0) return new List<AssetFinderInfo>();

            Dictionary<string, AssetFinderRef> refs = AssetFinderRef.FindUsedBy(guids);
            return ProcessResults(refs, dep, depth, filter, sort);
        }

        public static List<AssetFinderInfo> GetUnused(Sorting sort = Sorting.None)
        {
            if (!IsReady)
            {
                AssetFinderLOG.LogWarning("AssetFinder cache not ready. Use AssetFinder.ScanProject() first.");
                return new List<AssetFinderInfo>();
            }

            List<AssetFinderAsset> unusedAssets = AssetFinderCache.Api.ScanUnused(true);
            return ProcessAssetResults(unusedAssets, sort);
        }

        public static List<AssetFinderInfo> GetInBuild(Sorting sort = Sorting.None)
        {
            if (!IsReady)
            {
                AssetFinderLOG.LogWarning("AssetFinder cache not ready. Use AssetFinder.ScanProject() first.");
                return new List<AssetFinderInfo>();
            }

            var usedInBuild = new AssetFinderUsedInBuild(null, () => ConvertSorting(sort), () => AssetFinderRefDrawer.Mode.Type);
            usedInBuild.RefreshView();

            if (usedInBuild.refs == null) return new List<AssetFinderInfo>();

            var buildGuids = new HashSet<string>(usedInBuild.refs.Keys);
            var assets = usedInBuild.refs.Values.Select(r => r.asset).ToList();
            var results = ProcessAssetResults(assets, sort);
            
            // Set isInBuild flag for all returned assets
            foreach (var assetInfo in results)
            {
                assetInfo.UpdateBuildStatus(buildGuids);
            }
            
            return results;
        }

        public static Dictionary<string, int> GetUsesCount(string[] guids)
        {
            var result = new Dictionary<string, int>();
            
            if (!IsReady)
            {
                AssetFinderLOG.LogWarning("AssetFinder cache not ready. Use AssetFinder.ScanProject() first.");
                return result;
            }

            if (guids == null || guids.Length == 0) return result;

            foreach (string guid in guids)
            {
                if (string.IsNullOrEmpty(guid)) continue;
                
                AssetFinderAsset asset = AssetFinderCache.Api.Get(guid);
                result[guid] = asset?.UseGUIDsCount ?? 0;
            }

            return result;
        }

        public static Dictionary<string, int> GetUsedByCount(string[] guids)
        {
            var result = new Dictionary<string, int>();
            
            if (!IsReady)
            {
                AssetFinderLOG.LogWarning("AssetFinder cache not ready. Use AssetFinder.ScanProject() first.");
                return result;
            }

            if (guids == null || guids.Length == 0) return result;

            foreach (string guid in guids)
            {
                if (string.IsNullOrEmpty(guid)) continue;
                
                AssetFinderAsset asset = AssetFinderCache.Api.Get(guid);
                result[guid] = asset?.UsedByMap.Count ?? 0;
            }

            return result;
        }

        public static bool IsUses(string[] guids)
        {
            if (!IsReady || guids == null || guids.Length == 0) return false;

            foreach (string guid in guids)
            {
                if (string.IsNullOrEmpty(guid)) continue;
                
                AssetFinderAsset asset = AssetFinderCache.Api.Get(guid);
                if (asset != null && asset.UseGUIDsCount > 0) return true;
            }

            return false;
        }

        public static bool IsUsedBy(string[] guids)
        {
            if (!IsReady || guids == null || guids.Length == 0) return false;

            foreach (string guid in guids)
            {
                if (string.IsNullOrEmpty(guid)) continue;
                
                AssetFinderAsset asset = AssetFinderCache.Api.Get(guid);
                if (asset != null && asset.UsedByMap.Count > 0) return true;
            }

            return false;
        }

        public static bool IsInBuild(string[] guids)
        {
            if (!IsReady)
            {
                AssetFinderLOG.LogWarning("AssetFinder cache not ready. Use AssetFinder.ScanProject() first.");
                return false;
            }

            if (guids == null || guids.Length == 0) return false;

            var usedInBuild = new AssetFinderUsedInBuild(null, () => AssetFinderRefDrawer.Sort.Type, () => AssetFinderRefDrawer.Mode.Type);
            usedInBuild.RefreshView();

            if (usedInBuild.refs == null) return false;

            var buildGuids = new HashSet<string>(usedInBuild.refs.Keys);

            foreach (string guid in guids)
            {
                if (buildGuids.Contains(guid)) return true;
            }

            return false;
        }



        private static List<AssetFinderInfo> ProcessAssetResults(List<AssetFinderAsset> assets, Sorting sorting)
        {
            if (assets == null) return new List<AssetFinderInfo>();

            var results = new List<AssetFinderInfo>();

            foreach (AssetFinderAsset asset in assets)
            {
                if (asset == null) continue;
                
                var assetInfo = new AssetFinderInfo(asset.guid);
                results.Add(assetInfo);
            }

            return ApplySorting(results, sorting);
        }

        private static List<AssetFinderInfo> ProcessResults(Dictionary<string, AssetFinderRef> refs, Dependency dependency, int depth, DepthFilter filter, Sorting sorting)
        {
            if (refs == null) return new List<AssetFinderInfo>();

            var results = new List<AssetFinderInfo>();
            var processedGuids = new HashSet<string>();

            foreach (KeyValuePair<string, AssetFinderRef> kvp in refs)
            {
                AssetFinderRef refItem = kvp.Value;
                
                // Apply dependency filter
                if (dependency == Dependency.Direct && refItem.depth > 1) continue;
                if (dependency == Dependency.Indirect && refItem.depth <= 1) continue;
                
                // Apply depth filter with mathematically correct comparisons
                if (!MatchesDepthFilter(refItem.depth, depth, filter)) continue;

                if (processedGuids.Contains(refItem.asset.guid)) continue;
                processedGuids.Add(refItem.asset.guid);

                var assetInfo = new AssetFinderInfo(refItem.asset.guid);
                results.Add(assetInfo);
            }

            return ApplySorting(results, sorting);
        }



        private static bool MatchesDepthFilter(int itemDepth, int targetDepth, DepthFilter filter)
        {
            switch (filter)
            {
                case DepthFilter.All:
                    return true;
                case DepthFilter.Equal:
                    return itemDepth == targetDepth;
                case DepthFilter.NotEqual:
                    return itemDepth != targetDepth;
                case DepthFilter.Less:
                    return itemDepth < targetDepth;
                case DepthFilter.LessEqual:
                    return itemDepth <= targetDepth;
                case DepthFilter.Greater:
                    return itemDepth > targetDepth;
                case DepthFilter.GreaterEqual:
                    return itemDepth >= targetDepth;
                default:
                    return true;
            }
        }



        private static List<AssetFinderInfo> ApplySorting(List<AssetFinderInfo> assetInfos, Sorting sorting)
        {
            switch (sorting)
            {
                case Sorting.Type:
                    return assetInfos.OrderBy(info => info.assetType?.Name ?? "")
                                    .ThenBy(info => info.assetPath)
                                    .ToList();
                
                case Sorting.Path:
                    return assetInfos.OrderBy(info => info.assetPath)
                                    .ThenBy(info => info.assetType?.Name ?? "")
                                    .ToList();
                
                case Sorting.Size:
                    return assetInfos.OrderByDescending(info => info.fileSize)
                                    .ThenBy(info => info.assetPath)
                                    .ToList();
                
                default:
                    return assetInfos;
            }
        }

        private static AssetFinderRefDrawer.Sort ConvertSorting(Sorting sorting)
        {
            switch (sorting)
            {
                case Sorting.Type: return AssetFinderRefDrawer.Sort.Type;
                case Sorting.Path: return AssetFinderRefDrawer.Sort.Path;
                case Sorting.Size: return AssetFinderRefDrawer.Sort.Size;
                default: return AssetFinderRefDrawer.Sort.Type;
            }
        }
    }
} 

================================================
FILE: VirtueSky/AssetFinder/Editor/Script/AssetFinder.cs.meta
================================================
fileFormatVersion: 2
guid: 336a181c1abdb455f8388370e58f0496
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/AssetFinder/Editor/Script/AssetFinderAssetType.cs
================================================
// deleted

================================================
FILE: VirtueSky/AssetFinder/Editor/Script/AssetFinderAssetType.cs.meta
================================================
fileFormatVersion: 2
guid: b077597d32a3b4e43bd7bfc007c3e6dc
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/AssetFinder/Editor/Script/AssetFinderCacheEditor.cs
================================================
// deleted

================================================
FILE: VirtueSky/AssetFinder/Editor/Script/AssetFinderCacheEditor.cs.meta
================================================
fileFormatVersion: 2
guid: 18708e9bf7db0f04fa917a0db924382c
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/AssetFinder/Editor/Script/AssetFinderDuplicate.cs
================================================
// deleted

================================================
FILE: VirtueSky/AssetFinder/Editor/Script/AssetFinderDuplicate.cs.meta
================================================
fileFormatVersion: 2
guid: 57aae5701da3c644c937c59e2da6da85
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/AssetFinder/Editor/Script/AssetFinderRef.cs
================================================
// deleted

================================================
FILE: VirtueSky/AssetFinder/Editor/Script/AssetFinderRef.cs.meta
================================================
fileFormatVersion: 2
guid: 7ef09719313b4f943a49eb3a2b0f934d
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/AssetFinder/Editor/Script/AssetFinderWindowExtension.cs
================================================
namespace VirtueSky.AssetFinder.Editor {
    public class AssetFinderWindowExtension {
        public static void ShowWindow() {
            AssetFinderWindowAll.ShowWindow();
        }
        public static void DeleteCache() {
            AssetFinderCache.DeleteCache();
        }
    }
}

================================================
FILE: VirtueSky/AssetFinder/Editor/Script/AssetFinderWindowExtension.cs.meta
================================================
fileFormatVersion: 2
guid: 10b0c9ac533b455baa0c863c779748bd
timeCreated: 1764820294

================================================
FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.AssetState.cs
================================================
namespace VirtueSky.AssetFinder.Editor
{
    partial class AssetFinderAsset
    {
        public enum AssetState
        {
            NEW,
            CACHE,
            MISSING
        }
    }
}


================================================
FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.AssetState.cs.meta
================================================
fileFormatVersion: 2
guid: cd01dcf20ca0ec442af562e1bb400560
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.AssetType.cs
================================================
namespace VirtueSky.AssetFinder.Editor
{
    partial class AssetFinderAsset
    {
        public enum AssetType
        {
            UNKNOWN,
            FOLDER,
            SCRIPT,
            SCENE,
            DLL,
            REFERENCABLE,
            BINARY_ASSET,
            MODEL,
            TERRAIN,
            LIGHTING_DATA,
            NON_READABLE,
            BUILT_IN
        }
    }
}


================================================
FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.AssetType.cs.meta
================================================
fileFormatVersion: 2
guid: 0d8fbadc1183faf4fa0008a3c8ef122e
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.Classes.cs
================================================
using System;
using System.Collections.Generic;
namespace VirtueSky.AssetFinder.Editor
{
    internal partial class AssetFinderAsset
    {
        [Serializable]
        internal class Classes
        {
            public string guid;
            public List<long> ids;
        }
    }
}


================================================
FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.Classes.cs.meta
================================================
fileFormatVersion: 2
guid: 5474ab83390e2904b92f5b45bd2fe0dc
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.Constants.cs
================================================
using System;
using System.Collections.Generic;
using UnityEngine;

namespace VirtueSky.AssetFinder.Editor
{
    internal partial class AssetFinderAsset
    {
        // ------------------------------ CONSTANTS ---------------------------

        public const int MIN_FILE_SIZE_2LOG = 1024 * 1024; // 1 MB
        internal static bool shouldWriteImportLog;

        private static readonly HashSet<string> SCRIPT_EXTENSIONS = new HashSet<string>
        {
            ".cs", ".js", ".boo", ".h", ".java", ".cpp", ".m", ".mm", ".cginclude", ".shadersubgraph"
        };

        private static readonly HashSet<string> REFERENCABLE_EXTENSIONS = new HashSet<string>
        {
            ".anim", ".controller", ".mat", ".unity", ".guiskin", ".prefab",
            ".overridecontroller", ".mask", ".rendertexture", ".cubemap", ".flare", ".playable",
            ".mat", ".physicsmaterial", ".fontsettings", ".asset", ".prefs", ".spriteatlas",
            ".terrainlayer", ".asmdef", ".preset", ".spriteLib", ".shader", ".hlsl", ".cginc", ".glsl"
        };

        private static readonly HashSet<string> REFERENCABLE_JSON = new HashSet<string>
        {
            ".shadergraph", ".shadersubgraph"
        };

        private static readonly HashSet<string> UI_TOOLKIT = new HashSet<string>
        {
            ".uss", ".uxml", ".tss"
        };

        private static readonly HashSet<string> REFERENCABLE_META = new HashSet<string>
        {
            ".texture2darray",
            ".png", ".jpg", ".jpeg", ".tga", ".tif", ".tiff", ".psd", ".bmp", ".exr", ".gif",
        };

        /// <summary>
        ///     Extensions that rarely contain references to other assets and can be
        ///     ignored when deciding if an asset is "critical".
        /// </summary>
        private static readonly HashSet<string> NON_REFERENCE_EXTENSIONS =
            new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            {
                ".wav", ".mp3", ".ogg", ".aif", ".aiff",
                ".txt", ".json", ".xml", ".csv",
                ".html", ".htm", ".yaml", ".md"
            };

        internal static readonly HashSet<string> BUILT_IN_ASSETS = new HashSet<string>
        {
            "0000000000000000f000000000000000",
            "0000000000000000e000000000000000",
            "0000000000000000d000000000000000"
        };

        private static readonly Dictionary<long, Type> HashClasses = new Dictionary<long, Type>();
        internal static Dictionary<string, GUIContent> cacheImage = new Dictionary<string, GUIContent>();

        public static float ignoreTS;
        private static string _logPath;
        private static int binaryLoaded;
        private static DateTime scanStartTime;

        private static string logPath
        {
            get
            {
                if (!string.IsNullOrEmpty(_logPath)) return _logPath;
                _logPath = System.IO.Path.Combine(Application.dataPath, "../fr2-import.log");
                return _logPath;
            }
        }
    }
} 

================================================
FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.Constants.cs.meta
================================================
fileFormatVersion: 2
guid: 9e3eb5ee34a8a3a41b281a3f9d1652e8
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.ContentLoader.cs
================================================
using System;
using System.IO;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityObject = UnityEngine.Object;

namespace VirtueSky.AssetFinder.Editor
{
    internal partial class AssetFinderAsset
    {
        // ----------------------------- CONTENT LOADING ---------------------------------------

        internal void LoadContent()
        {
            if (!fileContentDirty) return;
            m_cachefileWriteTS = m_fileWriteTS;
            m_forceIncludeInBuild = false;

            if (IsMissing || type == AssetType.NON_READABLE) return;
            if (type == AssetType.DLL)
            {
                AssetFinderLOG.LogWarning("Parsing DLL not yet supportted ");
                return;
            }
            
            AssetFinderLOG.Log("LoadContent ... infoHash=" + fileInfoHash + ": assetPath=" + m_assetPath);

            var startTime = DateTime.Now;
            if (shouldWriteImportLog && (fileSize >= MIN_FILE_SIZE_2LOG))
            {
                var logMessage = $"{startTime:yyyy-MM-dd HH:mm:ss} - {assetPath}, Size: {fileSize} bytes";
                File.AppendAllText(logPath, logMessage + Environment.NewLine);
            }
            
            if (!ExistOnDisk())
            {
                state = AssetState.MISSING;
                return;
            }

            ClearUseGUIDs();

            if (IsFolder)
            {
                LoadFolder();
            } else if (IsReferencable)
            {
                LoadYAML2();
            } else if (IsBinaryAsset)
            {
                LoadBinaryAsset();
            }

            if (shouldWriteImportLog && (fileSize >= MIN_FILE_SIZE_2LOG))
            {
                DateTime endTime = DateTime.Now;
                double duration = (endTime - startTime).TotalMilliseconds;
                var logMessage = $", Duration: {duration} ms";
                File.AppendAllText(logPath, logMessage + Environment.NewLine);
            }
        }

        internal void LoadContentFast()
        {
            if (!fileContentDirty) return;
            m_cachefileWriteTS = m_fileWriteTS;
            m_forceIncludeInBuild = false;

            if (IsMissing) return;
            if (type == AssetType.SCRIPT || type == AssetType.DLL || type == AssetType.FOLDER) return;
            // if (assetPath.StartsWith("Packages/")) return;

            DateTime startTime = DateTime.Now;
            if (shouldWriteImportLog && (fileSize >= MIN_FILE_SIZE_2LOG))
            {
                var logMessage = $"{startTime:yyyy-MM-dd HH:mm:ss} - {assetPath}, Size: {fileSize} bytes";
                File.AppendAllText(logPath, logMessage);
            }

            ClearUseGUIDs();

            if (fileSize > 5 * 1024 * 1024 || type == AssetType.NON_READABLE || IsBinaryAsset)
            {
                string[] dependencies = AssetDatabase.GetDependencies(assetPath, false);
                foreach (string dependency in dependencies)
                {
                    string guid = AssetDatabase.AssetPathToGUID(dependency);
                    if (!string.IsNullOrEmpty(guid) && (guid != this.guid))
                    {
                        AddUseGUID(guid);
                    }
                }
            } else if (IsReferencable)
            {
                LoadYAML2();
            }
            
            // CRITICAL FIX: Validate with AssetDatabase to catch missing references
            using (AssetFinderDev.NoLog)
            {
                ValidateWithAssetDatabase();
            }
            

            if (shouldWriteImportLog && (fileSize >= MIN_FILE_SIZE_2LOG))
            {
                DateTime endTime = DateTime.Now;
                double duration = (endTime - startTime).TotalMilliseconds;
                var logMessage = $", Duration: {duration} ms";
                File.AppendAllText(logPath, logMessage + Environment.NewLine);
            }
        }

        internal void ValidateWithAssetDatabase()
        {
            if (IsMissing || IsFolder || type == AssetType.SCRIPT) return;
            
            try
            {
                // Get Unity's known dependencies

                string[] unityDeps = AssetDatabase.GetDependencies(assetPath, false);
                if (unityDeps == null) return;
                var unityGuids = new HashSet<string>();
                
                foreach (string depPath in unityDeps)
                {
                    if (depPath == assetPath) continue; // Skip self-reference
                    string depGuid = AssetDatabase.AssetPathToGUID(depPath);
                    if (!string.IsNullOrEmpty(depGuid))
                        unityGuids.Add(depGuid);
                }
                
                // Compare with FR2's parsed results
                var fr2Guids = new HashSet<string>(UseGUIDs.Keys);
                var missingInFR2 = new List<string>();
                
                // Find guids in Unity but not in FR2
                foreach (string unityGuid in unityGuids)
                {
                    if (!fr2Guids.Contains(unityGuid))
                        missingInFR2.Add(unityGuid);
                }
                
                if (missingInFR2.Count > 0 && extension != ".shadergraph")
                {
                    AssetFinderLOG.LogWarning($"AssetDatabase has {missingInFR2.Count} more dependencies than FR2 for '{assetPath}'. " +
                                   "This may indicate unsaved changes or new asset types not handled by FR2 parser.");
                    
                    // Add missing references to FR2's cache
                    foreach (string missingGuid in missingInFR2)
                    {
                        AddUseGUID(missingGuid);
                        AssetFinderLOG.Log($"Add missingGUID: {missingGuid} --> {AssetDatabase.GUIDToAssetPath(missingGuid)}");
                    }
                }
            }
            catch
            {
                AssetFinderLOG.LogWarning($"Failed to validate dependencies for {assetPath}");
            }
        }

        internal void LoadYAML2()
        {
            if (!m_pathLoaded) LoadPathInfo();

            if (!File.Exists(m_assetPath))
            {
                state = AssetState.MISSING;
                return;
            }

            if (m_assetPath == "ProjectSettings/EditorBuildSettings.asset")
            {
                EditorBuildSettingsScene[] listScenes = EditorBuildSettings.scenes;
                foreach (EditorBuildSettingsScene scene in listScenes)
                {
                    if (!scene.enabled) continue;
                    string path = scene.path;
                    string guid = AssetDatabase.AssetPathToGUID(path);

                    AddUseGUID(guid, 0);
					// AssetFinderLOG.Log("AddScene: " + path);
                }
            }

            if (string.IsNullOrEmpty(extension))
            {
                AssetFinderLOG.LogWarning($"Something wrong? <{m_extension}>");
            }

            if (extension == ".spriteatlas") // check for force include in build
            {
                var atlasAsset = AssetDatabase.LoadAssetAtPath<UnityObject>(m_assetPath);
                if (atlasAsset != null)
                {
                    var so = new SerializedObject(atlasAsset);
                    SerializedProperty prop = so.FindProperty("m_EditorData.bindAsDefault");
                    m_forceIncludeInBuild = prop.boolValue;
                }
            }
            
            AssetFinderParser.ReadContent(m_assetPath, AddUseGUID);
        }

        internal void LoadFolder()
        {
            if (!Directory.Exists(m_assetPath))
            {
                state = AssetState.MISSING;
                return;
            }

            // do not analyse folders outside project
            if (!m_assetPath.StartsWith("Assets/")) return;

            try
            {
                string[] files = Directory.GetFiles(m_assetPath);
                string[] dirs = Directory.GetDirectories(m_assetPath);

                foreach (string f in files)
                {
                    if (f.EndsWith(".meta", StringComparison.Ordinal)) continue;

                    string fguid = AssetDatabase.AssetPathToGUID(f);
                    if (string.IsNullOrEmpty(fguid)) continue;

                    AddUseGUID(fguid);
                }

                foreach (string d in dirs)
                {
                    string fguid = AssetDatabase.AssetPathToGUID(d);
                    if (string.IsNullOrEmpty(fguid)) continue;

                    AddUseGUID(fguid);
                }
            }
            catch (Exception e)
            {
                AssetFinderLOG.LogWarning("LoadFolder() error :: " + e + "\n" + assetPath);
            }
            finally
            {

                state = AssetState.MISSING;
            }
        }

        internal void LoadBinaryAsset()
        {
            ClearUseGUIDs();

            UnityObject assetData = AssetDatabase.LoadAssetAtPath(m_assetPath, typeof(UnityObject));
            if (assetData is GameObject go)
            {
                type = AssetType.MODEL;
                LoadGameObject(go);
                binaryLoaded += 10;
            } else if (assetData is TerrainData terrainData)
            {
                type = AssetType.TERRAIN;
                LoadTerrainData(terrainData);
                binaryLoaded += 20;
            } else if (assetData is LightingDataAsset lightAsset)
            {
                type = AssetType.LIGHTING_DATA;
                LoadLightingData(lightAsset);
                binaryLoaded += 20;
            } else
            {
                LoadSerialized(assetData);
                binaryLoaded++;
            }

			AssetFinderLOG.Log("LoadBinaryAsset :: " + assetData + ":" + type);
            if (binaryLoaded <= 30) return;
            binaryLoaded = 0;
            AssetFinderUnity.UnloadUnusedAssets();
        }

        internal void LoadGameObject(GameObject go)
        {
            Component[] compList = go.GetComponentsInChildren<Component>();
            for (var i = 0; i < compList.Length; i++)
            {
                LoadSerialized(compList[i]);
            }
        }

        internal void LoadSerialized(UnityObject target)
        {
            SerializedProperty[] props = AssetFinderUnity.xGetSerializedProperties(target, true);

            for (var i = 0; i < props.Length; i++)
            {
                if (props[i].propertyType != SerializedPropertyType.ObjectReference) continue;

                UnityObject refObj = props[i].objectReferenceValue;
                if (refObj == null) continue;

                string refGUID = AssetDatabase.AssetPathToGUID(
                    AssetDatabase.GetAssetPath(refObj)
                );

                AddUseGUID(refGUID);
            }
        }

        private void AddTextureGUID(SerializedProperty prop)
        {
            if (prop == null || prop.objectReferenceValue == null) return;
            string path = AssetDatabase.GetAssetPath(prop.objectReferenceValue);
            if (string.IsNullOrEmpty(path)) return;
            AddUseGUID(AssetDatabase.AssetPathToGUID(path));
        }

        internal void LoadLightingData(LightingDataAsset asset)
        {
            foreach (Texture texture in AssetFinderLightmap.Read(asset))
            {
                if (texture == null) continue;
                string path = AssetDatabase.GetAssetPath(texture);
                string assetGUID = AssetDatabase.AssetPathToGUID(path);
                if (!string.IsNullOrEmpty(assetGUID))
                {
                    AddUseGUID(assetGUID);
                }
            }
        }

        internal void LoadTerrainData(TerrainData terrain)
        {
#if UNITY_2018_3_OR_NEWER
            TerrainLayer[] arr0 = terrain.terrainLayers;
            for (var i = 0; i < arr0.Length; i++)
            {
                string aPath = AssetDatabase.GetAssetPath(arr0[i]);
                string refGUID = AssetDatabase.AssetPathToGUID(aPath);
                AddUseGUID(refGUID);
            }
#endif

            DetailPrototype[] arr = terrain.detailPrototypes;

            for (var i = 0; i < arr.Length; i++)
            {
                string aPath = AssetDatabase.GetAssetPath(arr[i].prototypeTexture);
                string refGUID = AssetDatabase.AssetPathToGUID(aPath);
                AddUseGUID(refGUID);
            }

            TreePrototype[] arr2 = terrain.treePrototypes;
            for (var i = 0; i < arr2.Length; i++)
            {
                string aPath = AssetDatabase.GetAssetPath(arr2[i].prefab);
                string refGUID = AssetDatabase.AssetPathToGUID(aPath);
                AddUseGUID(refGUID);
            }

            AssetFinderTerrain.TerrainTextureData[] arr3 = AssetFinderTerrain.GetTerrainTextureDatas(terrain);
            for (var i = 0; i < arr3.Length; i++)
            {
                AssetFinderTerrain.TerrainTextureData texs = arr3[i];
                for (var k = 0; k < texs.textures.Length; k++)
                {
                    Texture2D tex = texs.textures[k];
                    if (tex == null) continue;

                    string aPath = AssetDatabase.GetAssetPath(tex);
                    if (string.IsNullOrEmpty(aPath)) continue;

                    string refGUID = AssetDatabase.AssetPathToGUID(aPath);
                    if (string.IsNullOrEmpty(refGUID)) continue;

                    AddUseGUID(refGUID);
                }
            }
        }

        internal static void ClearLog()
        {
            if (shouldWriteImportLog)
            {
                File.WriteAllText(logPath, string.Empty);
            } else
            {
                if (File.Exists(logPath)) File.Delete(logPath);
            }

            scanStartTime = DateTime.Now;
        }

        internal static void WriteTotalScanTime()
        {
            if (!shouldWriteImportLog) return;
            double totalScanTime = (DateTime.Now - scanStartTime).TotalSeconds;
            File.AppendAllText(logPath, $"\nTotal scan time: {totalScanTime} seconds\n");
        }

        private void ClearUseGUIDs()
        {
		    // AssetFinderLOG.Log("ClearUseGUIDs: " + assetPath);
            UseGUIDs.Clear();
            UseGUIDsList.Clear();
        }
    }
} 

================================================
FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.ContentLoader.cs.meta
================================================
fileFormatVersion: 2
guid: 8b4f01c105762d742adedeca5785b5ca
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.Drawing.cs
================================================
using System;
using System.IO;
using UnityEditor;
using UnityEngine;
using UnityObject = UnityEngine.Object;

namespace VirtueSky.AssetFinder.Editor
{
    internal partial class AssetFinderAsset
    {
        // ----------------------------- UI DRAWING & USER ACTIONS ---------------------------------------

        internal class AssetFinderAssetDrawConfig
        {
            public bool highlight;
            public bool drawPath = true;
            public bool showFileSize = true;
            public bool showABName = false;
            public bool showAtlasName = false;
            public bool showUsageIcon = true;
            public IWindow window = null;
            public bool drawExtension = true;
            public Action onShowDetails = null;

            public AssetFinderAssetDrawConfig(
            bool highlight,
            bool drawPath = true,
            bool showFileSize = true,
            bool showABName = false,
            bool showAtlasName = false,
            bool showUsageIcon = true,
            IWindow window = null,
            bool drawExtension = true,
                Action onShowDetails = null)
            {
                this.highlight = highlight;
                this.drawPath = drawPath;
                this.showFileSize = showFileSize;
                this.showABName = showABName;
                this.showAtlasName = showAtlasName;
                this.showUsageIcon = showUsageIcon;
                this.window = window;
                this.drawExtension = drawExtension;
                this.onShowDetails = onShowDetails;
            }
        }

        internal float Draw(
            Rect r,
            AssetFinderAssetDrawConfig cfg
        )
        {
            Rect rowRect = new Rect(r.x, r.y, r.width, AssetFinderTheme.Current.TreeItemHeight);
            bool isHover = rowRect.Contains(Event.current.mousePosition);
          
Download .txt
gitextract_ddb6gc8r/

├── .github/
│   └── workflows/
│       └── notify-discord-on-release.yml
├── LICENSE
├── LICENSE.meta
├── README.md
├── README.md.meta
├── VirtueSky/
│   ├── Advertising/
│   │   ├── Editor/
│   │   │   ├── AdSettingEditor.cs
│   │   │   ├── AdSettingEditor.cs.meta
│   │   │   ├── AdsWindowEditor.cs
│   │   │   ├── AdsWindowEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.Advertising.Editor.asmdef
│   │   │   └── Virtuesky.Sunflower.Advertising.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── Admob/
│   │   │   │   ├── AdmobAdClient.cs
│   │   │   │   ├── AdmobAdClient.cs.meta
│   │   │   │   ├── AdmobAdUnitVariable.cs
│   │   │   │   ├── AdmobAdUnitVariable.cs.meta
│   │   │   │   ├── AdmodUnitVariable/
│   │   │   │   │   ├── AdmobAppOpenVariable.cs
│   │   │   │   │   ├── AdmobAppOpenVariable.cs.meta
│   │   │   │   │   ├── AdmobBannerVariable.cs
│   │   │   │   │   ├── AdmobBannerVariable.cs.meta
│   │   │   │   │   ├── AdmobInterVariable.cs
│   │   │   │   │   ├── AdmobInterVariable.cs.meta
│   │   │   │   │   ├── AdmobNativeOverlayVariable.cs
│   │   │   │   │   ├── AdmobNativeOverlayVariable.cs.meta
│   │   │   │   │   ├── AdmobRewardInterVariable.cs
│   │   │   │   │   ├── AdmobRewardInterVariable.cs.meta
│   │   │   │   │   ├── AdmobRewardVariable.cs
│   │   │   │   │   └── AdmobRewardVariable.cs.meta
│   │   │   │   └── AdmodUnitVariable.meta
│   │   │   ├── Admob.meta
│   │   │   ├── General/
│   │   │   │   ├── AdClient.cs
│   │   │   │   ├── AdClient.cs.meta
│   │   │   │   ├── AdInfo.cs
│   │   │   │   ├── AdInfo.cs.meta
│   │   │   │   ├── AdSetting.cs
│   │   │   │   ├── AdSetting.cs.meta
│   │   │   │   ├── AdStatic.cs
│   │   │   │   ├── AdStatic.cs.meta
│   │   │   │   ├── AdUnitVariable.cs
│   │   │   │   ├── AdUnitVariable.cs.meta
│   │   │   │   ├── Advertising.cs
│   │   │   │   ├── Advertising.cs.meta
│   │   │   │   ├── IAdUnit.cs
│   │   │   │   └── IAdUnit.cs.meta
│   │   │   ├── General.meta
│   │   │   ├── LevelPlay/
│   │   │   │   ├── LevelPlayAdClient.cs
│   │   │   │   ├── LevelPlayAdClient.cs.meta
│   │   │   │   ├── LevelPlayAdUnitVariable.cs
│   │   │   │   ├── LevelPlayAdUnitVariable.cs.meta
│   │   │   │   ├── LevelPlayUnitVariable/
│   │   │   │   │   ├── LevelPlayBannerVariable.cs
│   │   │   │   │   ├── LevelPlayBannerVariable.cs.meta
│   │   │   │   │   ├── LevelPlayInterVariable.cs
│   │   │   │   │   ├── LevelPlayInterVariable.cs.meta
│   │   │   │   │   ├── LevelPlayRewardVariable.cs
│   │   │   │   │   └── LevelPlayRewardVariable.cs.meta
│   │   │   │   └── LevelPlayUnitVariable.meta
│   │   │   ├── LevelPlay.meta
│   │   │   ├── Max/
│   │   │   │   ├── MaxAdClient.cs
│   │   │   │   ├── MaxAdClient.cs.meta
│   │   │   │   ├── MaxAdUnitVariable.cs
│   │   │   │   ├── MaxAdUnitVariable.cs.meta
│   │   │   │   ├── MaxUnitVariable/
│   │   │   │   │   ├── MaxAppOpenVariable.cs
│   │   │   │   │   ├── MaxAppOpenVariable.cs.meta
│   │   │   │   │   ├── MaxBannerVariable.cs
│   │   │   │   │   ├── MaxBannerVariable.cs.meta
│   │   │   │   │   ├── MaxInterVariable.cs
│   │   │   │   │   ├── MaxInterVariable.cs.meta
│   │   │   │   │   ├── MaxRewardVariable.cs
│   │   │   │   │   └── MaxRewardVariable.cs.meta
│   │   │   │   └── MaxUnitVariable.meta
│   │   │   ├── Max.meta
│   │   │   ├── Virtuesky.Sunflower.Advertising.asmdef
│   │   │   └── Virtuesky.Sunflower.Advertising.asmdef.meta
│   │   └── Runtime.meta
│   ├── Advertising.meta
│   ├── AssetFinder/
│   │   ├── Editor/
│   │   │   ├── Script/
│   │   │   │   ├── AssetFinder.cs
│   │   │   │   ├── AssetFinder.cs.meta
│   │   │   │   ├── AssetFinderAssetType.cs
│   │   │   │   ├── AssetFinderAssetType.cs.meta
│   │   │   │   ├── AssetFinderCacheEditor.cs
│   │   │   │   ├── AssetFinderCacheEditor.cs.meta
│   │   │   │   ├── AssetFinderDuplicate.cs
│   │   │   │   ├── AssetFinderDuplicate.cs.meta
│   │   │   │   ├── AssetFinderRef.cs
│   │   │   │   ├── AssetFinderRef.cs.meta
│   │   │   │   ├── AssetFinderWindowExtension.cs
│   │   │   │   ├── AssetFinderWindowExtension.cs.meta
│   │   │   │   ├── Core/
│   │   │   │   │   ├── AssetFinderAsset.AssetState.cs
│   │   │   │   │   ├── AssetFinderAsset.AssetState.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.AssetType.cs
│   │   │   │   │   ├── AssetFinderAsset.AssetType.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.Classes.cs
│   │   │   │   │   ├── AssetFinderAsset.Classes.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.Constants.cs
│   │   │   │   │   ├── AssetFinderAsset.Constants.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.ContentLoader.cs
│   │   │   │   │   ├── AssetFinderAsset.ContentLoader.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.Drawing.cs
│   │   │   │   │   ├── AssetFinderAsset.Drawing.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.FileInfo.cs
│   │   │   │   │   ├── AssetFinderAsset.FileInfo.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.GuidManager.cs
│   │   │   │   │   ├── AssetFinderAsset.GuidManager.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.PathInfo.cs
│   │   │   │   │   ├── AssetFinderAsset.PathInfo.cs.meta
│   │   │   │   │   ├── AssetFinderAsset.cs
│   │   │   │   │   ├── AssetFinderAsset.cs.meta
│   │   │   │   │   ├── AssetFinderAutoRefreshMode.cs
│   │   │   │   │   ├── AssetFinderAutoRefreshMode.cs.meta
│   │   │   │   │   ├── AssetFinderCache.AssetSearch.cs
│   │   │   │   │   ├── AssetFinderCache.AssetSearch.cs.meta
│   │   │   │   │   ├── AssetFinderCache.AsyncProcessor.cs
│   │   │   │   │   ├── AssetFinderCache.AsyncProcessor.cs.meta
│   │   │   │   │   ├── AssetFinderCache.Constants.cs
│   │   │   │   │   ├── AssetFinderCache.Constants.cs.meta
│   │   │   │   │   ├── AssetFinderCache.Lifecycle.cs
│   │   │   │   │   ├── AssetFinderCache.Lifecycle.cs.meta
│   │   │   │   │   ├── AssetFinderCache.ProjectManager.cs
│   │   │   │   │   ├── AssetFinderCache.ProjectManager.cs.meta
│   │   │   │   │   ├── AssetFinderCache.Scanner.cs
│   │   │   │   │   ├── AssetFinderCache.Scanner.cs.meta
│   │   │   │   │   ├── AssetFinderCache.Search.cs
│   │   │   │   │   ├── AssetFinderCache.Search.cs.meta
│   │   │   │   │   ├── AssetFinderCache.cs
│   │   │   │   │   ├── AssetFinderCache.cs.meta
│   │   │   │   │   ├── AssetFinderGitUtil.cs
│   │   │   │   │   ├── AssetFinderGitUtil.cs.meta
│   │   │   │   │   ├── AssetFinderNavigationHistory.cs
│   │   │   │   │   ├── AssetFinderNavigationHistory.cs.meta
│   │   │   │   │   ├── AssetFinderSelectionManager.cs
│   │   │   │   │   ├── AssetFinderSelectionManager.cs.meta
│   │   │   │   │   ├── AssetFinderSettingExt.cs
│   │   │   │   │   ├── AssetFinderSettingExt.cs.meta
│   │   │   │   │   ├── AssetFinderSmartLock.cs
│   │   │   │   │   ├── AssetFinderSmartLock.cs.meta
│   │   │   │   │   ├── AssetFinderWindowFocus.cs
│   │   │   │   │   └── AssetFinderWindowFocus.cs.meta
│   │   │   │   ├── Core.meta
│   │   │   │   ├── Dev/
│   │   │   │   │   ├── AssetFinderDefine.cs
│   │   │   │   │   ├── AssetFinderDefine.cs.meta
│   │   │   │   │   ├── AssetFinderDev.cs
│   │   │   │   │   ├── AssetFinderDev.cs.meta
│   │   │   │   │   ├── AssetFinderReferenceValidator.cs
│   │   │   │   │   ├── AssetFinderReferenceValidator.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.Validator.cs
│   │   │   │   │   └── AssetFinderWindowAll.Validator.cs.meta
│   │   │   │   ├── Dev.meta
│   │   │   │   ├── Drawer/
│   │   │   │   │   ├── AssetFinderAddressableDrawer.cs
│   │   │   │   │   ├── AssetFinderAddressableDrawer.cs.meta
│   │   │   │   │   ├── AssetFinderAssetGroup.cs
│   │   │   │   │   ├── AssetFinderAssetGroup.cs.meta
│   │   │   │   │   ├── AssetFinderAssetGroupDrawer.cs
│   │   │   │   │   ├── AssetFinderAssetGroupDrawer.cs.meta
│   │   │   │   │   ├── AssetFinderAssetOrganizer.cs
│   │   │   │   │   ├── AssetFinderAssetOrganizer.cs.meta
│   │   │   │   │   ├── AssetFinderBookmark.cs
│   │   │   │   │   ├── AssetFinderBookmark.cs.meta
│   │   │   │   │   ├── AssetFinderDeleteEmptyFolder.cs
│   │   │   │   │   ├── AssetFinderDeleteEmptyFolder.cs.meta
│   │   │   │   │   ├── AssetFinderIgnoreDrawer.cs
│   │   │   │   │   ├── AssetFinderIgnoreDrawer.cs.meta
│   │   │   │   │   ├── AssetFinderMissingReference.cs
│   │   │   │   │   ├── AssetFinderMissingReference.cs.meta
│   │   │   │   │   ├── AssetFinderSetting.cs
│   │   │   │   │   ├── AssetFinderSetting.cs.meta
│   │   │   │   │   ├── AssetFinderUsedInBuild.cs
│   │   │   │   │   └── AssetFinderUsedInBuild.cs.meta
│   │   │   │   ├── Drawer.meta
│   │   │   │   ├── Duplicate/
│   │   │   │   │   ├── AssetFinderChunk.cs
│   │   │   │   │   ├── AssetFinderChunk.cs.meta
│   │   │   │   │   ├── AssetFinderDuplicateTree2.cs
│   │   │   │   │   ├── AssetFinderDuplicateTree2.cs.meta
│   │   │   │   │   ├── AssetFinderFileCompare.cs
│   │   │   │   │   ├── AssetFinderFileCompare.cs.meta
│   │   │   │   │   ├── AssetFinderHead.cs
│   │   │   │   │   └── AssetFinderHead.cs.meta
│   │   │   │   ├── Duplicate.meta
│   │   │   │   ├── Extension/
│   │   │   │   │   ├── AssetFinderExtension.cs
│   │   │   │   │   ├── AssetFinderExtension.cs.meta
│   │   │   │   │   ├── AssetFinderHelper.cs
│   │   │   │   │   ├── AssetFinderHelper.cs.meta
│   │   │   │   │   ├── AssetFinderUnity.cs
│   │   │   │   │   ├── AssetFinderUnity.cs.meta
│   │   │   │   │   ├── GUI2.cs
│   │   │   │   │   └── GUI2.cs.meta
│   │   │   │   ├── Extension.meta
│   │   │   │   ├── Extensions/
│   │   │   │   │   ├── AssetFinderWindowExtensions.cs
│   │   │   │   │   ├── AssetFinderWindowExtensions.cs.meta
│   │   │   │   │   ├── CollectionExtensions.cs
│   │   │   │   │   ├── CollectionExtensions.cs.meta
│   │   │   │   │   ├── ColorExtensions.cs
│   │   │   │   │   ├── ColorExtensions.cs.meta
│   │   │   │   │   ├── DictionaryExtensions.cs
│   │   │   │   │   ├── DictionaryExtensions.cs.meta
│   │   │   │   │   ├── GameObjectExtensions.cs
│   │   │   │   │   ├── GameObjectExtensions.cs.meta
│   │   │   │   │   ├── RectExtensions.cs
│   │   │   │   │   ├── RectExtensions.cs.meta
│   │   │   │   │   ├── RectGUIExtensions.cs
│   │   │   │   │   ├── RectGUIExtensions.cs.meta
│   │   │   │   │   ├── SerializedObjectExtensions.cs
│   │   │   │   │   ├── SerializedObjectExtensions.cs.meta
│   │   │   │   │   ├── TabExtensions.cs
│   │   │   │   │   ├── TabExtensions.cs.meta
│   │   │   │   │   ├── UnityObjectExtensions.cs
│   │   │   │   │   └── UnityObjectExtensions.cs.meta
│   │   │   │   ├── Extensions.meta
│   │   │   │   ├── Modules/
│   │   │   │   │   ├── Addressable/
│   │   │   │   │   │   ├── AssetFinderAddressable.ASMStatus.cs
│   │   │   │   │   │   ├── AssetFinderAddressable.ASMStatus.cs.meta
│   │   │   │   │   │   ├── AssetFinderAddressable.AddressInfo.cs
│   │   │   │   │   │   ├── AssetFinderAddressable.AddressInfo.cs.meta
│   │   │   │   │   │   ├── AssetFinderAddressable.ProjectStatus.cs
│   │   │   │   │   │   ├── AssetFinderAddressable.ProjectStatus.cs.meta
│   │   │   │   │   │   ├── AssetFinderAddressable.cs
│   │   │   │   │   │   └── AssetFinderAddressable.cs.meta
│   │   │   │   │   ├── Addressable.meta
│   │   │   │   │   ├── AssetFinderCSV.cs
│   │   │   │   │   ├── AssetFinderCSV.cs.meta
│   │   │   │   │   ├── AssetFinderExport.cs
│   │   │   │   │   ├── AssetFinderExport.cs.meta
│   │   │   │   │   ├── AssetFinderSceneCache.cs
│   │   │   │   │   ├── AssetFinderSceneCache.cs.meta
│   │   │   │   │   ├── AssetFinderSelection.cs
│   │   │   │   │   ├── AssetFinderSelection.cs.meta
│   │   │   │   │   ├── Lightmap/
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenRendererInformation.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenRendererInformation.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenSceneMapping.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenSceneMapping.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenSystemAtlasInformation.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenSystemAtlasInformation.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenSystemInformation.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenSystemInformation.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenTerrainChunksInformation.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.EnlightenTerrainChunksInformation.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.LightBakingOutput.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.LightBakingOutput.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.LightingDataAssetRoot.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.LightingDataAssetRoot.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.LightmapData.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.LightmapData.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.RendererData.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.RendererData.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.SceneObjectIdentifier.cs
│   │   │   │   │   │   ├── AssetFinderLightmap.SceneObjectIdentifier.cs.meta
│   │   │   │   │   │   ├── AssetFinderLightmap.cs
│   │   │   │   │   │   └── AssetFinderLightmap.cs.meta
│   │   │   │   │   └── Lightmap.meta
│   │   │   │   ├── Modules.meta
│   │   │   │   ├── Monitor/
│   │   │   │   │   ├── AssetFinderCacheHelper.cs
│   │   │   │   │   └── AssetFinderCacheHelper.cs.meta
│   │   │   │   ├── Monitor.meta
│   │   │   │   ├── TreeUI/
│   │   │   │   │   ├── AssetFinderRef.cs
│   │   │   │   │   ├── AssetFinderRef.cs.meta
│   │   │   │   │   ├── AssetFinderRefDrawer.Mode.cs
│   │   │   │   │   ├── AssetFinderRefDrawer.Mode.cs.meta
│   │   │   │   │   ├── AssetFinderRefDrawer.Sort.cs
│   │   │   │   │   ├── AssetFinderRefDrawer.Sort.cs.meta
│   │   │   │   │   ├── AssetFinderRefDrawer.cs
│   │   │   │   │   ├── AssetFinderRefDrawer.cs.meta
│   │   │   │   │   ├── AssetFinderSceneRef.cs
│   │   │   │   │   ├── AssetFinderSceneRef.cs.meta
│   │   │   │   │   ├── AssetFinderTreeUI2.cs
│   │   │   │   │   └── AssetFinderTreeUI2.cs.meta
│   │   │   │   ├── TreeUI.meta
│   │   │   │   ├── UI/
│   │   │   │   │   ├── AssetFinderDeleteButton.cs
│   │   │   │   │   ├── AssetFinderDeleteButton.cs.meta
│   │   │   │   │   ├── AssetFinderEnumDrawer.cs
│   │   │   │   │   ├── AssetFinderEnumDrawer.cs.meta
│   │   │   │   │   ├── AssetFinderGUIContent.cs
│   │   │   │   │   ├── AssetFinderGUIContent.cs.meta
│   │   │   │   │   ├── AssetFinderIcon.cs
│   │   │   │   │   ├── AssetFinderIcon.cs.meta
│   │   │   │   │   ├── AssetFinderObjectDrawer.cs
│   │   │   │   │   ├── AssetFinderObjectDrawer.cs.meta
│   │   │   │   │   ├── AssetFinderSearchView.cs
│   │   │   │   │   ├── AssetFinderSearchView.cs.meta
│   │   │   │   │   ├── AssetFinderSplitView.cs
│   │   │   │   │   ├── AssetFinderSplitView.cs.meta
│   │   │   │   │   ├── AssetFinderTabView.cs
│   │   │   │   │   ├── AssetFinderTabView.cs.meta
│   │   │   │   │   ├── AssetFinderToggleList.cs
│   │   │   │   │   ├── AssetFinderToggleList.cs.meta
│   │   │   │   │   ├── Theme/
│   │   │   │   │   │   ├── AssetFinderTheme.Dark.cs
│   │   │   │   │   │   ├── AssetFinderTheme.Dark.cs.meta
│   │   │   │   │   │   ├── AssetFinderTheme.Light.cs
│   │   │   │   │   │   ├── AssetFinderTheme.Light.cs.meta
│   │   │   │   │   │   ├── AssetFinderTheme.cs
│   │   │   │   │   │   └── AssetFinderTheme.cs.meta
│   │   │   │   │   └── Theme.meta
│   │   │   │   ├── UI.meta
│   │   │   │   ├── Window/
│   │   │   │   │   ├── AssetFinderWindowAll.CacheManager.cs
│   │   │   │   │   ├── AssetFinderWindowAll.CacheManager.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.Drawing.cs
│   │   │   │   │   ├── AssetFinderWindowAll.Drawing.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.GuidManager.cs
│   │   │   │   │   ├── AssetFinderWindowAll.GuidManager.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.Initialization.cs
│   │   │   │   │   ├── AssetFinderWindowAll.Initialization.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.PanelSettings.cs
│   │   │   │   │   ├── AssetFinderWindowAll.PanelSettings.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.SelectionManager.cs
│   │   │   │   │   ├── AssetFinderWindowAll.SelectionManager.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.SettingsPanel.cs
│   │   │   │   │   ├── AssetFinderWindowAll.SettingsPanel.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.ToolsPanel.cs
│   │   │   │   │   ├── AssetFinderWindowAll.ToolsPanel.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.UILayout.cs
│   │   │   │   │   ├── AssetFinderWindowAll.UILayout.cs.meta
│   │   │   │   │   ├── AssetFinderWindowAll.cs
│   │   │   │   │   ├── AssetFinderWindowAll.cs.meta
│   │   │   │   │   ├── AssetFinderWindowBase.cs
│   │   │   │   │   ├── AssetFinderWindowBase.cs.meta
│   │   │   │   │   ├── IRefDraw.cs
│   │   │   │   │   ├── IRefDraw.cs.meta
│   │   │   │   │   ├── IWindow.cs
│   │   │   │   │   └── IWindow.cs.meta
│   │   │   │   └── Window.meta
│   │   │   ├── Script.meta
│   │   │   ├── Virtuesky.Sunflower.AssetFinder.Editor.asmdef
│   │   │   ├── Virtuesky.Sunflower.AssetFinder.Editor.asmdef.meta
│   │   │   ├── v2/
│   │   │   │   ├── AssetFinder.cs
│   │   │   │   ├── AssetFinder.cs.meta
│   │   │   │   ├── Core/
│   │   │   │   │   ├── AssetFinderAssetDB.cs
│   │   │   │   │   ├── AssetFinderAssetDB.cs.meta
│   │   │   │   │   ├── AssetFinderAssetFile.cs
│   │   │   │   │   ├── AssetFinderAssetFile.cs.meta
│   │   │   │   │   ├── AssetFinderCacheAsset.cs
│   │   │   │   │   ├── AssetFinderCacheAsset.cs.meta
│   │   │   │   │   ├── AssetFinderID.cs
│   │   │   │   │   ├── AssetFinderID.cs.meta
│   │   │   │   │   ├── AssetFinderIDRef.cs
│   │   │   │   │   ├── AssetFinderIDRef.cs.meta
│   │   │   │   │   ├── AssetFinderSceneObject.cs
│   │   │   │   │   ├── AssetFinderSceneObject.cs.meta
│   │   │   │   │   ├── SubAssetDetail.cs
│   │   │   │   │   └── SubAssetDetail.cs.meta
│   │   │   │   ├── Core.meta
│   │   │   │   ├── Drawer/
│   │   │   │   │   ├── AssetFinderAssetFileDrawer.cs
│   │   │   │   │   ├── AssetFinderAssetFileDrawer.cs.meta
│   │   │   │   │   ├── AssetFinderCacheAssetEditor.cs
│   │   │   │   │   ├── AssetFinderCacheAssetEditor.cs.meta
│   │   │   │   │   ├── AssetFinderIDDrawer.cs
│   │   │   │   │   └── AssetFinderIDDrawer.cs.meta
│   │   │   │   ├── Drawer.meta
│   │   │   │   ├── GUI/
│   │   │   │   │   ├── AssetFinderAssetGUI.cs
│   │   │   │   │   ├── AssetFinderAssetGUI.cs.meta
│   │   │   │   │   ├── AssetFinderAssetInfo.cs
│   │   │   │   │   └── AssetFinderAssetInfo.cs.meta
│   │   │   │   ├── GUI.meta
│   │   │   │   ├── Parser/
│   │   │   │   │   ├── AssetFinderParser.BinaryAsset.cs
│   │   │   │   │   ├── AssetFinderParser.BinaryAsset.cs.meta
│   │   │   │   │   ├── AssetFinderParser.LightMap.cs
│   │   │   │   │   ├── AssetFinderParser.LightMap.cs.meta
│   │   │   │   │   ├── AssetFinderParser.Model3D.cs
│   │   │   │   │   ├── AssetFinderParser.Model3D.cs.meta
│   │   │   │   │   ├── AssetFinderParser.Shader.cs
│   │   │   │   │   ├── AssetFinderParser.Shader.cs.meta
│   │   │   │   │   ├── AssetFinderParser.ShaderGraph.cs
│   │   │   │   │   ├── AssetFinderParser.ShaderGraph.cs.meta
│   │   │   │   │   ├── AssetFinderParser.Terrain.cs
│   │   │   │   │   ├── AssetFinderParser.Terrain.cs.meta
│   │   │   │   │   ├── AssetFinderParser.UIToolkit.cs
│   │   │   │   │   ├── AssetFinderParser.UIToolkit.cs.meta
│   │   │   │   │   ├── AssetFinderParser.Yaml.cs
│   │   │   │   │   ├── AssetFinderParser.Yaml.cs.meta
│   │   │   │   │   ├── AssetFinderParser.cs
│   │   │   │   │   └── AssetFinderParser.cs.meta
│   │   │   │   ├── Parser.meta
│   │   │   │   ├── UI/
│   │   │   │   │   ├── AssetRefUI.cs
│   │   │   │   │   ├── AssetRefUI.cs.meta
│   │   │   │   │   ├── AssetUI.cs
│   │   │   │   │   ├── AssetUI.cs.meta
│   │   │   │   │   ├── FileUI.cs
│   │   │   │   │   ├── FileUI.cs.meta
│   │   │   │   │   ├── FolderUI.cs
│   │   │   │   │   └── FolderUI.cs.meta
│   │   │   │   ├── UI.meta
│   │   │   │   ├── Unity/
│   │   │   │   │   ├── AssetFinderInitializer.cs
│   │   │   │   │   ├── AssetFinderInitializer.cs.meta
│   │   │   │   │   ├── AssetFinderLightmap.cs
│   │   │   │   │   ├── AssetFinderLightmap.cs.meta
│   │   │   │   │   ├── AssetFinderTerrain.cs
│   │   │   │   │   ├── AssetFinderTerrain.cs.meta
│   │   │   │   │   ├── AssetFinderUSelection.cs
│   │   │   │   │   └── AssetFinderUSelection.cs.meta
│   │   │   │   ├── Unity.meta
│   │   │   │   ├── Utils/
│   │   │   │   │   ├── AssetFinderTimeSlice.cs
│   │   │   │   │   └── AssetFinderTimeSlice.cs.meta
│   │   │   │   └── Utils.meta
│   │   │   └── v2.meta
│   │   └── Editor.meta
│   ├── AssetFinder.meta
│   ├── Audio/
│   │   ├── Editor/
│   │   │   ├── AudioWindowEditor.cs
│   │   │   ├── AudioWindowEditor.cs.meta
│   │   │   ├── EditorAudioPreview.cs
│   │   │   ├── EditorAudioPreview.cs.meta
│   │   │   ├── SoundDataEditor.cs
│   │   │   ├── SoundDataEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.Audio.Editor.asmdef
│   │   │   └── Virtuesky.Sunflower.Audio.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── AudioHelper.cs
│   │   │   ├── AudioHelper.cs.meta
│   │   │   ├── AudioManager.cs
│   │   │   ├── AudioManager.cs.meta
│   │   │   ├── Music_Event/
│   │   │   │   ├── PauseMusicEvent.cs
│   │   │   │   ├── PauseMusicEvent.cs.meta
│   │   │   │   ├── PlayMusicEvent.cs
│   │   │   │   ├── PlayMusicEvent.cs.meta
│   │   │   │   ├── ResumeMusicEvent.cs
│   │   │   │   ├── ResumeMusicEvent.cs.meta
│   │   │   │   ├── StopMusicEvent.cs
│   │   │   │   └── StopMusicEvent.cs.meta
│   │   │   ├── Music_Event.meta
│   │   │   ├── Sfx_Event/
│   │   │   │   ├── FinishSfxEvent.cs
│   │   │   │   ├── FinishSfxEvent.cs.meta
│   │   │   │   ├── PauseSfxEvent.cs
│   │   │   │   ├── PauseSfxEvent.cs.meta
│   │   │   │   ├── PlaySfxEvent.cs
│   │   │   │   ├── PlaySfxEvent.cs.meta
│   │   │   │   ├── ResumeSfxEvent.cs
│   │   │   │   ├── ResumeSfxEvent.cs.meta
│   │   │   │   ├── StopAllSfxEvent.cs
│   │   │   │   ├── StopAllSfxEvent.cs.meta
│   │   │   │   ├── StopSfxEvent.cs
│   │   │   │   └── StopSfxEvent.cs.meta
│   │   │   ├── Sfx_Event.meta
│   │   │   ├── SoundCache.cs
│   │   │   ├── SoundCache.cs.meta
│   │   │   ├── SoundComponent.cs
│   │   │   ├── SoundComponent.cs.meta
│   │   │   ├── SoundData.cs
│   │   │   ├── SoundData.cs.meta
│   │   │   ├── Volume_Variable/
│   │   │   │   ├── MusicVolumeChange.cs
│   │   │   │   ├── MusicVolumeChange.cs.meta
│   │   │   │   ├── SfxVolumeChange.cs
│   │   │   │   └── SfxVolumeChange.cs.meta
│   │   │   ├── Volume_Variable.meta
│   │   │   ├── virtuesky.sunflower.audio.asmdef
│   │   │   └── virtuesky.sunflower.audio.asmdef.meta
│   │   └── Runtime.meta
│   ├── Audio.meta
│   ├── Button/
│   │   ├── Editor/
│   │   │   ├── ButtomCustomEditor.cs
│   │   │   ├── ButtomCustomEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.Button.Editor.asmdef
│   │   │   └── Virtuesky.Sunflower.Button.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── ButtonCustom.cs
│   │   │   ├── ButtonCustom.cs.meta
│   │   │   ├── ButtonTMP.cs
│   │   │   ├── ButtonTMP.cs.meta
│   │   │   ├── ButtonText.cs
│   │   │   ├── ButtonText.cs.meta
│   │   │   ├── ButtonUI.cs
│   │   │   ├── ButtonUI.cs.meta
│   │   │   ├── ButtonUI_TMP.cs
│   │   │   ├── ButtonUI_TMP.cs.meta
│   │   │   ├── ButtonUI_Text.cs
│   │   │   ├── ButtonUI_Text.cs.meta
│   │   │   ├── Virtuesky.Sunflower.Button.asmdef
│   │   │   └── Virtuesky.Sunflower.Button.asmdef.meta
│   │   └── Runtime.meta
│   ├── Button.meta
│   ├── Component/
│   │   ├── AnimancerComponent/
│   │   │   ├── HandleAnimancerComponent.cs
│   │   │   └── HandleAnimancerComponent.cs.meta
│   │   ├── AnimancerComponent.meta
│   │   ├── BounceComponent.cs
│   │   ├── BounceComponent.cs.meta
│   │   ├── Buoyancy2DComponent.cs
│   │   ├── Buoyancy2DComponent.cs.meta
│   │   ├── BuoyancyComponent.cs
│   │   ├── BuoyancyComponent.cs.meta
│   │   ├── EffectAppearComponent.cs
│   │   ├── EffectAppearComponent.cs.meta
│   │   ├── EffectZoomInOutComponent.cs
│   │   ├── EffectZoomInOutComponent.cs.meta
│   │   ├── FollowTargetComponent.cs
│   │   ├── FollowTargetComponent.cs.meta
│   │   ├── MoveComponent.cs
│   │   ├── MoveComponent.cs.meta
│   │   ├── ResizeCameraOrthographicComponent.cs
│   │   ├── ResizeCameraOrthographicComponent.cs.meta
│   │   ├── ResizeMatchCanvasScalerComponent.cs
│   │   ├── ResizeMatchCanvasScalerComponent.cs.meta
│   │   ├── RotateComponent.cs
│   │   ├── RotateComponent.cs.meta
│   │   ├── SafeAreaComponent.cs
│   │   ├── SafeAreaComponent.cs.meta
│   │   ├── SkeletonComponent/
│   │   │   ├── AnimationSkeleton/
│   │   │   │   ├── AnimationSkeleton.cs
│   │   │   │   ├── AnimationSkeleton.cs.meta
│   │   │   │   ├── AnimationSkeletonComponent.cs
│   │   │   │   ├── AnimationSkeletonComponent.cs.meta
│   │   │   │   ├── AnimationSkeletonUIComponent.cs
│   │   │   │   └── AnimationSkeletonUIComponent.cs.meta
│   │   │   ├── AnimationSkeleton.meta
│   │   │   ├── SkinSkeleton/
│   │   │   │   ├── SkinSkeleton.cs
│   │   │   │   ├── SkinSkeleton.cs.meta
│   │   │   │   ├── SkinSkeletonComponent.cs
│   │   │   │   ├── SkinSkeletonComponent.cs.meta
│   │   │   │   ├── SkinSkeletonUIComponent.cs
│   │   │   │   └── SkinSkeletonUIComponent.cs.meta
│   │   │   └── SkinSkeleton.meta
│   │   ├── SkeletonComponent.meta
│   │   ├── TimeRemainingComponent.cs
│   │   ├── TimeRemainingComponent.cs.meta
│   │   ├── virtuesky.sunflower.component.asmdef
│   │   └── virtuesky.sunflower.component.asmdef.meta
│   ├── Component.meta
│   ├── ControlPanel/
│   │   ├── CPAboutDrawer.cs
│   │   ├── CPAboutDrawer.cs.meta
│   │   ├── CPAdjustDrawer.cs
│   │   ├── CPAdjustDrawer.cs.meta
│   │   ├── CPAdvertisingDrawer.cs
│   │   ├── CPAdvertisingDrawer.cs.meta
│   │   ├── CPAppsFlyerDrawer.cs
│   │   ├── CPAppsFlyerDrawer.cs.meta
│   │   ├── CPAssetFinderDrawer.cs
│   │   ├── CPAssetFinderDrawer.cs.meta
│   │   ├── CPAudioDrawer.cs
│   │   ├── CPAudioDrawer.cs.meta
│   │   ├── CPExtensionsDrawer.cs
│   │   ├── CPExtensionsDrawer.cs.meta
│   │   ├── CPFirebaseDrawer.cs
│   │   ├── CPFirebaseDrawer.cs.meta
│   │   ├── CPFolderIconDrawer.cs
│   │   ├── CPFolderIconDrawer.cs.meta
│   │   ├── CPGameServiceDrawer.cs
│   │   ├── CPGameServiceDrawer.cs.meta
│   │   ├── CPHierarchyDrawer.cs
│   │   ├── CPHierarchyDrawer.cs.meta
│   │   ├── CPIapDrawer.cs
│   │   ├── CPIapDrawer.cs.meta
│   │   ├── CPInAppReviewDrawer.cs
│   │   ├── CPInAppReviewDrawer.cs.meta
│   │   ├── CPLevelEditorDrawer.cs
│   │   ├── CPLevelEditorDrawer.cs.meta
│   │   ├── CPLocalizationDrawer.cs
│   │   ├── CPLocalizationDrawer.cs.meta
│   │   ├── CPNotificationChanelDrawer.cs
│   │   ├── CPNotificationChanelDrawer.cs.meta
│   │   ├── CPRegisterPackageDrawer.cs
│   │   ├── CPRegisterPackageDrawer.cs.meta
│   │   ├── CPScriptingDefineSymbolsDrawer.cs
│   │   ├── CPScriptingDefineSymbolsDrawer.cs.meta
│   │   ├── CPSoEventDrawer.cs
│   │   ├── CPSoEventDrawer.cs.meta
│   │   ├── CPSoVariableDrawer.cs
│   │   ├── CPSoVariableDrawer.cs.meta
│   │   ├── CPUtility.cs
│   │   ├── CPUtility.cs.meta
│   │   ├── ConstantControlPanel.cs
│   │   ├── ConstantControlPanel.cs.meta
│   │   ├── ConstantPackage.cs
│   │   ├── ConstantPackage.cs.meta
│   │   ├── ControlPanelWindowEditor.cs
│   │   ├── ControlPanelWindowEditor.cs.meta
│   │   ├── Virtuesky.Sunflower.ControlPanel.Editor.asmdef
│   │   └── Virtuesky.Sunflower.ControlPanel.Editor.asmdef.meta
│   ├── ControlPanel.meta
│   ├── Core/
│   │   ├── Editor/
│   │   │   ├── OptionalPropertyDrawer.cs
│   │   │   ├── OptionalPropertyDrawer.cs.meta
│   │   │   ├── VirtueSky.Sunflower.Core.Editor.asmdef
│   │   │   └── VirtueSky.Sunflower.Core.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── App.cs
│   │   │   ├── App.cs.meta
│   │   │   ├── BaseMono.cs
│   │   │   ├── BaseMono.cs.meta
│   │   │   ├── BaseSO.cs
│   │   │   ├── BaseSO.cs.meta
│   │   │   ├── CacheComponent.cs
│   │   │   ├── CacheComponent.cs.meta
│   │   │   ├── DelayHandle.cs
│   │   │   ├── DelayHandle.cs.meta
│   │   │   ├── IEntity.cs
│   │   │   ├── IEntity.cs.meta
│   │   │   ├── MonoGlobal.cs
│   │   │   ├── MonoGlobal.cs.meta
│   │   │   ├── Optional.cs
│   │   │   ├── Optional.cs.meta
│   │   │   ├── RuntimeInitialize.cs
│   │   │   ├── RuntimeInitialize.cs.meta
│   │   │   ├── UnityServiceInitialization.cs
│   │   │   ├── UnityServiceInitialization.cs.meta
│   │   │   ├── virtuesky.sunflower.core.asmdef
│   │   │   └── virtuesky.sunflower.core.asmdef.meta
│   │   └── Runtime.meta
│   ├── Core.meta
│   ├── DataStorage/
│   │   ├── Editor/
│   │   │   ├── DataWindowEditor.cs
│   │   │   ├── DataWindowEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.DataStorage.Editor.asmdef
│   │   │   └── Virtuesky.Sunflower.DataStorage.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── GameData.cs
│   │   │   ├── GameData.cs.meta
│   │   │   ├── SerializeAdapter.cs
│   │   │   ├── SerializeAdapter.cs.meta
│   │   │   ├── Virtuesky.Sunflower.DataStorage.asmdef
│   │   │   └── Virtuesky.Sunflower.DataStorage.asmdef.meta
│   │   └── Runtime.meta
│   ├── DataStorage.meta
│   ├── DataType/
│   │   ├── DictionaryCustom.cs
│   │   ├── DictionaryCustom.cs.meta
│   │   ├── ShortDouble.Units.cs
│   │   ├── ShortDouble.Units.cs.meta
│   │   ├── ShortDouble.cs
│   │   ├── ShortDouble.cs.meta
│   │   ├── virtuesky.sunflower.datatype.asmdef
│   │   └── virtuesky.sunflower.datatype.asmdef.meta
│   ├── DataType.meta
│   ├── Events/
│   │   ├── Editor/
│   │   │   ├── BaseEventEditor.cs
│   │   │   ├── BaseEventEditor.cs.meta
│   │   │   ├── EventWindowEditor.cs
│   │   │   ├── EventWindowEditor.cs.meta
│   │   │   ├── virtuesky.sunflower.event.editor.asmdef
│   │   │   └── virtuesky.sunflower.event.editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── Base_Event/
│   │   │   │   ├── BaseEvent.cs
│   │   │   │   ├── BaseEvent.cs.meta
│   │   │   │   ├── BaseEventListener.cs
│   │   │   │   ├── BaseEventListener.cs.meta
│   │   │   │   ├── BaseEventResponse.cs
│   │   │   │   ├── BaseEventResponse.cs.meta
│   │   │   │   ├── EventListenerMono.cs
│   │   │   │   └── EventListenerMono.cs.meta
│   │   │   ├── Base_Event.meta
│   │   │   ├── Boolean_Event/
│   │   │   │   ├── BooleanEvent.cs
│   │   │   │   ├── BooleanEvent.cs.meta
│   │   │   │   ├── BooleanEventListener.cs
│   │   │   │   ├── BooleanEventListener.cs.meta
│   │   │   │   ├── BooleanEventResponse.cs
│   │   │   │   ├── BooleanEventResponse.cs.meta
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── BoolEventBoolResult.cs
│   │   │   │   │   ├── BoolEventBoolResult.cs.meta
│   │   │   │   │   ├── BoolEventFloatResult.cs
│   │   │   │   │   ├── BoolEventFloatResult.cs.meta
│   │   │   │   │   ├── BoolEventGameObjectResult.cs
│   │   │   │   │   ├── BoolEventGameObjectResult.cs.meta
│   │   │   │   │   ├── BoolEventIntResult.cs
│   │   │   │   │   ├── BoolEventIntResult.cs.meta
│   │   │   │   │   ├── BoolEventObjectResult.cs
│   │   │   │   │   ├── BoolEventObjectResult.cs.meta
│   │   │   │   │   ├── BoolEventStringResult.cs
│   │   │   │   │   ├── BoolEventStringResult.cs.meta
│   │   │   │   │   ├── BoolEventTransformResult.cs
│   │   │   │   │   ├── BoolEventTransformResult.cs.meta
│   │   │   │   │   ├── BoolEventVector3Result.cs
│   │   │   │   │   └── BoolEventVector3Result.cs.meta
│   │   │   │   └── Event_Result.meta
│   │   │   ├── Boolean_Event.meta
│   │   │   ├── Custom/
│   │   │   │   ├── ClickButtonEvent.cs
│   │   │   │   └── ClickButtonEvent.cs.meta
│   │   │   ├── Custom.meta
│   │   │   ├── Dictionary_Event/
│   │   │   │   ├── DictionaryEvent.cs
│   │   │   │   ├── DictionaryEvent.cs.meta
│   │   │   │   ├── DictionaryEventListener.cs
│   │   │   │   ├── DictionaryEventListener.cs.meta
│   │   │   │   ├── DictionaryEventResponse.cs
│   │   │   │   └── DictionaryEventResponse.cs.meta
│   │   │   ├── Dictionary_Event.meta
│   │   │   ├── Event_NoParam/
│   │   │   │   ├── EventListenerNoParam.cs
│   │   │   │   ├── EventListenerNoParam.cs.meta
│   │   │   │   ├── EventNoParam.cs
│   │   │   │   ├── EventNoParam.cs.meta
│   │   │   │   ├── EventResponse.cs
│   │   │   │   ├── EventResponse.cs.meta
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── EventNoParamBoolResult.cs
│   │   │   │   │   ├── EventNoParamBoolResult.cs.meta
│   │   │   │   │   ├── EventNoParamFloatResult.cs
│   │   │   │   │   ├── EventNoParamFloatResult.cs.meta
│   │   │   │   │   ├── EventNoParamGameObjectResult.cs
│   │   │   │   │   ├── EventNoParamGameObjectResult.cs.meta
│   │   │   │   │   ├── EventNoParamIntResult.cs
│   │   │   │   │   ├── EventNoParamIntResult.cs.meta
│   │   │   │   │   ├── EventNoParamObjectResult.cs
│   │   │   │   │   ├── EventNoParamObjectResult.cs.meta
│   │   │   │   │   ├── EventNoParamResult.cs
│   │   │   │   │   ├── EventNoParamResult.cs.meta
│   │   │   │   │   ├── EventNoParamStringResult.cs
│   │   │   │   │   ├── EventNoParamStringResult.cs.meta
│   │   │   │   │   ├── EventNoParamTransformResult.cs
│   │   │   │   │   ├── EventNoParamTransformResult.cs.meta
│   │   │   │   │   ├── EventNoParamVector3Result.cs
│   │   │   │   │   └── EventNoParamVector3Result.cs.meta
│   │   │   │   └── Event_Result.meta
│   │   │   ├── Event_NoParam.meta
│   │   │   ├── Float_Event/
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── FloatEventBoolResult.cs
│   │   │   │   │   ├── FloatEventBoolResult.cs.meta
│   │   │   │   │   ├── FloatEventFloatResult.cs
│   │   │   │   │   ├── FloatEventFloatResult.cs.meta
│   │   │   │   │   ├── FloatEventGameObjectResult.cs
│   │   │   │   │   ├── FloatEventGameObjectResult.cs.meta
│   │   │   │   │   ├── FloatEventIntResult.cs
│   │   │   │   │   ├── FloatEventIntResult.cs.meta
│   │   │   │   │   ├── FloatEventObjectResult.cs
│   │   │   │   │   ├── FloatEventObjectResult.cs.meta
│   │   │   │   │   ├── FloatEventStringResult.cs
│   │   │   │   │   ├── FloatEventStringResult.cs.meta
│   │   │   │   │   ├── FloatEventTransformResult.cs
│   │   │   │   │   ├── FloatEventTransformResult.cs.meta
│   │   │   │   │   ├── FloatEventVector3Result.cs
│   │   │   │   │   └── FloatEventVector3Result.cs.meta
│   │   │   │   ├── Event_Result.meta
│   │   │   │   ├── FloatEvent.cs
│   │   │   │   ├── FloatEvent.cs.meta
│   │   │   │   ├── FloatEventListener.cs
│   │   │   │   ├── FloatEventListener.cs.meta
│   │   │   │   ├── FloatEventResponse.cs
│   │   │   │   └── FloatEventResponse.cs.meta
│   │   │   ├── Float_Event.meta
│   │   │   ├── GameObject_Event/
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── GameObjectEventBoolResult.cs
│   │   │   │   │   ├── GameObjectEventBoolResult.cs.meta
│   │   │   │   │   ├── GameObjectEventFloatResult.cs
│   │   │   │   │   ├── GameObjectEventFloatResult.cs.meta
│   │   │   │   │   ├── GameObjectEventGameObjectResult.cs
│   │   │   │   │   ├── GameObjectEventGameObjectResult.cs.meta
│   │   │   │   │   ├── GameObjectEventIntResult.cs
│   │   │   │   │   ├── GameObjectEventIntResult.cs.meta
│   │   │   │   │   ├── GameObjectEventObjectResult.cs
│   │   │   │   │   ├── GameObjectEventObjectResult.cs.meta
│   │   │   │   │   ├── GameObjectEventStringResult.cs
│   │   │   │   │   ├── GameObjectEventStringResult.cs.meta
│   │   │   │   │   ├── GameObjectEventTransformResult.cs
│   │   │   │   │   ├── GameObjectEventTransformResult.cs.meta
│   │   │   │   │   ├── GameObjectEventVector3Result.cs
│   │   │   │   │   └── GameObjectEventVector3Result.cs.meta
│   │   │   │   ├── Event_Result.meta
│   │   │   │   ├── GameObjectEvent.cs
│   │   │   │   ├── GameObjectEvent.cs.meta
│   │   │   │   ├── GameObjectEventListener.cs
│   │   │   │   ├── GameObjectEventListener.cs.meta
│   │   │   │   ├── GameObjectEventResponse.cs
│   │   │   │   └── GameObjectEventResponse.cs.meta
│   │   │   ├── GameObject_Event.meta
│   │   │   ├── Integer_Event/
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── IntEventBoolResult.cs
│   │   │   │   │   ├── IntEventBoolResult.cs.meta
│   │   │   │   │   ├── IntEventFloatResult.cs
│   │   │   │   │   ├── IntEventFloatResult.cs.meta
│   │   │   │   │   ├── IntEventGameObjectResult.cs
│   │   │   │   │   ├── IntEventGameObjectResult.cs.meta
│   │   │   │   │   ├── IntEventIntResult.cs
│   │   │   │   │   ├── IntEventIntResult.cs.meta
│   │   │   │   │   ├── IntEventObjectResult.cs
│   │   │   │   │   ├── IntEventObjectResult.cs.meta
│   │   │   │   │   ├── IntEventStringResult.cs
│   │   │   │   │   ├── IntEventStringResult.cs.meta
│   │   │   │   │   ├── IntEventTransformResult.cs
│   │   │   │   │   ├── IntEventTransformResult.cs.meta
│   │   │   │   │   ├── IntEventVector3Result.cs
│   │   │   │   │   └── IntEventVector3Result.cs.meta
│   │   │   │   ├── Event_Result.meta
│   │   │   │   ├── IntegerEvent.cs
│   │   │   │   ├── IntegerEvent.cs.meta
│   │   │   │   ├── IntegerEventListener.cs
│   │   │   │   ├── IntegerEventListener.cs.meta
│   │   │   │   ├── IntegerEventResponse.cs
│   │   │   │   └── IntegerEventResponse.cs.meta
│   │   │   ├── Integer_Event.meta
│   │   │   ├── Interface_Event/
│   │   │   │   ├── IEvent.cs
│   │   │   │   ├── IEvent.cs.meta
│   │   │   │   ├── IEventListener.cs
│   │   │   │   ├── IEventListener.cs.meta
│   │   │   │   ├── IEventResponse.cs
│   │   │   │   └── IEventResponse.cs.meta
│   │   │   ├── Interface_Event.meta
│   │   │   ├── Object_Event/
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── ObjectEventBoolResult.cs
│   │   │   │   │   ├── ObjectEventBoolResult.cs.meta
│   │   │   │   │   ├── ObjectEventFloatResult.cs
│   │   │   │   │   ├── ObjectEventFloatResult.cs.meta
│   │   │   │   │   ├── ObjectEventGameObjectResult.cs
│   │   │   │   │   ├── ObjectEventGameObjectResult.cs.meta
│   │   │   │   │   ├── ObjectEventIntResult.cs
│   │   │   │   │   ├── ObjectEventIntResult.cs.meta
│   │   │   │   │   ├── ObjectEventObjectResult.cs
│   │   │   │   │   ├── ObjectEventObjectResult.cs.meta
│   │   │   │   │   ├── ObjectEventStringResult.cs
│   │   │   │   │   ├── ObjectEventStringResult.cs.meta
│   │   │   │   │   ├── ObjectEventTransformResult.cs
│   │   │   │   │   ├── ObjectEventTransformResult.cs.meta
│   │   │   │   │   ├── ObjectEventVector3Result.cs
│   │   │   │   │   └── ObjectEventVector3Result.cs.meta
│   │   │   │   ├── Event_Result.meta
│   │   │   │   ├── ObjectEvent.cs
│   │   │   │   ├── ObjectEvent.cs.meta
│   │   │   │   ├── ObjectEventListener.cs
│   │   │   │   ├── ObjectEventListener.cs.meta
│   │   │   │   ├── ObjectEventResponse.cs
│   │   │   │   └── ObjectEventResponse.cs.meta
│   │   │   ├── Object_Event.meta
│   │   │   ├── ShortDouble_Event/
│   │   │   │   ├── ShortDoubleEvent.cs
│   │   │   │   ├── ShortDoubleEvent.cs.meta
│   │   │   │   ├── ShortDoubleEventListener.cs
│   │   │   │   ├── ShortDoubleEventListener.cs.meta
│   │   │   │   ├── ShortDoubleEventResponse.cs
│   │   │   │   └── ShortDoubleEventResponse.cs.meta
│   │   │   ├── ShortDouble_Event.meta
│   │   │   ├── String_Event/
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── StringEventBoolResult.cs
│   │   │   │   │   ├── StringEventBoolResult.cs.meta
│   │   │   │   │   ├── StringEventFloatResult.cs
│   │   │   │   │   ├── StringEventFloatResult.cs.meta
│   │   │   │   │   ├── StringEventGameObjectResult.cs
│   │   │   │   │   ├── StringEventGameObjectResult.cs.meta
│   │   │   │   │   ├── StringEventIntResult.cs
│   │   │   │   │   ├── StringEventIntResult.cs.meta
│   │   │   │   │   ├── StringEventObjectResult.cs
│   │   │   │   │   ├── StringEventObjectResult.cs.meta
│   │   │   │   │   ├── StringEventStringResult.cs
│   │   │   │   │   ├── StringEventStringResult.cs.meta
│   │   │   │   │   ├── StringEventTransformResult.cs
│   │   │   │   │   ├── StringEventTransformResult.cs.meta
│   │   │   │   │   ├── StringEventVector3Result.cs
│   │   │   │   │   └── StringEventVector3Result.cs.meta
│   │   │   │   ├── Event_Result.meta
│   │   │   │   ├── StringEvent.cs
│   │   │   │   ├── StringEvent.cs.meta
│   │   │   │   ├── StringEventListener.cs
│   │   │   │   ├── StringEventListener.cs.meta
│   │   │   │   ├── StringEventResponse.cs
│   │   │   │   └── StringEventResponse.cs.meta
│   │   │   ├── String_Event.meta
│   │   │   ├── Transform_Event/
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── TransformEventBoolResult.cs
│   │   │   │   │   ├── TransformEventBoolResult.cs.meta
│   │   │   │   │   ├── TransformEventFloatResult.cs
│   │   │   │   │   ├── TransformEventFloatResult.cs.meta
│   │   │   │   │   ├── TransformEventGameObjectResult.cs
│   │   │   │   │   ├── TransformEventGameObjectResult.cs.meta
│   │   │   │   │   ├── TransformEventIntResult.cs
│   │   │   │   │   ├── TransformEventIntResult.cs.meta
│   │   │   │   │   ├── TransformEventObjectResult.cs
│   │   │   │   │   ├── TransformEventObjectResult.cs.meta
│   │   │   │   │   ├── TransformEventStringResult.cs
│   │   │   │   │   ├── TransformEventStringResult.cs.meta
│   │   │   │   │   ├── TransformEventTransformResult.cs
│   │   │   │   │   ├── TransformEventTransformResult.cs.meta
│   │   │   │   │   ├── TransformEventVector3Result.cs
│   │   │   │   │   └── TransformEventVector3Result.cs.meta
│   │   │   │   ├── Event_Result.meta
│   │   │   │   ├── TransformEvent.cs
│   │   │   │   ├── TransformEvent.cs.meta
│   │   │   │   ├── TransformEventListener.cs
│   │   │   │   ├── TransformEventListener.cs.meta
│   │   │   │   ├── TransformEventResponse.cs
│   │   │   │   └── TransformEventResponse.cs.meta
│   │   │   ├── Transform_Event.meta
│   │   │   ├── Vector2_Event/
│   │   │   │   ├── Vector2Event.cs
│   │   │   │   ├── Vector2Event.cs.meta
│   │   │   │   ├── Vector2EventListener.cs
│   │   │   │   ├── Vector2EventListener.cs.meta
│   │   │   │   ├── Vector2EventResponse.cs
│   │   │   │   └── Vector2EventResponse.cs.meta
│   │   │   ├── Vector2_Event.meta
│   │   │   ├── Vector3_Event/
│   │   │   │   ├── Event_Result/
│   │   │   │   │   ├── Vector3EventBoolResult.cs
│   │   │   │   │   ├── Vector3EventBoolResult.cs.meta
│   │   │   │   │   ├── Vector3EventFloatResult.cs
│   │   │   │   │   ├── Vector3EventFloatResult.cs.meta
│   │   │   │   │   ├── Vector3EventGameObjectResult.cs
│   │   │   │   │   ├── Vector3EventGameObjectResult.cs.meta
│   │   │   │   │   ├── Vector3EventIntResult.cs
│   │   │   │   │   ├── Vector3EventIntResult.cs.meta
│   │   │   │   │   ├── Vector3EventObjectResult.cs
│   │   │   │   │   ├── Vector3EventObjectResult.cs.meta
│   │   │   │   │   ├── Vector3EventStringResult.cs
│   │   │   │   │   ├── Vector3EventStringResult.cs.meta
│   │   │   │   │   ├── Vector3EventTransformResult.cs
│   │   │   │   │   ├── Vector3EventTransformResult.cs.meta
│   │   │   │   │   ├── Vector3EventVector3Result.cs
│   │   │   │   │   └── Vector3EventVector3Result.cs.meta
│   │   │   │   ├── Event_Result.meta
│   │   │   │   ├── Vector3Event.cs
│   │   │   │   ├── Vector3Event.cs.meta
│   │   │   │   ├── Vector3EventListener.cs
│   │   │   │   ├── Vector3EventListener.cs.meta
│   │   │   │   ├── Vector3EventResponse.cs
│   │   │   │   └── Vector3EventResponse.cs.meta
│   │   │   ├── Vector3_Event.meta
│   │   │   ├── virtuesky.sunflower.event.asmdef
│   │   │   └── virtuesky.sunflower.event.asmdef.meta
│   │   └── Runtime.meta
│   ├── Events.meta
│   ├── FolderIcon/
│   │   ├── Editor/
│   │   │   ├── CustomFolder.cs
│   │   │   ├── CustomFolder.cs.meta
│   │   │   ├── FolderIconSettings.cs
│   │   │   ├── FolderIconSettings.cs.meta
│   │   │   ├── IconDictionaryCreator.cs
│   │   │   ├── IconDictionaryCreator.cs.meta
│   │   │   ├── PackageIcon/
│   │   │   │   ├── icon_folder.unitypackage
│   │   │   │   └── icon_folder.unitypackage.meta
│   │   │   ├── PackageIcon.meta
│   │   │   ├── Virtuesky.Sunflower.FolderIcon.asmdef
│   │   │   └── Virtuesky.Sunflower.FolderIcon.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Icons/
│   │   │   ├── Animations.png.meta
│   │   │   ├── Audio.png.meta
│   │   │   ├── Default/
│   │   │   │   └── Default.png.meta
│   │   │   ├── Default.meta
│   │   │   ├── Editor.png.meta
│   │   │   ├── Fonts.png.meta
│   │   │   ├── Materials.png.meta
│   │   │   ├── Models.png.meta
│   │   │   ├── Plugins.png.meta
│   │   │   ├── Prefabs.png.meta
│   │   │   ├── Presets.png.meta
│   │   │   ├── Resources.png.meta
│   │   │   ├── Scenes.png.meta
│   │   │   ├── Scripts.png.meta
│   │   │   ├── Settings.png.meta
│   │   │   ├── Shaders.png.meta
│   │   │   ├── Sprites.png.meta
│   │   │   └── Textures.png.meta
│   │   └── Icons.meta
│   ├── FolderIcon.meta
│   ├── GameService/
│   │   ├── Runtime/
│   │   │   ├── AppleAuthentication.cs
│   │   │   ├── AppleAuthentication.cs.meta
│   │   │   ├── GooglePlayGamesAuthentication.cs
│   │   │   ├── GooglePlayGamesAuthentication.cs.meta
│   │   │   ├── ServiceAuthentication.cs
│   │   │   ├── ServiceAuthentication.cs.meta
│   │   │   ├── Variable/
│   │   │   │   ├── StatusLoginVariable.cs
│   │   │   │   └── StatusLoginVariable.cs.meta
│   │   │   ├── Variable.meta
│   │   │   ├── Virtuesky.Sunflower.GameService.asmdef
│   │   │   └── Virtuesky.Sunflower.GameService.asmdef.meta
│   │   └── Runtime.meta
│   ├── GameService.meta
│   ├── Hierarchy/
│   │   ├── Attribute/
│   │   │   ├── HierarchyNullable.asmdef
│   │   │   ├── HierarchyNullable.asmdef.meta
│   │   │   ├── HierarchyNullable.cs
│   │   │   └── HierarchyNullable.cs.meta
│   │   ├── Attribute.meta
│   │   ├── Editor/
│   │   │   ├── HierarchyEditor.asmdef
│   │   │   ├── HierarchyEditor.asmdef.meta
│   │   │   ├── Scripts/
│   │   │   │   ├── Component/
│   │   │   │   │   ├── Base/
│   │   │   │   │   │   ├── BaseComponent.cs
│   │   │   │   │   │   └── BaseComponent.cs.meta
│   │   │   │   │   ├── Base.meta
│   │   │   │   │   ├── ChildrenCountComponent.cs
│   │   │   │   │   ├── ChildrenCountComponent.cs.meta
│   │   │   │   │   ├── ColorComponent.cs
│   │   │   │   │   ├── ColorComponent.cs.meta
│   │   │   │   │   ├── ComponentsComponent.cs
│   │   │   │   │   ├── ComponentsComponent.cs.meta
│   │   │   │   │   ├── ErrorComponent.cs
│   │   │   │   │   ├── ErrorComponent.cs.meta
│   │   │   │   │   ├── GameObjectIconComponent.cs
│   │   │   │   │   ├── GameObjectIconComponent.cs.meta
│   │   │   │   │   ├── LayerIconComponent.cs
│   │   │   │   │   ├── LayerIconComponent.cs.meta
│   │   │   │   │   ├── LockComponent.cs
│   │   │   │   │   ├── LockComponent.cs.meta
│   │   │   │   │   ├── MonoBehaviorIconComponent.cs
│   │   │   │   │   ├── MonoBehaviorIconComponent.cs.meta
│   │   │   │   │   ├── PrefabComponent.cs
│   │   │   │   │   ├── PrefabComponent.cs.meta
│   │   │   │   │   ├── RendererComponent.cs
│   │   │   │   │   ├── RendererComponent.cs.meta
│   │   │   │   │   ├── SeparatorComponent.cs
│   │   │   │   │   ├── SeparatorComponent.cs.meta
│   │   │   │   │   ├── StaticComponent.cs
│   │   │   │   │   ├── StaticComponent.cs.meta
│   │   │   │   │   ├── TagIconComponent.cs
│   │   │   │   │   ├── TagIconComponent.cs.meta
│   │   │   │   │   ├── TagLayerComponent.cs
│   │   │   │   │   ├── TagLayerComponent.cs.meta
│   │   │   │   │   ├── TreeMapComponent.cs
│   │   │   │   │   ├── TreeMapComponent.cs.meta
│   │   │   │   │   ├── VerticesAndTrianglesCountComponent.cs
│   │   │   │   │   ├── VerticesAndTrianglesCountComponent.cs.meta
│   │   │   │   │   ├── VisibilityComponent.cs
│   │   │   │   │   └── VisibilityComponent.cs.meta
│   │   │   │   ├── Component.meta
│   │   │   │   ├── Data/
│   │   │   │   │   ├── HierarchyResources.cs
│   │   │   │   │   ├── HierarchyResources.cs.meta
│   │   │   │   │   ├── HierarchySettings.cs
│   │   │   │   │   ├── HierarchySettings.cs.meta
│   │   │   │   │   ├── HierarchySettingsObject.cs
│   │   │   │   │   ├── HierarchySettingsObject.cs.meta
│   │   │   │   │   ├── QSettingsObjectAsset.asset
│   │   │   │   │   └── QSettingsObjectAsset.asset.meta
│   │   │   │   ├── Data.meta
│   │   │   │   ├── Helper/
│   │   │   │   │   ├── HierarchyColorPickerWindow.cs
│   │   │   │   │   ├── HierarchyColorPickerWindow.cs.meta
│   │   │   │   │   ├── HierarchyColorUtils.cs
│   │   │   │   │   ├── HierarchyColorUtils.cs.meta
│   │   │   │   │   ├── HierarchyComponentsOrderList.cs
│   │   │   │   │   ├── HierarchyComponentsOrderList.cs.meta
│   │   │   │   │   ├── HierarchyObjectListInspector.cs
│   │   │   │   │   ├── HierarchyObjectListInspector.cs.meta
│   │   │   │   │   ├── HierarchyObjectListManager.cs
│   │   │   │   │   └── HierarchyObjectListManager.cs.meta
│   │   │   │   ├── Helper.meta
│   │   │   │   ├── QHierarchyInitializer.cs
│   │   │   │   ├── QHierarchyInitializer.cs.meta
│   │   │   │   ├── VHierarchy/
│   │   │   │   │   ├── HierarchySettingsWindow.cs
│   │   │   │   │   ├── HierarchySettingsWindow.cs.meta
│   │   │   │   │   ├── VHierarchy.cs
│   │   │   │   │   └── VHierarchy.cs.meta
│   │   │   │   └── VHierarchy.meta
│   │   │   └── Scripts.meta
│   │   ├── Editor.meta
│   │   ├── FolderHierarchy/
│   │   │   ├── HeaderHierarchy.cs
│   │   │   ├── HeaderHierarchy.cs.meta
│   │   │   ├── HeaderHierarchyIcon.cs
│   │   │   ├── HeaderHierarchyIcon.cs.meta
│   │   │   ├── HierarchyHeader.asmdef
│   │   │   ├── HierarchyHeader.asmdef.meta
│   │   │   ├── InspectorUtility.cs
│   │   │   └── InspectorUtility.cs.meta
│   │   ├── FolderHierarchy.meta
│   │   ├── Icons/
│   │   │   └── HierarchyHighlight.png.meta
│   │   ├── Icons.meta
│   │   ├── Scripts/
│   │   │   ├── HierarchyRuntime.asmdef
│   │   │   ├── HierarchyRuntime.asmdef.meta
│   │   │   ├── ObjectList.cs
│   │   │   └── ObjectList.cs.meta
│   │   └── Scripts.meta
│   ├── Hierarchy.meta
│   ├── Iap/
│   │   ├── Editor/
│   │   │   ├── IapSettingEditor.cs
│   │   │   ├── IapSettingEditor.cs.meta
│   │   │   ├── ObfuscationGenerator.cs
│   │   │   ├── ObfuscationGenerator.cs.meta
│   │   │   ├── TangleFileConsts.cs
│   │   │   ├── TangleFileConsts.cs.meta
│   │   │   ├── TangleObfuscator.cs
│   │   │   ├── TangleObfuscator.cs.meta
│   │   │   ├── Virtusky.Sunflower.Iap.Editor.asmdef
│   │   │   └── Virtusky.Sunflower.Iap.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── IapDataVariable.cs
│   │   │   ├── IapDataVariable.cs.meta
│   │   │   ├── IapManager.cs
│   │   │   ├── IapManager.cs.meta
│   │   │   ├── IapPurchaseFailed.cs
│   │   │   ├── IapPurchaseFailed.cs.meta
│   │   │   ├── IapPurchaseSuccess.cs
│   │   │   ├── IapPurchaseSuccess.cs.meta
│   │   │   ├── IapSetting.cs
│   │   │   ├── IapSetting.cs.meta
│   │   │   ├── IapStatic.cs
│   │   │   ├── IapStatic.cs.meta
│   │   │   ├── Virtusky.Sunflower.Iap.asmdef
│   │   │   └── Virtusky.Sunflower.Iap.asmdef.meta
│   │   └── Runtime.meta
│   ├── Iap.meta
│   ├── Inspector/
│   │   ├── .editorconfig
│   │   ├── .github/
│   │   │   ├── ISSUE_TEMPLATE/
│   │   │   │   ├── bug_report.md
│   │   │   │   └── config.yml
│   │   │   └── release.yml
│   │   ├── .gitignore
│   │   ├── Editor/
│   │   │   ├── AssemblyInfo.cs
│   │   │   ├── AssemblyInfo.cs.meta
│   │   │   ├── Attributes.cs
│   │   │   ├── Attributes.cs.meta
│   │   │   ├── CustomizeDraw/
│   │   │   │   ├── EditorIconPostProcessor.cs
│   │   │   │   ├── EditorIconPostProcessor.cs.meta
│   │   │   │   ├── EnumAttribue/
│   │   │   │   │   ├── ExtendEnumDrawer.cs
│   │   │   │   │   ├── ExtendEnumDrawer.cs.meta
│   │   │   │   │   ├── SearchableEnumDrawer.cs
│   │   │   │   │   ├── SearchableEnumDrawer.cs.meta
│   │   │   │   │   ├── SearchablePopup.cs
│   │   │   │   │   └── SearchablePopup.cs.meta
│   │   │   │   ├── EnumAttribue.meta
│   │   │   │   ├── HeaderLineDrawer.cs
│   │   │   │   ├── HeaderLineDrawer.cs.meta
│   │   │   │   ├── HelpDrawer.cs
│   │   │   │   ├── HelpDrawer.cs.meta
│   │   │   │   ├── HighlightDrawer.cs
│   │   │   │   ├── HighlightDrawer.cs.meta
│   │   │   │   ├── LayerAttributeDraw.cs
│   │   │   │   ├── LayerAttributeDraw.cs.meta
│   │   │   │   ├── TagAttributeDraw.cs
│   │   │   │   ├── TagAttributeDraw.cs.meta
│   │   │   │   ├── TitleColorAttributeDrawer.cs
│   │   │   │   ├── TitleColorAttributeDrawer.cs.meta
│   │   │   │   ├── UtilityDraw.cs
│   │   │   │   └── UtilityDraw.cs.meta
│   │   │   ├── CustomizeDraw.meta
│   │   │   ├── Editors/
│   │   │   │   ├── TriEditor.cs
│   │   │   │   ├── TriEditor.cs.meta
│   │   │   │   ├── TriEditorCore.cs
│   │   │   │   ├── TriEditorCore.cs.meta
│   │   │   │   ├── TriMonoBehaviourEditor.cs
│   │   │   │   ├── TriMonoBehaviourEditor.cs.meta
│   │   │   │   ├── TriScriptableObjectEditor.cs
│   │   │   │   ├── TriScriptableObjectEditor.cs.meta
│   │   │   │   ├── TriScriptedImporterEditor.cs
│   │   │   │   ├── TriScriptedImporterEditor.cs.meta
│   │   │   │   ├── TriSettingsProvider.cs
│   │   │   │   └── TriSettingsProvider.cs.meta
│   │   │   ├── Editors.meta
│   │   │   ├── Elements/
│   │   │   │   ├── InlineEditorElement.cs
│   │   │   │   ├── InlineEditorElement.cs.meta
│   │   │   │   ├── TriBoxGroupElement.cs
│   │   │   │   ├── TriBoxGroupElement.cs.meta
│   │   │   │   ├── TriBuiltInPropertyElement.cs
│   │   │   │   ├── TriBuiltInPropertyElement.cs.meta
│   │   │   │   ├── TriDropdownElement.cs
│   │   │   │   ├── TriDropdownElement.cs.meta
│   │   │   │   ├── TriFoldoutElement.cs
│   │   │   │   ├── TriFoldoutElement.cs.meta
│   │   │   │   ├── TriHeaderGroupBaseElement.cs
│   │   │   │   ├── TriHeaderGroupBaseElement.cs.meta
│   │   │   │   ├── TriHorizontalGroupElement.cs
│   │   │   │   ├── TriHorizontalGroupElement.cs.meta
│   │   │   │   ├── TriInfoBoxElement.cs
│   │   │   │   ├── TriInfoBoxElement.cs.meta
│   │   │   │   ├── TriInlineGenericElement.cs
│   │   │   │   ├── TriInlineGenericElement.cs.meta
│   │   │   │   ├── TriLabelElement.cs
│   │   │   │   ├── TriLabelElement.cs.meta
│   │   │   │   ├── TriListElement.cs
│   │   │   │   ├── TriListElement.cs.meta
│   │   │   │   ├── TriMultiEditNotSupportedElement.cs
│   │   │   │   ├── TriMultiEditNotSupportedElement.cs.meta
│   │   │   │   ├── TriNoDrawerElement.cs
│   │   │   │   ├── TriNoDrawerElement.cs.meta
│   │   │   │   ├── TriPropertyCollectionBaseElement.cs
│   │   │   │   ├── TriPropertyCollectionBaseElement.cs.meta
│   │   │   │   ├── TriPropertyElement.cs
│   │   │   │   ├── TriPropertyElement.cs.meta
│   │   │   │   ├── TriReferenceElement.cs
│   │   │   │   ├── TriReferenceElement.cs.meta
│   │   │   │   ├── TriTabGroupElement.cs
│   │   │   │   ├── TriTabGroupElement.cs.meta
│   │   │   │   ├── TriUiToolkitPropertyElemenet.cs
│   │   │   │   ├── TriUiToolkitPropertyElemenet.cs.meta
│   │   │   │   ├── TriVerticalGroupElement.cs
│   │   │   │   └── TriVerticalGroupElement.cs.meta
│   │   │   ├── Elements.meta
│   │   │   ├── Resolvers/
│   │   │   │   ├── ActionResolver.cs
│   │   │   │   ├── ActionResolver.cs.meta
│   │   │   │   ├── DropdownValuesResolver.cs
│   │   │   │   ├── DropdownValuesResolver.cs.meta
│   │   │   │   ├── ErrorActionResolver.cs
│   │   │   │   ├── ErrorActionResolver.cs.meta
│   │   │   │   ├── ErrorValueResolver.cs
│   │   │   │   ├── ErrorValueResolver.cs.meta
│   │   │   │   ├── InstanceActionResolver.cs
│   │   │   │   ├── InstanceActionResolver.cs.meta
│   │   │   │   ├── InstanceFieldValueResolver.cs
│   │   │   │   ├── InstanceFieldValueResolver.cs.meta
│   │   │   │   ├── InstanceMethodValueResolver.cs
│   │   │   │   ├── InstanceMethodValueResolver.cs.meta
│   │   │   │   ├── InstancePropertyValueResolver.cs
│   │   │   │   ├── InstancePropertyValueResolver.cs.meta
│   │   │   │   ├── StaticFieldValueResolver.cs
│   │   │   │   ├── StaticFieldValueResolver.cs.meta
│   │   │   │   ├── StaticMethodValueResolver.cs
│   │   │   │   ├── StaticMethodValueResolver.cs.meta
│   │   │   │   ├── StaticPropertyValueResolver.cs
│   │   │   │   ├── StaticPropertyValueResolver.cs.meta
│   │   │   │   ├── ValueResolver.cs
│   │   │   │   └── ValueResolver.cs.meta
│   │   │   ├── Resolvers.meta
│   │   │   ├── Resources/
│   │   │   │   ├── TriInspector_Box_Bg.png.meta
│   │   │   │   ├── TriInspector_Box_Bg_Dark.png.meta
│   │   │   │   ├── TriInspector_Content_Bg.png.meta
│   │   │   │   └── TriInspector_Content_Bg_Dark.png.meta
│   │   │   ├── Resources.meta
│   │   │   ├── TriAttributeDrawer.cs
│   │   │   ├── TriAttributeDrawer.cs.meta
│   │   │   ├── TriCustomDrawer.cs
│   │   │   ├── TriCustomDrawer.cs.meta
│   │   │   ├── TriDrawerOrder.cs
│   │   │   ├── TriDrawerOrder.cs.meta
│   │   │   ├── TriEditorStyles.cs
│   │   │   ├── TriEditorStyles.cs.meta
│   │   │   ├── TriElement.cs
│   │   │   ├── TriElement.cs.meta
│   │   │   ├── TriGroupDrawer.cs
│   │   │   ├── TriGroupDrawer.cs.meta
│   │   │   ├── TriProperty.cs
│   │   │   ├── TriProperty.cs.meta
│   │   │   ├── TriPropertyDefinition.cs
│   │   │   ├── TriPropertyDefinition.cs.meta
│   │   │   ├── TriPropertyDisableProcessor.cs
│   │   │   ├── TriPropertyDisableProcessor.cs.meta
│   │   │   ├── TriPropertyExtension.cs
│   │   │   ├── TriPropertyExtension.cs.meta
│   │   │   ├── TriPropertyHideProcessor.cs
│   │   │   ├── TriPropertyHideProcessor.cs.meta
│   │   │   ├── TriPropertyOverrideContext.cs
│   │   │   ├── TriPropertyOverrideContext.cs.meta
│   │   │   ├── TriPropertyTree.cs
│   │   │   ├── TriPropertyTree.cs.meta
│   │   │   ├── TriPropertyTreeForSerializedObject.cs
│   │   │   ├── TriPropertyTreeForSerializedObject.cs.meta
│   │   │   ├── TriTypeDefinition.cs
│   │   │   ├── TriTypeDefinition.cs.meta
│   │   │   ├── TriTypeProcessor.cs
│   │   │   ├── TriTypeProcessor.cs.meta
│   │   │   ├── TriValidator.cs
│   │   │   ├── TriValidator.cs.meta
│   │   │   ├── TriValue.cs
│   │   │   ├── TriValue.cs.meta
│   │   │   ├── TriValueDrawer.cs
│   │   │   ├── TriValueDrawer.cs.meta
│   │   │   ├── TypeProcessors/
│   │   │   │   ├── TriGroupNextTypeProcessor.cs
│   │   │   │   ├── TriGroupNextTypeProcessor.cs.meta
│   │   │   │   ├── TriRectOffsetTypeProcessor.cs
│   │   │   │   ├── TriRectOffsetTypeProcessor.cs.meta
│   │   │   │   ├── TriRegisterButtonsTypeProcessor.cs
│   │   │   │   ├── TriRegisterButtonsTypeProcessor.cs.meta
│   │   │   │   ├── TriRegisterShownByTriFieldsTypeProcessor.cs
│   │   │   │   ├── TriRegisterShownByTriFieldsTypeProcessor.cs.meta
│   │   │   │   ├── TriRegisterShownByTriPropertiesTypeProcessor.cs
│   │   │   │   ├── TriRegisterShownByTriPropertiesTypeProcessor.cs.meta
│   │   │   │   ├── TriRegisterUnitySerializedFieldsTypeProcessor.cs
│   │   │   │   ├── TriRegisterUnitySerializedFieldsTypeProcessor.cs.meta
│   │   │   │   ├── TriSortPropertiesTypeProcessor.cs
│   │   │   │   └── TriSortPropertiesTypeProcessor.cs.meta
│   │   │   ├── TypeProcessors.meta
│   │   │   ├── Utilities/
│   │   │   │   ├── TriAttributeUtilities.cs
│   │   │   │   ├── TriAttributeUtilities.cs.meta
│   │   │   │   ├── TriDrawersUtilities.cs
│   │   │   │   ├── TriDrawersUtilities.cs.meta
│   │   │   │   ├── TriEditorGUI.cs
│   │   │   │   ├── TriEditorGUI.cs.meta
│   │   │   │   ├── TriEqualityComparer.cs
│   │   │   │   ├── TriEqualityComparer.cs.meta
│   │   │   │   ├── TriGuiHelper.cs
│   │   │   │   ├── TriGuiHelper.cs.meta
│   │   │   │   ├── TriManagedReferenceGui.cs
│   │   │   │   ├── TriManagedReferenceGui.cs.meta
│   │   │   │   ├── TriReflectionUtilities.cs
│   │   │   │   ├── TriReflectionUtilities.cs.meta
│   │   │   │   ├── TriTypeUtilities.cs
│   │   │   │   ├── TriTypeUtilities.cs.meta
│   │   │   │   ├── TriUnityInspectorUtilities.cs
│   │   │   │   ├── TriUnityInspectorUtilities.cs.meta
│   │   │   │   ├── TriUnitySerializationUtilities.cs
│   │   │   │   └── TriUnitySerializationUtilities.cs.meta
│   │   │   ├── Utilities.meta
│   │   │   ├── ValidatorsDrawer.cs
│   │   │   ├── ValidatorsDrawer.cs.meta
│   │   │   ├── VirtueSky.Sunflower.Inspector.Editor.asmdef
│   │   │   └── VirtueSky.Sunflower.Inspector.Editor.asmdef.meta
│   │   ├── Editor.Extras/
│   │   │   ├── Drawers/
│   │   │   │   ├── BuiltinDrawerBase.cs
│   │   │   │   ├── BuiltinDrawerBase.cs.meta
│   │   │   │   ├── BuiltinDrawers.cs
│   │   │   │   ├── BuiltinDrawers.cs.meta
│   │   │   │   ├── ButtonDrawer.cs
│   │   │   │   ├── ButtonDrawer.cs.meta
│   │   │   │   ├── CustomBuiltInDrawer.cs
│   │   │   │   ├── CustomBuiltInDrawer.cs.meta
│   │   │   │   ├── DisplayAsStringDrawer.cs
│   │   │   │   ├── DisplayAsStringDrawer.cs.meta
│   │   │   │   ├── DropdownDrawer.cs
│   │   │   │   ├── DropdownDrawer.cs.meta
│   │   │   │   ├── EnumToggleButtonsDrawer.cs
│   │   │   │   ├── EnumToggleButtonsDrawer.cs.meta
│   │   │   │   ├── GUIColorDrawer.cs
│   │   │   │   ├── GUIColorDrawer.cs.meta
│   │   │   │   ├── IndentDrawer.cs
│   │   │   │   ├── IndentDrawer.cs.meta
│   │   │   │   ├── InlineEditorDrawer.cs
│   │   │   │   ├── InlineEditorDrawer.cs.meta
│   │   │   │   ├── LabelWidthDrawer.cs
│   │   │   │   ├── LabelWidthDrawer.cs.meta
│   │   │   │   ├── ObjectReferenceDrawer.cs
│   │   │   │   ├── ObjectReferenceDrawer.cs.meta
│   │   │   │   ├── OnValueChangedDrawer.cs
│   │   │   │   ├── OnValueChangedDrawer.cs.meta
│   │   │   │   ├── PreviewMeshDrawer.cs
│   │   │   │   ├── PreviewMeshDrawer.cs.meta
│   │   │   │   ├── PropertySpaceDrawer.cs
│   │   │   │   ├── PropertySpaceDrawer.cs.meta
│   │   │   │   ├── SceneDrawer.cs
│   │   │   │   ├── SceneDrawer.cs.meta
│   │   │   │   ├── ShowDrawerChainDrawer.cs
│   │   │   │   ├── ShowDrawerChainDrawer.cs.meta
│   │   │   │   ├── TableListDrawer.cs
│   │   │   │   ├── TableListDrawer.cs.meta
│   │   │   │   ├── TitleDrawer.cs
│   │   │   │   ├── TitleDrawer.cs.meta
│   │   │   │   ├── UnitDrawer.cs
│   │   │   │   └── UnitDrawer.cs.meta
│   │   │   ├── Drawers.meta
│   │   │   ├── GroupDrawers/
│   │   │   │   ├── TriBoxGroupDrawer.cs
│   │   │   │   ├── TriBoxGroupDrawer.cs.meta
│   │   │   │   ├── TriFoldoutGroupDrawer.cs
│   │   │   │   ├── TriFoldoutGroupDrawer.cs.meta
│   │   │   │   ├── TriHorizontalGroupDrawer.cs
│   │   │   │   ├── TriHorizontalGroupDrawer.cs.meta
│   │   │   │   ├── TriTabGroupDrawer.cs
│   │   │   │   ├── TriTabGroupDrawer.cs.meta
│   │   │   │   ├── TriToggleGroupDrawer.cs
│   │   │   │   ├── TriToggleGroupDrawer.cs.meta
│   │   │   │   ├── TriVerticalGroupDrawer.cs
│   │   │   │   └── TriVerticalGroupDrawer.cs.meta
│   │   │   ├── GroupDrawers.meta
│   │   │   ├── Processors/
│   │   │   │   ├── DisableIfProcessor.cs
│   │   │   │   ├── DisableIfProcessor.cs.meta
│   │   │   │   ├── DisableInEditModeProcessor.cs
│   │   │   │   ├── DisableInEditModeProcessor.cs.meta
│   │   │   │   ├── DisableInPlayModeProcessor.cs
│   │   │   │   ├── DisableInPlayModeProcessor.cs.meta
│   │   │   │   ├── HIdeInEditModeProcessor.cs
│   │   │   │   ├── HIdeInEditModeProcessor.cs.meta
│   │   │   │   ├── HideIfProcessor.cs
│   │   │   │   ├── HideIfProcessor.cs.meta
│   │   │   │   ├── HideInPlayModeProcessor.cs
│   │   │   │   └── HideInPlayModeProcessor.cs.meta
│   │   │   ├── Processors.meta
│   │   │   ├── Validators/
│   │   │   │   ├── AssetsOnlyValidator.cs
│   │   │   │   ├── AssetsOnlyValidator.cs.meta
│   │   │   │   ├── DropdownValidator.cs
│   │   │   │   ├── DropdownValidator.cs.meta
│   │   │   │   ├── InfoBoxValidator.cs
│   │   │   │   ├── InfoBoxValidator.cs.meta
│   │   │   │   ├── MissingReferenceValidator.cs
│   │   │   │   ├── MissingReferenceValidator.cs.meta
│   │   │   │   ├── RequiredValidator.cs
│   │   │   │   ├── RequiredValidator.cs.meta
│   │   │   │   ├── SceneObjectsOnlyValidator.cs
│   │   │   │   ├── SceneObjectsOnlyValidator.cs.meta
│   │   │   │   ├── SceneValidator.cs
│   │   │   │   ├── SceneValidator.cs.meta
│   │   │   │   ├── TypeMismatchValidator.cs
│   │   │   │   ├── TypeMismatchValidator.cs.meta
│   │   │   │   ├── ValidateInputValidator.cs
│   │   │   │   └── ValidateInputValidator.cs.meta
│   │   │   ├── Validators.meta
│   │   │   ├── VirtueSky.Sunflower.Inspector.Editor.Extras.asmdef
│   │   │   └── VirtueSky.Sunflower.Inspector.Editor.Extras.asmdef.meta
│   │   ├── Editor.Extras.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── Attributes/
│   │   │   │   ├── Buttons/
│   │   │   │   │   ├── ButtonAttribute.cs
│   │   │   │   │   ├── ButtonAttribute.cs.meta
│   │   │   │   │   ├── EnumToggleButtonsAttribute.cs
│   │   │   │   │   └── EnumToggleButtonsAttribute.cs.meta
│   │   │   │   ├── Buttons.meta
│   │   │   │   ├── Collections/
│   │   │   │   │   ├── ListDrawerSettings.cs
│   │   │   │   │   ├── ListDrawerSettings.cs.meta
│   │   │   │   │   ├── TableListAttribute.cs
│   │   │   │   │   └── TableListAttribute.cs.meta
│   │   │   │   ├── Collections.meta
│   │   │   │   ├── Conditionals/
│   │   │   │   │   ├── DisableIfAttribute.cs
│   │   │   │   │   ├── DisableIfAttribute.cs.meta
│   │   │   │   │   ├── DisableInEditModeAttribute.cs
│   │   │   │   │   ├── DisableInEditModeAttribute.cs.meta
│   │   │   │   │   ├── DisableInPlayModeAttribute.cs
│   │   │   │   │   ├── DisableInPlayModeAttribute.cs.meta
│   │   │   │   │   ├── EnableIfAttribute.cs
│   │   │   │   │   ├── EnableIfAttribute.cs.meta
│   │   │   │   │   ├── EnableInEditModeAttribute.cs
│   │   │   │   │   ├── EnableInEditModeAttribute.cs.meta
│   │   │   │   │   ├── EnableInPlayModeAttribute.cs
│   │   │   │   │   ├── EnableInPlayModeAttribute.cs.meta
│   │   │   │   │   ├── HideIfAttribute.cs
│   │   │   │   │   ├── HideIfAttribute.cs.meta
│   │   │   │   │   ├── HideInEditModeAttribute.cs
│   │   │   │   │   ├── HideInEditModeAttribute.cs.meta
│   │   │   │   │   ├── HideInPlayModeAttribute.cs
│   │   │   │   │   ├── HideInPlayModeAttribute.cs.meta
│   │   │   │   │   ├── ShowIfAttribute.cs
│   │   │   │   │   ├── ShowIfAttribute.cs.meta
│   │   │   │   │   ├── ShowInEditModeAttribute.cs
│   │   │   │   │   ├── ShowInEditModeAttribute.cs.meta
│   │   │   │   │   ├── ShowInPlayModeAttribute.cs
│   │   │   │   │   └── ShowInPlayModeAttribute.cs.meta
│   │   │   │   ├── Conditionals.meta
│   │   │   │   ├── Debug/
│   │   │   │   │   ├── ShowDrawerChainAttribute.cs
│   │   │   │   │   └── ShowDrawerChainAttribute.cs.meta
│   │   │   │   ├── Debug.meta
│   │   │   │   ├── Decorators/
│   │   │   │   │   ├── DisplayAsStringAttribute.cs
│   │   │   │   │   ├── DisplayAsStringAttribute.cs.meta
│   │   │   │   │   ├── DropdownAttribute.cs
│   │   │   │   │   ├── DropdownAttribute.cs.meta
│   │   │   │   │   ├── InlineEditorAttribute.cs
│   │   │   │   │   ├── InlineEditorAttribute.cs.meta
│   │   │   │   │   ├── PreviewMeshAttribute.cs
│   │   │   │   │   ├── PreviewMeshAttribute.cs.meta
│   │   │   │   │   ├── SceneAttribute.cs
│   │   │   │   │   ├── SceneAttribute.cs.meta
│   │   │   │   │   ├── UnitAttribute.cs
│   │   │   │   │   └── UnitAttribute.cs.meta
│   │   │   │   ├── Decorators.meta
│   │   │   │   ├── Groups/
│   │   │   │   │   ├── DeclareBoxGroupAttribute.cs
│   │   │   │   │   ├── DeclareBoxGroupAttribute.cs.meta
│   │   │   │   │   ├── DeclareFoldoutGroupAttribute.cs
│   │   │   │   │   ├── DeclareFoldoutGroupAttribute.cs.meta
│   │   │   │   │   ├── DeclareGroupBaseAttribute.cs
│   │   │   │   │   ├── DeclareGroupBaseAttribute.cs.meta
│   │   │   │   │   ├── DeclareHorizontalGroupAttribute.cs
│   │   │   │   │   ├── DeclareHorizontalGroupAttribute.cs.meta
│   │   │   │   │   ├── DeclareTabGroupAttribute.cs
│   │   │   │   │   ├── DeclareTabGroupAttribute.cs.meta
│   │   │   │   │   ├── DeclareToggleGroupAttribute.cs
│   │   │   │   │   ├── DeclareToggleGroupAttribute.cs.meta
│   │   │   │   │   ├── DeclareVerticalGroupAttribute.cs
│   │   │   │   │   ├── DeclareVerticalGroupAttribute.cs.meta
│   │   │   │   │   ├── GroupAttribute.cs
│   │   │   │   │   ├── GroupAttribute.cs.meta
│   │   │   │   │   ├── GroupNextAttribute.cs
│   │   │   │   │   ├── GroupNextAttribute.cs.meta
│   │   │   │   │   ├── TabAttribute.cs
│   │   │   │   │   └── TabAttribute.cs.meta
│   │   │   │   ├── Groups.meta
│   │   │   │   ├── Misc/
│   │   │   │   │   ├── HideMonoScriptAttribute.cs
│   │   │   │   │   ├── HideMonoScriptAttribute.cs.meta
│   │   │   │   │   ├── HideReferencePickerAttribute.cs
│   │   │   │   │   ├── HideReferencePickerAttribute.cs.meta
│   │   │   │   │   ├── OnValueChangedAttribute.cs
│   │   │   │   │   ├── OnValueChangedAttribute.cs.meta
│   │   │   │   │   ├── PropertyOrderAttribute.cs
│   │   │   │   │   ├── PropertyOrderAttribute.cs.meta
│   │   │   │   │   ├── ReadOnlyAttribute.cs
│   │   │   │   │   ├── ReadOnlyAttribute.cs.meta
│   │   │   │   │   ├── ShowInInspector.cs
│   │   │   │   │   └── ShowInInspector.cs.meta
│   │   │   │   ├── Misc.meta
│   │   │   │   ├── Others/
│   │   │   │   │   ├── DrawWithTriInspectorAttribute.cs
│   │   │   │   │   ├── DrawWithTriInspectorAttribute.cs.meta
│   │   │   │   │   ├── DrawWithUnityAttribute.cs
│   │   │   │   │   └── DrawWithUnityAttribute.cs.meta
│   │   │   │   ├── Others.meta
│   │   │   │   ├── Styling/
│   │   │   │   │   ├── GUIColorAttribute.cs
│   │   │   │   │   ├── GUIColorAttribute.cs.meta
│   │   │   │   │   ├── HideLabelAttribute.cs
│   │   │   │   │   ├── HideLabelAttribute.cs.meta
│   │   │   │   │   ├── IndentAttribute.cs
│   │   │   │   │   ├── IndentAttribute.cs.meta
│   │   │   │   │   ├── InlinePropertyAttribute.cs
│   │   │   │   │   ├── InlinePropertyAttribute.cs.meta
│   │   │   │   │   ├── LabelTextAttribute.cs
│   │   │   │   │   ├── LabelTextAttribute.cs.meta
│   │   │   │   │   ├── LabelWidthAttribute.cs
│   │   │   │   │   ├── LabelWidthAttribute.cs.meta
│   │   │   │   │   ├── PropertySpaceAttribute.cs
│   │   │   │   │   ├── PropertySpaceAttribute.cs.meta
│   │   │   │   │   ├── PropertyTooltipAttribute.cs
│   │   │   │   │   ├── PropertyTooltipAttribute.cs.meta
│   │   │   │   │   ├── TitleAttribute.cs
│   │   │   │   │   └── TitleAttribute.cs.meta
│   │   │   │   ├── Styling.meta
│   │   │   │   ├── Validators/
│   │   │   │   │   ├── AssetsOnlyAttribute.cs
│   │   │   │   │   ├── AssetsOnlyAttribute.cs.meta
│   │   │   │   │   ├── InfoBoxAttribute.cs
│   │   │   │   │   ├── InfoBoxAttribute.cs.meta
│   │   │   │   │   ├── RequiredAttribute.cs
│   │   │   │   │   ├── RequiredAttribute.cs.meta
│   │   │   │   │   ├── SceneObjectsOnlyAttribute.cs
│   │   │   │   │   ├── SceneObjectsOnlyAttribute.cs.meta
│   │   │   │   │   ├── ValidateInputAttribute.cs
│   │   │   │   │   └── ValidateInputAttribute.cs.meta
│   │   │   │   └── Validators.meta
│   │   │   ├── Attributes.meta
│   │   │   ├── ButtonSizes.cs
│   │   │   ├── ButtonSizes.cs.meta
│   │   │   ├── CustomizeAttribute/
│   │   │   │   ├── Attribute/
│   │   │   │   │   ├── EditorIconAttribute.cs
│   │   │   │   │   ├── EditorIconAttribute.cs.meta
│   │   │   │   │   ├── EnumAttribue/
│   │   │   │   │   │   ├── ExtendEnumAttribute.cs
│   │   │   │   │   │   ├── ExtendEnumAttribute.cs.meta
│   │   │   │   │   │   ├── SearchableEnumAttribute.cs
│   │   │   │   │   │   └── SearchableEnumAttribute.cs.meta
│   │   │   │   │   ├── EnumAttribue.meta
│   │   │   │   │   ├── HeaderLineAttribute.cs
│   │   │   │   │   ├── HeaderLineAttribute.cs.meta
│   │   │   │   │   ├── HelpBoxAttribute.cs
│   │   │   │   │   ├── HelpBoxAttribute.cs.meta
│   │   │   │   │   ├── HighlightAttribute.cs
│   │   │   │   │   ├── HighlightAttribute.cs.meta
│   │   │   │   │   ├── LayerAttribute.cs
│   │   │   │   │   ├── LayerAttribute.cs.meta
│   │   │   │   │   ├── TagAttribute.cs
│   │   │   │   │   ├── TagAttribute.cs.meta
│   │   │   │   │   ├── TitleColorAttribute.cs
│   │   │   │   │   └── TitleColorAttribute.cs.meta
│   │   │   │   ├── Attribute.meta
│   │   │   │   ├── GUIDAttribute.cs
│   │   │   │   ├── GUIDAttribute.cs.meta
│   │   │   │   ├── NamedIdAttribute.cs
│   │   │   │   └── NamedIdAttribute.cs.meta
│   │   │   ├── CustomizeAttribute.meta
│   │   │   ├── InlineEditorModes.cs
│   │   │   ├── InlineEditorModes.cs.meta
│   │   │   ├── PreviewMeshRotationMethod.cs
│   │   │   ├── PreviewMeshRotationMethod.cs.meta
│   │   │   ├── TriDropdownList.cs
│   │   │   ├── TriDropdownList.cs.meta
│   │   │   ├── TriValidationResult.cs
│   │   │   ├── TriValidationResult.cs.meta
│   │   │   ├── VirtueSky.Sunflower.Inspector.asmdef
│   │   │   └── VirtueSky.Sunflower.Inspector.asmdef.meta
│   │   ├── Runtime.meta
│   │   ├── Unity.InternalAPIEditorBridge.012/
│   │   │   ├── AdvancedDropdownProxy.cs
│   │   │   ├── AdvancedDropdownProxy.cs.meta
│   │   │   ├── AssemblyInfo.cs
│   │   │   ├── AssemblyInfo.cs.meta
│   │   │   ├── EditorGUIUtilityProxy.cs
│   │   │   ├── EditorGUIUtilityProxy.cs.meta
│   │   │   ├── EditorProxy.cs
│   │   │   ├── EditorProxy.cs.meta
│   │   │   ├── GUIClipProxy.cs
│   │   │   ├── GUIClipProxy.cs.meta
│   │   │   ├── InternalEditorUtilityProxy.cs
│   │   │   ├── InternalEditorUtilityProxy.cs.meta
│   │   │   ├── ReorderableListProxy.cs
│   │   │   ├── ReorderableListProxy.cs.meta
│   │   │   ├── ScriptAttributeUtilityProxy.cs
│   │   │   ├── ScriptAttributeUtilityProxy.cs.meta
│   │   │   ├── Unity.InternalAPIEditorBridge.013.asmdef
│   │   │   └── Unity.InternalAPIEditorBridge.013.asmdef.meta
│   │   ├── Unity.InternalAPIEditorBridge.012.meta
│   │   ├── Version.txt
│   │   └── Version.txt.meta
│   ├── Inspector.meta
│   ├── LevelEditor/
│   │   ├── LevelEditor.cs
│   │   ├── LevelEditor.cs.meta
│   │   ├── LevelSystemEditorSetting.cs
│   │   ├── LevelSystemEditorSetting.cs.meta
│   │   ├── PickObject.cs
│   │   ├── PickObject.cs.meta
│   │   ├── PreviewGenerator.cs
│   │   ├── PreviewGenerator.cs.meta
│   │   ├── Probe.cs
│   │   ├── Probe.cs.meta
│   │   ├── virtuesky.sunflower.leveleditor.asmdef
│   │   └── virtuesky.sunflower.leveleditor.asmdef.meta
│   ├── LevelEditor.meta
│   ├── Linq/
│   │   ├── Aggregate.cs
│   │   ├── Aggregate.cs.meta
│   │   ├── AnyAll.cs
│   │   ├── AnyAll.cs.meta
│   │   ├── Average.cs
│   │   ├── Average.cs.meta
│   │   ├── Chunk.cs
│   │   ├── Chunk.cs.meta
│   │   ├── Contains.cs
│   │   ├── Contains.cs.meta
│   │   ├── Count.cs
│   │   ├── Count.cs.meta
│   │   ├── Distinct.cs
│   │   ├── Distinct.cs.meta
│   │   ├── First.cs
│   │   ├── First.cs.meta
│   │   ├── Flatten.cs
│   │   ├── Flatten.cs.meta
│   │   ├── Last.cs
│   │   ├── Last.cs.meta
│   │   ├── Max.cs
│   │   ├── Max.cs.meta
│   │   ├── Min.cs
│   │   ├── Min.cs.meta
│   │   ├── OrderBy.cs
│   │   ├── OrderBy.cs.meta
│   │   ├── Range.cs
│   │   ├── Range.cs.meta
│   │   ├── Repeat.cs
│   │   ├── Repeat.cs.meta
│   │   ├── Reverse.cs
│   │   ├── Reverse.cs.meta
│   │   ├── Select.cs
│   │   ├── Select.cs.meta
│   │   ├── SelectMany.cs
│   │   ├── SelectMany.cs.meta
│   │   ├── SelectWhere.cs
│   │   ├── SelectWhere.cs.meta
│   │   ├── SequenceEqual.cs
│   │   ├── SequenceEqual.cs.meta
│   │   ├── Single.cs
│   │   ├── Single.cs.meta
│   │   ├── Skip.cs
│   │   ├── Skip.cs.meta
│   │   ├── Sum.cs
│   │   ├── Sum.cs.meta
│   │   ├── Take.cs
│   │   ├── Take.cs.meta
│   │   ├── Utils/
│   │   │   ├── ComparerMagic.cs
│   │   │   ├── ComparerMagic.cs.meta
│   │   │   ├── CustomPartition.cs
│   │   │   ├── CustomPartition.cs.meta
│   │   │   ├── GenericOperators.cs
│   │   │   ├── GenericOperators.cs.meta
│   │   │   ├── SliceHelper.cs
│   │   │   └── SliceHelper.cs.meta
│   │   ├── Utils.meta
│   │   ├── VirtueSky.Sunflower.Linq.asmdef
│   │   ├── VirtueSky.Sunflower.Linq.asmdef.meta
│   │   ├── Where.cs
│   │   ├── Where.cs.meta
│   │   ├── WhereAggregate.cs
│   │   ├── WhereAggregate.cs.meta
│   │   ├── WhereSelect.cs
│   │   ├── WhereSelect.cs.meta
│   │   ├── WhereSum.cs
│   │   ├── WhereSum.cs.meta
│   │   ├── Zip.cs
│   │   └── Zip.cs.meta
│   ├── Linq.meta
│   ├── Localization/
│   │   ├── Editor/
│   │   │   ├── AssetTreeViewItem.cs
│   │   │   ├── AssetTreeViewItem.cs.meta
│   │   │   ├── CsvSerialization.cs
│   │   │   ├── CsvSerialization.cs.meta
│   │   │   ├── EditorMenu.cs
│   │   │   ├── EditorMenu.cs.meta
│   │   │   ├── LanguagePropertyDrawer.cs
│   │   │   ├── LanguagePropertyDrawer.cs.meta
│   │   │   ├── LocaleEditorUtil.cs
│   │   │   ├── LocaleEditorUtil.cs.meta
│   │   │   ├── LocaleSettingsEditor.cs
│   │   │   ├── LocaleSettingsEditor.cs.meta
│   │   │   ├── LocaleTreeView.cs
│   │   │   ├── LocaleTreeView.cs.meta
│   │   │   ├── LocaleTreeViewItem.cs
│   │   │   ├── LocaleTreeViewItem.cs.meta
│   │   │   ├── PostBuildProcessor.cs
│   │   │   ├── PostBuildProcessor.cs.meta
│   │   │   ├── ScriptableLocaleEditor.cs
│   │   │   ├── ScriptableLocaleEditor.cs.meta
│   │   │   ├── VirtueSky.Sunflower.Localization.Editor.asmdef
│   │   │   └── VirtueSky.Sunflower.Localization.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── Implement/
│   │   │   │   ├── Behaviour/
│   │   │   │   │   ├── LocaleAudioClipComponent.cs
│   │   │   │   │   ├── LocaleAudioClipComponent.cs.meta
│   │   │   │   │   ├── LocaleComponent.cs
│   │   │   │   │   ├── LocaleComponent.cs.meta
│   │   │   │   │   ├── LocaleComponentGeneric.cs
│   │   │   │   │   ├── LocaleComponentGeneric.cs.meta
│   │   │   │   │   ├── LocaleComponentGenericBase.cs
│   │   │   │   │   ├── LocaleComponentGenericBase.cs.meta
│   │   │   │   │   ├── LocaleFontComponent.cs
│   │   │   │   │   ├── LocaleFontComponent.cs.meta
│   │   │   │   │   ├── LocaleMaterialComponent.cs
│   │   │   │   │   ├── LocaleMaterialComponent.cs.meta
│   │   │   │   │   ├── LocalePrefabComponent.cs
│   │   │   │   │   ├── LocalePrefabComponent.cs.meta
│   │   │   │   │   ├── LocaleRendererComponent.cs
│   │   │   │   │   ├── LocaleRendererComponent.cs.meta
│   │   │   │   │   ├── LocaleSharedMaterialComponent.cs
│   │   │   │   │   ├── LocaleSharedMaterialComponent.cs.meta
│   │   │   │   │   ├── LocaleSpriteComponent.cs
│   │   │   │   │   ├── LocaleSpriteComponent.cs.meta
│   │   │   │   │   ├── LocaleTMPFontComponent.cs
│   │   │   │   │   ├── LocaleTMPFontComponent.cs.meta
│   │   │   │   │   ├── LocaleTextAssetComponent.cs
│   │   │   │   │   ├── LocaleTextAssetComponent.cs.meta
│   │   │   │   │   ├── LocaleTextComponent.cs
│   │   │   │   │   ├── LocaleTextComponent.cs.meta
│   │   │   │   │   ├── LocaleTextCompositeComponent.cs
│   │   │   │   │   ├── LocaleTextCompositeComponent.cs.meta
│   │   │   │   │   ├── LocaleTextureComponent.cs
│   │   │   │   │   ├── LocaleTextureComponent.cs.meta
│   │   │   │   │   ├── LocaleTextureMaterialComponent.cs
│   │   │   │   │   ├── LocaleTextureMaterialComponent.cs.meta
│   │   │   │   │   ├── LocaleVideoClipComponent.cs
│   │   │   │   │   └── LocaleVideoClipComponent.cs.meta
│   │   │   │   ├── Behaviour.meta
│   │   │   │   ├── Event/
│   │   │   │   │   ├── ScriptableEventLocaleText.cs
│   │   │   │   │   └── ScriptableEventLocaleText.cs.meta
│   │   │   │   ├── Event.meta
│   │   │   │   ├── Variable/
│   │   │   │   │   ├── LocaleAudioClip.cs
│   │   │   │   │   ├── LocaleAudioClip.cs.meta
│   │   │   │   │   ├── LocaleFont.cs
│   │   │   │   │   ├── LocaleFont.cs.meta
│   │   │   │   │   ├── LocaleMaterial.cs
│   │   │   │   │   ├── LocaleMaterial.cs.meta
│   │   │   │   │   ├── LocalePrefab.cs
│   │   │   │   │   ├── LocalePrefab.cs.meta
│   │   │   │   │   ├── LocaleSprite.cs
│   │   │   │   │   ├── LocaleSprite.cs.meta
│   │   │   │   │   ├── LocaleTMPFont.cs
│   │   │   │   │   ├── LocaleTMPFont.cs.meta
│   │   │   │   │   ├── LocaleText.cs
│   │   │   │   │   ├── LocaleText.cs.meta
│   │   │   │   │   ├── LocaleTextAsset.cs
│   │   │   │   │   ├── LocaleTextAsset.cs.meta
│   │   │   │   │   ├── LocaleTexture.cs
│   │   │   │   │   ├── LocaleTexture.cs.meta
│   │   │   │   │   ├── LocaleVariable.cs
│   │   │   │   │   ├── LocaleVariable.cs.meta
│   │   │   │   │   ├── LocaleVideoClip.cs
│   │   │   │   │   ├── LocaleVideoClip.cs.meta
│   │   │   │   │   ├── ScriptableLocaleBase.cs
│   │   │   │   │   └── ScriptableLocaleBase.cs.meta
│   │   │   │   └── Variable.meta
│   │   │   ├── Implement.meta
│   │   │   ├── Language.cs
│   │   │   ├── Language.cs.meta
│   │   │   ├── Locale.cs
│   │   │   ├── Locale.cs.meta
│   │   │   ├── LocaleChangedEventArgs.cs
│   │   │   ├── LocaleChangedEventArgs.cs.meta
│   │   │   ├── LocaleItem.cs
│   │   │   ├── LocaleItem.cs.meta
│   │   │   ├── LocaleItemBase.cs
│   │   │   ├── LocaleItemBase.cs.meta
│   │   │   ├── LocaleSettings.cs
│   │   │   ├── LocaleSettings.cs.meta
│   │   │   ├── Translate/
│   │   │   │   ├── GoogleTranslateRequest.cs
│   │   │   │   ├── GoogleTranslateRequest.cs.meta
│   │   │   │   ├── GoogleTranslateResponse.cs
│   │   │   │   ├── GoogleTranslateResponse.cs.meta
│   │   │   │   ├── GoogleTranslator.cs
│   │   │   │   └── GoogleTranslator.cs.meta
│   │   │   ├── Translate.meta
│   │   │   ├── VirtueSky.Sunflower.Localization.asmdef
│   │   │   └── VirtueSky.Sunflower.Localization.asmdef.meta
│   │   └── Runtime.meta
│   ├── Localization.meta
│   ├── Misc/
│   │   ├── Common.Animancer.cs
│   │   ├── Common.Animancer.cs.meta
│   │   ├── Common.Collections.cs
│   │   ├── Common.Collections.cs.meta
│   │   ├── Common.Colors.cs
│   │   ├── Common.Colors.cs.meta
│   │   ├── Common.Math.cs
│   │   ├── Common.Math.cs.meta
│   │   ├── Common.Physics.cs
│   │   ├── Common.Physics.cs.meta
│   │   ├── Common.SkeletonAnimation.cs
│   │   ├── Common.SkeletonAnimation.cs.meta
│   │   ├── Common.SkeletonGraphic.cs
│   │   ├── Common.SkeletonGraphic.cs.meta
│   │   ├── Common.Tag.cs
│   │   ├── Common.Tag.cs.meta
│   │   ├── Common.Text.cs
│   │   ├── Common.Text.cs.meta
│   │   ├── Common.Transform.cs
│   │   ├── Common.Transform.cs.meta
│   │   ├── Common.cs
│   │   ├── Common.cs.meta
│   │   ├── virtuesky.sunflower.misc.asmdef
│   │   └── virtuesky.sunflower.misc.asmdef.meta
│   ├── Misc.meta
│   ├── Notifications/
│   │   ├── Editor/
│   │   │   ├── NotificationWindowEditor.cs
│   │   │   ├── NotificationWindowEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.Notifications.Editor.asmdef
│   │   │   └── Virtuesky.Sunflower.Notifications.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── NotificationAndroid.cs
│   │   │   ├── NotificationAndroid.cs.meta
│   │   │   ├── NotificationConsole.cs
│   │   │   ├── NotificationConsole.cs.meta
│   │   │   ├── NotificationIOS.cs
│   │   │   ├── NotificationIOS.cs.meta
│   │   │   ├── NotificationPrepare.cs
│   │   │   ├── NotificationPrepare.cs.meta
│   │   │   ├── NotificationVariable.cs
│   │   │   ├── NotificationVariable.cs.meta
│   │   │   ├── virtuesky.sunflower.notifications.asmdef
│   │   │   └── virtuesky.sunflower.notifications.asmdef.meta
│   │   └── Runtime.meta
│   ├── Notifications.meta
│   ├── ObjectPooling/
│   │   ├── Pool.cs
│   │   ├── Pool.cs.meta
│   │   ├── PoolData.cs
│   │   ├── PoolData.cs.meta
│   │   ├── PoolHandle.cs
│   │   ├── PoolHandle.cs.meta
│   │   ├── PooledObjectId.cs
│   │   ├── PooledObjectId.cs.meta
│   │   ├── virtuesky.sunflower.objectpooling.asmdef
│   │   └── virtuesky.sunflower.objectpooling.asmdef.meta
│   ├── ObjectPooling.meta
│   ├── Rating/
│   │   ├── Editor/
│   │   │   ├── RatingWindowEditor.cs
│   │   │   ├── RatingWindowEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.Rating.Editor.asmdef
│   │   │   └── Virtuesky.Sunflower.Rating.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── InAppReview.cs
│   │   │   ├── InAppReview.cs.meta
│   │   │   ├── virtuesky.sunflower.rating.asmdef
│   │   │   └── virtuesky.sunflower.rating.asmdef.meta
│   │   └── Runtime.meta
│   ├── Rating.meta
│   ├── RemoteConfig/
│   │   ├── FirebaseRemoteConfigData.cs
│   │   ├── FirebaseRemoteConfigData.cs.meta
│   │   ├── FirebaseRemoteConfigManager.cs
│   │   ├── FirebaseRemoteConfigManager.cs.meta
│   │   ├── Virtuesky.Sunflower.RemoteConfigs.asmdef
│   │   └── Virtuesky.Sunflower.RemoteConfigs.asmdef.meta
│   ├── RemoteConfig.meta
│   ├── SimpleJSON/
│   │   ├── SimpleJSON.cs
│   │   ├── SimpleJSON.cs.meta
│   │   ├── SimpleJSONBinary.cs
│   │   ├── SimpleJSONBinary.cs.meta
│   │   ├── SimpleJSONDotNetTypes.cs
│   │   ├── SimpleJSONDotNetTypes.cs.meta
│   │   ├── SimpleJSONUnity.cs
│   │   ├── SimpleJSONUnity.cs.meta
│   │   ├── Virtuesky.Sunflower.SimpleJson.asmdef
│   │   └── Virtuesky.Sunflower.SimpleJson.asmdef.meta
│   ├── SimpleJSON.meta
│   ├── TouchInput/
│   │   ├── Editor/
│   │   │   ├── TouchInputManagerEditor.cs
│   │   │   ├── TouchInputManagerEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.TouchInput.Editor.asmdef
│   │   │   └── Virtuesky.Sunflower.TouchInput.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── InputTouchEvent/
│   │   │   │   ├── InputEventTouchBegin.cs
│   │   │   │   ├── InputEventTouchBegin.cs.meta
│   │   │   │   ├── InputEventTouchCancel.cs
│   │   │   │   ├── InputEventTouchCancel.cs.meta
│   │   │   │   ├── InputEventTouchEnd.cs
│   │   │   │   ├── InputEventTouchEnd.cs.meta
│   │   │   │   ├── InputEventTouchMove.cs
│   │   │   │   ├── InputEventTouchMove.cs.meta
│   │   │   │   ├── InputEventTouchStationary.cs
│   │   │   │   ├── InputEventTouchStationary.cs.meta
│   │   │   │   ├── InputPreventTouchVariable.cs
│   │   │   │   └── InputPreventTouchVariable.cs.meta
│   │   │   ├── InputTouchEvent.meta
│   │   │   ├── TouchInputManager.cs
│   │   │   ├── TouchInputManager.cs.meta
│   │   │   ├── Virtuesky.Sunflower.TouchInput.asmdef
│   │   │   └── Virtuesky.Sunflower.TouchInput.asmdef.meta
│   │   └── Runtime.meta
│   ├── TouchInput.meta
│   ├── Tracking/
│   │   ├── Editor/
│   │   │   ├── TrackingWindowEditor.cs
│   │   │   ├── TrackingWindowEditor.cs.meta
│   │   │   ├── Virtuesky.Sunflower.TrackingEditor.asmdef
│   │   │   └── Virtuesky.Sunflower.TrackingEditor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── AdjustTracking/
│   │   │   │   ├── AdjustConfig.cs
│   │   │   │   ├── AdjustConfig.cs.meta
│   │   │   │   ├── AdjustTrackingRevenue.cs
│   │   │   │   ├── AdjustTrackingRevenue.cs.meta
│   │   │   │   ├── TrackingAdjust.cs
│   │   │   │   └── TrackingAdjust.cs.meta
│   │   │   ├── AdjustTracking.meta
│   │   │   ├── AppTracking.cs
│   │   │   ├── AppTracking.cs.meta
│   │   │   ├── AppsFlyerTracking/
│   │   │   │   ├── AppsFlyerConfig.cs
│   │   │   │   ├── AppsFlyerConfig.cs.meta
│   │   │   │   ├── AppsFlyerObject.cs
│   │   │   │   ├── AppsFlyerObject.cs.meta
│   │   │   │   ├── AppsFlyerTrackingRevenue.cs
│   │   │   │   ├── AppsFlyerTrackingRevenue.cs.meta
│   │   │   │   ├── TrackingAppsFlyer.cs
│   │   │   │   ├── TrackingAppsFlyer.cs.meta
│   │   │   │   ├── TrackingAppsFlyerFiveParam.cs
│   │   │   │   ├── TrackingAppsFlyerFiveParam.cs.meta
│   │   │   │   ├── TrackingAppsFlyerFourParam.cs
│   │   │   │   ├── TrackingAppsFlyerFourParam.cs.meta
│   │   │   │   ├── TrackingAppsFlyerHasParam.cs
│   │   │   │   ├── TrackingAppsFlyerHasParam.cs.meta
│   │   │   │   ├── TrackingAppsFlyerNoParam.cs
│   │   │   │   ├── TrackingAppsFlyerNoParam.cs.meta
│   │   │   │   ├── TrackingAppsFlyerOneParam.cs
│   │   │   │   ├── TrackingAppsFlyerOneParam.cs.meta
│   │   │   │   ├── TrackingAppsFlyerThreeParam.cs
│   │   │   │   ├── TrackingAppsFlyerThreeParam.cs.meta
│   │   │   │   ├── TrackingAppsFlyerTwoParam.cs
│   │   │   │   └── TrackingAppsFlyerTwoParam.cs.meta
│   │   │   ├── AppsFlyerTracking.meta
│   │   │   ├── FirebaseAnalyticTracking/
│   │   │   │   ├── FirebaseAnalyticTrackingRevenue.cs
│   │   │   │   ├── FirebaseAnalyticTrackingRevenue.cs.meta
│   │   │   │   ├── TrackingFirebase.cs
│   │   │   │   ├── TrackingFirebase.cs.meta
│   │   │   │   ├── TrackingFirebaseFiveParam.cs
│   │   │   │   ├── TrackingFirebaseFiveParam.cs.meta
│   │   │   │   ├── TrackingFirebaseFourParam.cs
│   │   │   │   ├── TrackingFirebaseFourParam.cs.meta
│   │   │   │   ├── TrackingFirebaseNoParam.cs
│   │   │   │   ├── TrackingFirebaseNoParam.cs.meta
│   │   │   │   ├── TrackingFirebaseOneParam.cs
│   │   │   │   ├── TrackingFirebaseOneParam.cs.meta
│   │   │   │   ├── TrackingFirebaseSixParam.cs
│   │   │   │   ├── TrackingFirebaseSixParam.cs.meta
│   │   │   │   ├── TrackingFirebaseThreeParam.cs
│   │   │   │   ├── TrackingFirebaseThreeParam.cs.meta
│   │   │   │   ├── TrackingFirebaseTwoParam.cs
│   │   │   │   └── TrackingFirebaseTwoParam.cs.meta
│   │   │   ├── FirebaseAnalyticTracking.meta
│   │   │   ├── Virtuesky.Sunflower.Tracking.asmdef
│   │   │   └── Virtuesky.Sunflower.Tracking.asmdef.meta
│   │   └── Runtime.meta
│   ├── Tracking.meta
│   ├── Utils/
│   │   ├── Editor/
│   │   │   ├── ConstantDefineSymbols.cs
│   │   │   ├── ConstantDefineSymbols.cs.meta
│   │   │   ├── CreateAsset.cs
│   │   │   ├── CreateAsset.cs.meta
│   │   │   ├── EditorCoroutine.cs
│   │   │   ├── EditorCoroutine.cs.meta
│   │   │   ├── EditorGUIUtils.cs
│   │   │   ├── EditorGUIUtils.cs.meta
│   │   │   ├── EditorGeneric.cs
│   │   │   ├── EditorGeneric.cs.meta
│   │   │   ├── EditorResources.cs
│   │   │   ├── EditorResources.cs.meta
│   │   │   ├── EditorScriptDefineSymbols.cs
│   │   │   ├── EditorScriptDefineSymbols.cs.meta
│   │   │   ├── ExSearchWindow.cs
│   │   │   ├── ExSearchWindow.cs.meta
│   │   │   ├── FileExtension.cs
│   │   │   ├── FileExtension.cs.meta
│   │   │   ├── GameViewUtils.cs
│   │   │   ├── GameViewUtils.cs.meta
│   │   │   ├── Icons/
│   │   │   │   ├── box_bg_dark.psd
│   │   │   │   ├── box_bg_dark.psd.meta
│   │   │   │   ├── box_content_dark.psd
│   │   │   │   ├── box_content_dark.psd.meta
│   │   │   │   ├── even_bg.png.meta
│   │   │   │   ├── even_bg_dark.png.meta
│   │   │   │   ├── even_bg_select.png.meta
│   │   │   │   ├── icon_about.png.meta
│   │   │   │   ├── icon_adjust.png.meta
│   │   │   │   ├── icon_ads.png.meta
│   │   │   │   ├── icon_appsflyer.png.meta
│   │   │   │   ├── icon_audio.png.meta
│   │   │   │   ├── icon_authentication.png.meta
│   │   │   │   ├── icon_button.png.meta
│   │   │   │   ├── icon_controller.png.meta
│   │   │   │   ├── icon_csharp.png.meta
│   │   │   │   ├── icon_extension.png.meta
│   │   │   │   ├── icon_firebase.png.meta
│   │   │   │   ├── icon_folder.png.meta
│   │   │   │   ├── icon_game_service.png.meta
│   │   │   │   ├── icon_gamemanager.png.meta
│   │   │   │   ├── icon_generator.png.meta
│   │   │   │   ├── icon_hierarchy.png.meta
│   │   │   │   ├── icon_iap.png.meta
│   │   │   │   ├── icon_in_app_review.png.meta
│   │   │   │   ├── icon_leaderboard.png.meta
│   │   │   │   ├── icon_locale.png.meta
│   │   │   │   ├── icon_manager.png.meta
│   │   │   │   ├── icon_package.png.meta
│   │   │   │   ├── icon_scriptable.png.meta
│   │   │   │   ├── icon_service.png.meta
│   │   │   │   ├── icon_sound.png.meta
│   │   │   │   ├── icon_sound_mixer.png.meta
│   │   │   │   ├── icon_unity.png.meta
│   │   │   │   ├── script_noti.png.meta
│   │   │   │   ├── scriptable_adjust.png.meta
│   │   │   │   ├── scriptable_adjust2.png.meta
│   │   │   │   ├── scriptable_af.png.meta
│   │   │   │   ├── scriptable_audio.png.meta
│   │   │   │   ├── scriptable_audioclip.png.meta
│   │   │   │   ├── scriptable_event.png.meta
│   │   │   │   ├── scriptable_event_listener.png.meta
│   │   │   │   ├── scriptable_factory.png.meta
│   │   │   │   ├── scriptable_firebase.png.meta
│   │   │   │   ├── scriptable_iap.png.meta
│   │   │   │   ├── scriptable_notification.png.meta
│   │   │   │   ├── scriptable_particle_system.png.meta
│   │   │   │   ├── scriptable_pool.png.meta
│   │   │   │   ├── scriptable_variable.png.meta
│   │   │   │   ├── scriptable_yellow_audioclip.png.meta
│   │   │   │   ├── scriptable_yellow_font.png.meta
│   │   │   │   ├── scriptable_yellow_fontasset.png.meta
│   │   │   │   ├── scriptable_yellow_gameobject.png.meta
│   │   │   │   ├── scriptable_yellow_material.png.meta
│   │   │   │   ├── scriptable_yellow_sprite.png.meta
│   │   │   │   ├── scriptable_yellow_text.png.meta
│   │   │   │   ├── scriptable_yellow_textasset.png.meta
│   │   │   │   ├── scriptable_yellow_texture.png.meta
│   │   │   │   ├── scriptable_yellow_videoclip.png.meta
│   │   │   │   └── virtuesky_removebg.png.meta
│   │   │   ├── Icons.meta
│   │   │   ├── RegistryManager.cs
│   │   │   ├── RegistryManager.cs.meta
│   │   │   ├── TemplateAssembly/
│   │   │   │   ├── PurchasingGeneratedAsmdef.txt
│   │   │   │   ├── PurchasingGeneratedAsmdef.txt.meta
│   │   │   │   ├── PurchasingGeneratedAsmdefMeta.txt
│   │   │   │   └── PurchasingGeneratedAsmdefMeta.txt.meta
│   │   │   ├── TemplateAssembly.meta
│   │   │   ├── TextureUtils.cs
│   │   │   ├── TextureUtils.cs.meta
│   │   │   ├── Uniform.cs
│   │   │   ├── Uniform.cs.meta
│   │   │   ├── UnityPackage/
│   │   │   │   ├── Note_Package.txt
│   │   │   │   ├── Note_Package.txt.meta
│   │   │   │   ├── google-play-game.unitypackage
│   │   │   │   ├── google-play-game.unitypackage.meta
│   │   │   │   ├── max-sdk.unitypackage
│   │   │   │   └── max-sdk.unitypackage.meta
│   │   │   ├── UnityPackage.meta
│   │   │   ├── Virtuesky.Sunflower.UtilsEdtitor.asmdef
│   │   │   └── Virtuesky.Sunflower.UtilsEdtitor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── ColorExtensions.cs
│   │   │   ├── ColorExtensions.cs.meta
│   │   │   ├── ExtensionUtils.cs
│   │   │   ├── ExtensionUtils.cs.meta
│   │   │   ├── InputUtils.cs
│   │   │   ├── InputUtils.cs.meta
│   │   │   ├── InterfaceUtils.cs
│   │   │   ├── InterfaceUtils.cs.meta
│   │   │   ├── ReflectionUtils.cs
│   │   │   ├── ReflectionUtils.cs.meta
│   │   │   ├── ScriptableSettings.cs
│   │   │   ├── ScriptableSettings.cs.meta
│   │   │   ├── SimpleMath.cs
│   │   │   ├── SimpleMath.cs.meta
│   │   │   ├── StoreUtils.cs
│   │   │   ├── StoreUtils.cs.meta
│   │   │   ├── TimeUtils.cs
│   │   │   ├── TimeUtils.cs.meta
│   │   │   ├── TweenStatic.cs
│   │   │   ├── TweenStatic.cs.meta
│   │   │   ├── Virtuesky.Sunflower.Utils.asmdef
│   │   │   └── Virtuesky.Sunflower.Utils.asmdef.meta
│   │   └── Runtime.meta
│   ├── Utils.meta
│   ├── Variables/
│   │   ├── Editor/
│   │   │   ├── VariableGenerateGuid.cs
│   │   │   ├── VariableGenerateGuid.cs.meta
│   │   │   ├── VariableWindowEditor.cs
│   │   │   ├── VariableWindowEditor.cs.meta
│   │   │   ├── virtuesky.sunflower.variable.Editor.asmdef
│   │   │   └── virtuesky.sunflower.variable.Editor.asmdef.meta
│   │   ├── Editor.meta
│   │   ├── Runtime/
│   │   │   ├── Base_Variable/
│   │   │   │   ├── BaseReference.cs
│   │   │   │   ├── BaseReference.cs.meta
│   │   │   │   ├── BaseVariable.cs
│   │   │   │   ├── BaseVariable.cs.meta
│   │   │   │   ├── BaseVariableListener.cs
│   │   │   │   ├── BaseVariableListener.cs.meta
│   │   │   │   ├── IGuidVariable.cs
│   │   │   │   └── IGuidVariable.cs.meta
│   │   │   ├── Base_Variable.meta
│   │   │   ├── Boolean_Variable/
│   │   │   │   ├── BooleanReference.cs
│   │   │   │   ├── BooleanReference.cs.meta
│   │   │   │   ├── BooleanVariable.cs
│   │   │   │   ├── BooleanVariable.cs.meta
│   │   │   │   ├── BooleanVariableListener.cs
│   │   │   │   └── BooleanVariableListener.cs.meta
│   │   │   ├── Boolean_Variable.meta
│   │   │   ├── Float_Variable/
│   │   │   │   ├── FloatReference.cs
│   │   │   │   ├── FloatReference.cs.meta
│   │   │   │   ├── FloatVariable.cs
│   │   │   │   ├── FloatVariable.cs.meta
│   │   │   │   ├── FloatVariableListener.cs
│   │   │   │   └── FloatVariableListener.cs.meta
│   │   │   ├── Float_Variable.meta
│   │   │   ├── Integer_Variable/
│   │   │   │   ├── IntegerReference.cs
│   │   │   │   ├── IntegerReference.cs.meta
│   │   │   │   ├── IntegerVariable.cs
│   │   │   │   ├── IntegerVariable.cs.meta
│   │   │   │   ├── IntegerVariableListener.cs
│   │   │   │   └── IntegerVariableListener.cs.meta
│   │   │   ├── Integer_Variable.meta
│   │   │   ├── Interface_Variable/
│   │   │   │   ├── IReference.cs
│   │   │   │   ├── IReference.cs.meta
│   │   │   │   ├── IVariable.cs
│   │   │   │   └── IVariable.cs.meta
│   │   │   ├── Interface_Variable.meta
│   │   │   ├── Object_Variable/
│   │   │   │   ├── ObjectReference.cs
│   │   │   │   ├── ObjectReference.cs.meta
│   │   │   │   ├── ObjectVariable.cs
│   │   │   │   ├── ObjectVariable.cs.meta
│   │   │   │   ├── ObjectVariableListener.cs
│   │   │   │   └── ObjectVariableListener.cs.meta
│   │   │   ├── Object_Variable.meta
│   │   │   ├── Rect_Variable/
│   │   │   │   ├── RectVariable.cs
│   │   │   │   └── RectVariable.cs.meta
│   │   │   ├── Rect_Variable.meta
│   │   │   ├── ShortDouble_Variable/
│   │   │   │   ├── ShortDoubleReference.cs
│   │   │   │   ├── ShortDoubleReference.cs.meta
│   │   │   │   ├── ShortDoubleVariable.cs
│   │   │   │   ├── ShortDoubleVariable.cs.meta
│   │   │   │   ├── ShortDoubleVariableListener.cs
│   │   │   │   └── ShortDoubleVariableListener.cs.meta
│   │   │   ├── ShortDouble_Variable.meta
│   │   │   ├── String_Variable/
│   │   │   │   ├── StringVariable.cs
│   │   │   │   ├── StringVariable.cs.meta
│   │   │   │   ├── StringVariableListener.cs
│   │   │   │   └── StringVariableListener.cs.meta
│   │   │   ├── String_Variable.meta
│   │   │   ├── Trasform_Variable/
│   │   │   │   ├── TransformReference.cs
│   │   │   │   ├── TransformReference.cs.meta
│   │   │   │   ├── TransformVariable.cs
│   │   │   │   └── TransformVariable.cs.meta
│   │   │   ├── Trasform_Variable.meta
│   │   │   ├── Vector2_Variable/
│   │   │   │   ├── Vector2Reference.cs
│   │   │   │   ├── Vector2Reference.cs.meta
│   │   │   │   ├── Vector2Variable.cs
│   │   │   │   ├── Vector2Variable.cs.meta
│   │   │   │   ├── Vector2VariableListener.cs
│   │   │   │   └── Vector2VariableListener.cs.meta
│   │   │   ├── Vector2_Variable.meta
│   │   │   ├── Vector3_Variable/
│   │   │   │   ├── Vector3Reference.cs
│   │   │   │   ├── Vector3Reference.cs.meta
│   │   │   │   ├── Vector3Variable.cs
│   │   │   │   ├── Vector3Variable.cs.meta
│   │   │   │   ├── Vector3VariableListener.cs
│   │   │   │   └── Vector3VariableListener.cs.meta
│   │   │   ├── Vector3_Variable.meta
│   │   │   ├── virtuesky.sunflower.variable.asmdef
│   │   │   └── virtuesky.sunflower.variable.asmdef.meta
│   │   └── Runtime.meta
│   ├── Variables.meta
│   ├── Vibration/
│   │   ├── Plugins/
│   │   │   ├── iOS/
│   │   │   │   ├── Vibration/
│   │   │   │   │   ├── HapticFeedback.mm
│   │   │   │   │   ├── HapticFeedback.mm.meta
│   │   │   │   │   ├── Vibration.h
│   │   │   │   │   ├── Vibration.h.meta
│   │   │   │   │   ├── Vibration.mm
│   │   │   │   │   └── Vibration.mm.meta
│   │   │   │   └── Vibration.meta
│   │   │   └── iOS.meta
│   │   ├── Plugins.meta
│   │   ├── README.md
│   │   ├── README.md.meta
│   │   ├── Vibration.cs
│   │   ├── Vibration.cs.meta
│   │   ├── virtuesky.sunflower.vibration.asmdef
│   │   └── virtuesky.sunflower.vibration.asmdef.meta
│   └── Vibration.meta
├── VirtueSky.meta
├── package.json
└── package.json.meta
Download .txt
Showing preview only (578K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5712 symbols across 835 files)

FILE: VirtueSky/Advertising/Editor/AdSettingEditor.cs
  class AdSettingEditor (line 10) | [CustomEditor(typeof(AdSetting), true)]
    method Initialize (line 53) | void Initialize()
    method Draw (line 89) | void Draw()
    method OnInspectorGUI (line 118) | public override void OnInspectorGUI()
    method SetupMax (line 123) | void SetupMax()
    method SetupAdmob (line 184) | void SetupAdmob()
    method SetupIronSource (line 283) | void SetupIronSource()
    method StyleLabel (line 333) | GUIStyle StyleLabel()
    method GuiLine (line 341) | void GuiLine(int i_height = 1)

FILE: VirtueSky/Advertising/Editor/AdsWindowEditor.cs
  class AdsWindowEditor (line 9) | public class AdsWindowEditor : EditorWindow

FILE: VirtueSky/Advertising/Runtime/Admob/AdmobAdClient.cs
  class AdmobAdClient (line 9) | public sealed class AdmobAdClient : AdClient
    method AdmobAdClient (line 11) | public AdmobAdClient(AdSetting _adSetting)
    method Initialize (line 16) | public override void Initialize()
    method RegisterAppStateChange (line 60) | void RegisterAppStateChange()
    method OnAppStateChanged (line 65) | void OnAppStateChanged(GoogleMobileAds.Common.AppState state)
    method LoadBanner (line 73) | public override void LoadBanner()
    method LoadInterstitial (line 79) | public override void LoadInterstitial()
    method LoadRewarded (line 85) | public override void LoadRewarded()
    method LoadRewardedInterstitial (line 91) | public override void LoadRewardedInterstitial()
    method LoadAppOpen (line 97) | public override void LoadAppOpen()
    method ShowAppOpen (line 103) | public override void ShowAppOpen()
    method LoadNativeOverlay (line 109) | public override void LoadNativeOverlay()

FILE: VirtueSky/Advertising/Runtime/Admob/AdmobAdUnitVariable.cs
  class AdmobAdUnitVariable (line 6) | public class AdmobAdUnitVariable : AdUnitVariable
    method Show (line 33) | public override AdUnitVariable Show(string placement = null)
    method SetIdRuntime (line 42) | public void SetIdRuntime(string unitId)

FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobAppOpenVariable.cs
  class AdmobAppOpenVariable (line 12) | [Serializable]
    method Init (line 28) | public override void Init()
    method Load (line 40) | public override void Load()
    method IsReady (line 50) | public override bool IsReady()
    method ShowImpl (line 60) | protected override void ShowImpl(string placement = null)
    method Destroy (line 67) | public override void Destroy()
    method OnAdLoadCallback (line 77) | private void OnAdLoadCallback(AppOpenAd ad, LoadAdError error)
    method OnAdClicked (line 98) | private void OnAdClicked()
    method OnAdOpening (line 104) | private void OnAdOpening()
    method OnAdFailedToShow (line 113) | private void OnAdFailedToShow(AdError obj)
    method OnAdClosed (line 119) | private void OnAdClosed()
    method OnAdPaided (line 129) | private void OnAdPaided(AdValue value)
    method OnAdLoaded (line 137) | private void OnAdLoaded()
    method OnAdFailedToLoad (line 143) | private void OnAdFailedToLoad(LoadAdError error)
    method GetUnitTest (line 151) | [ContextMenu("Get Id test")]

FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobBannerVariable.cs
  class AdmobBannerVariable (line 14) | [Serializable]
    method Init (line 31) | public override void Init()
    method Load (line 43) | public override void Load()
    method IsCollapsible (line 65) | public bool IsCollapsible()
    method OnWaitAppOpenClosed (line 75) | void OnWaitAppOpenClosed()
    method OnWaitAppOpenDisplayed (line 84) | void OnWaitAppOpenDisplayed()
    method IsReady (line 90) | public override bool IsReady()
    method ShowImpl (line 99) | protected override void ShowImpl(string placement = null)
    method Destroy (line 115) | public override void Destroy()
    method HideBanner (line 128) | public override void HideBanner()
    method ConvertSize (line 140) | public AdSize ConvertSize()
    method ConvertPosition (line 155) | public AdPosition ConvertPosition()
    method ConvertPlacementCollapsible (line 169) | public string ConvertPlacementCollapsible()
    method OnAdPaided (line 183) | private void OnAdPaided(AdValue value)
    method OnAdClicked (line 191) | private void OnAdClicked()
    method OnAdOpening (line 197) | private void OnAdOpening()
    method OnAdLoaded (line 203) | private void OnAdLoaded()
    method OnAdFailedToLoad (line 209) | private void OnAdFailedToLoad(LoadAdError error)
    method OnAdClosed (line 218) | private void OnAdClosed()
    method DelayBannerReload (line 224) | private IEnumerator DelayBannerReload()
    method GetUnitTest (line 231) | [ContextMenu("Get Id test")]

FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobInterVariable.cs
  class AdmobInterVariable (line 12) | [Serializable]
    method Init (line 21) | public override void Init()
    method Load (line 33) | public override void Load()
    method IsReady (line 44) | public override bool IsReady()
    method ShowImpl (line 53) | protected override void ShowImpl(string placement = null)
    method ResetChainCallback (line 60) | protected override void ResetChainCallback()
    method Destroy (line 66) | public override void Destroy()
    method AdLoadCallback (line 76) | private void AdLoadCallback(InterstitialAd ad, LoadAdError error)
    method OnAdClicked (line 94) | private void OnAdClicked()
    method OnAdOpening (line 100) | private void OnAdOpening()
    method OnAdFailedToShow (line 108) | private void OnAdFailedToShow(AdError error)
    method OnAdClosed (line 114) | private void OnAdClosed()
    method OnAdPaided (line 123) | private void OnAdPaided(AdValue value)
    method OnAdLoaded (line 131) | private void OnAdLoaded()
    method OnAdFailedToLoad (line 137) | private void OnAdFailedToLoad(LoadAdError error)
    method GetUnitTest (line 144) | [ContextMenu("Get Id test")]

FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobNativeOverlayVariable.cs
  class AdmobNativeOverlayVariable (line 15) | [Serializable]
    type NativeTemplate (line 19) | public enum NativeTemplate
    method Init (line 48) | public override void Init()
    method Load (line 63) | public override void Load()
    method IsReady (line 83) | public override bool IsReady()
    method ShowImpl (line 92) | protected override void ShowImpl(string placement = null)
    method Destroy (line 103) | public override void Destroy()
    method Hide (line 117) | public void Hide()
    method RenderAd (line 128) | public void RenderAd()
    method RenderAd (line 140) | public void RenderAd(RectTransform uiElement)
    method RenderAd (line 155) | public void RenderAd(RectTransform uiElement, int width, int height)
    method RenderAd (line 170) | public void RenderAd(RectTransform uiElement, Camera camera, bool useS...
    method RenderAd (line 195) | public void RenderAd(RectTransform uiElement, Camera camera, int width...
    method ConvertUiElementPosToNativeAdsPos (line 204) | (int, int) ConvertUiElementPosToNativeAdsPos(RectTransform uiElement, ...
    method ConvertUiElementPosToNativeAdsPos (line 215) | (int, int) ConvertUiElementPosToNativeAdsPos(RectTransform uiElement, ...
    method ConvertUiElementPosToNativeAdsPos (line 226) | (int, int) ConvertUiElementPosToNativeAdsPos(RectTransform uiElement)
    method SetPosition (line 235) | public void SetPosition(AdsPosition adsPosition)
    method SetPosition (line 242) | public void SetPosition(int x, int y)
    method SetPosition (line 249) | public void SetPosition(RectTransform uiElement)
    method SetPosition (line 257) | public void SetPosition(RectTransform uiElement, Camera camera)
    method Style (line 267) | public NativeTemplateStyle Style()
    method ConvertPosition (line 283) | AdPosition ConvertPosition(AdsPosition _adsPosition)
    method ConvertSize (line 297) | AdSize ConvertSize()
    method AdLoadCallback (line 309) | private void AdLoadCallback(NativeOverlayAd ad, LoadAdError error)
    method OnAdLoaded (line 325) | private void OnAdLoaded()
    method OnAdClosed (line 331) | private void OnAdClosed()
    method OnAdOpening (line 338) | private void OnAdOpening()
    method OnAdClicked (line 345) | private void OnAdClicked()
    method OnAdPaided (line 351) | private void OnAdPaided(AdValue value)
    method OnAdFailedToLoad (line 359) | private void OnAdFailedToLoad(LoadAdError error)
    method DelayReload (line 368) | private IEnumerator DelayReload()
    method GetUnitTest (line 374) | [ContextMenu("Get Id test")]

FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobRewardInterVariable.cs
  class AdmobRewardInterVariable (line 12) | [Serializable]
    method Init (line 22) | public override void Init()
    method Load (line 36) | public override void Load()
    method IsReady (line 45) | public override bool IsReady()
    method ShowImpl (line 54) | protected override void ShowImpl(string placement = null)
    method ResetChainCallback (line 61) | protected override void ResetChainCallback()
    method Show (line 68) | public override AdUnitVariable Show(string placement = null)
    method Destroy (line 77) | public override void Destroy()
    method OnAdLoadCallback (line 88) | private void OnAdLoadCallback(RewardedInterstitialAd ad, LoadAdError e...
    method OnAdClicked (line 106) | private void OnAdClicked()
    method OnAdFailedToLoad (line 112) | private void OnAdFailedToLoad(LoadAdError error)
    method OnAdLoaded (line 118) | private void OnAdLoaded()
    method OnAdPaided (line 124) | private void OnAdPaided(AdValue value)
    method OnAdFailedToShow (line 132) | private void OnAdFailedToShow(AdError error)
    method OnAdOpening (line 138) | private void OnAdOpening()
    method OnAdClosed (line 146) | private void OnAdClosed()
    method UserEarnedRewardCallback (line 163) | private void UserEarnedRewardCallback(Reward reward)
    method GetUnitTest (line 169) | [ContextMenu("Get Id test")]

FILE: VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobRewardVariable.cs
  class AdmobRewardVariable (line 12) | [Serializable]
    method Init (line 22) | public override void Init()
    method Load (line 36) | public override void Load()
    method IsReady (line 45) | public override bool IsReady()
    method ShowImpl (line 54) | protected override void ShowImpl(string placement = null)
    method Show (line 61) | public override AdUnitVariable Show(string placement = null)
    method ResetChainCallback (line 70) | protected override void ResetChainCallback()
    method Destroy (line 77) | public override void Destroy()
    method AdLoadCallback (line 88) | private void AdLoadCallback(RewardedAd ad, LoadAdError error)
    method OnAdClicked (line 106) | private void OnAdClicked()
    method OnAdPaided (line 112) | private void OnAdPaided(AdValue value)
    method OnAdOpening (line 120) | private void OnAdOpening()
    method OnAdFailedToShow (line 128) | private void OnAdFailedToShow(AdError obj)
    method OnAdClosed (line 134) | private void OnAdClosed()
    method OnAdLoaded (line 151) | private void OnAdLoaded()
    method OnAdFailedToLoad (line 157) | private void OnAdFailedToLoad(LoadAdError error)
    method UserRewardEarnedCallback (line 163) | private void UserRewardEarnedCallback(Reward reward)
    method GetUnitTest (line 169) | [ContextMenu("Get Id test")]

FILE: VirtueSky/Advertising/Runtime/General/AdClient.cs
  class AdClient (line 5) | public abstract class AdClient
    method SetupAdSetting (line 15) | public void SetupAdSetting(AdSetting _adSetting)
    method Initialize (line 20) | public abstract void Initialize();
    method LoadBanner (line 21) | public abstract void LoadBanner();
    method LoadInterstitial (line 22) | public abstract void LoadInterstitial();
    method LoadRewarded (line 23) | public abstract void LoadRewarded();
    method LoadRewardedInterstitial (line 24) | public abstract void LoadRewardedInterstitial();
    method LoadAppOpen (line 25) | public abstract void LoadAppOpen();
    method ShowAppOpen (line 26) | public abstract void ShowAppOpen();
    method LoadNativeOverlay (line 29) | public abstract void LoadNativeOverlay();

FILE: VirtueSky/Advertising/Runtime/General/AdInfo.cs
  class AdsInfo (line 3) | public class AdsInfo
    method AdsInfo (line 14) | public AdsInfo(MaxSdkBase.AdInfo info)
    method AdsInfo (line 27) | public AdsInfo(Unity.Services.LevelPlay.LevelPlayAdInfo info)
    method AdsInfo (line 39) | public AdsInfo(string adUnitId, string adFormat, string placement, str...
  class AdsError (line 51) | public class AdsError
    method AdsError (line 57) | public AdsError(MaxSdkBase.ErrorInfo info)
    method AdsError (line 65) | public AdsError(Unity.Services.LevelPlay.LevelPlayAdError adError)
    method AdsError (line 73) | public AdsError(GoogleMobileAds.Api.AdError adError)
    method AdsError (line 79) | public AdsError(int errorCode, string errorMessage)

FILE: VirtueSky/Advertising/Runtime/General/AdSetting.cs
  class AdSetting (line 12) | [EditorIcon("icon_scriptable")]
  type AdMediation (line 135) | public enum AdMediation
  type AdsPosition (line 142) | public enum AdsPosition
  type AdsSize (line 153) | public enum AdsSize

FILE: VirtueSky/Advertising/Runtime/General/AdStatic.cs
  class AdStatic (line 7) | public static class AdStatic
    method OnDisplayed (line 35) | public static AdUnitVariable OnDisplayed(this AdUnitVariable unit, Act...
    method OnClosed (line 41) | public static AdUnitVariable OnClosed(this AdUnitVariable unit, Action...
    method OnLoaded (line 47) | public static AdUnitVariable OnLoaded(this AdUnitVariable unit, Action...
    method OnFailedToLoad (line 53) | public static AdUnitVariable OnFailedToLoad(this AdUnitVariable unit, ...
    method OnFailedToDisplay (line 59) | public static AdUnitVariable OnFailedToDisplay(this AdUnitVariable uni...
    method OnClicked (line 65) | public static AdUnitVariable OnClicked(this AdUnitVariable unit, Actio...
    method OnCompleted (line 71) | public static AdUnitVariable OnCompleted(this AdUnitVariable unit, Act...
    method OnSkipped (line 106) | public static AdUnitVariable OnSkipped(this AdUnitVariable unit, Actio...

FILE: VirtueSky/Advertising/Runtime/General/AdUnitVariable.cs
  class AdUnitVariable (line 7) | public abstract class AdUnitVariable : ScriptableObject, IAdUnit
    method ShowImpl (line 30) | protected virtual void ShowImpl(string placement = null)
    method ResetChainCallback (line 34) | protected virtual void ResetChainCallback()
    method HideBanner (line 42) | public virtual void HideBanner()
    method Show (line 46) | public abstract AdUnitVariable Show(string placement = null);
    method Init (line 48) | public virtual void Init()
    method Load (line 52) | public virtual void Load()
    method IsReady (line 56) | public virtual bool IsReady()
    method Destroy (line 61) | public virtual void Destroy()

FILE: VirtueSky/Advertising/Runtime/General/Advertising.cs
  class Advertising (line 26) | [EditorIcon("icon_controller"), HideMonoScript]
    method Awake (line 53) | private void Awake()
    method OnEnable (line 61) | private void OnEnable()
    method OnDisable (line 71) | private void OnDisable()
    method Start (line 81) | private void Start()
    method InitAdClient (line 111) | void InitAdClient()
    method InitAutoLoadAds (line 138) | private void InitAutoLoadAds()
    method OnChangePreventDisplayOpenAd (line 145) | private void OnChangePreventDisplayOpenAd(bool state)
    method IeAutoLoadAll (line 150) | IEnumerator IeAutoLoadAll(float delay = 0)
    method AutoLoadInterAds (line 165) | void AutoLoadInterAds()
    method AutoLoadRewardAds (line 175) | void AutoLoadRewardAds()
    method AutoLoadRewardInterAds (line 185) | void AutoLoadRewardInterAds()
    method AutoLoadAppOpenAds (line 195) | void AutoLoadAppOpenAds()
    method InitGdpr (line 210) | private void InitGdpr()
    method OnConsentInfoUpdated (line 235) | private void OnConsentInfoUpdated(FormError consentError)
    method LoadAndShowConsentForm (line 263) | public void LoadAndShowConsentForm()
    method ShowPrivacyOptionsForm (line 287) | private void ShowPrivacyOptionsForm()
    method Reset (line 304) | private void Reset()

FILE: VirtueSky/Advertising/Runtime/General/IAdUnit.cs
  type IAdUnit (line 3) | public interface IAdUnit
    method Init (line 5) | public void Init();
    method Load (line 6) | public void Load();
    method IsReady (line 7) | public bool IsReady();
    method Destroy (line 8) | public void Destroy();

FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayAdClient.cs
  class LevelPlayAdClient (line 9) | public sealed class LevelPlayAdClient : AdClient
    method LevelPlayAdClient (line 11) | public LevelPlayAdClient(AdSetting _adSetting)
    method Initialize (line 18) | public override void Initialize()
    method ImpressionDataReadyEvent (line 39) | private void ImpressionDataReadyEvent(LevelPlayImpressionData impressi...
    method OnAppStateChange (line 49) | private void OnAppStateChange(bool pauseStatus)
    method SdkInitializationCompletedEvent (line 54) | void SdkInitializationCompletedEvent(LevelPlayConfiguration config)
    method LoadBanner (line 64) | public override void LoadBanner()
    method LoadInterstitial (line 70) | public override void LoadInterstitial()
    method LoadRewarded (line 76) | public override void LoadRewarded()
    method LoadRewardedInterstitial (line 82) | public override void LoadRewardedInterstitial()
    method LoadAppOpen (line 86) | public override void LoadAppOpen()
    method ShowAppOpen (line 90) | public override void ShowAppOpen()
    method LoadNativeOverlay (line 94) | public override void LoadNativeOverlay()

FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayAdUnitVariable.cs
  class LevelPlayAdUnitVariable (line 6) | public class LevelPlayAdUnitVariable : AdUnitVariable
    method Show (line 33) | public override AdUnitVariable Show(string placement = null)
    method SetIdRuntime (line 41) | public void SetIdRuntime(string unitId)

FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable/LevelPlayBannerVariable.cs
  class LevelPlayBannerVariable (line 13) | [Serializable]
    method Init (line 28) | public override void Init()
    method Load (line 36) | public override void Load()
    method OnWaitAppOpenClosed (line 58) | void OnWaitAppOpenClosed()
    method OnWaitAppOpenDisplayed (line 67) | void OnWaitAppOpenDisplayed()
    method IsReady (line 73) | public override bool IsReady()
    method ShowImpl (line 82) | protected override void ShowImpl(string placement = null)
    method Destroy (line 94) | public override void Destroy()
    method HideBanner (line 106) | public override void HideBanner()
    method ConvertBannerSize (line 119) | private LevelPlayAdSize ConvertBannerSize()
    method ConvertBannerPosition (line 131) | private LevelPlayBannerPosition ConvertBannerPosition()
    method BannerOnAdLoadedEvent (line 143) | void BannerOnAdLoadedEvent(LevelPlayAdInfo adInfo)
    method BannerOnAdLoadFailedEvent (line 149) | void BannerOnAdLoadFailedEvent(LevelPlayAdError ironSourceError)
    method DelayBannerReload (line 158) | private IEnumerator DelayBannerReload()
    method BannerOnAdClickedEvent (line 164) | void BannerOnAdClickedEvent(LevelPlayAdInfo adInfo)
    method BannerOnAdDisplayedEvent (line 170) | void BannerOnAdDisplayedEvent(LevelPlayAdInfo adInfo)
    method BannerOnAdDisplayFailedEvent (line 177) | void BannerOnAdDisplayFailedEvent(LevelPlayAdInfo adInfo, LevelPlayAdE...
    method BannerOnAdLeftApplicationEvent (line 183) | void BannerOnAdLeftApplicationEvent(LevelPlayAdInfo adInfo)

FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable/LevelPlayInterVariable.cs
  class LevelPlayInterVariable (line 11) | [Serializable]
    method Init (line 19) | public override void Init()
    method Load (line 26) | public override void Load()
    method IsReady (line 43) | public override bool IsReady()
    method ShowImpl (line 52) | protected override void ShowImpl(string placement = null)
    method Destroy (line 59) | public override void Destroy()
    method ResetChainCallback (line 63) | protected override void ResetChainCallback()
    method InterstitialOnAdLoadedEvent (line 74) | void InterstitialOnAdLoadedEvent(LevelPlayAdInfo adInfo)
    method InterstitialOnAdLoadFailed (line 80) | void InterstitialOnAdLoadFailed(LevelPlayAdError ironSourceError)
    method InterstitialOnAdDisplayEvent (line 86) | void InterstitialOnAdDisplayEvent(LevelPlayAdInfo adInfo)
    method InterstitialOnAdClickedEvent (line 94) | void InterstitialOnAdClickedEvent(LevelPlayAdInfo adInfo)
    method InterstitialOnAdDisplayFailedEvent (line 100) | void InterstitialOnAdDisplayFailedEvent(LevelPlayAdInfo adInfo, LevelP...
    method InterstitialOnAdClosedEvent (line 106) | void InterstitialOnAdClosedEvent(LevelPlayAdInfo adInfo)

FILE: VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable/LevelPlayRewardVariable.cs
  class LevelPlayRewardVariable (line 10) | [Serializable]
    method Init (line 20) | public override void Init()
    method Load (line 28) | public override void Load()
    method IsReady (line 46) | public override bool IsReady()
    method ShowImpl (line 55) | protected override void ShowImpl(string placement = null)
    method Show (line 62) | public override AdUnitVariable Show(string placement = null)
    method Destroy (line 70) | public override void Destroy()
    method ResetChainCallback (line 74) | protected override void ResetChainCallback()
    method OnAdLoaded (line 86) | void OnAdLoaded(LevelPlayAdInfo adInfo)
    method RewardedVideoOnAdLoadFailedEvent (line 92) | private void RewardedVideoOnAdLoadFailedEvent(LevelPlayAdError ironSou...
    method RewardedVideoOnAdDisplayedEvent (line 98) | void RewardedVideoOnAdDisplayedEvent(LevelPlayAdInfo adInfo)
    method RewardedVideoOnAdClosedEvent (line 106) | void RewardedVideoOnAdClosedEvent(LevelPlayAdInfo adInfo)
    method RewardedVideoOnAdDisplayFailedEvent (line 123) | void RewardedVideoOnAdDisplayFailedEvent(LevelPlayAdInfo adInfo, Level...
    method RewardedVideoOnAdRewardedEvent (line 129) | void RewardedVideoOnAdRewardedEvent(LevelPlayAdInfo info, LevelPlayRew...
    method RewardedVideoOnAdClickedEvent (line 134) | void RewardedVideoOnAdClickedEvent(LevelPlayAdInfo adInfo)

FILE: VirtueSky/Advertising/Runtime/Max/MaxAdClient.cs
  class MaxAdClient (line 5) | public sealed class MaxAdClient : AdClient
    method MaxAdClient (line 7) | public MaxAdClient(AdSetting _adSetting)
    method Initialize (line 12) | public override void Initialize()
    method OnAppStateChange (line 32) | private void OnAppStateChange(bool pauseStatus)
    method LoadBanner (line 41) | public override void LoadBanner()
    method LoadInterstitial (line 47) | public override void LoadInterstitial()
    method LoadRewarded (line 53) | public override void LoadRewarded()
    method LoadRewardedInterstitial (line 59) | public override void LoadRewardedInterstitial()
    method LoadAppOpen (line 63) | public override void LoadAppOpen()
    method ShowAppOpen (line 69) | public override void ShowAppOpen()
    method LoadNativeOverlay (line 75) | public override void LoadNativeOverlay()

FILE: VirtueSky/Advertising/Runtime/Max/MaxAdUnitVariable.cs
  class MaxAdUnitVariable (line 6) | public class MaxAdUnitVariable : AdUnitVariable
    method Show (line 33) | public override AdUnitVariable Show(string placement = null)
    method SetIdRuntime (line 42) | public void SetIdRuntime(string unitId)

FILE: VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxAppOpenVariable.cs
  class MaxAppOpenVariable (line 9) | [Serializable]
    method Init (line 19) | public override void Init()
    method Load (line 34) | public override void Load()
    method IsReady (line 42) | public override bool IsReady()
    method ShowImpl (line 52) | protected override void ShowImpl(string placement = null)
    method Destroy (line 59) | public override void Destroy()
    method OnAdLoaded (line 66) | private void OnAdLoaded(string unit, MaxSdkBase.AdInfo info)
    method OnAdRevenuePaid (line 72) | private void OnAdRevenuePaid(string unit, MaxSdkBase.AdInfo info)
    method OnAdLoadFailed (line 80) | private void OnAdLoadFailed(string unit, MaxSdkBase.ErrorInfo info)
    method OnAdDisplayFailed (line 86) | private void OnAdDisplayFailed(string unit, MaxSdkBase.ErrorInfo error...
    method OnAdHidden (line 93) | private void OnAdHidden(string unit, MaxSdkBase.AdInfo info)
    method OnAdDisplayed (line 103) | private void OnAdDisplayed(string unit, MaxSdkBase.AdInfo info)
    method OnAdClicked (line 112) | private void OnAdClicked(string unit, MaxSdkBase.AdInfo info)

FILE: VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxBannerVariable.cs
  class MaxBannerVariable (line 9) | [Serializable]
    method Init (line 20) | public override void Init()
    method Load (line 38) | public override void Load()
    method OnWaitAppOpenClosed (line 50) | void OnWaitAppOpenClosed()
    method OnWaitAppOpenDisplayed (line 59) | void OnWaitAppOpenDisplayed()
    method IsReady (line 65) | public override bool IsReady()
    method ShowImpl (line 74) | protected override void ShowImpl(string placement = null)
    method Destroy (line 86) | public override void Destroy()
    method HideBanner (line 99) | public override void HideBanner()
    method ConvertPosition (line 113) | public MaxSdkBase.BannerPosition ConvertPosition()
    method OnAdRevenuePaid (line 128) | private void OnAdRevenuePaid(string unit, MaxSdkBase.AdInfo info)
    method OnAdLoaded (line 136) | private void OnAdLoaded(string unit, MaxSdkBase.AdInfo info)
    method OnAdExpanded (line 142) | private void OnAdExpanded(string unit, MaxSdkBase.AdInfo info)
    method OnAdLoadFailed (line 148) | private void OnAdLoadFailed(string unit, MaxSdkBase.ErrorInfo info)
    method OnAdCollapsed (line 155) | private void OnAdCollapsed(string unit, MaxSdkBase.AdInfo info)
    method OnAdClicked (line 161) | private void OnAdClicked(string arg1, MaxSdkBase.AdInfo arg2)

FILE: VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxInterVariable.cs
  class MaxInterVariable (line 10) | [Serializable]
    method Init (line 17) | public override void Init()
    method Load (line 32) | public override void Load()
    method IsReady (line 40) | public override bool IsReady()
    method ShowImpl (line 49) | protected override void ShowImpl(string placement = null)
    method Destroy (line 56) | public override void Destroy()
    method ResetChainCallback (line 60) | protected override void ResetChainCallback()
    method OnAdDisplayFailed (line 69) | private void OnAdDisplayFailed(string unit, MaxSdkBase.ErrorInfo error,
    method OnAdHidden (line 76) | private void OnAdHidden(string unit, MaxSdkBase.AdInfo info)
    method OnAdDisplayed (line 85) | private void OnAdDisplayed(string unit, MaxSdkBase.AdInfo info)
    method OnAdRevenuePaid (line 93) | private void OnAdRevenuePaid(string unit, MaxSdkBase.AdInfo info)
    method OnAdLoadFailed (line 101) | private void OnAdLoadFailed(string unit, MaxSdkBase.ErrorInfo info)
    method OnAdLoaded (line 107) | private void OnAdLoaded(string unit, MaxSdkBase.AdInfo info)
    method OnAdClicked (line 113) | private void OnAdClicked(string unit, MaxSdkBase.AdInfo info)

FILE: VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxRewardVariable.cs
  class MaxRewardVariable (line 9) | [Serializable]
    method Init (line 17) | public override void Init()
    method Load (line 33) | public override void Load()
    method IsReady (line 41) | public override bool IsReady()
    method ShowImpl (line 50) | protected override void ShowImpl(string placement = null)
    method Show (line 57) | public override AdUnitVariable Show(string placement = null)
    method Destroy (line 65) | public override void Destroy()
    method ResetChainCallback (line 69) | protected override void ResetChainCallback()
    method OnAdReceivedReward (line 79) | private void OnAdReceivedReward(string unit, MaxSdkBase.Reward reward,
    method OnAdRevenuePaid (line 85) | private void OnAdRevenuePaid(string unit, MaxSdkBase.AdInfo info)
    method OnAdLoadFailed (line 93) | private void OnAdLoadFailed(string unit, MaxSdkBase.ErrorInfo info)
    method OnAdDisplayFailed (line 99) | private void OnAdDisplayFailed(string unit, MaxSdkBase.ErrorInfo error...
    method OnAdLoaded (line 106) | private void OnAdLoaded(string unit, MaxSdkBase.AdInfo info)
    method OnAdHidden (line 112) | private void OnAdHidden(string unit, MaxSdkBase.AdInfo info)
    method OnAdDisplayed (line 129) | private void OnAdDisplayed(string unit, MaxSdkBase.AdInfo info)
    method OnAdClicked (line 137) | private void OnAdClicked(string unit, MaxSdkBase.AdInfo info)

FILE: VirtueSky/AssetFinder/Editor/Script/AssetFinder.cs
  type Dependency (line 11) | public enum Dependency
  type DepthFilter (line 18) | public enum DepthFilter
  type Sorting (line 29) | public enum Sorting
  class AssetFinderInfo (line 37) | [Serializable]
    method AssetFinderInfo (line 52) | public AssetFinderInfo(string guid)
    method RefreshInfo (line 58) | internal void RefreshInfo()
    method UpdateBuildStatus (line 120) | internal void UpdateBuildStatus(HashSet<string> buildGuids)
  class AssetFinder (line 126) | public static class AssetFinder
    method ScanProject (line 130) | public static void ScanProject()
    method Refresh (line 136) | public static void Refresh()
    method GetUses (line 147) | public static List<AssetFinderInfo> GetUses(string[] guids, Dependency...
    method GetUsedBy (line 161) | public static List<AssetFinderInfo> GetUsedBy(string[] guids, Dependen...
    method GetUnused (line 175) | public static List<AssetFinderInfo> GetUnused(Sorting sort = Sorting.N...
    method GetInBuild (line 187) | public static List<AssetFinderInfo> GetInBuild(Sorting sort = Sorting....
    method GetUsesCount (line 213) | public static Dictionary<string, int> GetUsesCount(string[] guids)
    method GetUsedByCount (line 236) | public static Dictionary<string, int> GetUsedByCount(string[] guids)
    method IsUses (line 259) | public static bool IsUses(string[] guids)
    method IsUsedBy (line 274) | public static bool IsUsedBy(string[] guids)
    method IsInBuild (line 289) | public static bool IsInBuild(string[] guids)
    method ProcessAssetResults (line 316) | private static List<AssetFinderInfo> ProcessAssetResults(List<AssetFin...
    method ProcessResults (line 333) | private static List<AssetFinderInfo> ProcessResults(Dictionary<string,...
    method MatchesDepthFilter (line 363) | private static bool MatchesDepthFilter(int itemDepth, int targetDepth,...
    method ApplySorting (line 388) | private static List<AssetFinderInfo> ApplySorting(List<AssetFinderInfo...
    method ConvertSorting (line 412) | private static AssetFinderRefDrawer.Sort ConvertSorting(Sorting sorting)

FILE: VirtueSky/AssetFinder/Editor/Script/AssetFinderWindowExtension.cs
  class AssetFinderWindowExtension (line 2) | public class AssetFinderWindowExtension {
    method ShowWindow (line 3) | public static void ShowWindow() {
    method DeleteCache (line 6) | public static void DeleteCache() {

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.AssetState.cs
  class AssetFinderAsset (line 3) | partial class AssetFinderAsset
    type AssetState (line 5) | public enum AssetState

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.AssetType.cs
  class AssetFinderAsset (line 3) | partial class AssetFinderAsset
    type AssetType (line 5) | public enum AssetType

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.Classes.cs
  class AssetFinderAsset (line 5) | internal partial class AssetFinderAsset
    class Classes (line 7) | [Serializable]

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.Constants.cs
  class AssetFinderAsset (line 7) | internal partial class AssetFinderAsset

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.ContentLoader.cs
  class AssetFinderAsset (line 10) | internal partial class AssetFinderAsset
    method LoadContent (line 14) | internal void LoadContent()
    method LoadContentFast (line 64) | internal void LoadContentFast()
    method ValidateWithAssetDatabase (line 115) | internal void ValidateWithAssetDatabase()
    method LoadYAML2 (line 165) | internal void LoadYAML2()
    method LoadFolder (line 208) | internal void LoadFolder()
    method LoadBinaryAsset (line 253) | internal void LoadBinaryAsset()
    method LoadGameObject (line 285) | internal void LoadGameObject(GameObject go)
    method LoadSerialized (line 294) | internal void LoadSerialized(UnityObject target)
    method AddTextureGUID (line 313) | private void AddTextureGUID(SerializedProperty prop)
    method LoadLightingData (line 321) | internal void LoadLightingData(LightingDataAsset asset)
    method LoadTerrainData (line 335) | internal void LoadTerrainData(TerrainData terrain)
    method ClearLog (line 384) | internal static void ClearLog()
    method WriteTotalScanTime (line 397) | internal static void WriteTotalScanTime()
    method ClearUseGUIDs (line 404) | private void ClearUseGUIDs()

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.Drawing.cs
  class AssetFinderAsset (line 9) | internal partial class AssetFinderAsset
    class AssetFinderAssetDrawConfig (line 13) | internal class AssetFinderAssetDrawConfig
      method AssetFinderAssetDrawConfig (line 25) | public AssetFinderAssetDrawConfig(
    method Draw (line 48) | internal float Draw(
    method AddArray (line 314) | internal GenericMenu AddArray(
    method CopyGUID (line 322) | internal void CopyGUID()
    method CopyName (line 328) | internal void CopyName()
    method CopyAssetPath (line 334) | internal void CopyAssetPath()
    method CopyAssetPathFull (line 340) | internal void CopyAssetPathFull()
    method RemoveFromSelection (line 348) | internal void RemoveFromSelection()
    method AddToSelection (line 353) | internal void AddToSelection()
    method Ping (line 358) | internal void Ping()
    method Open (line 381) | internal void Open()
    method OpenProperties (line 388) | internal void OpenProperties()
    method EditPrefab (line 400) | internal void EditPrefab()

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.FileInfo.cs
  class AssetFinderAsset (line 8) | internal partial class AssetFinderAsset
    method ExistOnDisk (line 24) | private bool ExistOnDisk()
    method LoadFileInfo (line 46) | internal AssetFinderAsset LoadFileInfo()
    method GuessAssetType (line 97) | internal void GuessAssetType()
    method Contains (line 143) | else if (REFERENCABLE_JSON.Contains(ext) || UI_TOOLKIT.Contains(ext))
    method if (line 146) | else if (REFERENCABLE_META.Contains(ext))
    method if (line 149) | else if (ext == ".fbx")
    method if (line 152) | else if (ext == ".dll")
  method MarkAsDirty (line 161) | internal void MarkAsDirty(bool isMoved = true, bool force = false)

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.GuidManager.cs
  class AssetFinderAsset (line 8) | internal partial class AssetFinderAsset
    method AddUseGUID (line 41) | internal void AddUseGUID(string fguid, long fFileId = -1)
    method AddUseGUID (line 46) | internal void AddUseGUID(string fguid, long fFileId, bool checkExist)
    method AddUsedBy (line 69) | public void AddUsedBy(string guid, AssetFinderAsset asset)
    method UsageCount (line 90) | public int UsageCount()
    method DebugUseGUID (line 107) | public string DebugUseGUID()
    method IsValidGUID (line 112) | internal static bool IsValidGUID(string guid)
    method FindUsageGUIDs (line 117) | internal static List<string> FindUsageGUIDs(AssetFinderAsset asset, bo...
    method FindUsedByGUIDs (line 134) | internal static List<string> FindUsedByGUIDs(AssetFinderAsset asset)

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.PathInfo.cs
  class AssetFinderAsset (line 8) | internal partial class AssetFinderAsset
    method LoadPathInfo (line 65) | public AssetFinderAsset LoadPathInfo()

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.cs
  class AssetFinderAsset (line 19) | [Serializable]
    method AssetFinderAsset (line 63) | public AssetFinderAsset(string guid)
    method IsCriticalAsset (line 86) | internal bool IsCriticalAsset()
    method ToString (line 135) | public override string ToString()
    method SortByExtension (line 144) | internal static int SortByExtension(AssetFinderAsset a1, AssetFinderAs...
    method FindUsage (line 153) | internal static List<AssetFinderAsset> FindUsage(AssetFinderAsset asset)
    method FindUsedBy (line 163) | internal static List<AssetFinderAsset> FindUsedBy(AssetFinderAsset asset)
    method ReplaceReference (line 170) | internal bool ReplaceReference(string fromGUID, string toGUID, Terrain...
    method ReplaceFileIdIfNeeded (line 236) | internal string ReplaceFileIdIfNeeded(string line, long toFileId)
    method ReplaceReference (line 260) | internal bool ReplaceReference(string fromGUID, string toGUID, long to...

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAutoRefreshMode.cs
  type AssetFinderAutoRefreshMode (line 3) | public enum AssetFinderAutoRefreshMode

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.AsyncProcessor.cs
  class AssetFinderCache (line 9) | internal partial class AssetFinderCache
    method DelayCheck4Changes (line 11) | internal static void DelayCheck4Changes()
    method Check (line 17) | private static void Check()
    method Check4Changes (line 33) | internal void Check4Changes(bool force)
    method RefreshUsedByOnlyFromCache (line 48) | internal void RefreshUsedByOnlyFromCache()
    method IncrementalRefresh (line 58) | internal void IncrementalRefresh()
    method Check4Usage (line 142) | internal void Check4Usage()
    method Check4Work (line 167) | internal void Check4Work()
    method AsyncProcess (line 182) | internal void AsyncProcess()
    method HasPendingChanges (line 211) | private bool HasPendingChanges()
    method AsyncWork (line 216) | internal bool AsyncWork<T>(List<T> arr, Action<int, T> action, float t)
    method AsyncLoadContent (line 241) | internal void AsyncLoadContent(int idx, AssetFinderAsset asset)
    method AsyncUsedBy (line 250) | internal void AsyncUsedBy(AssetFinderAsset asset)

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.Constants.cs
  class AssetFinderCache (line 5) | internal partial class AssetFinderCache

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.Lifecycle.cs
  class AssetFinderCache (line 11) | internal partial class AssetFinderCache
    method CheckSameVersion (line 13) | public static bool CheckSameVersion()
    method MarkChanged (line 19) | public void MarkChanged()
    method FoundCache (line 24) | private static void FoundCache()
    method RestoreCacheFromPath (line 45) | private static bool RestoreCacheFromPath(string path, bool validateOnl...
    method TryLoadCache (line 58) | private static void TryLoadCache()
    method DeleteCache (line 73) | internal static void DeleteCache()
    method CreateCache (line 97) | internal static void CreateCache()
    method OnEnable (line 119) | private void OnEnable()

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.ProjectManager.cs
  class AssetFinderCache (line 7) | internal partial class AssetFinderCache
    method ReadFromCache (line 9) | internal void ReadFromCache()
    method ClearCacheCompletely (line 63) | internal void ClearCacheCompletely()
    method ReadFromProject (line 88) | internal void ReadFromProject(bool force)
    method RefreshAsset (line 154) | internal void RefreshAsset(string guid, bool force)
    method RefreshSelection (line 160) | internal void RefreshSelection()
    method RefreshAsset (line 171) | internal void RefreshAsset(AssetFinderAsset asset, bool force)
    method AddAsset (line 185) | internal void AddAsset(string guid, bool force = false)
    method RemoveAsset (line 224) | internal void RemoveAsset(string guid)
    method RemoveAsset (line 231) | internal void RemoveAsset(AssetFinderAsset asset)

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.Scanner.cs
  class AssetFinderCache (line 8) | internal partial class AssetFinderCache
    method ScanSimilar (line 10) | internal List<List<string>> ScanSimilar(Action IgnoreWhenScan, Action ...
    method ScanUnused (line 52) | internal List<AssetFinderAsset> ScanUnused(bool recursive = true)

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.Search.cs
  class AssetFinderCache (line 7) | internal partial class AssetFinderCache
    method FindUsage (line 9) | internal static List<string> FindUsage(string[] listGUIDs)
    method Get (line 31) | internal AssetFinderAsset Get(string guid, bool autoNew = false)
    method FindAssetsOfType (line 37) | internal List<AssetFinderAsset> FindAssetsOfType(AssetFinderAsset.Asse...
    method FindAsset (line 50) | internal AssetFinderAsset FindAsset(string guid, string fileId)
    method FindAssets (line 73) | internal List<AssetFinderAsset> FindAssets(string[] guids, bool scanFo...

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.cs
  class AssetFinderCache (line 13) | internal partial class AssetFinderCache : ScriptableObject
    method Reload (line 81) | public static void Reload()
  type ProcessingState (line 127) | internal enum ProcessingState
  class AssetFinderLOG (line 133) | internal static class AssetFinderLOG
    method Log (line 135) | public static void Log(object message)
    method Log (line 142) | public static void Log(object message, UnityEngine.Object context)
    method LogWarning (line 149) | public static void LogWarning(object message)
    method LogWarning (line 156) | public static void LogWarning(object message, UnityEngine.Object context)
    method LogError (line 163) | public static void LogError(object message)
    method LogError (line 170) | public static void LogError(object message, UnityEngine.Object context)
  class AssetFinderCacheEditor (line 178) | [CustomEditor(typeof(AssetFinderCache))]
    method OnInspectorGUI (line 184) | public override void OnInspectorGUI()

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderGitUtil.cs
  class AssetFinderGitUtil (line 6) | internal static class AssetFinderGitUtil
    method IsGitProject (line 10) | public static bool IsGitProject()
    method CheckGitIgnoreContainsFR2Cache (line 32) | public static bool CheckGitIgnoreContainsFR2Cache()
    method AddFR2CacheToGitIgnore (line 55) | public static void AddFR2CacheToGitIgnore()

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderNavigationHistory.cs
  class AssetFinderNavigationHistory (line 9) | internal class AssetFinderNavigationHistory
    method SetWindow (line 20) | public void SetWindow(AssetFinderWindowAll windowAll)
    method RecordSelection (line 25) | public void RecordSelection(UnityObject[] selection)
    method GoBack (line 54) | public bool GoBack()
    method GoForward (line 78) | public bool GoForward()
    method CleanInvalidHistoryEntries (line 102) | private void CleanInvalidHistoryEntries()
    method CleanHistoryEntry (line 122) | private UnityObject[] CleanHistoryEntry(UnityObject[] entry)
    method GetValidHistoryCount (line 127) | private int GetValidHistoryCount()
    method UpdateFR2SelectionDirectly (line 132) | private void UpdateFR2SelectionDirectly(UnityObject[] selection)
    method AreSelectionsEqual (line 144) | private static bool AreSelectionsEqual(UnityObject[] a, UnityObject[] b)

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderSelectionManager.cs
  class AssetFinderSelectionManager (line 44) | [InitializeOnLoad]
    method AssetFinderSelectionManager (line 51) | static AssetFinderSelectionManager()
    method Initialize (line 80) | private static void Initialize()
    method InitializeInstance (line 98) | private void InitializeInstance()
    method GetUnitySelection (line 111) | public UnityObject[] GetUnitySelection()
    method RefreshFromUnitySelection (line 116) | private void RefreshFromUnitySelection()
    method AreSelectionsEqual (line 125) | private static bool AreSelectionsEqual(UnityObject[] selection1, Unity...
    method UpdateFR2Selection (line 140) | internal void UpdateFR2Selection(UnityObject[] newSelection)
    method OnUnitySelectionChanged (line 166) | private void OnUnitySelectionChanged()
    method Cleanup (line 172) | public static void Cleanup()
    class AssetFinderSceneSelection (line 179) | internal class AssetFinderSceneSelection
      method AddGameObject (line 192) | public void AddGameObject(UnityObject obj)
      method Remove (line 207) | public void Remove(int instanceId)
      method Contains (line 216) | public bool Contains(int instanceId)
      method Contains (line 221) | public bool Contains(GameObject go)
      method Clear (line 226) | public void Clear()
      method ToArray (line 233) | public GameObject[] ToArray()
    class AssetFinderAssetSelection (line 245) | internal class AssetFinderAssetSelection
      type AssetEntry (line 257) | public struct AssetEntry
        method AssetEntry (line 263) | public AssetEntry(string guid, long fileId, string assetPath)
      method AddAsset (line 271) | public void AddAsset(UnityObject obj)
      method GetFileId (line 291) | private static long GetFileId(UnityObject obj)
      method Remove (line 319) | public void Remove(string guid)
      method Contains (line 327) | public bool Contains(string guid)
      method Clear (line 332) | public void Clear()
      method GetGuids (line 338) | public string[] GetGuids()
      method GetAssetEntry (line 349) | public AssetEntry? GetAssetEntry(string guid)

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderSettingExt.cs
  class AssetFinderSettingExt (line 7) | [Serializable] internal class AssetFinderSettingExt
    method AssetFinderSettingExt (line 85) | static AssetFinderSettingExt()
    method DelaySave (line 102) | static void DelaySave()

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderSmartLock.cs
  class AssetFinderSmartLock (line 12) | internal class AssetFinderSmartLock
    type PingLockState (line 14) | public enum PingLockState
    method SetPingLockState (line 22) | public void SetPingLockState(PingLockState state)
    method ConsumePingLockState (line 33) | public bool ConsumePingLockState()
    method ShouldRefreshWithSmartLogic (line 44) | public bool ShouldRefreshWithSmartLogic(EditorWindow window, UnityObje...

FILE: VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderWindowFocus.cs
  class AssetFinderWindowFocus (line 8) | [InitializeOnLoad]
    method AssetFinderWindowFocus (line 18) | static AssetFinderWindowFocus()
    method Raise (line 24) | private static void Raise()
    method Cleanup (line 32) | private static void Cleanup() =>
    method AssetFinderWindowFocus (line 36) | static AssetFinderWindowFocus()
    method Raise (line 42) | private static void Raise()
    method Cleanup (line 50) | private static void Cleanup() =>
    method AssetFinderWindowFocus (line 57) | static AssetFinderWindowFocus()
    method Tick (line 63) | private static void Tick()
    method Cleanup (line 74) | private static void Cleanup() =>

FILE: VirtueSky/AssetFinder/Editor/Script/Dev/AssetFinderDefine.cs
  class AssetFinderDefine (line 3) | internal static class AssetFinderDefine
    method IsDebugModeEnabled (line 5) | internal static bool IsDebugModeEnabled()
    method ToggleDebugMode (line 11) | internal static void ToggleDebugMode(bool enable)
    method GetCscFilePath (line 32) | private static string GetCscFilePath()
    method HasDefine (line 37) | internal static bool HasDefine(string content, string define)
    method AddDefine (line 44) | internal static string AddDefine(string content, string define)
    method RemoveDefine (line 54) | internal static string RemoveDefine(string content, string define)
    method ReadDefines (line 61) | private static System.Collections.Generic.List<string> ReadDefines(str...
    method WriteDefines (line 83) | private static string WriteDefines(System.Collections.Generic.List<str...

FILE: VirtueSky/AssetFinder/Editor/Script/Dev/AssetFinderDev.cs
  class AssetFinderDev (line 6) | public class AssetFinderDev
    type NoLogScope (line 10) | private readonly struct NoLogScope : IDisposable
      method NoLogScope (line 13) | internal NoLogScope(bool _) { }
      method Dispose (line 14) | public void Dispose() { }
      method NoLogScope (line 17) | internal NoLogScope(bool _)
      method Dispose (line 22) | public void Dispose() => UnityEngine.Debug.unityLogger.logEnabled = ...

FILE: VirtueSky/AssetFinder/Editor/Script/Dev/AssetFinderReferenceValidator.cs
  class AssetFinderReferenceValidator (line 12) | internal class AssetFinderReferenceValidator
    type ValidationResult (line 14) | private struct ValidationResult
    type AssetDifference (line 26) | private struct AssetDifference
    method ValidateAllReferences (line 39) | public void ValidateAllReferences(bool exportToFile = false)
    method CompareAssetReferences (line 114) | private AssetDifference CompareAssetReferences(AssetFinderAsset asset)
    method LogValidationResults (line 186) | private void LogValidationResults(ValidationResult result, System.Time...
    method GenerateDetailedReport (line 229) | private void GenerateDetailedReport(ValidationResult result)
    method AppendToReport (line 294) | private void AppendToReport(string line)
    method ExtractPathFromDependencyString (line 299) | private string ExtractPathFromDependencyString(string depString)
    method AnalyzeValidationPatterns (line 311) | private void AnalyzeValidationPatterns(List<AssetDifference> differences)

FILE: VirtueSky/AssetFinder/Editor/Script/Dev/AssetFinderWindowAll.Validator.cs
  class AssetFinderWindowAll (line 6) | internal partial class AssetFinderWindowAll
    method AddToCustomMenu (line 8) | public override void AddToCustomMenu(GenericMenu menu)
    method ValidateReferencesVsUnity (line 19) | private void ValidateReferencesVsUnity(bool exportToFile = false)
    method DebugSelectedAssets (line 40) | private void DebugSelectedAssets()

FILE: VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderAddressableDrawer.cs
  class AssetFinderAddressableDrawer (line 9) | internal class AssetFinderAddressableDrawer : IRefDraw
    method AssetFinderAddressableDrawer (line 37) | public AssetFinderAddressableDrawer(IWindow window, Func<AssetFinderRe...
    method ElementCount (line 69) | public int ElementCount()
    method Draw (line 74) | public bool Draw(Rect rect)
    method DrawLayout (line 96) | public bool DrawLayout()
    method GetGroup (line 102) | private string GetGroup(AssetFinderRef rf)
    method DrawGroupLabel (line 107) | private void DrawGroupLabel(Rect r, string label, int childCount)
    method BeforeDrawItem (line 121) | private void BeforeDrawItem(Rect r, AssetFinderRef rf)
    method AfterDrawItem (line 131) | private void AfterDrawItem(Rect r, AssetFinderRef rf)
    method SetDirty (line 155) | public void SetDirty()
    method RefreshView (line 163) | public void RefreshView()
    method RefreshSort (line 251) | internal void RefreshSort()

FILE: VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderAssetGroup.cs
  class AssetFinderAssetGroup (line 4) | internal class AssetFinderAssetGroup
    method AssetFinderAssetGroup (line 8) | public AssetFinderAssetGroup(string name, params string[] exts)

FILE: VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderAssetGroupDrawer.cs
  class AssetFinderAssetGroupDrawer (line 7) | internal static class AssetFinderAssetGroupDrawer
    method GetIndex (line 46) | public static int GetIndex(string ext)
    method DrawSearchFilter (line 59) | public static bool DrawSearchFilter()
    method SetDirtyIgnore (line 109) | public static void SetDirtyIgnore()
    method DrawIgnoreFolder (line 114) | public static bool DrawIgnoreFolder()

FILE: VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderAssetOrganizer.cs
  class AssetFinderAssetOrganizer (line 11) | internal class AssetFinderAssetOrganizer : IRefDraw
    method AssetFinderAssetOrganizer (line 38) | internal AssetFinderAssetOrganizer(IWindow window, Func<AssetFinderRef...
    method ElementCount (line 45) | public int ElementCount()
    method Draw (line 50) | public bool Draw(Rect rect)
    method DrawLayout (line 62) | public bool DrawLayout()
    method DrawSelectedFolders (line 132) | private void DrawSelectedFolders()
    method CleanupSelectionHierarchy (line 162) | private void CleanupSelectionHierarchy()
    method DrawProgressBar (line 183) | private void DrawProgressBar()
    method StartProcessing (line 198) | private void StartProcessing()
    method CancelProcessing (line 263) | private void CancelProcessing()
    method CleanupAfterProcessing (line 269) | private void CleanupAfterProcessing()
    method DisableAutoRefresh (line 278) | private void DisableAutoRefresh()
    method RestoreAutoRefreshMode (line 284) | private void RestoreAutoRefreshMode()
    method AnalyzeSpineAssets (line 289) | private void AnalyzeSpineAssets()
    method AnalyzeSpriteAtlases (line 328) | private void AnalyzeSpriteAtlases()
    method AnalyzeFolder (line 366) | private void AnalyzeFolder(string folderPath)
    method IsSpineAsset (line 456) | private bool IsSpineAsset(string assetPath)
    method IsInSpriteAtlasFolder (line 461) | private bool IsInSpriteAtlasFolder(string assetPath)
    method DetermineFolderType (line 466) | private string DetermineFolderType(string assetPath, string extension)
    method IsTextureImportedAsSprite (line 523) | private bool IsTextureImportedAsSprite(string assetPath)
    method GetAssetFolderTypeByTypeName (line 533) | private string GetAssetFolderTypeByTypeName(string typeName)
    method PlanAllMoves (line 546) | private void PlanAllMoves()
    method AssetPathToAbs (line 666) | private static string AssetPathToAbs(string assetPath)
    method ProcessNextBatch (line 675) | private void ProcessNextBatch()
    method DeleteEmptySubfolders (line 752) | private void DeleteEmptySubfolders(string parentFolder)
    method DeleteEmptyFoldersRecursive (line 757) | private static void DeleteEmptyFoldersRecursive(string root)
    method IsUnityFolderEmptyStatic (line 773) | private static bool IsUnityFolderEmptyStatic(string folder)
    method GetAssetFolderType (line 793) | private string GetAssetFolderType(string extension)
    class PlannedMove (line 810) | private class PlannedMove {
    class SpriteAtlasInfo (line 818) | private class SpriteAtlasInfo {
    class SpineAssetInfo (line 824) | private class SpineAssetInfo {
    method CleanupEmptyMoveEntries (line 830) | private void CleanupEmptyMoveEntries()
    method NormalizePath (line 846) | private static string NormalizePath(string path)

FILE: VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderBookmark.cs
  class AssetFinderBookmark (line 10) | internal class AssetFinderBookmark : IRefDraw
    method AssetFinderBookmark (line 20) | public AssetFinderBookmark(IWindow window, Func<AssetFinderRefDrawer.S...
    method ElementCount (line 58) | public int ElementCount()
    method DrawLayout (line 63) | public bool DrawLayout()
    method Draw (line 69) | public bool Draw(Rect rect)
    method Contains (line 85) | public static bool Contains(string guidOrInstID)
    method Contains (line 90) | public static bool Contains(UnityObject sceneObject)
    method Contains (line 95) | public static bool Contains(AssetFinderRef rf)
    method Add (line 105) | public static void Add(UnityObject sceneObject)
    method Add (line 113) | public static void Add(string guid)
    method Remove (line 127) | public static void Remove(UnityObject sceneObject)
    method Remove (line 135) | public static void Remove(string guidOrInstID)
    method Clear (line 142) | public static void Clear()
    method Add (line 149) | public static void Add(AssetFinderRef rf)
    method Remove (line 164) | public static void Remove(AssetFinderRef rf)
    method Commit (line 181) | public static void Commit()
    method SetDirty (line 203) | public void SetDirty()
    method DrawButtons (line 208) | private void DrawButtons(Rect rect)
    method RefreshView (line 221) | public void RefreshView()
    method RefreshSort (line 250) | internal void RefreshSort()
    method InvalidateAllDrawerCaches (line 259) | private static void InvalidateAllDrawerCaches()

FILE: VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderDeleteEmptyFolder.cs
  class AssetFinderDeleteEmptyFolder (line 11) | internal class AssetFinderDeleteEmptyFolder : IRefDraw
    method AssetFinderDeleteEmptyFolder (line 21) | internal AssetFinderDeleteEmptyFolder(IWindow window, Func<AssetFinder...
    method ElementCount (line 27) | public int ElementCount() => _deletedFolders.Count;
    method Draw (line 29) | public bool Draw(Rect rect)
    method DrawLayout (line 39) | public bool DrawLayout()
    method DrawProgressBar (line 73) | private void DrawProgressBar()
    method StartProcessing (line 86) | private void StartProcessing()
    method CancelProcessing (line 100) | private void CancelProcessing()
    method ProcessNextFolder (line 107) | private void ProcessNextFolder()
    method FindAllEmptyFolders (line 133) | private void FindAllEmptyFolders(string root)
    method IsUnityFolderEmpty (line 147) | private bool IsUnityFolderEmpty(string folder)
    method IsFolderEmpty (line 167) | private bool IsFolderEmpty(string folder)
    method GenerateReport (line 174) | private void GenerateReport()
    method DeleteAllEmptyFoldersRecursive (line 187) | public static void DeleteAllEmptyFoldersRecursive(string root)
    method IsUnityFolderEmptyStatic (line 225) | private static bool IsUnityFolderEmptyStatic(string folder)

FILE: VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderIgnoreDrawer.cs
  class AssetFinderIgnoreDrawer (line 7) | internal class AssetFinderIgnoreDrawer
    method AssetFinderIgnoreDrawer (line 13) | public AssetFinderIgnoreDrawer()
    method DrawItem (line 23) | private void DrawItem(Rect r, string guid)
    method DrawGroup (line 59) | private void DrawGroup(Rect r, string id, int childCound)
    method SetDirty (line 71) | public void SetDirty()
    method Draw (line 84) | public void Draw()
    method ApplyFiter (line 108) | private void ApplyFiter()
    method GetGroup (line 133) | private string GetGroup(AssetFinderRef rf)
    method SortGroup (line 138) | private void SortGroup(List<string> groups)

FILE: VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderMissingReference.cs
  class AssetFinderMissingReference (line 13) | internal class AssetFinderMissingReference : IRefDraw
    method AssetFinderMissingReference (line 36) | internal AssetFinderMissingReference(IWindow window, Func<AssetFinderR...
    method ElementCount (line 44) | public int ElementCount()
    method Draw (line 49) | public bool Draw(Rect rect)
    method DrawLayout (line 61) | public bool DrawLayout()
    method DrawProgressBar (line 95) | private void DrawProgressBar()
    method StartProcessing (line 111) | private void StartProcessing()
    method CancelProcessing (line 140) | private void CancelProcessing()
    method CleanupAfterProcessing (line 146) | private void CleanupAfterProcessing()
    method ProcessNextAsset (line 154) | private void ProcessNextAsset()
    method DisableAutoRefresh (line 196) | private void DisableAutoRefresh()
    method RestoreAutoRefreshMode (line 202) | private void RestoreAutoRefreshMode()
    method SaveCurrentSceneSetup (line 207) | private void SaveCurrentSceneSetup()
    method RestoreOriginalScenes (line 221) | private void RestoreOriginalScenes()
    method CollectAssetsToProcess (line 247) | private void CollectAssetsToProcess()
    method AddAssetTypeToPipeline (line 253) | private void AddAssetTypeToPipeline(string assetTypeFilter)
    method SortAssetsByDependencyOrder (line 262) | private void SortAssetsByDependencyOrder()
    method BuildDependencyGraph (line 272) | private Dictionary<string, List<string>> BuildDependencyGraph(out Dict...
    method CalculateAssetLevels (line 299) | private Dictionary<string, int> CalculateAssetLevels(Dictionary<string...
    method GenerateReport (line 362) | private void GenerateReport()
    method ProcessPrefab (line 396) | private void ProcessPrefab(string prefabPath)
    method ProcessScene (line 429) | private void ProcessScene(string scenePath)
    method RemoveMissingScriptsFromGameObject (line 453) | private int RemoveMissingScriptsFromGameObject(GameObject gameObject)

FILE: VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderSetting.cs
  class AssetFinderSetting (line 9) | [Serializable]
    method setDirty (line 209) | private static void setDirty()
    method AddIgnore (line 238) | public static void AddIgnore(string path)
    method RemoveIgnore (line 254) | public static void RemoveIgnore(string path)
    method IsTypeExcluded (line 269) | public static bool IsTypeExcluded(int type)
    method ToggleTypeExclude (line 274) | public static void ToggleTypeExclude(int type)
    method GetExcludeType (line 288) | public static int GetExcludeType()
    method IsIncludeAllType (line 293) | public static bool IsIncludeAllType()
    method ExcludeAllType (line 299) | public static void ExcludeAllType()
    method IncludeAllType (line 304) | public static void IncludeAllType()
    method DrawSettings (line 309) | public void DrawSettings()

FILE: VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderUsedInBuild.cs
  class AssetFinderUsedInBuild (line 8) | internal class AssetFinderUsedInBuild : IRefDraw
    method AssetFinderUsedInBuild (line 16) | public AssetFinderUsedInBuild(IWindow window, Func<AssetFinderRefDrawe...
    method ElementCount (line 45) | public int ElementCount()
    method Draw (line 50) | public bool Draw(Rect rect)
    method DrawLayout (line 56) | public bool DrawLayout()
    method SetDirty (line 62) | public void SetDirty()
    method RefreshView (line 68) | public void RefreshView()
    method RefreshSort (line 125) | internal void RefreshSort()

FILE: VirtueSky/AssetFinder/Editor/Script/Duplicate/AssetFinderChunk.cs
  class AssetFinderChunk (line 4) | internal class AssetFinderChunk

FILE: VirtueSky/AssetFinder/Editor/Script/Duplicate/AssetFinderDuplicateTree2.cs
  class AssetFinderDuplicateTree2 (line 9) | internal class AssetFinderDuplicateTree2 : IRefDraw
    type ProgressState (line 40) | private enum ProgressState
    method AssetFinderDuplicateTree2 (line 49) | public AssetFinderDuplicateTree2(IWindow window, Func<AssetFinderRefDr...
    method Draw (line 59) | public bool Draw(Rect rect)
    method DrawLayout (line 64) | public bool DrawLayout()
    method ElementCount (line 104) | public int ElementCount()
    method DrawAsset (line 109) | private void DrawAsset(Rect r, string guid)
    method wasPreDelete (line 180) | private bool wasPreDelete(string guid)
    method DrawGroup (line 190) | private void DrawGroup(Rect r, string label, int childCount)
    method Reset (line 217) | public void Reset(List<List<string>> assetList)
    method OnUpdateView (line 227) | private void OnUpdateView(List<List<string>> assetList)
    method isExclueAnyItem (line 238) | public bool isExclueAnyItem()
    method isExclueAnyItemByIgnoreFolder (line 243) | public bool isExclueAnyItemByIgnoreFolder()
    method RefreshView (line 248) | private void RefreshView(List<List<string>> assetList)
    method ResetGroup (line 332) | private void ResetGroup()
    method GetGroup (line 340) | private string GetGroup(AssetFinderRef rf)
    method SortGroup (line 345) | private void SortGroup(List<string> groups)
    method SetDirty (line 373) | public void SetDirty()
    method RefreshSort (line 378) | public void RefreshSort()
    method DrawHeader (line 390) | private void DrawHeader()
    method OnCacheReady (line 404) | private void OnCacheReady()
    method IgnoreTypeWhenScan (line 411) | private void IgnoreTypeWhenScan()
    method IgnoreFolderWhenScan (line 416) | private void IgnoreFolderWhenScan()

FILE: VirtueSky/AssetFinder/Editor/Script/Duplicate/AssetFinderFileCompare.cs
  class AssetFinderFileCompare (line 9) | internal class AssetFinderFileCompare
    method Reset (line 30) | public void Reset(List<List<string>> list, Action<List<List<string>>> ...
    method PrepareVerificationQueue (line 77) | private void PrepareVerificationQueue()
    method StartNextVerification (line 102) | private void StartNextVerification()
    method PrioritizeGroup (line 123) | public void PrioritizeGroup(string groupKey)
    method GetVerificationProgress (line 149) | public Dictionary<string, float> GetVerificationProgress()
    method GetVerificationOrder (line 154) | public Dictionary<string, int> GetVerificationOrder()
    method GetCurrentlyVerifying (line 159) | public string GetCurrentlyVerifying()
    method IsSignatureScanComplete (line 164) | public bool IsSignatureScanComplete()
    method AddHead (line 169) | public AssetFinderFileCompare AddHead(List<string> files)
    method ReadChunkAsync (line 200) | private void ReadChunkAsync()
    method Trigger (line 259) | private void Trigger(Action<List<List<string>>> cb)
    method ReadChunk (line 267) | private bool ReadChunk()

FILE: VirtueSky/AssetFinder/Editor/Script/Duplicate/AssetFinderHead.cs
  class AssetFinderHead (line 8) | internal class AssetFinderHead
    method GetFiles (line 21) | public List<string> GetFiles()
    method AddToDict (line 26) | public void AddToDict(byte b, AssetFinderChunk chunk, Dictionary<byte,...
    method CloseChunk (line 38) | public void CloseChunk()
    method ReadChunk (line 52) | public void ReadChunk()
    method CompareChunk (line 119) | public void CompareChunk(List<AssetFinderHead> heads)
    method FirstDifferentIndex (line 172) | internal static int FirstDifferentIndex(byte[] arr1, byte[] arr2, int ...

FILE: VirtueSky/AssetFinder/Editor/Script/Extension/AssetFinderExtension.cs
  class GUIExtension (line 8) | internal static class GUIExtension
    method ToggleDrawDebug (line 25) | [MenuItem("Window/FR2/Toggle Draw Debug")]
    method DrawOverlayDebug (line 38) | public static Rect DrawOverlayDebug(this Rect rect, float alpha = 0.1f)
    method LFoldout (line 49) | public static Rect LFoldout(this Rect rect, ref bool isOpen, bool draw...
    method DrawIcon (line 59) | private static Rect DrawIcon(Rect rect, Texture icon, float w, bool le...
    method DrawLabel (line 71) | private static Rect DrawLabel(Rect rect, GUIContent content, GUIStyle ...
    method LColumn (line 89) | public static Rect LColumn(this Rect rect, ref float columnW, Func<Rec...
    method RColumn (line 101) | public static Rect RColumn(this Rect rect, ref float columnW, Func<Rec...
    method LColumnAlign (line 114) | public static Rect LColumnAlign(this Rect rect, ref float columnX)
    method RColumnAlign (line 128) | public static Rect RColumnAlign(this Rect rect, ref float columnX, str...
    method LDrawIcon (line 148) | public static Rect LDrawIcon(this Rect rect, Texture icon, float w = 1...
    method RDrawIcon (line 153) | public static Rect RDrawIcon(this Rect rect, Texture icon, float w = 1...
    method LDrawLabel (line 159) | public static Rect LDrawLabel(this Rect rect, string label, Color? col...
    method RDrawLabel (line 164) | public static Rect RDrawLabel(this Rect rect, string label, Color? col...
    method LDrawMiniLabel (line 170) | public static Rect LDrawMiniLabel(this Rect rect, GUIContent label, Co...
    method LDrawMiniLabel (line 175) | public static Rect LDrawMiniLabel(this Rect rect, string label, Color?...
    method RDrawMiniLabel (line 180) | public static Rect RDrawMiniLabel(this Rect rect, GUIContent label, Co...
    method RDrawMiniLabel (line 185) | public static Rect RDrawMiniLabel(this Rect rect, string label, Color?...
    method LDrawLabel (line 190) | public static Rect LDrawLabel(this Rect rect, GUIContent content, GUIS...
    method RDrawLabel (line 210) | public static Rect RDrawLabel(this Rect rect, GUIContent content, GUIS...

FILE: VirtueSky/AssetFinder/Editor/Script/Extension/AssetFinderHelper.cs
  class AssetFinderHelper (line 7) | internal static class AssetFinderHelper
    method getAllObjsInCurScene (line 11) | public static IEnumerable<GameObject> getAllObjsInCurScene()
    method GetGameObjectsInScene (line 16) | private static IEnumerable<GameObject> GetGameObjectsInScene(Scene scene)
    method getAllChild (line 35) | public static IEnumerable<GameObject> getAllChild(GameObject target)
    method GetAllRefObjects (line 40) | public static IEnumerable<Object> GetAllRefObjects(GameObject obj)
    method StringMatch (line 45) | public static int StringMatch(string pattern, string input)
    method GetfileSizeString (line 69) | public static string GetfileSizeString(long fileSize)

FILE: VirtueSky/AssetFinder/Editor/Script/Extension/AssetFinderUnity.cs
  class AssetFinderUnity (line 78) | internal class AssetFinderUnity
    method RefreshEditorStatus (line 87) | public static void RefreshEditorStatus()
    method StringStartsWith (line 97) | public static bool StringStartsWith(string source, params string[] pre...
    method SplitPath (line 108) | public static void SplitPath(string assetPath, out string assetName, o...
    method PingAndHighlight (line 190) | public static void PingAndHighlight(
    method TriggerHighlight (line 226) | private static bool TriggerHighlight(string propertyPath)
    method Highlight (line 242) | private static bool Highlight(string propertyPath)
    method StopHighlightAt (line 249) | private static void StopHighlightAt(int highlightId, double stopTime)
    method CollapseAllComponentsExcept (line 267) | private static void CollapseAllComponentsExcept(Component targetCompon...
    method DoExpand (line 286) | private static void DoExpand(Component c)
    method SetEditorsExpanded (line 299) | private static void SetEditorsExpanded(Component c)
    method SetEditorsExpanded2 (line 305) | private static void SetEditorsExpanded2(Component c)
    method GetInspectorWindow (line 318) | private static EditorWindow GetInspectorWindow()
    method ExpandPropertyPath (line 324) | private static void ExpandPropertyPath(Component component, string pro...
    method LoadAssetAtPath (line 517) | public static T LoadAssetAtPath<T>(string path) where T : Object
    method SetWindowTitle (line 526) | public static void SetWindowTitle(EditorWindow window, string title)
    method GetCompilingPhase (line 535) | public static void GetCompilingPhase(string path, out bool isPlugin, o...
    method LoadAssetWithGUID (line 566) | public static T LoadAssetWithGUID<T>(string guid) where T : Object
    method UnloadUnusedAssets (line 580) | public static void UnloadUnusedAssets()
    method Epoch (line 590) | internal static int Epoch(DateTime time)
    method DrawToggle (line 595) | internal static bool DrawToggle(ref bool v, string label)
    method DrawToggleToolbar (line 607) | internal static bool DrawToggleToolbar(ref bool v, string label, float...
    method DrawToggleToolbar (line 619) | internal static bool DrawToggleToolbar(ref bool v, GUIContent icon, fl...
    method GetAddressable (line 631) | public static string GetAddressable(string guid)
    method FindEditor (line 642) | internal static EditorWindow FindEditor(string className)
    method RepaintAllEditor (line 653) | internal static void RepaintAllEditor(string className)
    method RepaintProjectWindows (line 669) | internal static void RepaintProjectWindows()
    method RepaintFR2Windows (line 674) | internal static void RepaintFR2Windows()
    method ExportSelection (line 679) | internal static void ExportSelection()
    method GetType (line 723) | public static Type GetType(string typeName)
    method GetAllChild (line 737) | public static IEnumerable<Transform> GetAllChild(Transform root)
    method getAllObjsInCurScene (line 751) | public static IEnumerable<GameObject> getAllObjsInCurScene()
    method GetGameObjectsInScene (line 793) | private static IEnumerable<GameObject> GetGameObjectsInScene(Scene scene)
    method getAllChild (line 814) | public static IEnumerable<GameObject> getAllChild(GameObject target, b...
    method GetAllRefObjects (line 819) | public static IEnumerable<Object> GetAllRefObjects(GameObject obj)
    method StringMatch (line 824) | public static int StringMatch(string pattern, string input)
    method TestPrefab (line 849) | [MenuItem("Tools/Test Prefab")]
    method GetPrefabParent (line 856) | public static string GetPrefabParent(Object obj)
    method GetGameObjectPath (line 863) | public static string GetGameObjectPath(GameObject obj, bool includeMe ...
    method CheckIsPrefab (line 868) | public static bool CheckIsPrefab(GameObject obj)
    method GetPrefabGUID (line 873) | private static string GetPrefabGUID(GameObject obj)
    method GetHierarchyPath (line 907) | private static string GetHierarchyPath(GameObject obj, bool includeMe ...
    method IsPrefabInstance (line 929) | private static bool IsPrefabInstance(GameObject obj)
    method Clear (line 942) | public static void Clear<T1, T2>(ref Dictionary<T1, T2> dict)
    method Clear (line 947) | public static void Clear<T>(ref List<T> list)
    method xGetSerializedProperties (line 952) | public static SerializedProperty[] xGetSerializedProperties(Object go,...
    method xGetSOArray (line 958) | public static List<SerializedProperty> xGetSOArray(SerializedProperty ...
    method BackupAndDeleteAssets (line 982) | public static void BackupAndDeleteAssets(AssetFinderRef[] assets)

FILE: VirtueSky/AssetFinder/Editor/Script/Extension/GUI2.cs
  type IDrawer (line 9) | public interface IDrawer
    method Draw (line 11) | bool Draw(Rect rect);
    method DrawLayout (line 12) | bool DrawLayout();
  class AssetFinderGUI (line 15) | internal static class AssetFinderGUI
    method Color (line 18) | public static GUIColor Color(Color c)
    method ContentColor (line 22) | public static GUIContentColor ContentColor(Color c)
    method BackgroundColor (line 26) | public static GUIBackgroundColor BackgroundColor(Color c)
    class GUIColor (line 30) | internal class GUIColor : IDisposable
      method GUIColor (line 33) | public GUIColor(Color c)
      method Dispose (line 38) | public void Dispose()
    class GUIContentColor (line 44) | internal class GUIContentColor : IDisposable
      method GUIContentColor (line 47) | public GUIContentColor(Color c)
      method Dispose (line 52) | public void Dispose()
    class GUIBackgroundColor (line 58) | internal class GUIBackgroundColor : IDisposable
      method GUIBackgroundColor (line 61) | public GUIBackgroundColor(Color c)
      method Dispose (line 66) | public void Dispose()
  class GUI2 (line 79) | internal static class GUI2
    method Color (line 116) | public static void Color(Action a, Color c, float? alpha = null)
    method ContentColor (line 128) | public static void ContentColor(Action a, Color c, float? alpha = null)
    method BackgroundColor (line 140) | public static void BackgroundColor(Action a, Color c, float? alpha = n...
    method Theme (line 152) | public static Color Theme(Color proColor, Color indieColor)
    method Alpha (line 157) | public static Color Alpha(Color c, float a)
    method Rect (line 163) | public static void Rect(Rect r, Color c, float? alpha = null)
    method DropZone (line 173) | public static Object[] DropZone(string title, float w, float h)
    method ColorIconButton (line 219) | public static bool ColorIconButton(Rect r, Texture icon, Color? c)
    method Toggle (line 228) | public static bool Toggle(Rect r, ref bool value, string label, GUISty...
    method Toggle (line 237) | public static bool Toggle(ref bool value, string label, GUIStyle style...
    method Toggle (line 246) | public static bool Toggle(ref bool value, Texture2D tex, GUIStyle styl...
    method Toggle (line 254) | public static bool Toggle(Rect r, ref bool value, GUIContent tex, GUIS...
    method Toggle (line 261) | public static bool Toggle(ref bool value, GUIContent tex, GUIStyle sty...
    method Toggle (line 269) | public static bool Toggle(Rect rect, ref bool value, GUIContent tex)
    method Toggle (line 277) | public static bool Toggle(Rect rect, ref bool value)
    method Toggle (line 285) | internal static bool Toggle(bool v, string label, Action<bool> setter)
    method ToolbarToggle (line 294) | internal static bool ToolbarToggle(Rect r, ref bool value, Texture ico...
    method GUI_ToggleOptimize (line 311) | internal static bool GUI_ToggleOptimize(Rect r, bool value, GUIContent...
    method ToolbarToggle (line 327) | public static bool ToolbarToggle(ref bool value, Texture icon, Vector2...
    method Toggle (line 340) | public static bool Toggle(ref bool value, GUIContent content, GUIStyle...
    method ToolbarToggle (line 352) | internal static bool ToolbarToggle(Rect r, ref bool value, GUIContent ...
    method ToolbarToggle (line 375) | internal static bool ToolbarToggle(ref bool value, Texture icon, Vecto...
    method ToolbarToggle (line 395) | internal static bool ToolbarToggle(ref bool value, Texture icon, Vecto...
    method Padding (line 482) | public static Rect Padding(Rect r, float x, float y)
    method LeftRect (line 487) | public static Rect LeftRect(float w, ref Rect rect)
    method RightRect (line 494) | public static Rect RightRect(float w, ref Rect rect)

FILE: VirtueSky/AssetFinder/Editor/Script/Extensions/AssetFinderWindowExtensions.cs
  class AssetFinderWindowExtensions (line 10) | internal static class AssetFinderWindowExtensions
    method IsScenePanelVisible (line 13) | internal static bool IsScenePanelVisible(this AssetFinderWindowAll win...
    method IsAssetPanelVisible (line 30) | internal static bool IsAssetPanelVisible(this AssetFinderWindowAll win...
    method RefreshPanelVisibility (line 47) | internal static void RefreshPanelVisibility(this AssetFinderWindowAll ...
    method GetCachedSelectionExtension (line 56) | internal static UnityObject[] GetCachedSelectionExtension(this AssetFi...
    method GetAssetDrawerExtension (line 68) | internal static AssetFinderRefDrawer GetAssetDrawerExtension(this Asse...
    method OnCSVClickExtension (line 76) | internal static void OnCSVClickExtension(this AssetFinderWindowAll win...
    method CacheAllDrawers (line 90) | internal static void CacheAllDrawers(this AssetFinderWindowAll window)
    method RefreshShowUsageType (line 105) | internal static void RefreshShowUsageType(this AssetFinderWindowAll wi...
    method RefreshSort (line 116) | internal static void RefreshSort(this AssetFinderWindowAll window)

FILE: VirtueSky/AssetFinder/Editor/Script/Extensions/CollectionExtensions.cs
  class CollectionExtensions (line 5) | internal static class CollectionExtensions
    method ToHashSet (line 7) | internal static HashSet<T> ToHashSet<T>(this IEnumerable<T> collection)

FILE: VirtueSky/AssetFinder/Editor/Script/Extensions/ColorExtensions.cs
  class ColorExtensions (line 5) | internal static class ColorExtensions
    method Alpha (line 7) | internal static Color Alpha(this Color c, float alpha)

FILE: VirtueSky/AssetFinder/Editor/Script/Extensions/DictionaryExtensions.cs
  class DictionaryExtensions (line 6) | internal static class DictionaryExtensions
    method GetValueOrDefault (line 11) | internal static TValue GetValueOrDefault<TKey, TValue>(this Dictionary...
    method TryGetValueOrAdd (line 17) | internal static TValue TryGetValueOrAdd<TKey, TValue>(this Dictionary<...

FILE: VirtueSky/AssetFinder/Editor/Script/Extensions/GameObjectExtensions.cs
  class GameObjectExtensions (line 9) | internal static class GameObjectExtensions
    method GetAllChildren (line 11) | internal static IEnumerable<GameObject> GetAllChildren(this GameObject...
    method GetAllChildTransforms (line 34) | internal static IEnumerable<Transform> GetAllChildTransforms(this Tran...
    method GetAllGameObjectsInCurrentScenes (line 48) | internal static IEnumerable<GameObject> GetAllGameObjectsInCurrentScen...
    method GetAllGameObjects (line 82) | internal static IEnumerable<GameObject> GetAllGameObjects(this Scene s...
    method InitializeOrClear (line 102) | internal static void InitializeOrClear<T>(ref List<T> list)
    method InitializeOrClear (line 114) | internal static void InitializeOrClear<TKey, TValue>(ref Dictionary<TK...

FILE: VirtueSky/AssetFinder/Editor/Script/Extensions/RectExtensions.cs
  class RectExtensions (line 5) | internal static class RectExtensions
    method HzSplit (line 7) | internal static (Rect, Rect) HzSplit(this Rect r, float space = 8f, fl...
    method ExtractLeft (line 15) | internal static (Rect left, Rect flex) ExtractLeft(this Rect r, float ...
    method ExtractRight (line 22) | internal static (Rect right, Rect flex) ExtractRight(this Rect r, floa...
    method LPad (line 29) | internal static Rect LPad(this Rect r, float padding = 8f, bool padCon...
    method RPad (line 34) | internal static Rect RPad(this Rect r, float padding = 8f, bool padCon...
    method Pad (line 39) | internal static Rect Pad(this Rect r, float padLeft = 8f, float padRig...
    method Move (line 44) | internal static Rect Move(this Rect r, float dx = 0f, float dy = 0f)
    method SetHeight (line 49) | internal static Rect SetHeight(this Rect r, float h)
    method SetWidth (line 54) | internal static Rect SetWidth(this Rect r, float w)

FILE: VirtueSky/AssetFinder/Editor/Script/Extensions/RectGUIExtensions.cs
  class RectGUIExtensions (line 7) | internal static class RectGUIExtensions
    method OnRightClick (line 9) | internal static Rect OnRightClick(this Rect rect, Action onRightClick,...
    method OnLeftClick (line 24) | internal static Rect OnLeftClick(this Rect rect, Action onClick, float...
    method OnDoubleClick (line 39) | internal static Rect OnDoubleClick(this Rect rect, Action onDoubleClic...

FILE: VirtueSky/AssetFinder/Editor/Script/Extensions/SerializedObjectExtensions.cs
  class SerializedObjectExtensions (line 8) | internal static class SerializedObjectExtensions
    method GetAllObjectReferences (line 10) | internal static IEnumerable<UnityObject> GetAllObjectReferences(this S...
    method GetAllObjectReferences (line 22) | internal static IEnumerable<UnityObject> GetAllObjectReferences(this C...
    method GetAllObjectReferences (line 33) | internal static IEnumerable<UnityObject> GetAllObjectReferences(this G...
    method GetAllProperties (line 47) | internal static SerializedProperty[] GetAllProperties(this SerializedO...
    method GetArrayProperties (line 70) | private static List<SerializedProperty> GetArrayProperties(SerializedP...

FILE: VirtueSky/AssetFinder/Editor/Script/Extensions/TabExtensions.cs
  class TabExtensions (line 5) | internal static class TabExtensions
    method IsFocusing (line 7) | internal static bool IsFocusing(this AssetFinderTabView tabView, int i...
    method IsFocusingAny (line 12) | internal static bool IsFocusingAny(this AssetFinderTabView tabView, pa...

FILE: VirtueSky/AssetFinder/Editor/Script/Extensions/UnityObjectExtensions.cs
  class UnityObjectExtensions (line 9) | internal static class UnityObjectExtensions
    method IsSceneObject (line 11) | public static bool IsSceneObject(this UnityObject obj)
    method IsAssetObject (line 17) | public static bool IsAssetObject(this UnityObject obj)
    method GetGameObjectFromTarget (line 22) | internal static GameObject GetGameObjectFromTarget(this UnityObject ta...

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/Addressable/AssetFinderAddressable.ASMStatus.cs
  class AssetFinderAddressable (line 3) | public static partial class AssetFinderAddressable
    type ASMStatus (line 5) | public enum ASMStatus

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/Addressable/AssetFinderAddressable.AddressInfo.cs
  class AssetFinderAddressable (line 5) | public static partial class AssetFinderAddressable
    class AddressInfo (line 7) | [Serializable]

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/Addressable/AssetFinderAddressable.ProjectStatus.cs
  class AssetFinderAddressable (line 3) | public static partial class AssetFinderAddressable
    type ProjectStatus (line 5) | public enum ProjectStatus

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/Addressable/AssetFinderAddressable.cs
  class AssetFinderAddressable (line 8) | public static partial class AssetFinderAddressable
    method AssetFinderAddressable (line 22) | static AssetFinderAddressable()
    method Scan (line 32) | public static void Scan()
    method GetAssembly (line 69) | private static Assembly GetAssembly()
    method GetAddressableType (line 83) | private static Type GetAddressableType(string typeName)
    method GetAddresses (line 92) | public static Dictionary<string, AddressInfo> GetAddresses()
    method AppendChildGUIDs (line 164) | private static void AppendChildGUIDs(HashSet<string> h, string guid)

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/AssetFinderCSV.cs
  class AssetFinderCSV (line 7) | internal class AssetFinderCSV
    method GetCSVRow (line 10) | public static string GetCSVRow(AssetFinderRef r, params string[] suffi...
    method GetCSVTitle (line 79) | public static string GetCSVTitle()
    method GetCSVRows (line 118) | public static string GetCSVRows(AssetFinderRef[] source)

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/AssetFinderExport.cs
  class AssetFinderExport (line 12) | internal class AssetFinderExport
    method ExportCSV (line 23) | public static void ExportCSV(AssetFinderRef[] csvSource)
    method DebugDetails (line 37) | [MenuItem("Assets/AssetFinder/Debug details", false, 19)]
    method Ignore (line 62) | [MenuItem("Assets/AssetFinder/Toggle Ignore", false, 19)]
    method CopyGUID (line 87) | [MenuItem("Assets/AssetFinder/Copy GUID", false, 20)]
    method ExportSelection (line 95) | [MenuItem("Assets/AssetFinder/Export Selection", false, 21)]
    method SelectDependencies_wtme (line 107) | [MenuItem("Assets/AssetFinder/Select Dependencies (assets I use)", fal...
    method ForceRefreshSelection (line 119) | [MenuItem("Assets/AssetFinder/Refresh")]
    method SelectDependencies_wme (line 148) | [MenuItem("Assets/AssetFinder/Select Dependencies included me", false,...
    method SelectUsed_wtme (line 161) | [MenuItem("Assets/AssetFinder/Select Used (assets used me)", false, 24)]
    method SelectUsed_wme (line 173) | [MenuItem("Assets/AssetFinder/Select Used included me", false, 25)]
    method ExportDependencies (line 185) | [MenuItem("Assets/AssetFinder/Export Dependencies", false, 40)]
    method ExportAsset (line 201) | [MenuItem("Assets/AssetFinder/Export Assets (no scripts)", false, 41)]
    method MergeDuplicate (line 222) | public static void MergeDuplicate(string guid_file)
    method ApplicationUpdate (line 403) | private static void ApplicationUpdate()
    method SelectDependencies (line 513) | private static void SelectDependencies(bool includeMe)
    method SelectUsed (line 528) | private static void SelectUsed(bool includeMe)
    method AddToDict (line 546) | internal static void AddToDict(Dictionary<string, Object> dict, params...
    method GetSelectionDependencies (line 559) | private static List<Object> GetSelectionDependencies()
    class ProcessReplaceData (line 576) | private class ProcessReplaceData
    class ReplaceData (line 582) | private class ReplaceData

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/AssetFinderSceneCache.cs
  class SceneRefInfo (line 24) | internal class SceneRefInfo : IEquatable<SceneRefInfo>
    method GetTargetComponent (line 32) | public Object GetTargetComponent() => target;
    method GetGameObjectFromTarget (line 33) | public GameObject GetGameObjectFromTarget()
    method Equals (line 41) | public bool Equals(SceneRefInfo other)
    method Equals (line 49) | public override bool Equals(object obj)
    method GetHashCode (line 54) | public override int GetHashCode()
  type SceneCacheStatus (line 66) | internal enum SceneCacheStatus
  type SceneChangeFlags (line 74) | [Flags]
  class AssetFinderSceneCache (line 84) | internal class AssetFinderSceneCache
    method AssetFinderSceneCache (line 107) | public AssetFinderSceneCache()
    method RefreshCache (line 185) | public void RefreshCache(bool force)
    method PerformFullRefresh (line 242) | private void PerformFullRefresh()
    method PerformIncrementalRefresh (line 292) | private void PerformIncrementalRefresh()
    method OnUpdate (line 375) | private void OnUpdate()
    method OnPlayModeStateChanged (line 448) | private void OnPlayModeStateChanged(PlayModeStateChange state)
    method OnSceneChanged (line 471) | private void OnSceneChanged()
    method OnModify (line 562) | private UndoPropertyModification[] OnModify(UndoPropertyModification[]...
    method SetDirty (line 598) | public void SetDirty()
    method ForceRefresh (line 616) | public void ForceRefresh()
    method StopScanning (line 623) | private void StopScanning(SceneCacheStatus updatedStatus)
    method FindSceneUseSceneObjects (line 634) | public static Dictionary<string, AssetFinderRef> FindSceneUseSceneObje...
    method FindSceneBackwardReferences (line 654) | public static Dictionary<string, AssetFinderRef> FindSceneBackwardRefe...
    method FindSceneInScene (line 673) | public static Dictionary<string, AssetFinderRef> FindSceneInScene(Game...
    method ScanForwardReferences (line 688) | private static void ScanForwardReferences(GameObject selectedGO, Dicti...
    method ScanBackwardReferences (line 731) | private static void ScanBackwardReferences(HashSet<GameObject> selecte...
    method ScanSceneInScene (line 770) | private static void ScanSceneInScene(GameObject[] objs, Dictionary<str...
    method GetGameObjectFromTarget (line 813) | private static GameObject GetGameObjectFromTarget(Object target)
    class HashValue (line 821) | internal class HashValue : IEquatable<HashValue>
      method Equals (line 829) | public bool Equals(HashValue other)
      method Equals (line 839) | public override bool Equals(object obj) => Equals(obj as HashValue);
      method GetHashCode (line 841) | public override int GetHashCode()
    method OnSceneChanged (line 858) | private void OnSceneChanged(Scene scene, LoadSceneMode mode)
    method OnSceneChanged (line 863) | private void OnSceneChanged(Scene arg0, Scene arg1)

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/AssetFinderSelection.cs
  class AssetFinderSelection (line 9) | internal class AssetFinderSelection : IRefDraw
    method AssetFinderSelection (line 21) | public AssetFinderSelection(IWindow window, Func<AssetFinderRefDrawer....
    method ElementCount (line 57) | public int ElementCount()
    method DrawLayout (line 62) | public bool DrawLayout()
    method Draw (line 68) | public bool Draw(Rect rect)
    method Add (line 76) | public void Add(UnityObject sceneObject)
    method Add (line 84) | public void Add(string guid)
    method AddRange (line 98) | public void AddRange(params string[] guids)
    method Remove (line 107) | public void Remove(UnityObject sceneObject)
    method Remove (line 115) | public void Remove(string guidOrInstID)
    method Clear (line 123) | public void Clear()
    method Add (line 130) | public void Add(AssetFinderRef rf)
    method Remove (line 141) | public void Remove(AssetFinderRef rf)
    method SetDirty (line 152) | public void SetDirty()
    method SyncFromGlobalSelection (line 159) | public void SyncFromGlobalSelection()
    method GetUnityObjects (line 184) | public UnityObject[] GetUnityObjects()
    method SetUnityObjects (line 212) | public void SetUnityObjects(UnityObject[] objects)
    method RefreshView (line 245) | public void RefreshView()

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/Lightmap/AssetFinderLightmap.EnlightenRendererInformation.cs
  class AssetFinderLightmap (line 6) | internal static partial class AssetFinderLightmap
    type EnlightenRendererInformation (line 8) | [Serializable]

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/Lightmap/AssetFinderLightmap.EnlightenSceneMapping.cs
  class AssetFinderLightmap (line 5) | internal static partial class AssetFinderLightmap
    class EnlightenSceneMapping (line 7) | [Serializable]

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/Lightmap/AssetFinderLightmap.EnlightenSystemAtlasInformation.cs
  class AssetFinderLightmap (line 5) | internal static partial class AssetFinderLightmap
    type EnlightenSystemAtlasInformation (line 7) | [Serializable]

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/Lightmap/AssetFinderLightmap.EnlightenSystemInformation.cs
  class AssetFinderLightmap (line 5) | internal static partial class AssetFinderLightmap
    type EnlightenSystemInformation (line 7) | [Serializable]

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/Lightmap/AssetFinderLightmap.EnlightenTerrainChunksInformation.cs
  class AssetFinderLightmap (line 4) | internal static partial class AssetFinderLightmap
    type EnlightenTerrainChunksInformation (line 6) | [Serializable]

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/Lightmap/AssetFinderLightmap.LightBakingOutput.cs
  class AssetFinderLightmap (line 5) | internal static partial class AssetFinderLightmap
    type LightBakingOutput (line 7) | [Serializable]
      type LightmapBakeMode (line 16) | [Serializable]

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/Lightmap/AssetFinderLightmap.LightingDataAssetRoot.cs
  class AssetFinderLightmap (line 7) | internal static partial class AssetFinderLightmap
    class LightingDataAssetRoot (line 9) | [Serializable]
      type SerializedData (line 14) | [Serializable]

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/Lightmap/AssetFinderLightmap.LightmapData.cs
  class AssetFinderLightmap (line 5) | internal static partial class AssetFinderLightmap
    type LightmapData (line 7) | [Serializable]

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/Lightmap/AssetFinderLightmap.RendererData.cs
  class AssetFinderLightmap (line 5) | internal static partial class AssetFinderLightmap
    type RendererData (line 7) | [Serializable]

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/Lightmap/AssetFinderLightmap.SceneObjectIdentifier.cs
  class AssetFinderLightmap (line 5) | internal static partial class AssetFinderLightmap
    type SceneObjectIdentifier (line 7) | [Serializable]
      method SceneObjectIdentifier (line 14) | public SceneObjectIdentifier(GlobalObjectId id)
      method Equals (line 22) | public bool Equals(SceneObjectIdentifier other)

FILE: VirtueSky/AssetFinder/Editor/Script/Modules/Lightmap/AssetFinderLightmap.cs
  class AssetFinderLightmap (line 10) | internal static partial class AssetFinderLightmap
    method Read (line 12) | public static IEnumerable<Texture> Read(LightingDataAsset source)

FILE: VirtueSky/AssetFinder/Editor/Script/Monitor/AssetFinderCacheHelper.cs
  class AssetFinderCacheHelper (line 8) | [InitializeOnLoad]
    method AssetFinderCacheHelper (line 15) | static AssetFinderCacheHelper()
    method OnPostprocessAllAssets (line 28) | private static void OnPostprocessAllAssets(
    method InitHelper (line 133) | internal static void InitHelper()
    method CheckGitStatus (line 162) | private static void CheckGitStatus(bool force)
    method InitIgnore (line 170) | public static void InitIgnore()
    method InitListScene (line 182) | private static void InitListScene()
    method OnGUIProjectInstance (line 198) | private static void OnGUIProjectInstance(int instanceID, Rect selectio...
    method OnGUIProjectItem (line 229) | private static void OnGUIProjectItem(string guid, Rect rect)
    method DrawProjectItem (line 236) | private static void DrawProjectItem(string guid, Rect rect)

FILE: VirtueSky/AssetFinder/Editor/Script/TreeUI/AssetFinderRef.cs
  class AssetFinderRef (line 9) | internal class AssetFinderRef
    method AssetFinderRef (line 28) | public AssetFinderRef()
    method AssetFinderRef (line 31) | public AssetFinderRef(int index, int depth, AssetFinderAsset asset, As...
    method AssetFinderRef (line 44) | public AssetFinderRef(int index, int depth, AssetFinderAsset asset, As...
    method CSVSorter (line 51) | private static int CSVSorter(AssetFinderRef item1, AssetFinderRef item2)
    method FromDict (line 63) | public static AssetFinderRef[] FromDict(Dictionary<string, AssetFinder...
    method FromList (line 83) | public static AssetFinderRef[] FromList(List<AssetFinderRef> list)
    method ToString (line 97) | public override string ToString()
    method GetSceneObjId (line 108) | public string GetSceneObjId()
    method isSelected (line 115) | public virtual bool isSelected()
    method DrawToogleSelect (line 119) | public virtual void DrawToogleSelect(Rect r)
    method Append (line 186) | internal List<AssetFinderRef> Append(Dictionary<string, AssetFinderRef...
    method AppendUsedBy (line 214) | internal void AppendUsedBy(Dictionary<string, AssetFinderRef> result, ...
    method AppendUsage (line 255) | internal void AppendUsage(Dictionary<string, AssetFinderRef> result, b...
    method FindRefs (line 287) | internal static Dictionary<string, AssetFinderRef> FindRefs(string[] g...
    method FindUsage (line 333) | public static Dictionary<string, AssetFinderRef> FindUsage(string[] gu...
    method FindUsedBy (line 338) | public static Dictionary<string, AssetFinderRef> FindUsedBy(string[] g...
    method FindUsageScene (line 343) | public static Dictionary<string, AssetFinderRef> FindUsageScene(GameOb...
    method AppendUsageScene (line 374) | private static void AppendUsageScene(Dictionary<string, AssetFinderRef...

FILE: VirtueSky/AssetFinder/Editor/Script/TreeUI/AssetFinderRefDrawer.Mode.cs
  class AssetFinderRefDrawer (line 3) | internal partial class AssetFinderRefDrawer
    type Mode (line 5) | public enum Mode

FILE: VirtueSky/AssetFinder/Editor/Script/TreeUI/AssetFinderRefDrawer.Sort.cs
  class AssetFinderRefDrawer (line 3) | internal partial class AssetFinderRefDrawer
    type Sort (line 5) | public enum Sort

FILE: VirtueSky/AssetFinder/Editor/Script/TreeUI/AssetFinderRefDrawer.cs
  class AssetFinderRefDrawer (line 9) | internal partial class AssetFinderRefDrawer : IRefDraw
    class RefDrawerConfig (line 11) | internal class RefDrawerConfig
    class AssetDrawingConfig (line 24) | internal class AssetDrawingConfig : RefDrawerConfig
    class SceneDrawingConfig (line 33) | internal class SceneDrawingConfig : RefDrawerConfig
    method AssetFinderRefDrawer (line 87) | public AssetFinderRefDrawer(RefDrawerConfig config)
    method Draw (line 106) | public bool Draw(Rect rect)
    method DrawLayout (line 131) | public bool DrawLayout()
    method ElementCount (line 150) | public int ElementCount()
    method DrawEmpty (line 159) | private void DrawEmpty(Rect rect, string text)
    method SetRefs (line 173) | public void SetRefs(Dictionary<string, AssetFinderRef> dictRefs)
    method SetupRefCallbacks (line 184) | private void SetupRefCallbacks()
    method ValidateRefs (line 199) | void ValidateRefs(Dictionary<string, AssetFinderRef> dictRefs)
    method SetBookmarkGroup (line 214) | private void SetBookmarkGroup(string groupLabel, bool willbookmark)
    method GetBMInfo (line 237) | private BookmarkInfo GetBMInfo(string groupLabel)
    method DrawToggleGroup (line 264) | private void DrawToggleGroup(Rect r, string groupLabel)
    method DrawGroup (line 277) | private void DrawGroup(Rect r, string label, int childCount)
    method DrawDetails (line 320) | public void DrawDetails(Rect rect)
    method DrawAsset (line 346) | private void DrawAsset(Rect r, string guid)
    method GetGroup (line 433) | private string GetGroup(AssetFinderRef rf)
    method SortGroup (line 488) | private void SortGroup(List<string> groups)
    method Reset (line 499) | public AssetFinderRefDrawer Reset(string[] assetGUIDs, bool isUsage) /...
    method Reset (line 515) | public void Reset(Dictionary<string, AssetFinderRef> newRefs)
    method Reset (line 534) | public AssetFinderRefDrawer Reset(GameObject[] objs, bool findDept, bo...
    method Reset (line 594) | public AssetFinderRefDrawer Reset(string[] assetGUIDs)
    method SetRefInScene (line 607) | private void SetRefInScene(Dictionary<string, AssetFinderRef> data)
    method ResetSceneInScene (line 616) | public AssetFinderRefDrawer ResetSceneInScene(GameObject[] objs)
    method ResetSceneUseSceneObjects (line 629) | public AssetFinderRefDrawer ResetSceneUseSceneObjects(GameObject[] objs)
    method ResetUnusedAsset (line 642) | public AssetFinderRefDrawer ResetUnusedAsset(bool recursive = true)
    method RefreshSort (line 658) | public void RefreshSort()
    method isExclueAnyItem (line 714) | public bool isExclueAnyItem()
    method ApplyFilter (line 719) | private void ApplyFilter()
    method SetDirty (line 775) | public void SetDirty()
    method InvalidateGroupCache (line 781) | public void InvalidateGroupCache()
    method GetGroupForRef (line 787) | public string GetGroupForRef(AssetFinderRef rf)
    method ToggleAllItems (line 792) | public void ToggleAllItems()
    method ToggleGroupItems (line 826) | public void ToggleGroupItems(string groupLabel)
    method SetGroupItemsState (line 849) | public void SetGroupItemsState(string groupLabel, bool willBookmark)
    method HandleRefCtrlClick (line 870) | private void HandleRefCtrlClick(AssetFinderRef rf)
    method HandleRefAltClick (line 892) | private void HandleRefAltClick(AssetFinderRef rf)
    method HandleRefShiftClick (line 902) | private void HandleRefShiftClick(AssetFinderRef rf)
    method ClearSelection (line 908) | public void ClearSelection()
    method SortAsset (line 916) | private int SortAsset(string term11, string term12, string term21, str...
    method getRefs (line 927) | public Dictionary<string, AssetFinderRef> getRefs()
    class BookmarkInfo (line 932) | internal class BookmarkInfo

FILE: VirtueSky/AssetFinder/Editor/Script/TreeUI/AssetFinderSceneRef.cs
  class AssetFinderSceneRef (line 10) | internal class AssetFinderSceneRef : AssetFinderRef
    method AssetFinderSceneRef (line 28) | public AssetFinderSceneRef(int index, int depth, AssetFinderAsset asse...
    method AssetFinderSceneRef (line 39) | public AssetFinderSceneRef(int depth, UnityObject target) : base(0, de...
    method InitializeTargetInfo (line 49) | void InitializeTargetInfo(UnityObject target)
    method isSelected (line 85) | public override bool isSelected()
    method Draw (line 90) | public void Draw(Rect r, AssetFinderRefDrawer.Mode groupMode, bool sho...
    method GetTargetIcon (line 173) | (Texture icon, string tooltip) GetTargetIcon()
    method DrawTargetIcon (line 185) | void DrawTargetIcon(Rect iconRect, Texture icon, string iconTooltip)
    method DrawScenePath (line 194) | void DrawScenePath(Rect pathRect, bool drawFullPath)
    method DrawTargetName (line 204) | void DrawTargetName(Rect nameRect, GUIContent displayContent)
    method DrawTargetType (line 216) | void DrawTargetType(Rect typeRect, GUIContent typeContent)
    method DrawReferenceIcons (line 228) | void DrawReferenceIcons(Rect r)
    method DrawComponentIcons (line 248) | void DrawComponentIcons(Rect r, List<SceneRefInfo> refInfos, Action<Sc...
    method BeautifyPropertyPath (line 307) | string BeautifyPropertyPath(string propertyPath)
    method DrawPingRect (line 318) | void DrawPingRect(Rect pingRect)
    method FindSceneUseSceneObjects (line 350) | public static Dictionary<string, AssetFinderRef> FindSceneUseSceneObje...
    method FindSceneBackwardReferences (line 355) | public static Dictionary<string, AssetFinderRef> FindSceneBackwardRefe...
    method FindSceneInScene (line 360) | public static Dictionary<string, AssetFinderRef> FindSceneInScene(Game...
    method FindRefInScene (line 365) | public static Dictionary<string, AssetFinderRef> FindRefInScene(
    method FindRefInScene (line 383) | private static void FindRefInScene()
    method ApplyFilter (line 401) | private static void ApplyFilter(Dictionary<string, AssetFinderRef> ref...
    method Add (line 437) | private static void Add(Dictionary<string, AssetFinderRef> refs, Asset...
    method Add (line 443) | private static void Add(Dictionary<string, AssetFinderRef> refs, Unity...

FILE: VirtueSky/AssetFinder/Editor/Script/TreeUI/AssetFinderTreeUI2.cs
  class AssetFinderTreeUI2 (line 8) | internal class AssetFinderTreeUI2
    method AssetFinderTreeUI2 (line 17) | public AssetFinderTreeUI2(Drawer drawer)
    method Reset (line 22) | public void Reset(params string[] root)
    method Draw (line 41) | public void Draw(Rect rect)
    method DrawLayout (line 68) | public void DrawLayout()
    method NoScroll (line 79) | public bool NoScroll()
    class Drawer (line 86) | internal class Drawer
      method GetHeight (line 88) | public virtual int GetHeight(string id)
      method GetChildCount (line 93) | public virtual int GetChildCount(string id)
      method GetChildren (line 98) | public virtual string[] GetChildren(string id)
      method Draw (line 103) | public virtual void Draw(Rect r, TreeItem item)
    class GroupDrawer (line 109) | internal class GroupDrawer : Drawer
      method GroupDrawer (line 118) | public GroupDrawer(Action<Rect, string, int> drawGroup, Action<Rect,...
      method TreeNoScroll (line 129) | public bool TreeNoScroll()
      method Reset (line 135) | public void Reset<T>(
      method Draw (line 183) | public void Draw(Rect r)
      method DrawLayout (line 188) | public void DrawLayout()
      method GetChildCount (line 195) | public override int GetChildCount(string id)
      method GetChildren (line 202) | public override string[] GetChildren(string id)
      method Draw (line 209) | public override void Draw(Rect r, TreeItem item)
    class TreeItem (line 223) | internal class TreeItem
      method DeepOpen (line 279) | internal void DeepOpen()
      method Draw (line 290) | internal void Draw(ref int index, ref Rect rect, int minY, int maxY)
      method RefreshChildren (line 342) | internal void RefreshChildren(string[] childrenIDs)

FILE: VirtueSky/AssetFinder/Editor/Script/UI/AssetFinderDeleteButton.cs
  class AssetFinderDeleteButton (line 6) | internal class AssetFinderDeleteButton
    method Draw (line 13) | public bool Draw(Action onConfirmDelete)

FILE: VirtueSky/AssetFinder/Editor/Script/UI/AssetFinderEnumDrawer.cs
  class AssetFinderEnumDrawer (line 7) | internal class AssetFinderEnumDrawer
    method DrawLayout (line 14) | public bool DrawLayout<T>(ref T enumValue, params GUILayoutOption[] op...
    method Draw (line 40) | public bool Draw<T>(Rect rect, ref T enumValue)
    class EnumInfo (line 68) | internal class EnumInfo
      method EnumInfo (line 73) | public EnumInfo(Type enumType)
      method EnumInfo (line 85) | public EnumInfo(params object[] enumValues)
      method Get (line 94) | public static EnumInfo Get(Type type)
      method IndexOf (line 106) | public int IndexOf(object enumValue)
      method ValueAt (line 111) | public object ValueAt(int index)

FILE: VirtueSky/AssetFinder/Editor/Script/UI/AssetFinderGUIContent.cs
  class AssetFinderGUIContent (line 7) | internal static class AssetFinderGUIContent
    method Release (line 17) | public static void Release()
    method FromString (line 23) | public static GUIContent FromString(string title, string tooltip = null)
    method FromType (line 37) | public static GUIContent FromType(Type t, string tooltip = null)
    method Tooltip (line 45) | public static GUIContent Tooltip(string tooltip)
    method From (line 53) | public static GUIContent From(object data)
    method FromInt (line 62) | public static GUIContent FromInt(int val)
    method FromTexture (line 72) | public static GUIContent FromTexture(Texture tex, string tooltip = null)
    method From (line 80) | public static GUIContent From(string title, Texture tex, string toolti...
    method FromArrayLabelIcon (line 88) | public static GUIContent[] FromArrayLabelIcon(params object[] data)
    method FromArray (line 98) | public static GUIContent[] FromArray(params object[] data)
    method FromEnum (line 127) | public static GUIContent[] FromEnum(Type enumType)

FILE: VirtueSky/AssetFinder/Editor/Script/UI/AssetFinderIcon.cs
  class AssetFinderIcon (line 7) | internal static class AssetFinderIcon
    method TryGet (line 71) | private static GUIContent TryGet(string id, string tooltip = null)

FILE: VirtueSky/AssetFinder/Editor/Script/UI/AssetFinderObjectDrawer.cs
  class AssetFinderObjectDrawer (line 8) | internal class AssetFinderObjectDrawer
    method DrawOnly (line 13) | public void DrawOnly(Rect rect, UnityObject target)

FILE: VirtueSky/AssetFinder/Editor/Script/UI/AssetFinderSearchView.cs
  class AssetFinderSearchView (line 5) | internal class AssetFinderSearchView
    method InitSearchStyle (line 14) | public static void InitSearchStyle()
    method DrawLayout (line 21) | public bool DrawLayout()

FILE: VirtueSky/AssetFinder/Editor/Script/UI/AssetFinderSplitView.cs
  class AssetFinderSplitView (line 10) | internal class AssetFinderSplitView
    method AssetFinderSplitView (line 33) | public AssetFinderSplitView(IWindow w)
    method CalculateWeight (line 40) | public void CalculateWeight()
    method Draw (line 73) | public void Draw(Rect rect)
    method ApplySizePolicies (line 123) | private void ApplySizePolicies()
    method DrawLayout (line 185) | public void DrawLayout()
    method RefreshSpliterPos (line 195) | private void RefreshSpliterPos(int index, float px)
    method DrawSpliter (line 237) | private void DrawSpliter(int index, float px)
    method StartLayout (line 270) | private Rect StartLayout(bool horz)
    method EndLayout (line 277) | private void EndLayout(bool horz)
    class Info (line 288) | [Serializable]
      type SizePolicy (line 300) | public enum SizePolicy { Flexible, KeepPixel }
      method DoDraw (line 314) | public void DoDraw()

FILE: VirtueSky/AssetFinder/Editor/Script/UI/AssetFinderTabView.cs
  class DrawCallback (line 7) | internal class DrawCallback
  class AssetFinderTabView (line 13) | internal class AssetFinderTabView
    method AssetFinderTabView (line 32) | public AssetFinderTabView(IWindow w, bool canDeselectAll)
    method DrawLayout (line 38) | public bool DrawLayout()
    method FromEnum (line 112) | public static AssetFinderTabView FromEnum(Type enumType, IWindow w, bo...
    method GetGUIContent (line 125) | public static GUIContent GetGUIContent(object tex)
    method Create (line 133) | public static AssetFinderTabView Create(IWindow w, bool canDeselectAll...

FILE: VirtueSky/AssetFinder/Editor/Script/UI/AssetFinderToggleList.cs
  class AssetFinderToggleList (line 6) | internal class AssetFinderToggleList
    method AddInfo (line 12) | public AssetFinderToggleList AddInfo(GUIContent content, bool status, ...
    method AddInfo (line 21) | public AssetFinderToggleList AddInfo(GUIContent contentOn, GUIContent ...
    method AddInfo (line 29) | public AssetFinderToggleList AddInfo(GUIContent content, Action<bool> ...
    method AddInfo (line 38) | public AssetFinderToggleList AddInfo(GUIContent content, float w = 20)
    method Draw (line 47) | public void Draw(ref Rect rect)
    method Draw (line 65) | public void Draw(ref Rect rect, int index, ref bool b1)
    class Info (line 81) | internal class Info

FILE: VirtueSky/AssetFinder/Editor/Script/UI/Theme/AssetFinderTheme.Dark.cs
  class AssetFinderTheme (line 5) | partial class AssetFinderTheme
    method CreateDarkTheme (line 7) | private static AssetFinderTheme CreateDarkTheme()

FILE: VirtueSky/AssetFinder/Editor/Script/UI/Theme/AssetFinderTheme.Light.cs
  class AssetFinderTheme (line 5) | partial class AssetFinderTheme
    method CreateLightTheme (line 7) | private static AssetFinderTheme CreateLightTheme()

FILE: VirtueSky/AssetFinder/Editor/Script/UI/Theme/AssetFinderTheme.cs
  class AssetFinderTheme (line 6) | internal partial class AssetFinderTheme
    method AssetFinderTheme (line 12) | private AssetFinderTheme()
    method InitializeLayoutOptions (line 17) | private void InitializeLayoutOptions()
    method GetProgressBarRect (line 88) | public Rect GetProgressBarRect()
    method GetRefreshButtonRect (line 93) | public Rect GetRefreshButtonRect(Rect parentRect)

FILE: VirtueSky/AssetFinder/Editor/Script/Window/AssetFinderWindowAll.CacheManager.cs
  class AssetFinderWindowAll (line 9) | internal partial class AssetFinderWindowAll
    method DrawScanProject (line 11) | protected void DrawScanProject()
    method CheckDrawImport (line 28) | protected bool CheckDrawImport()

FILE: VirtueSky/AssetFinder/Editor/Script/Window/AssetFinderWindowAll.Drawing.cs
  class AssetFinderWindowAll (line 9) | internal partial class AssetFinderWindowAll
    method DrawScenePanel (line 11) | private void DrawScenePanel(Rect rect)
    method DrawSceneCacheProgress (line 28) | private void DrawSceneCacheProgress(Rect rect)
    method DrawAssetPanel (line 75) | private void DrawAssetPanel(Rect rect)
    method DrawGitWarningPanel (line 90) | private void DrawGitWarningPanel()
    method DrawToolsWarningPanel (line 120) | private void DrawToolsWarningPanel()
    method DrawButton (line 134) | internal bool DrawButton(Rect rect, ref bool show, GUIContent icon)
    method DrawAssetViewSettings (line 161) | internal void DrawAssetViewSettings()
    method DrawViewModes (line 181) | internal void DrawViewModes(Rect rect)

FILE: VirtueSky/AssetFinder/Editor/Script/Window/AssetFinderWindowAll.GuidManager.cs
  class AssetFinderWindowAll (line 9) | internal partial class AssetFinderWindowAll
    method DrawGUIDs (line 17) | private void DrawGUIDs()

FILE: VirtueSky/AssetFinder/Editor/Script/Window/AssetFinderWindowAll.Initialization.cs
  class AssetFinderWindowAll (line 9) | internal partial class AssetFinderWindowAll
    method InitializeComponents (line 11) | private void InitializeComponents()
    method RefreshActiveTab (line 44) | void RefreshActiveTab()
    method InitializeNavigationHistory (line 75) | private void InitializeNavigationHistory()
    method InitializeSelectionManager (line 81) | private void InitializeSelectionManager()
    method InitializeDrawers (line 87) | private void InitializeDrawers()
    method InitializeTools (line 229) | private void InitializeTools()
    method InitializeUIComponents (line 237) | private void InitializeUIComponents()
    method OnLocalSelectionChanged (line 276) | private void OnLocalSelectionChanged()
    method InitializeDrawerProperties (line 287) | private void InitializeDrawerProperties()
    method InitPanes (line 296) | private void InitPanes()
    method InitTabs (line 374) | private void InitTabs()

FILE: VirtueSky/AssetFinder/Editor/Script/Window/AssetFinderWindowAll.PanelSettings.cs
  class AssetFinderWindowAll (line 5) | partial class AssetFinderWindowAll
    class PanelSettings (line 7) | [Serializable] internal class PanelSettings

FILE: VirtueSky/AssetFinder/Editor/Script/Window/AssetFinderWindowAll.SelectionManager.cs
  class AssetFinderWindowAll (line 10) | internal partial class AssetFinderWindowAll
    method OnSelectionManagerChanged (line 16) | private void OnSelectionManagerChanged()
    method OnDisableSelectionManager (line 66) | private void OnDisableSelectionManager()
    method OnSelectionChange (line 71) | public override void OnSelectionChange()
    method OnPanelSelectionChanged (line 76) | void OnPanelSelectionChanged()
    method SetFR2Selection (line 152) | internal void SetFR2Selection(UnityObject[] objects)
    method GetFR2Selection (line 167) | internal UnityObject[] GetFR2Selection()
    method RefreshFR2View (line 172) | private void RefreshFR2View()
    method OnSceneChanged (line 221) | private void OnSceneChanged(Scene arg0, Scene arg1)

FILE: VirtueSky/AssetFinder/Editor/Script/Window/AssetFinderWindowAll.SettingsPanel.cs
  class AssetFinderWindowAll (line 9) | internal partial class AssetFinderWindowAll
    method DrawSettings (line 11) | private void DrawSettings()
    method DrawMainSettings (line 46) | private void DrawMainSettings()
    method DrawGitSettings (line 68) | private void DrawGitSettings()
    method DrawIgnoreSettings (line 91) | private void DrawIgnoreSettings()
    method DrawFilterSettings (line 99) | private void DrawFilterSettings()

FILE: VirtueSky/AssetFinder/Editor/Script/Window/AssetFinderWindowAll.ToolsPanel.cs
  class AssetFinderWindowAll (line 9) | internal partial class AssetFinderWindowAll
    method DrawTools (line 13) | private void DrawTools()
    method DrawUnusedAssetsPanel (line 46) | private void DrawUnusedAssetsPanel()
    method DrawOthersPanel (line 87) | private void DrawOthersPanel()

FILE: VirtueSky/AssetFinder/Editor/Script/Window/AssetFinderWindowAll.UILayout.cs
  class AssetFinderWindowAll (line 9) | internal partial class AssetFinderWindowAll
    method OnCSVClickExtension (line 13) | private void OnCSVClickExtension()
    method RefreshPanelVisible (line 27) | private void RefreshPanelVisible()
    method RefreshShowFullPath (line 38) | private void RefreshShowFullPath()
    method RefreshShowFileSize (line 49) | private void RefreshShowFileSize()
    method RefreshShowFileExtension (line 60) | private void RefreshShowFileExtension()
    method MarkDirty (line 69) | private void MarkDirty()
    method RefreshSort (line 84) | private void RefreshSort()
    method GetAssetDrawer (line 104) | private AssetFinderRefDrawer GetAssetDrawer()

FILE: VirtueSky/AssetFinder/Editor/Script/Window/AssetFinderWindowAll.cs
  class AssetFinderWindowAll (line 11) | internal partial class AssetFinderWindowAll : AssetFinderWindowBase, IHa...
    method ShowWindow (line 15) | [MenuItem("Sunflower/Asset Finder/Show Window %#K")]
    method GetSceneContextInfo (line 61) | private string GetSceneContextInfo()
    method Reload (line 106) | public void Reload()
    method GetScenePanelTitle (line 111) | private GUIContent GetScenePanelTitle()
    method GetAssetPanelTitle (line 151) | private GUIContent GetAssetPanelTitle()
    method ScenePanelHasContent (line 185) | private bool ScenePanelHasContent()
    method AssetPanelHasContent (line 197) | private bool AssetPanelHasContent()
    method BookmarkPanelHasContent (line 206) | private bool BookmarkPanelHasContent()
    method IsScenePanelDirty (line 211) | private bool IsScenePanelDirty()
    method IsAssetPanelDirty (line 221) | private bool IsAssetPanelDirty()
    method HasUnscannedAssets (line 236) | private bool HasUnscannedAssets()
    method GetSceneStatusMessage (line 253) | private string GetSceneStatusMessage()
    method GetAssetStatusMessage (line 270) | private string GetAssetStatusMessage()
    method RefreshContextualMessages (line 315) | private void RefreshContextualMessages()
    method ClearAllCachedUIElements (line 332) | private void ClearAllCachedUIElements()
    method GenerateContextualMessage (line 344) | private string GenerateContextualMessage(UnityObject[] objects, string...
    method GenerateBasicMessage (line 403) | private string GenerateBasicMessage(UnityObject[] objects, string acti...
    method GenerateSelectionSummary (line 513) | private string GenerateSelectionSummary(UnityObject[] objects)
    method GetFriendlyTypeName (line 549) | private string GetFriendlyTypeName(UnityObject obj)
    method GetPluralTypeName (line 587) | private string GetPluralTypeName(string typeName, int count)
    method GetAssetScanStatus (line 615) | private (bool isNonScannable, bool needsScanning, bool isDirty) GetAss...
    method GetMultipleAssetsScanStatus (line 642) | private (bool allUnscanned, bool allDirty, bool hasMixed) GetMultipleA...
    method AreSelectionsEqual (line 689) | private static bool AreSelectionsEqual(UnityObject[] selection1, Unity...
    method OnEnable (line 700) | private void OnEnable()
    method OnDisable (line 718) | private void OnDisable()
    method OnFocus (line 732) | private void OnFocus()
    method RegisterSceneCacheCallbacks (line 737) | private void RegisterSceneCacheCallbacks()
    method UnregisterSceneCacheCallbacks (line 743) | private void UnregisterSceneCacheCallbacks()
    method OnSceneCacheReady (line 748) | private void OnSceneCacheReady()
    method OnAssetCacheReady (line 768) | private void OnAssetCacheReady()
    method UpdateSceneCacheAutoRefresh (line 776) | private void UpdateSceneCacheAutoRefresh()
    method InitIfNeeded (line 781) | protected void InitIfNeeded()
    method ValidateLockedSelection (line 787) | private bool ValidateLockedSelection()
    method UnlockAndSyncSelection (line 816) | private void UnlockAndSyncSelection()
    method DrawScene (line 858) | private void DrawScene(Rect rect)
    method DrawAsset (line 863) | private void DrawAsset(Rect rect)
    method DrawSearch (line 868) | private void DrawSearch()
    method DrawSelectionPanel (line 874) | private void DrawSelectionPanel(Rect rect)
    method DrawDetailsPanel (line 880) | private void DrawDetailsPanel(Rect rect)
    method GetActiveDrawer (line 893) | private AssetFinderRefDrawer GetActiveDrawer()
    method OnGUI (line 906) | protected override void OnGUI()
    method ToggleDetailsPanel (line 912) | internal void ToggleDetailsPanel()
    method OnTabChange (line 943) | private void OnTabChange()
    method DrawFooter (line 960) | protected bool DrawFooter()
    method OnGUI2 (line 994) | protected void OnGUI2()
    method StorePanelPixels (line 1071) | private void StorePanelPixels()

FILE: VirtueSky/AssetFinder/Editor/Script/Window/AssetFinderWindowBase.cs
  class AssetFinderWindowBase (line 6) | public abstract class AssetFinderWindowBase : EditorWindow, IWindow
    method AddItemsToMenu (line 14) | public void AddItemsToMenu(GenericMenu menu)
    method AddToCustomMenu (line 50) | public abstract void AddToCustomMenu(GenericMenu menu);
    method OnSelectionChange (line 52) | public abstract void OnSelectionChange();
    method OnGUI (line 53) | protected abstract void OnGUI();
    method OnSceneChanged (line 56) | protected void OnSceneChanged(Scene arg0, Scene arg1)
    method DrawEnable (line 65) | protected bool DrawEnable()

FILE: VirtueSky/AssetFinder/Editor/Script/Window/IRefDraw.cs
  type IRefDraw (line 4) | internal interface IRefDraw
    method ElementCount (line 7) | int ElementCount();
    method DrawLayout (line 8) | bool DrawLayout();
    method Draw (line 9) | bool Draw(Rect rect);

FILE: VirtueSky/AssetFinder/Editor/Script/Window/IWindow.cs
  type IWindow (line 3) | public interface IWindow
    method Repaint (line 6) | void Repaint();

FILE: VirtueSky/AssetFinder/Editor/v2/AssetFinder.cs
  class AssetFileInfo (line 6) | internal class AssetFileInfo
    method AssetFileInfo (line 16) | public AssetFileInfo(string guid)
  class AssetFolder (line 35) | internal class AssetFolder
    method Get (line 41) | public static AssetFolder Get(string guid)
    method Create (line 45) | public static AssetFolder Create(string guid)

FILE: VirtueSky/AssetFinder/Editor/v2/Core/AssetFinderAssetDB.cs
  class AssetFinderAssetDB (line 9) | [Serializable] internal class AssetFinderAssetDB
    method GetAssetByGUID (line 18) | internal AssetFinderAssetFile GetAssetByGUID(string guid)
    method AddAsset (line 22) | private AssetFinderAssetFile AddAsset(string guid)
    method GetAsset (line 32) | internal AssetFinderAssetFile GetAsset(AssetFinderID id)
    method Clear (line 37) | internal AssetFinderAssetDB Clear()
    method Scan (line 45) | internal void Scan(bool force = false)
    method ReadContent (line 71) | internal void ReadContent()
    method FinishReadContent (line 78) | void FinishReadContent()
    method BuildCache (line 93) | internal void BuildCache()
    method TS_ReadFileContent (line 131) | internal void TS_ReadFileContent(int index)

FILE: VirtueSky/AssetFinder/Editor/v2/Core/AssetFinderAssetFile.cs
  class AssetFinderAssetFile (line 9) | [Serializable] internal class AssetFinderAssetFile
    method AssetFinderAssetFile (line 23) | public AssetFinderAssetFile()
    method AssetFinderAssetFile (line 25) | public AssetFinderAssetFile(string guid, int assetIndex)
    method Get (line 31) | internal int Get(long fileId)
    method Add (line 35) | internal int Add(long fileId)
    method GetSubDetail (line 43) | internal SubAssetDetail GetSubDetail(long fileId)
    method LoadAllSubAssetsIfNeeded (line 48) | public void LoadAllSubAssetsIfNeeded()
    method LoadAllSubAssets (line 55) | private void LoadAllSubAssets()

FILE: VirtueSky/AssetFinder/Editor/v2/Core/AssetFinderCacheAsset.cs
  class AssetFinderCacheAsset (line 9) | [CreateAssetMenu]
    method MarkAsDirty (line 16) | internal static void MarkAsDirty()
    method GetFile (line 22) | public static AssetFinderAssetFile GetFile(string guid) => _api.db.Get...
    method CollectUsage (line 24) | public static List<AssetFinderIDRef> CollectUsage(string guid, List<As...
    method CollectUsedBy (line 43) | public static List<AssetFinderIDRef> CollectUsedBy(string guid, long f...
    method GetGuidAndFileId (line 72) | public static (string guid, long fileId) GetGuidAndFileId(AssetFinderI...
    method Init (line 94) | internal static void Init(AssetFinderCacheAsset cache)
    method Scan (line 108) | [ContextMenu("Scan")]
    method BuildCache (line 116) | [ContextMenu("BuildCache")]
    method StartDebug (line 124) | [ContextMenu("Start Debug")]

FILE: VirtueSky/AssetFinder/Editor/v2/Core/AssetFinderID.cs
  type AssetFinderID (line 8) | [StructLayout(LayoutKind.Sequential)]
    method AssetFinderID (line 28) | private AssetFinderID(int pValue)
    method AssetFinderID (line 33) | public AssetFinderID(int mainIndex, int subIndex, bool isSceneObject)
    method WithoutSubAssetIndex (line 50) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method WithSubAssetIndex (line 53) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method GetHashCode (line 101) | public override int GetHashCode() => value;
    method Equals (line 102) | public bool Equals(AssetFinderID other) => value == other.value;
    method Equals (line 103) | public override bool Equals(object obj) => obj is AssetFinderID other ...
    method ToString (line 105) | public override string ToString() => IsSceneObject

FILE: VirtueSky/AssetFinder/Editor/v2/Core/AssetFinderIDRef.cs
  class AssetFinderIDRef (line 6) | [Serializable] internal class AssetFinderIDRef
    method ToString (line 15) | public override string ToString()

FILE: VirtueSky/AssetFinder/Editor/v2/Core/AssetFinderSceneObject.cs
  class AssetFinderSceneObject (line 3) | public class AssetFinderSceneObject

FILE: VirtueSky/AssetFinder/Editor/v2/Core/SubAssetDetail.cs
  type SubAssetType (line 10) | internal enum SubAssetType
  class SubAssetDetail (line 35) | [Serializable] internal class SubAssetDetail
    method SubAssetDetail (line 41) | public SubAssetDetail(long fileId, Object subAsset)
    method GetSubAssetType (line 79) | public static SubAssetType GetSubAssetType(Object subAsset)

FILE: VirtueSky/AssetFinder/Editor/v2/Drawer/AssetFinderAssetFileDrawer.cs
  class AssetFinderAssetFileDrawer (line 7) | [CustomPropertyDrawer(typeof(AssetFinderAssetFile))]
    method OnGUI (line 10) | public override void OnGUI(Rect position, SerializedProperty property,...
    method GetPropertyHeight (line 47) | public override float GetPropertyHeight(SerializedProperty property, G...

FILE: VirtueSky/AssetFinder/Editor/v2/Drawer/AssetFinderCacheAssetEditor.cs
  class AssetFinderCacheAssetEditor (line 9) | [CustomEditor(typeof(AssetFinderCacheAsset))]
    method OnInspectorGUI (line 17) | public override void OnInspectorGUI()
    method OnEnable (line 44) | private void OnEnable()
    method OnChangeSelection (line 50) | void OnChangeSelection()

FILE: VirtueSky/AssetFinder/Editor/v2/Drawer/AssetFinderIDDrawer.cs
  class AssetFinderIDDrawer (line 6) | [CustomPropertyDrawer(typeof(AssetFinderID))]
    method OnGUI (line 9) | public override void OnGUI(Rect position, SerializedProperty property,...

FILE: VirtueSky/AssetFinder/Editor/v2/GUI/AssetFinderAssetGUI.cs
  class AssetFinderAssetGUI (line 5) | public static class AssetFinderAssetGUI
    class DrawContext (line 7) | public class DrawContext
    method DrawAsset (line 16) | public static void DrawAsset(Rect rect, AssetFinderID id)
    method DrawId (line 23) | public static void DrawId(Rect rect, AssetFinderID fr2Id)
    method DrawGuid (line 37) | public static void DrawGuid(Rect rect, string guid)
    method DrawAsset (line 48) | public static void DrawAsset(Rect rect, string guid)

FILE: VirtueSky/AssetFinder/Editor/v2/GUI/AssetFinderAssetInfo.cs
  class AssetFinderAssetInfo (line 8) | public class AssetFinderAssetInfo
    method Get (line 12) | internal static AssetFinderAssetInfo Get(string guid) => infoMap.GetVa...
    method GetOrCreate (line 13) | internal static AssetFinderAssetInfo GetOrCreate(string guid) => infoM...
    method Clear (line 14) | internal static void Clear() => infoMap.Clear();
    method AssetFinderAssetInfo (line 28) | private AssetFinderAssetInfo(string guid)
    method RefreshGUIContent (line 39) | public void RefreshGUIContent()

FILE: VirtueSky/AssetFinder/Editor/v2/Parser/AssetFinderParser.BinaryAsset.cs
  class AssetFinderParser (line 13) | internal static partial class AssetFinderParser // BinaryAsset
    method Read_VerifyBinaryAsset (line 20) | private static bool Read_VerifyBinaryAsset(string assetPath)
    method ReadContent_BinaryAsset (line 37) | private static void ReadContent_BinaryAsset(string filePath, AddUsageC...

FILE: VirtueSky/AssetFinder/Editor/v2/Parser/AssetFinderParser.LightMap.cs
  class AssetFinderParser (line 6) | internal static partial class AssetFinderParser // LightMap
    method LoadLightingData (line 9) | internal static void LoadLightingData(this AssetFinderAsset asset, Lig...
    method Read_LightMap (line 14) | private static void Read_LightMap(LightingDataAsset asset, AddUsageCB ...

FILE: VirtueSky/AssetFinder/Editor/v2/Parser/AssetFinderParser.Model3D.cs
  class AssetFinderParser (line 10) | internal static partial class AssetFinderParser // Model3D
    method Read_Model3D (line 19) | private static void Read_Model3D(GameObject go, AddUsageCB callback)
    method LoadSerialized (line 28) | private static void LoadSerialized(UnityObject target, AddUsageCB call...

FILE: VirtueSky/AssetFinder/Editor/v2/Parser/AssetFinderParser.Shader.cs
  class AssetFinderParser (line 6) | internal static partial class AssetFinderParser // Shader
    method ReadContent_Shader (line 8) | private static void ReadContent_Shader(string filePath, Action<string,...
    method ParseLine_Shader (line 14) | private static (string guid, long fileId) ParseLine_Shader(string line)
    method ResolveShaderIncludePath (line 69) | private static string ResolveShaderIncludePath(string includePath)

FILE: VirtueSky/AssetFinder/Editor/v2/Parser/AssetFinderParser.ShaderGraph.cs
  class AssetFinderParser (line 6) | internal static partial class AssetFinderParser // ShaderGraph
    method ReadContent_ShaderGraph (line 15) | private static void ReadContent_ShaderGraph(string ext, string assetPa...
    method ParseLine_Json (line 21) | private static (string guid, long fileId) ParseLine_Json(string line)

FILE: VirtueSky/AssetFinder/Editor/v2/Parser/AssetFinderParser.Terrain.cs
  class AssetFinderParser (line 8) | internal static partial class AssetFinderParser // Terrain
    method LoadTerrainData (line 11) | internal static void LoadTerrainData(this AssetFinderAsset asset, Terr...
    method Read_TerrainData (line 16) | private static void Read_TerrainData(TerrainData terrain, AddUsageCB c...

FILE: VirtueSky/AssetFinder/Editor/v2/Parser/AssetFinderParser.UIToolkit.cs
  class AssetFinderParser (line 9) | internal static partial class AssetFinderParser // UIToolkit
    method ReadContent_UIToolkit (line 19) | private static void ReadContent_UIToolkit(string ext, string assetPath...
    method ParseLine_Uxml_Uss (line 25) | private static (string guid, long fileId) ParseLine_Uxml_Uss(string line)
    method ResolveProjectDatabasePath (line 107) | private static string ResolveProjectDatabasePath(string path)
    method ResolveResourcePath (line 136) | private static string ResolveResourcePath(string resourcePath)
    method ParseLine_Tss (line 168) | private static (string guid, long fileId) ParseLine_Tss(string line)

FILE: VirtueSky/AssetFinder/Editor/v2/Parser/AssetFinderParser.Yaml.cs
  class AssetFinderParser (line 7) | internal static partial class AssetFinderParser // Yaml
    method ReadContent_YAML (line 18) | private static void ReadContent_YAML(string filePath, Action<string, l...
    method ParseLine_Yaml (line 32) | private static (string guid, long fileId) ParseLine_Yaml(string line)

FILE: VirtueSky/AssetFinder/Editor/v2/Parser/AssetFinderParser.cs
  class AssetFinderParser (line 15) | internal static partial class AssetFinderParser
    method IsReadable (line 33) | public static bool IsReadable(string assetPath)
    method IsReadableExtension (line 38) | public static bool IsReadableExtension(string ext)
    method LogWarning (line 47) | [Conditional("AssetFinderPARSER_DEBUG")]
    method Log (line 51) | [Conditional("AssetFinderPARSER_DEBUG")]
    method ReadContent (line 55) | public static void ReadContent(string filePath, AddUsageCB callback)
    method AddObjectUsage (line 97) | private static void AddObjectUsage(UnityEngine.Object refObj, AddUsage...
    method Read (line 106) | private static void Read(string filePath, Func<string, (string, long)>...
    method ExtractGuid (line 142) | private static string ExtractGuid(string line)
    method IsHexChar (line 170) | private static bool IsHexChar(char c)
    method FindRef (line 177) | private static (string guid, long fileId) FindRef(string source, strin...
    method Find (line 192) | private static string Find(string source, string str_begin, string str...
  class AssetFinderParser (line 94) | internal static partial class AssetFinderParser
    method IsReadable (line 33) | public static bool IsReadable(string assetPath)
    method IsReadableExtension (line 38) | public static bool IsReadableExtension(string ext)
    method LogWarning (line 47) | [Conditional("AssetFinderPARSER_DEBUG")]
    method Log (line 51) | [Conditional("AssetFinderPARSER_DEBUG")]
    method ReadContent (line 55) | public static void ReadContent(string filePath, AddUsageCB callback)
    method AddObjectUsage (line 97) | private static void AddObjectUsage(UnityEngine.Object refObj, AddUsage...
    method Read (line 106) | private static void Read(string filePath, Func<string, (string, long)>...
    method ExtractGuid (line 142) | private static string ExtractGuid(string line)
    method IsHexChar (line 170) | private static bool IsHexChar(char c)
    method FindRef (line 177) | private static (string guid, long fileId) FindRef(string source, strin...
    method Find (line 192) | private static string Find(string source, string str_begin, string str...

FILE: VirtueSky/AssetFinder/Editor/v2/UI/AssetRefUI.cs
  class AssetRefUI (line 8) | internal class AssetRefUI : FileUI
    method GetIcon (line 11) | private Texture2D GetIcon(SubAssetType subType)
    method CacheIcon (line 21) | public static void CacheIcon()
    method LoadIcon (line 45) | private static Texture2D LoadIcon(string iconName, string fallbackIcon...
    method AssetRefUI (line 58) | public AssetRefUI(string guid, string path, List<long> localIds):base(...
    method DrawSubDetails (line 70) | public void DrawSubDetails(Rect rect, SubAssetDetail detail)
    method Draw (line 89) | public void Draw(ref Rect rect)

FILE: VirtueSky/AssetFinder/Editor/v2/UI/AssetUI.cs
  class AssetUI (line 8) | public abstract partial class AssetUI
    method Get (line 14) | internal static AssetUI Get(string guid, bool autoNew = false)
    method Get (line 28) | internal static T Get<T>(string guid, bool autoNew = false) where T: A...
    method RefreshPath (line 39) | public void RefreshPath()
    method AssetUI (line 64) | protected AssetUI(string guid, string path)
    method DrawGuid (line 128) | public bool DrawGuid(ref Rect rect)
    method DrawAssetPath (line 146) | public void DrawAssetPath(ref Rect rect)
    method DrawAsset (line 159) | public void DrawAsset(ref Rect rect, bool withExt, bool withPath)
  class AssetNameContent (line 71) | internal class AssetNameContent
    method Clear (line 80) | internal void Clear()
    method Refresh (line 88) | internal void Refresh(string path)
  class AssetPathContent (line 101) | internal class AssetPathContent
    method Clear (line 106) | internal void Clear()
    method Refresh (line 112) | internal void Refresh(string path)
  class AssetUI (line 122) | partial class AssetUI // GUID Content
    method Get (line 14) | internal static AssetUI Get(string guid, bool autoNew = false)
    method Get (line 28) | internal static T Get<T>(string guid, bool autoNew = false) where T: A...
    method RefreshPath (line 39) | public void RefreshPath()
    method AssetUI (line 64) | protected AssetUI(string guid, string path)
    method DrawGuid (line 128) | public bool DrawGuid(ref Rect rect)
    method DrawAssetPath (line 146) | public void DrawAssetPath(ref Rect rect)
    method DrawAsset (line 159) | public void DrawAsset(ref Rect rect, bool withExt, bool withPath)
  class AssetUI (line 141) | partial class AssetUI
    method Get (line 14) | internal static AssetUI Get(string guid, bool autoNew = false)
    method Get (line 28) | internal static T Get<T>(string guid, bool autoNew = false) where T: A...
    method RefreshPath (line 39) | public void RefreshPath()
    method AssetUI (line 64) | protected AssetUI(string guid, string path)
    method DrawGuid (line 128) | public bool DrawGuid(ref Rect rect)
    method DrawAssetPath (line 146) | public void DrawAssetPath(ref Rect rect)
    method DrawAsset (line 159) | public void DrawAsset(ref Rect rect, bool withExt, bool withPath)

FILE: VirtueSky/AssetFinder/Editor/v2/UI/FileUI.cs
  class FileUI (line 3) | internal class FileUI : AssetUI
    method FileUI (line 5) | internal FileUI(string guid, string path) : base(guid, path){}

FILE: VirtueSky/AssetFinder/Editor/v2/UI/FolderUI.cs
  class FolderUI (line 4) | internal class FolderUI : AssetUI
    method FolderUI (line 6) | internal FolderUI(string guid, string path) : base(guid, path){}

FILE: VirtueSky/AssetFinder/Editor/v2/Unity/AssetFinderInitializer.cs
  class AssetFinderInitializer (line 6) | public static class AssetFinderInitializer
    method Init (line 8) | [InitializeOnLoadMethod]
    method OnPlayModeStateChanged (line 21) | private static void OnPlayModeStateChanged(PlayModeStateChange state)
    method Reload (line 39) | static void Reload()
    method DelayInit (line 53) | static void DelayInit()

FILE: VirtueSky/AssetFinder/Editor/v2/Unity/AssetFinderTerrain.cs
  class AssetFinderTerrain (line 9) | internal static class AssetFinderTerrain
    class TerrainTextureData (line 11) | [Serializable] internal class TerrainTextureData
      method TerrainTextureData (line 14) | public TerrainTextureData(params Texture2D[] param)
    method ReplaceTerrainTextureDatas (line 27) | internal static int ReplaceTerrainTextureDatas(TerrainData terrain, Te...
    method GetTerrainTextureDatas (line 76) | internal static TerrainTextureData[] GetTerrainTextureDatas(TerrainDat...

FILE: VirtueSky/AssetFinder/Editor/v2/Unity/AssetFinderUSelection.cs
  class AssetFinderUSelection (line 6) | public static class AssetFinderUSelection
    method StartDebugReference (line 10) | internal static void StartDebugReference()
    method StopDebugReference (line 16) | internal static void StopDebugReference()
    method DebugAssetReference (line 21) | private static void DebugAssetReference()

FILE: VirtueSky/AssetFinder/Editor/v2/Utils/AssetFinderTimeSlice.cs
  class AssetFinderTimeSlice (line 9) | public class AssetFinderTimeSlice
    method AssetFinderTimeSlice (line 18) | public AssetFinderTimeSlice(Func<int> countFunc, Action<int> action, A...
    method Start (line 25) | public void Start()
    method Stop (line 31) | public void Stop()
    method ProcessQueue (line 36) | private void ProcessQueue()

FILE: VirtueSky/Audio/Editor/AudioWindowEditor.cs
  class AudioWindowEditor (line 8) | public class AudioWindowEditor : EditorWindow
    method CreateSoundData (line 10) | public static void CreateSoundData()
    method CreatePlayMusicEvent (line 18) | public static void CreatePlayMusicEvent()
    method CreatePauseMusicEvent (line 23) | public static void CreatePauseMusicEvent()
    method CreateResumeMusicEvent (line 28) | public static void CreateResumeMusicEvent()
    method CreateStopMusicEvent (line 34) | public static void CreateStopMusicEvent()
    method CreatePlaySfxEvent (line 43) | public static void CreatePlaySfxEvent()
    method CreatePauseSfxEvent (line 48) | public static void CreatePauseSfxEvent()
    method CreateFinishSfxEvent (line 53) | public static void CreateFinishSfxEvent()
    method CreateResumeSfxEvent (line 58) | public static void CreateResumeSfxEvent()
    method CreateStopSfxEvent (line 63) | public static void CreateStopSfxEvent()
    method CreateStopAllSfxEvent (line 68) | public static void CreateStopAllSfxEvent()
    method CreateMusicVolume (line 77) | public static void CreateMusicVolume()
    method CreateSfxVolume (line 82) | public static void CreateSfxVolume()

FILE: VirtueSky/Audio/Editor/EditorAudioPreview.cs
  class EditorAudioPreview (line 8) | internal static class EditorAudioPreview
    method EditorAudioPreview (line 20) | static EditorAudioPreview()
    method Play (line 42) | public static void Play(AudioClip clip, bool loop = false, int startSa...
    method Stop (line 51) | public static void Stop(AudioClip clip = null)
    method IsPlaying (line 57) | public static bool IsPlaying(AudioClip clip = null)

FILE: VirtueSky/Audio/Editor/SoundDataEditor.cs
  class SoundDataEditor (line 10) | [CustomEditor(typeof(SoundData))]
    method SetExternalRepaintCallback (line 29) | public void SetExternalRepaintCallback(Action callback)
    method OnEnable (line 37) | void OnEnable()
    method OnDisable (line 43) | void OnDisable()
    method RequestRepaint (line 54) | void RequestRepaint()
    method StyleLabel (line 60) | GUIStyle StyleLabel()
    method OnInspectorGUI (line 68) | public override void OnInspectorGUI()
    method DrawPreview (line 78) | void DrawPreview()
    method OnEditorUpdate (line 147) | void OnEditorUpdate()
    method GetAudioPreviewPosition (line 199) | float GetAudioPreviewPosition(AudioClip clip)
    method DrawTimeline (line 234) | void DrawTimeline(AudioClip clip)
    method DrawTransport (line 261) | void DrawTransport(AudioClip clip)
    method HasLoop (line 369) | bool HasLoop() => loopA >= 0f && loopB >= 0f && !Mathf.Approximately(l...
    method HandleLaneInput (line 371) | void HandleLaneInput(Rect r, float len)
    method DrawTicks (line 425) | void DrawTicks(Rect r, float total)
    method NiceStep (line 451) | float NiceStep(float total)
    method TimeToPixel (line 460) | float TimeToPixel(Rect r, float start, float end, float t)
    method PixelToTime (line 466) | float PixelToTime(Rect r, float start, float end, float px)
    method TimeRangeToRect (line 472) | Rect TimeRangeToRect(Rect r, float start, float end, float a, float b)
    method DrawBorder (line 479) | void DrawBorder(Rect r, Color c)

FILE: VirtueSky/Audio/Runtime/AudioHelper.cs
  class AudioHelper (line 3) | public static class AudioHelper
    method PlaySfx (line 5) | public static SoundCache PlaySfx(this SoundData soundData, PlaySfxEven...
    method PauseSfx (line 6) | public static void PauseSfx(this SoundCache soundCache, PauseSfxEvent ...
    method StopSfx (line 7) | public static void StopSfx(this SoundCache soundCache, StopSfxEvent st...
    method ResumeSfx (line 8) | public static void ResumeSfx(this SoundCache soundCache, ResumeSfxEven...
    method FinishSfx (line 9) | public static void FinishSfx(this SoundCache soundCache, FinishSfxEven...
    method StopAllSfx (line 10) | public static void StopAllSfx(this StopAllSfxEvent stopAllSfxEvent) =>...
    method PlayMusic (line 12) | public static void PlayMusic(this SoundData soundData, PlayMusicEvent ...
    method StopMusic (line 13) | public static void StopMusic(this StopMusicEvent stopMusicEvent) => st...
    method PauseMusic (line 14) | public static void PauseMusic(this PauseMusicEvent pauseMusicEvent) =>...
    method ResumeMusic (line 15) | public static void ResumeMusic(this ResumeMusicEvent resumeMusicEvent)...

FILE: VirtueSky/Audio/Runtime/AudioManager.cs
  class AudioManager (line 16) | [EditorIcon("icon_sound_mixer"), HideMonoScript]
    method Awake (line 51) | private void Awake()
    method OnEnable (line 62) | public override void OnEnable()
    method OnDisable (line 78) | public override void OnDisable()
    method OnMusicVolumeChanged (line 94) | void OnMusicVolumeChanged(float volume)
    method OnSfxVolumeChanged (line 102) | void OnSfxVolumeChanged(float volume)
    method PlaySfx (line 112) | private SoundCache PlaySfx(SoundData soundData)
    method StopSfx (line 124) | private void StopSfx(SoundCache soundCache)
    method PauseSfx (line 131) | private void PauseSfx(SoundCache soundCache)
    method ResumeSfx (line 138) | private void ResumeSfx(SoundCache soundCache)
    method FinishSfx (line 145) | private void FinishSfx(SoundCache soundCache)
    method StopAllSfx (line 153) | private void StopAllSfx()
    method PlayMusic (line 171) | private void PlayMusic(SoundData soundData)
    method StopMusic (line 183) | private void StopMusic()
    method PauseMusic (line 192) | private void PauseMusic()
    method ResumeMusic (line 200) | private void ResumeMusic()
    method OnFinishPlayingAudio (line 211) | void OnFinishPlayingAudio(SoundComponent soundComponent)
    method StopAndCleanAudioComponent (line 216) | void StopAndCleanAudioComponent(SoundComponent soundComponent)
    method StopAudioMusic (line 228) | void StopAudioMusic(SoundComponent soundComponent)
    method GetSoundComponent (line 234) | SoundComponent GetSoundComponent(SoundCache soundCache)
    method GetSoundCache (line 246) | SoundCache GetSoundCache(SoundData soundData)
    method Reset (line 253) | private void Reset()

FILE: VirtueSky/Audio/Runtime/Music_Event/PauseMusicEvent.cs
  class PauseMusicEvent (line 7) | [CreateAssetMenu(menuName = "Sunflower/Audio/Music Event/Pause Music Eve...

FILE: VirtueSky/Audio/Runtime/Music_Event/PlayMusicEvent.cs
  class PlayMusicEvent (line 7) | [CreateAssetMenu(menuName = "Sunflower/Audio/Music Event/Play Music Even...

FILE: VirtueSky/Audio/Runtime/Music_Event/ResumeMusicEvent.cs
  class ResumeMusicEvent (line 7) | [CreateAssetMenu(menuName = "Sunflower/Audio/Music Event/Resume Music Ev...

FILE: VirtueSky/Audio/Runtime/Music_Event/StopMusicEvent.cs
  class StopMusicEvent (line 7) | [CreateAssetMenu(menuName = "Sunflower/Audio/Music Event/Stop Music Even...

FILE: VirtueSky/Audio/Runtime/Sfx_Event/FinishSfxEvent.cs
  class FinishSfxEvent (line 7) | [CreateAssetMenu(menuName = "Sunflower/Audio/Sfx Event/Finish Sfx Event"...

FILE: VirtueSky/Audio/Runtime/Sfx_Event/PauseSfxEvent.cs
  class PauseSfxEvent (line 7) | [CreateAssetMenu(menuName = "Sunflower/Audio/Sfx Event/Pause Sfx Event",...

FILE: VirtueSky/Audio/Runtime/Sfx_Event/PlaySfxEvent.cs
  class PlaySfxEvent (line 7) | [CreateAssetMenu(menuName = "Sunflower/Audio/Sfx Event/Play Sfx Event", ...

FILE: VirtueSky/Audio/Runtime/Sfx_Event/ResumeSfxEvent.cs
  class ResumeSfxEvent (line 7) | [CreateAssetMenu(menuName = "Sunflower/Audio/Sfx Event/Resume Sfx Event"...

FILE: VirtueSky/Audio/Runtime/Sfx_Event/StopAllSfxEvent.cs
  class StopAllSfxEvent (line 7) | [CreateAssetMenu(menuName = "Sunflower/Audio/Sfx Event/Stop All Sfx Even...

FILE: VirtueSky/Audio/Runtime/Sfx_Event/StopSfxEvent.cs
  class StopSfxEvent (line 7) | [CreateAssetMenu(menuName = "Sunflower/Audio/Sfx Event/Stop Sfx Event", ...

FILE: VirtueSky/Audio/Runtime/SoundCache.cs
  class SoundCache (line 5) | [Serializable]
    method SoundCache (line 11) | public SoundCache(int _key, SoundData _soundData)

FILE: VirtueSky/Audio/Runtime/SoundComponent.cs
  class SoundComponent (line 10) | [RequireComponent(typeof(AudioSource))]
    method Awake (line 36) | private void Awake()
    method PlayAudioClip (line 41) | internal void PlayAudioClip(AudioClip audioClip, bool isLooping, float...
    method FadeInVolumeMusic (line 60) | void FadeInVolumeMusic(AudioClip audioClip, bool isLooping, float endV...
    method FadeOutVolumeMusic (line 66) | void FadeOutVolumeMusic(float duration, Action fadeCompleted)
    method Resume (line 72) | internal void Resume()
    method Pause (line 78) | internal void Pause()
    method Stop (line 84) | internal void Stop()
    method Finish (line 90) | internal void Finish()
    method FadePlayMusic (line 98) | internal void FadePlayMusic(AudioClip audioClip, bool isLooping, float...
    method OnCompletedInvoke (line 120) | private void OnCompletedInvoke()

FILE: VirtueSky/Audio/Runtime/SoundData.cs
  class SoundData (line 9) | [CreateAssetMenu(menuName = "Sunflower/Audio/Sound Data", fileName = "so...
    type GetType (line 13) | public enum GetType
    method AudioClips (line 36) | public List<AudioClip> AudioClips() => audioClips;
    method GetAudioClip (line 38) | public AudioClip GetAudioClip()
    method AddAudioClip (line 64) | public void AddAudioClip(AudioClip audioClip)
    method AddAudioClips (line 69) | public void AddAudioClips(List<AudioClip> clips)
    method AddAudioClips (line 74) | public void AddAudioClips(AudioClip[] clips)
    method ClearAudioClips (line 79) | public void ClearAudioClips()

FILE: VirtueSky/Audio/Runtime/Volume_Variable/MusicVolumeChange.cs
  class MusicVolumeChange (line 7) | [CreateAssetMenu(menuName = "Sunflower/Audio/Volume Change Variable/Musi...

FILE: VirtueSky/Audio/Runtime/Volume_Variable/SfxVolumeChange.cs
  class SfxVolumeChange (line 7) | [CreateAssetMenu(menuName = "Sunflower/Audio/Volume Change Variable/Sfx ...

FILE: VirtueSky/Button/Editor/ButtomCustomEditor.cs
  class ButtomCustomEditor (line 7) | [CustomEditor(typeof(ButtonCustom), true)]
    method OnEnable (line 24) | protected override void OnEnable()
    method OnInspectorGUI (line 40) | public override void OnInspectorGUI()
    method DrawSetting (line 52) | void DrawSetting()

FILE: VirtueSky/Button/Runtime/ButtonCustom.cs
  class ButtonCustom (line 19) | [EditorIcon("icon_button")]
    method OnEnable (line 44) | protected override void OnEnable()
    method OnDisable (line 50) | protected override void OnDisable()
    method OnPointerDown (line 57) | public override void OnPointerDown(PointerEventData eventData)
    method OnPointerUp (line 77) | public override void OnPointerUp(PointerEventData eventData)
    method OnPointerExit (line 83) | public override void OnPointerExit(PointerEventData eventData)
    method DoScale (line 89) | void DoScale()
    method Shrug (line 97) | void Shrug()
    method ResetScale (line 109) | void ResetScale()
    method Reset (line 118) | protected override void Reset()
    method GetClickButtonEvent (line 126) | public void GetClickButtonEvent()

FILE: VirtueSky/Button/Runtime/ButtonTMP.cs
  class ButtonTMP (line 7) | [RequireComponent(typeof(TextMeshProUGUI))]

FILE: VirtueSky/Button/Runtime/ButtonText.cs
  class ButtonText (line 7) | [RequireComponent(typeof(Text))]
    method Reset (line 12) | protected override void Reset()

FILE: VirtueSky/Button/Runtime/ButtonUI.cs
  class ButtonUI (line 7) | [RequireComponent(typeof(Image))]

FILE: VirtueSky/Button/Runtime/ButtonUI_TMP.cs
  class ButtonUI_TMP (line 8) | [RequireComponent(typeof(Image))]
    method Reset (line 13) | protected override void Reset()

FILE: VirtueSky/Button/Runtime/ButtonUI_Text.cs
  class ButtonUI_Text (line 7) | [RequireComponent(typeof(Image))]
    method Reset (line 12) | protected override void Reset()

FILE: VirtueSky/Component/AnimancerComponent/HandleAnimancerComponent.cs
  class HandleAnimancerComponent (line 9) | [RequireComponent(typeof(AnimancerComponent))]
    method IsPlaying (line 16) | public bool IsPlaying(ClipTransition clip) => animancerComponent.IsPla...
    method PlayAnim (line 18) | public void PlayAnim(ClipTransition clip, Action _endAnim = null, floa...
    method PauseClip (line 51) | public void PauseClip(ClipTransition clip)
    method PauseAll (line 57) | public void PauseAll()
    method StopClip (line 63) | public void StopClip(ClipTransition clip)
    method StopAll (line 73) | public void StopAll()
    method Reset (line 79) | private void Reset()

FILE: VirtueSky/Component/BounceComponent.cs
  class BounceComponent (line 7) | [EditorIcon("icon_csharp"), HideMonoScript]
    method OnEnable (line 20) | public override void OnEnable()
    method Pause (line 27) | public void Pause()
    method Resume (line 32) | public void Resume()
    method FixedTick (line 37) | public override void FixedTick()

FILE: VirtueSky/Component/Buoyancy2DComponent.cs
  class Buoyancy2DComponent (line 7) | [RequireComponent(typeof(Rigidbody2D))]
    method FixedTick (line 24) | public override void FixedTick()
    method SwitchState (line 51) | void SwitchState(bool isUnderwater)

FILE: VirtueSky/Component/BuoyancyComponent.cs
  class BuoyancyComponent (line 7) | [RequireComponent(typeof(Rigidbody))]
    method FixedTick (line 24) | public override void FixedTick()
    method SwitchState (line 51) | void SwitchState(bool isUnderwater)

FILE: VirtueSky/Component/EffectAppearComponent.cs
  class EffectAppearComponent (line 8) | [EditorIcon("icon_csharp"), HideMonoScript]
    method Awake (line 18) | public void Awake()
    method OnEnable (line 23) | public void OnEnable()
    method DoEffect (line 29) | public void DoEffect()
    method OnDisable (line 35) | public override void OnDisable()

FILE: VirtueSky/Component/EffectZoomInOutComponent.cs
  class EffectZoomInOutComponent (line 9) | [EditorIcon("icon_csharp"), HideMonoScript]
    method Awake (line 21) | public void Awake()
    method OnEnable (line 26) | public void OnEnable()
    method OnDisable (line 34) | private void OnDisable()
    method Stop (line 39) | public void Stop()
    method Play (line 45) | public void Play()
    method DoEffect (line 51) | public void DoEffect(float offsetScale, bool delay)

FILE: VirtueSky/Component/FollowTargetComponent.cs
  class FollowTargetComponent (line 8) | [EditorIcon("icon_csharp"), HideMonoScript]
    method Awake (line 89) | private void Awake()
    method SetTarget (line 99) | public void SetTarget(Transform t)
    method SetDirectionFollowTarget (line 104) | public void SetDirectionFollowTarget(DirectionFollowTarget d)
    method SetTypeFollowTarget (line 109) | public void SetTypeFollowTarget(TypeFollowTarget t)
    method LateTick (line 114) | public override void LateTick()
    method HandleSetPos (line 131) | private void HandleSetPos()
    method HandleLerp (line 160) | private void HandleLerp()
    method HandleSmoothDamp (line 190) | private void HandleSmoothDamp()
  type DirectionFollowTarget (line 221) | public enum DirectionFollowTarget
  type TypeFollowTarget (line 232) | public enum TypeFollowTarget

FILE: VirtueSky/Component/MoveComponent.cs
  class MoveComponent (line 9) | [EditorIcon("icon_csharp"), HideMonoScript]
    method Start (line 23) | void Start()
    method Tick (line 32) | public override void Tick()
    method StopMoving (line 69) | public void StopMoving()
    method ResumeMoving (line 74) | public void ResumeMoving()
    method ReverseMoving (line 79) | public void ReverseMoving()

FILE: VirtueSky/Component/ResizeCameraOrthographicComponent.cs
  class ResizeCameraOrthographicComponent (line 7) | [EditorIcon("icon_csharp"), HideMonoScript]
    method Awake (line 12) | protected override void Awake()

FILE: VirtueSky/Component/ResizeMatchCanvasScalerComponent.cs
  class ResizeMatchCanvasScalerComponent (line 8) | [EditorIcon("icon_csharp"), HideMonoScript]
    method Awake (line 15) | protected override void Awake()
    method GetCanvas (line 25) | void GetCanvas()
    method Reset (line 37) | protected override void Reset()

FILE: VirtueSky/Component/RotateComponent.cs
  class RotateComponent (line 8) | [EditorIcon("icon_csharp"), HideMonoScript]
    method Resume (line 20) | public void Resume()
    method Pause (line 25) | public void Pause()
    method FixedTick (line 30) | public override void FixedTick()

FILE: VirtueSky/Component/SafeAreaComponent.cs
  class SafeAreaComponent (line 14) | [HideMonoScript]
    type SimDevice (line 23) | public enum SimDevice
    method Awake (line 123) | void Awake()
    method Tick (line 136) | public override void Tick()
    method Refresh (line 142) | void Refresh()
    method GetSafeArea (line 161) | Rect GetSafeArea()
    method ApplySafeArea (line 206) | void ApplySafeArea(Rect r)

FILE: VirtueSky/Component/SkeletonComponent/AnimationSkeleton/AnimationSkeleton.cs
  class AnimationSkeleton (line 11) | public abstract class AnimationSkeleton : MonoBehaviour
    method Init (line 21) | public virtual void Init()
    method Initialize (line 26) | public abstract void Initialize(bool reload = false);
    method ChangeAnimationName (line 27) | public abstract void ChangeAnimationName(string animationName);
    method FlipX (line 28) | public abstract void FlipX(bool isFlipX = false);
    method FlipY (line 29) | public abstract void FlipY(bool isFlipY = false);
    method ChangeDataAsset (line 30) | public abstract void ChangeDataAsset(SkeletonDataAsset dataAsset);
    method AddAnimation (line 32) | public void AddAnimation(int trackIndex, string animationName, bool lo...
    method PlayAnimation (line 37) | public TrackEntry PlayAnimation(int trackIndex, string animationName, ...
    method RegisterEvent (line 47) | public void RegisterEvent(string eventName, Action actionEvent = null)
    method StopAnimation (line 59) | public void StopAnimation()
    method HandleAnimationStateEvent (line 64) | protected void HandleAnimationStateEvent(TrackEntry trackEntry, Spine....

FILE: VirtueSky/Component/SkeletonComponent/AnimationSkeleton/AnimationSkeletonComponent.cs
  class AnimationSkeletonComponent (line 8) | [RequireComponent(typeof(SkeletonAnimation))]
    method Init (line 15) | public override void Init()
    method Initialize (line 22) | public override void Initialize(bool reload = false)
    method ChangeAnimationName (line 27) | public override void ChangeAnimationName(string animationName)
    method FlipX (line 32) | public override void FlipX(bool isFlipX = false)
    method FlipY (line 37) | public override void FlipY(bool isFlipY = false)
    method ChangeDataAsset (line 42) | public override void ChangeDataAsset(SkeletonDataAsset dataAsset)
    method Reset (line 48) | private void Reset()

FILE: VirtueSky/Component/SkeletonComponent/AnimationSkeleton/AnimationSkeletonUIComponent.cs
  class AnimationSkeletonUIComponent (line 8) | [RequireComponent(typeof(SkeletonGraphic))]
    method Init (line 15) | public override void Init()
    method Initialize (line 22) | public override void Initialize(bool reload = false)
    method ChangeAnimationName (line 27) | public override void ChangeAnimationName(string animationName)
    method FlipX (line 32) | public override void FlipX(bool isFlipX = false)
    method FlipY (line 37) | public override void FlipY(bool isFlipY = false)
    method ChangeDataAsset (line 42) | public override void ChangeDataAsset(SkeletonDataAsset dataAsset)
    method Reset (line 48) | private void Reset()

FILE: VirtueSky/Component/SkeletonComponent/SkinSkeleton/SkinSkeleton.cs
  class SkinSkeleton (line 9) | public abstract class SkinSkeleton : MonoBehaviour
    method Init (line 16) | public abstract void Init();
    method MixSkin (line 18) | public virtual void MixSkin(string mixSkinName)
    method MixSkin (line 27) | public virtual void MixSkin(List<string> listMixSkinName)
    method MixNewSkin (line 42) | public virtual void MixNewSkin(string mixSkinName)
    method MixNewSkin (line 53) | public virtual void MixNewSkin(List<string> listMixSkinName)
    method SetSkin (line 70) | public virtual void SetSkin(string skinName)

FILE: VirtueSky/Component/SkeletonComponent/SkinSkeleton/SkinSkeletonComponent.cs
  class SkinSkeletonComponent (line 8) | [RequireComponent(typeof(SkeletonAnimation))]
    method Init (line 15) | public override void Init()
    method Reset (line 21) | private void Reset()

FILE: VirtueSky/Component/SkeletonComponent/SkinSkeleton/SkinSkeletonUIComponent.cs
  class SkinSkeletonUIComponent (line 9) | [RequireComponent(typeof(SkeletonGraphic))]
    method Init (line 15) | public override void Init()
    method Reset (line 21) | private void Reset()

FILE: VirtueSky/Component/TimeRemainingComponent.cs
  class TimeRemainingComponent (line 8) | [EditorIcon("icon_csharp"), HideMonoScript]
    method InitTargetTime (line 26) | public void InitTargetTime()
    method InitTargetTime (line 31) | public void InitTargetTime(int year, int month, int day, int hour, int...
    method GetTimeRemaining (line 36) | public TimeSpan GetTimeRemaining()

FILE: VirtueSky/ControlPanel/CPAboutDrawer.cs
  class CPAboutDrawer (line 8) | public class CPAboutDrawer
    method OnDrawAbout (line 10) | public static void OnDrawAbout(Rect position, Action drawSetting = null)

FILE: VirtueSky/ControlPanel/CPAdjustDrawer.cs
  class CPAdjustDrawer (line 8) | public class CPAdjustDrawer
    method OnEnable (line 13) | public static void OnEnable()
    method Init (line 18) | private static void Init()
    method OnDrawAdjust (line 26) | public static void OnDrawAdjust()

FILE: VirtueSky/ControlPanel/CPAdvertisingDrawer.cs
  class CPAdvertisingDrawer (line 9) | public class CPAdvertisingDrawer
    method OnEnable (line 16) | public static void OnEnable()
    method Init (line 21) | public static void Init()
    method OnDrawAdvertising (line 32) | public static void OnDrawAdvertising()
    method DrawDefineSymbols (line 89) | static void DrawDefineSymbols()
    method DrawInstallSdk (line 129) | static void DrawInstallSdk()

FILE: VirtueSky/ControlPanel/CPAppsFlyerDrawer.cs
  class CPAppsFlyerDrawer (line 8) | public class CPAppsFlyerDrawer
    method OnEnable (line 14) | public static void OnEnable()
    method Init (line 19) | private static void Init()
    method OnDrawAppsFlyer (line 26) | public static void OnDrawAppsFlyer()

FILE: VirtueSky/ControlPanel/CPAssetFinderDrawer.cs
  class CPAssetFinderDrawer (line 10) | public static class CPAssetFinderDrawer
    method OnDrawAssetUsageDetector (line 12) | public static void OnDrawAssetUsageDetector()

FILE: VirtueSky/ControlPanel/CPAudioDrawer.cs
  class CPAudioDrawer (line 11) | public static class CPAudioDrawer
    class LayoutConstants (line 14) | private static class LayoutConstants
    type AudioTab (line 31) | public enum AudioTab { Explore, Settings }
    method Initialize (line 56) | [UnityEditor.InitializeOnLoadMethod]
    method OnScriptsReloaded (line 62) | [UnityEditor.Callbacks.DidReloadScripts]
    method Cleanup (line 68) | private static void Cleanup()
    method DestroyTexture (line 81) | private static void DestroyTexture(ref Texture2D texture)
    method DestroyEditor (line 90) | private static void DestroyEditor(ref UnityEditor.Editor editor)
    method GetSoundDataAssets (line 101) | private static List<SoundData> GetSoundDataAssets()
    method RefreshSoundDataAssets (line 110) | private static void RefreshSoundDataAssets()
    method GetFilteredSoundDataAssets (line 131) | private static List<SoundData> GetFilteredSoundDataAssets()
    method InitializeStyles (line 144) | private static void InitializeStyles()
    method MakeBackgroundTexture (line 169) | private static Texture2D MakeBackgroundTexture(int size, Color color)
    method OnDrawAudio (line 186) | public static void OnDrawAudio(Rect position, EditorWindow ownerWindow)
    method DrawTab (line 214) | private static void DrawTab()
    method DrawExplore (line 237) | private static void DrawExplore(Rect position)
    method DrawLeftExplore (line 265) | private static void DrawLeftExplore()
    method DrawSearchBar (line 293) | private static void DrawSearchBar()
    method DrawQuickActions (line 320) | private static void DrawQuickActions()
    method DrawSoundDataButton (line 349) | private static void DrawSoundDataButton(SoundData soundData)
    method DrawNormalButton (line 361) | private static void DrawNormalButton(SoundData soundData)
    method DrawRenamingField (line 395) | private static void DrawRenamingField(SoundData soundData)
    method HandleRenameFieldEvents (line 417) | private static void HandleRenameFieldEvents()
    method StartRename (line 441) | private static void StartRename(SoundData soundData)
    method ConfirmRename (line 449) | private static void ConfirmRename(SoundData soundData)
    method CancelRename (line 480) | private static void CancelRename()
    method ShowSoundDataContextMenu (line 488) | private static void ShowSoundDataContextMenu(SoundData soundData)
    method SelectSoundData (line 538) | private static void SelectSoundData(SoundData soundData)
    method DrawRightExplore (line 547) | private static void DrawRightExplore()
    method DrawPingButton (line 567) | private static void DrawPingButton()
    method DrawSoundDataEditor (line 579) | private static void DrawSoundDataEditor()
    method HandleKeyboardInput (line 606) | private static void HandleKeyboardInput()
    method DrawSetting (line 683) | private static void DrawSetting(Rect position)
    method DrawSectionSeparator (line 694) | private static void DrawSectionSeparator(Rect position)
    method DrawCreateSoundDataSection (line 704) | private static void DrawCreateSoundDataSection()
    method DrawMusicEventSection (line 713) | private static void DrawMusicEventSection()
    method DrawSfxEventSection (line 724) | private static void DrawSfxEventSection()
    method DrawVolumeVariableSection (line 737) | private static void DrawVolumeVariableSection()
    method DrawButton (line 746) | private static void DrawButton(string label, System.Action onClick)

FILE: VirtueSky/ControlPanel/CPExtensionsDrawer.cs
  class CPExtensionsDrawer (line 11) | public static class CPExtensionsDrawer
    method OnDrawExtensions (line 13) | public static void OnDrawExtensions(Rect position)
    method OpenSdkPath (line 57) | static void OpenSdkPath()
    method OpenJdkPath (line 71) | static void OpenJdkPath()
    method OpenNdkPath (line 85) | static void OpenNdkPath()
    method OpenGradlePath (line 99) | static void OpenGradlePath()
    method OpenMonitor (line 113) | static void OpenMonitor()

FILE: VirtueSky/ControlPanel/CPFirebaseDrawer.cs
  class CPFirebaseDrawer (line 10) | public static class CPFirebaseDrawer
    method OnDrawFirebase (line 18) | public static void OnDrawFirebase(Rect position)
    method DrawInstallFirebase (line 61) | static void DrawInstallFirebase(Rect position)
    method DrawTracking (line 96) | static void DrawTracking(Rect position)
    method DrawDebugView (line 142) | static void DrawDebugView()
    method SetDebugView (line 174) | static void SetDebugView(string package)

FILE: VirtueSky/ControlPanel/CPFolderIconDrawer.cs
  class CPFolderIconDrawer (line 8) | public class CPFolderIconDrawer
    method OnEnable (line 14) | public static void OnEnable()
    method Init (line 19) | private static void Init()
    method OnDrawFolderIcon (line 30) | public static void OnDrawFolderIcon()

FILE: VirtueSky/ControlPanel/CPGameServiceDrawer.cs
  class CPGameServiceDrawer (line 7) | public static class CPGameServiceDrawer
    method OnDrawGameService (line 9) | public static void OnDrawGameService()

FILE: VirtueSky/ControlPanel/CPHierarchyDrawer.cs
  class CPHierarchyDrawer (line 11) | public class CPHierarchyDrawer
    method OnDrawQHierarchyEvent (line 13) | public static void OnDrawQHierarchyEvent(Rect posittion, EditorWindow ...
    method init (line 23) | private static void init(EditorWindow window)
    method OnGUI (line 45) | public static void OnGUI(Rect position, EditorWindow window)
    method drawTreeMapComponentSettings (line 131) | private static void drawTreeMapComponentSettings()
    method drawMonoBehaviourIconComponentSettings (line 152) | private static void drawMonoBehaviourIconComponentSettings()
    method drawSeparatorComponentSettings (line 176) | private static void drawSeparatorComponentSettings()
    method drawVisibilityComponentSettings (line 207) | private static void drawVisibilityComponentSettings()
    method drawLockComponentSettings (line 225) | private static void drawLockComponentSettings()
    method drawStaticComponentSettings (line 246) | private static void drawStaticComponentSettings()
    method drawErrorComponentSettings (line 264) | private static void drawErrorComponentSettings()
    method drawRendererComponentSettings (line 310) | private static void drawRendererComponentSettings()
    method drawPrefabComponentSettings (line 328) | private static void drawPrefabComponentSettings()
    method drawTagLayerComponentSettings (line 346) | private static void drawTagLayerComponentSettings()
    method drawColorComponentSettings (line 396) | private static void drawColorComponentSettings()
    method drawGameObjectIconComponentSettings (line 414) | private static void drawGameObjectIconComponentSettings()
    method drawTagIconComponentSettings (line 434) | private static void drawTagIconComponentSettings()
    method drawLayerIconComponentSettings (line 502) | private static void drawLayerIconComponentSettings()
    method drawChildrenCountComponentSettings (line 571) | private static void drawChildrenCountComponentSettings()
    method drawVerticesAndTrianglesCountComponentSettings (line 593) | private static void drawVerticesAndTrianglesCountComponentSettings()
    method drawComponentsComponentSettings (line 652) | private static void drawComponentsComponentSettings()
    method drawOrderSettings (line 674) | private static void drawOrderSettings(Rect position, EditorWindow window)
    method drawAdditionalSettings (line 695) | private static void drawAdditionalSettings()
    method drawSection (line 724) | private static void drawSection(string title)
    method drawSeparator (line 738) | private static void drawSeparator(int spaceBefore = 0, int spaceAfter ...
    method drawComponentCheckBox (line 747) | private static bool drawComponentCheckBox(string label, HierarchySetti...
    method drawCheckBoxRight (line 782) | private static bool drawCheckBoxRight(string label, HierarchySetting s...
    method drawSpace (line 814) | private static void drawSpace(int value)
    method drawBackground (line 819) | private static void drawBackground(float x, float y, float width, floa...
    method drawLeftLine (line 824) | private static void drawLeftLine(float fromY, float toY, Color color, ...
    method getControlRect (line 831) | private static Rect getControlRect(float width, float height, float ad...
    method drawRestore (line 846) | private static bool drawRestore()
    method drawLabel (line 866) | private static void drawLabel(string label)
    method drawTextField (line 874) | private static void drawTextField(string label, HierarchySetting setting)
    method drawFoldout (line 883) | private static bool drawFoldout(string label, HierarchySetting setting)
    method drawColorPicker (line 898) | private static void drawColorPicker(string label, HierarchySetting set...
    method drawEnum (line 907) | private static Enum drawEnum(string label, HierarchySetting setting, T...
    method drawIntSlider (line 920) | private static void drawIntSlider(string label, HierarchySetting setti...
    method drawFloatSlider (line 929) | private static void drawFloatSlider(string label, HierarchySetting set...

FILE: VirtueSky/ControlPanel/CPIapDrawer.cs
  class CPIapDrawer (line 12) | public static class CPIapDrawer
    method OnEnable (line 20) | public static void OnEnable()
    method Init (line 25) | private static void Init()
    method OnDrawIap (line 37) | public static void OnDrawIap(Rect position)

FILE: VirtueSky/ControlPanel/CPInAppReviewDrawer.cs
  class CPInAppReviewDrawer (line 9) | public static class CPInAppReviewDrawer
    method OnDrawInAppReview (line 11) | public static void OnDrawInAppReview(Rect position)

FILE: VirtueSky/ControlPanel/CPLevelEditorDrawer.cs
  class CPLevelEditorDrawer (line 14) | public static class CPLevelEditorDrawer
    method OnDrawLevelEditor (line 18) | public static void OnDrawLevelEditor(Rect position)
    method DrawTab (line 57) | static void DrawTab()
    method ClearPreviews (line 99) | public static void ClearPreviews()
    method ClearPreview (line 112) | public static void ClearPreview(GameObject go)
    method GetPreview (line 125) | public static Texture2D GetPreview(GameObject go, bool canCreate = true)
    method OnEnable (line 155) | public static void OnEnable()
    method OnDisable (line 162) | public static void OnDisable()
    method OnProjectChange (line 168) | private static void OnProjectChange()
    method OnHierarchyChange (line 173) | private static void OnHierarchyChange()
    method TryClose (line 178) | private static bool TryClose()
    method RefreshAll (line 184) | private static void RefreshAll()
    method RefreshPickObject (line 194) | private static void RefreshPickObject()
    method CheckEscape (line 241) | private static bool CheckEscape()
    method DrawContent (line 254) | private static void DrawContent(Rect position)
    method InternalDrawSettingTab (line 269) | private static void InternalDrawSettingTab(Rect position)
    method InternalDrawDropArea (line 281) | private static void InternalDrawDropArea(Rect position)
    method ValidateWhitelist (line 506) | private static void ValidateWhitelist(string path, ref List<string> bl...
    method ValidateBlacklist (line 514) | private static void ValidateBlacklist(string path, ref List<string> wh...
    method AddToWhitelist (line 522) | private static void AddToWhitelist(string path)
    method AddToBlacklist (line 536) | private static void AddToBlacklist(string path)
    method IsChildOfPath (line 551) | private static bool IsChildOfPath(string child, string parent)
    method GetAllParentDirectories (line 566) | private static void GetAllParentDirectories(DirectoryInfo directoryToS...
    method EqualPath (line 579) | private static bool EqualPath(FileSystemInfo info, string str)
    method ReduceScopeDirectory (line 588) | private static void ReduceScopeDirectory(ref List<string> source)
    method InternalDrawSetting (line 613) | private static void InternalDrawSetting()
    method InternalDrawPickupArea (line 673) | private static void InternalDrawPickupArea(Rect position)
    method SaveLevelSystemSetting (line 902) | private static void SaveLevelSystemSetting()
    method OnSceneGUI (line 908) | private static void OnSceneGUI(SceneView sceneView)
    method TryFakeRender (line 918) | private static void TryFakeRender(SceneView sceneView)
    method RayCast (line 1065) | private static (bool, RaycastHit?) RayCast(Component root, Ray ray, ou...
    method RaycastPoint (line 1085) | private static (Vector3, RaycastHit?) RaycastPoint(Component root, Vec...
    method GetSpawnPosition (line 1106) | private static Vector3 GetSpawnPosition(Renderer rendererAttach, Rende...
    method AddPickObject (line 1155) | private static void AddPickObject(PickObject pickObject, Vector3 world...
    method GetParent (line 1168) | private static Transform GetParent()
    method GetCurrentPrefabStage (line 1215) | private static PrefabStage GetCurrentPrefabStage()
    method CalculateIdealCount (line 1232) | private static bool CalculateIdealCount(float availableSpace, float mi...

FILE: VirtueSky/ControlPanel/CPLocalizationDrawer.cs
  class CPLocalizationDrawer (line 14) | public class CPLocalizationDrawer
    type EditorCommands (line 31) | private struct EditorCommands
    method OnEnable (line 38) | public static void OnEnable()
    method Init (line 43) | private static void Init()
    method OnDrawLocalization (line 50) | public static void OnDrawLocalization(Rect position)
    method DrawTab (line 73) | static void DrawTab()
    method DrawSetting (line 93) | private static void DrawSetting(Rect position)
    method DrawExplore (line 153) | private static void DrawExplore(Rect position)
    method InitializeIfNeeded (line 171) | private static void InitializeIfNeeded(
    method HandleEditorCommands (line 204) | private static void HandleEditorCommands(ref LocaleTreeView treeView)
    method DeleteAssetItems (line 235) | private static void DeleteAssetItems(IEnumerable<AssetTreeViewItem> it...
    method DuplicateAssetItems (line 247) | private static void DuplicateAssetItems(IEnumerable<AssetTreeViewItem>...
    method RevealLocalizedAsset (line 260) | private static void RevealLocalizedAsset(AssetTreeViewItem assetTreeVi...
    method GetSelectedAssetItems (line 266) | private static IEnumerable<AssetTreeViewItem> GetSelectedAssetItems(re...
    method GetSelectedItemsAs (line 271) | private static IEnumerable<T> GetSelectedItemsAs<T>(ref LocaleTreeView...
    method SearchBarView (line 279) | private static void SearchBarView(ref LocaleTreeView treeView, ref Sea...
    method BodyView (line 284) | private static void BodyView(ref LocaleTreeView treeView, Rect rect)
    method OnContextMenu (line 290) | private static void OnContextMenu(ref LocaleTreeView treeView, Rect rect)
    method TryGetSelectedTreeViewItem (line 311) | private static void TryGetSelectedTreeViewItem(ref LocaleTreeView tree...
    method OnAssetItemContextMenu (line 324) | private static void OnAssetItemContextMenu(ref AssetTreeViewItem asset...
    method AssetItemContextMenu_Create (line 352) | private static void AssetItemContextMenu_Create(object mousePosition)
    method CreateLocalizedAssetPopup (line 357) | private static void CreateLocalizedAssetPopup(Vector2 mousePosition)
    method AssetItemContextMenu_Rename (line 363) | private static void AssetItemContextMenu_Rename()
    method RenameLocalizedAsset (line 369) | private static void RenameLocalizedAsset(ref LocaleTreeView treeView, ...
    method AssetItemContextMenu_Delete (line 375) | private static void AssetItemContextMenu_Delete()
    method OnLocaleItemContextMenu (line 380) | private static void OnLocaleItemContextMenu(AssetTreeViewItem assetTre...
    method LocaleItemContextMenu_MakeDefault (line 391) | private static void LocaleItemContextMenu_MakeDefault()
    method LocaleItemContextMenu_Remove (line 397) | private static void LocaleItemContextMenu_Remove()
    method MakeLocaleDefault (line 403) | private static void MakeLocaleDefault(ref LocaleTreeView treeView, Ass...
    method RemoveLocale (line 426) | private static void RemoveLocale(ref LocaleTreeView treeView, Scriptab...
    method BottomToolbarView (line 435) | private static void BottomToolbarView(ref LocaleTreeView treeView, Rec...
    method CreateTexture (line 462) | public static Texture2D CreateTexture(Color color)
    method TreeViewControls (line 470) | private static void TreeViewControls(ref LocaleTreeView treeView)
    method LocalizedAssetControls (line 486) | private static void LocalizedAssetControls(ref LocaleTreeView treeView)
    method LocaleItemControls (line 522) | private static void LocaleItemControls(ref LocaleTreeView treeView)
    method TranslateMissingLocalesWithMenu (line 633) | private static void TranslateMissingLocalesWithMenu(ScriptableLocaleBa...
    method TranslateMissingLocales (line 659) | private static void TranslateMissingLocales(ScriptableLocaleBase asset)
    method FillLanguageSameAvaiableLanguage (line 678) | private static void FillLanguageSameAvaiableLanguage(ScriptableLocaleB...
    method TranslateSelected (line 709) | private static void TranslateSelected(object userData, string[] option...
    method AppLanguageContextMenu (line 751) | private static void AppLanguageContextMenu(object language)
    method AddLocale (line 756) | private static void AddLocale(ref LocaleTreeView localeTreeView, Scrip...
  type LocaleTabType (line 762) | public enum LocaleTabType
  class ScriptableLocalePostprocessor (line 771) | public class ScriptableLocalePostprocessor : AssetPostprocessor
    method OnPostprocessAllAssets (line 773) | private static void OnPostprocessAllAssets(string[] importedAssets, st...

FILE: VirtueSky/ControlPanel/CPNotificationChanelDrawer.cs
  class CPNotificationChanelDrawer (line 7) | public static class CPNotificationChanelDrawer
    method OnDrawNotificationChanel (line 9) | public static void OnDrawNotificationChanel(Rect position)

FILE: VirtueSky/ControlPanel/CPRegisterPackageDrawer.cs
  class CPRegisterPackageDrawer (line 7) | public static class CPRegisterPackageDrawer
    method OnDrawRegisterPackageByManifest (line 13) | public static void OnDrawRegisterPackageByManifest(Rect position)
    method DrawButtonAddSomePackage (line 44) | static void DrawButtonAddSomePackage()

FILE: VirtueSky/ControlPanel/CPScriptingDefineSymbolsDrawer.cs
  class CPScriptingDefineSymbolsDrawer (line 7) | public static class CPScriptingDefineSymbolsDrawer
    method OnDrawScriptingDefineSymbols (line 11) | public static void OnDrawScriptingDefineSymbols()

FILE: VirtueSky/ControlPanel/CPSoEventDrawer.cs
  class CPSoEventDrawer (line 8) | public static class CPSoEventDrawer
    method OnDrawSoEvent (line 14) | public static void OnDrawSoEvent()
    method DrawButtonEvent (line 28) | static void DrawButtonEvent()
    method DrawButtonEventResult (line 91) | static void DrawButtonEventResult()

FILE: VirtueSky/ControlPanel/CPSoVariableDrawer.cs
  class CPSoVariableDrawer (line 7) | public static class CPSoVariableDrawer
    method OnDrawSoVariable (line 9) | public static void OnDrawSoVariable()

FILE: VirtueSky/ControlPanel/CPUtility.cs
  class CPUtility (line 9) | public class CPUtility
    method DrawButtonInstallPackage (line 11) | public static void DrawButtonInstallPackage(string labelInstall, strin...
    method DrawButtonAddDefineSymbols (line 42) | public static void DrawButtonAddDefineSymbols(string flagSymbols, floa...
    method TextIsInstallPackage (line 68) | public static string TextIsInstallPackage(bool isInstall)
    method TextIsEnable (line 73) | public static string TextIsEnable(bool condition)
    method GuiLine (line 78) | public static void GuiLine(int i_height = 1, CustomColor customColor =...
    method DrawCustomLine (line 87) | public static void DrawCustomLine(float with, Vector2 positionPointSta...
    method DrawLineLastRectY (line 92) | public static void DrawLineLastRectY(float with, float posXPointStart,...
    method DrawLineLastRectX (line 98) | public static void DrawLineLastRectX(float with, float posYPointStart,...
    method DrawToggle (line 104) | public static void DrawToggle(ref bool value, string text, System.Acti...
    method GetIcon (line 113) | public static Texture2D GetIcon(StatePanelControl statePanelControl)
    method DrawHeaderIcon (line 138) | public static void DrawHeaderIcon(StatePanelControl statePanelControl,...
    method DrawHeader (line 152) | public static void DrawHeader(string textHeader, int _fontSize = 16)

FILE: VirtueSky/ControlPanel/ConstantControlPanel.cs
  class ConstantControlPanel (line 3) | public class ConstantControlPanel

FILE: VirtueSky/ControlPanel/ConstantPackage.cs
  class ConstantPackage (line 3) | public class ConstantPackage

FILE: VirtueSky/ControlPanel/ControlPanelWindowEditor.cs
  class ControlPanelWindowEditor (line 6) | public class ControlPanelWindowEditor : EditorWindow
    method ShowPanelControlWindow (line 17) | [MenuItem("Sunflower/Magic Panel &1", false, priority = 1)]
    method OnEnable (line 34) | private void OnEnable() {
    method OnDisable (line 45) | private void OnDisable()
    method OnGUI (line 50) | private void OnGUI()
    method DrawButton (line 75) | void DrawButton()
    method DrawContent (line 99) | void DrawContent()
    method DrawButtonChooseState (line 167) | void DrawButtonChooseState(string title, StatePanelControl _statePanel...
  type StatePanelControl (line 186) | public enum StatePanelControl

FILE: VirtueSky/Core/Editor/OptionalPropertyDrawer.cs
  class OptionalPropertyDrawer (line 8) | [CustomPropertyDrawer(typeof(Optional<>))]
    method GetPropertyHeight (line 11) | public override float GetPropertyHeight(SerializedProperty property, G...
    method OnGUI (line 17) | public override void OnGUI(Rect position, SerializedProperty property,...

FILE: VirtueSky/Core/Runtime/App.cs
  type App (line 8) | public struct App
    method InitMonoGlobalComponent (line 12) | public static void InitMonoGlobalComponent(MonoGlobal monoGlobal)
    method AddPauseCallback (line 17) | public static void AddPauseCallback(Action<bool> callback)
    method RemovePauseCallback (line 23) | public static void RemovePauseCallback(Action<bool> callback)
    method AddFocusCallback (line 28) | public static void AddFocusCallback(Action<bool> callback)
    method RemoveFocusCallback (line 34) | public static void RemoveFocusCallback(Action<bool> callback)
    method AddQuitCallback (line 39) | public static void AddQuitCallback(Action callback)
    method RemoveQuitCallback (line 45) | public static void RemoveQuitCallback(Action callback)
    method SubTick (line 52) | internal static void SubTick(IEntity tick)
    method SubTick (line 57) | public static void SubTick(Action action)
    method SubFixedTick (line 62) | internal static void SubFixedTick(IEntity fixedTick)
    method SubFixedTick (line 67) | public static void SubFixedTick(Action action)
    method SubLateTick (line 72) | internal static void SubLateTick(IEntity lateTick)
    method SubLateTick (line 77) | public static void SubLateTick(Action action)
    method UnSubTick (line 82) | internal static void UnSubTick(IEntity tick)
    method UnSubTick (line 87) | public static void UnSubTick(Action action)
    method UnSubFixedTick (line 92) | internal static void UnSubFixedTick(IEntity fixedTick)
    method UnSubFixedTick (line 97) | public static void UnSubFixedTick(Action action)
    method UnSubLateTick (line 102) | internal static void UnSubLateTick(IEntity lateTick)
    method UnSubLateTick (line 107) | public static void UnSubLateTick(Action action)
    method Delay (line 127) | public static DelayHandle Delay(float duration, Action onComplete, Act...
    method Delay (line 152) | public static DelayHandle Delay(
    method CancelDelay (line 170) | public static void CancelDelay(DelayHandle delayHandle)
    method PauseDelay (line 175) | public static void PauseDelay(DelayHandle delayHandle)
    method ResumeDelay (line 180) | public static void ResumeDelay(DelayHandle delayHandle)
    method CancelAllDelay (line 185) | public static void CancelAllDelay()
    method PauseAllDelay (line 190) | public static void PauseAllDelay()
    method ResumeAllDelay (line 195) | public static void ResumeAllDelay()
    method StartCoroutine (line 204) | [System.Runtime.CompilerServices.MethodImpl(
    method StartCoroutine (line 208) | [System.Runtime.CompilerServices.MethodImpl(
    method StartCoroutine (line 213) | [System.Runtime.CompilerServices.MethodImpl(
    method StopCoroutine (line 217) | [System.Runtime.CompilerServices.MethodImpl(
    method StopCoroutine (line 221) | [System.Runtime.CompilerServices.MethodImpl(
    method StopCoroutine (line 225) | [System.Runtime.CompilerServices.MethodImpl(
    method StopAllCoroutine (line 229) | [System.Runtime.CompilerServices.MethodImpl(
    method ToMainThread (line 233) | [System.Runtime.CompilerServices.MethodImpl(
    method ToMainThread (line 237) | [System.Runtime.CompilerServices.MethodImpl(
    method ToMainThread (line 241) | [System.Runtime.CompilerServices.MethodImpl(
    method ToMainThread (line 246) | [System.Runtime.CompilerServices.MethodImpl(
    method RunOnMainThread (line 251) | [System.Runtime.CompilerServices.MethodImpl(

FILE: VirtueSky/Core/Runtime/BaseMono.cs
  class BaseMono (line 7) | [EditorIcon("icon_csharp")]
    method OnEnable (line 10) | public virtual void OnEnable()
    method OnDisable (line 15) | public virtual void OnDisable()
    method Initialize (line 21) | public virtual void Initialize()
    method Tick (line 25) | public virtual void Tick()
    method LateTick (line 29) | public virtual void LateTick()
    method FixedTick (line 33) | public virtual void FixedTick()
    method CleanUp (line 37) | public virtual void CleanUp()
    method SubTick (line 41) | void SubTick()
    method UnSubTick (line 48) | void UnSubTick()

FILE: VirtueSky/Core/Runtime/BaseSO.cs
  class BaseSO (line 7) | public class BaseSO : ScriptableObject, IEntity
    method Enable (line 12) | public void Enable()
    method Disable (line 17) | public void Disable()
    method SubTick (line 22) | void SubTick()
    method Initialize (line 29) | public virtual void Initialize()
    method Tick (line 33) | public virtual void Tick()
    method LateTick (line 37) | public virtual void LateTick()
    method FixedTick (line 41) | public virtual void FixedTick()
    method CleanUp (line 45) | public virtual void CleanUp()
    method Destroy (line 49) | public virtual void Destroy()
    method UnSubTick (line 53) | void UnSubTick()

FILE: VirtueSky/Core/Runtime/CacheComponent.cs
  class CacheComponent (line 5) | public class CacheComponent<T> : BaseMono
    method Awake (line 10) | protected virtual void Awake()
    method GetCacheComponent (line 16) | void GetCacheComponent()
    method Reset (line 24) | protected virtual void Reset()

FILE: VirtueSky/Core/Runtime/DelayHandle.cs
  class DelayHandle (line 6) | public class DelayHandle
    method Cancel (line 69) | public void Cancel()
    method Pause (line 83) | public void Pause()
    method Resume (line 96) | public void Resume()
    method GetTimeElapsed (line 116) | public float GetTimeElapsed()
    method GetTimeRemaining (line 132) | public float GetTimeRemaining()
    method GetRatioComplete (line 141) | public float GetRatioComplete()
    method GetRatioRemaining (line 150) | public float GetRatioRemaining()
    method DelayHandle (line 156) | internal DelayHandle(float duration, Action onComplete, Action<float> ...
    method GetWorldTime (line 173) | private float GetWorldTime()
    method GetFireTime (line 178) | private float GetFireTime()
    method GetTimeDelta (line 183) | private float GetTimeDelta()
    method Update (line 188) | internal void Update()

FILE: VirtueSky/Core/Runtime/IEntity.cs
  type IEntity (line 3) | public interface IEntity
    method Initialize (line 5) | void Initialize();
    method Tick (line 6) | void Tick();
    method LateTick (line 7) | void LateTick();
    method FixedTick (line 8) | void FixedTick();
    method CleanUp (line 9) | void CleanUp();

FILE: VirtueSky/Core/Runtime/MonoGlobal.cs
  class MonoGlobal (line 11) | [EditorIcon("icon_csharp")]
    method AddTick (line 26) | internal void AddTick(IEntity tick)
    method AddTick (line 31) | internal void AddTick(Action action)
    method AddFixedTick (line 36) | internal void AddFixedTick(IEntity fixedTick)
    method AddFixedTick (line 41) | internal void AddFixedTick(Action action)
    method AddLateTick (line 46) | internal void AddLateTick(IEntity lateTick)
    method AddLateTick (line 51) | internal void AddLateTick(Action action)
    method RemoveTick (line 56) | internal void RemoveTick(IEntity tick)
    method RemoveTick (line 61) | internal void RemoveTick(Action action)
    method RemoveFixedTick (line 66) | internal void RemoveFixedTick(IEntity fixedTick)
    method RemoveFixedTick (line 71) | internal void RemoveFixedTick(Action action)
    method RemoveLateTick (line 76) | internal void RemoveLateTick(IEntity lateTick)
    method RemoveLateTick (line 81) | internal void RemoveLateTick(Action action)
    method Update (line 90) | private void Update()
    method FixedUpdate (line 114) | private void FixedUpdate()
    method LateUpdate (line 119) | private void LateUpdate()
    method OnApplicationFocus (line 128) | private void OnApplicationFocus(bool hasFocus)
    method OnApplicationPause (line 133) | private void OnApplicationPause(bool pauseStatus)
    method OnApplicationQuit (line 142) | private void OnApplicationQuit()
    method RegisterDelayHandle (line 161) | internal void RegisterDelayHandle(DelayHandle delayHandle)
    method CancelAllDelayHandle (line 166) | internal void CancelAllDelayHandle()
    method PauseAllDelayHandle (line 177) | internal void PauseAllDelayHandle()
    method ResumeAllDelayHandle (line 185) | internal void ResumeAllDelayHandle()
    method UpdateAllDelayHandle (line 193) | private void UpdateAllDelayHandle()
    method StartCoroutineImpl (line 217) | internal Coroutine StartCoroutineImpl(IEnumerator routine)
    method StartCoroutineImpl (line 227) | internal Coroutine StartCoroutineImpl(string methodName, [DefaultValue...
    method StartCoroutineImpl (line 237) | internal Coroutine StartCoroutineImpl(string methodName)
    method StopCoroutineImpl (line 247) | internal void StopCoroutineImpl(IEnumerator routine)
    method StopCoroutineImpl (line 252) | internal void StopCoroutineImpl(Coroutine routine)
    method StopCoroutineImpl (line 257) | internal void StopCoroutineImpl(string methodName)
    method StopAllCoroutinesImpl (line 265) | internal void StopAllCoroutinesImpl()
    method RunOnMainThreadImpl (line 275) | internal void RunOnMainThreadImpl(Action action)
    method ToMainThreadImpl (line 290) | internal Action ToMainThreadImpl(Action action)
    method ToMainThreadImpl (line 303) | internal Action<T> ToMainThreadImpl<T>(Action<T> action)
    method ToMainThreadImpl (line 317) | internal Action<T1, T2> ToMainThreadImpl<T1, T2>(Action<T1, T2> action)
    method ToMainThreadImpl (line 332) | internal Action<T1, T2, T3> ToMainThreadImpl<T1, T2, T3>(Action<T1, T2...

FILE: VirtueSky/Core/Runtime/Optional.cs
  type Optional (line 6) | [Serializable]
    method Optional (line 15) | public Optional(T value)
    method Optional (line 22) | public Optional(bool enabled, T value)
    method Equals (line 54) | public override bool Equals(object obj)
    method GetHashCode (line 60) | public override int GetHashCode()
    method ToString (line 65) | public override string ToString()

FILE: VirtueSky/Core/Runtime/RuntimeInitialize.cs
  class RuntimeInitialize (line 6) | public class RuntimeInitialize
    method AutoInitialize (line 8) | [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLo...

FILE: VirtueSky/Core/Runtime/UnityServiceInitialization.cs
  class UnityServiceInitialization (line 9) | public class UnityServiceInitialization : MonoBehaviour
    type Environment (line 11) | private enum Environment
    method Awake (line 21) | private void Awake()
    method Init (line 26) | private async void Init()

FILE: VirtueSky/DataStorage/Editor/DataWindowEditor.cs
  class DataWindowEditor (line 9) | public class DataWindowEditor : EditorWindow
    method ClearAllData (line 11) | [MenuItem("Sunflower/Clear All Data", priority = 501)]
    method SaveData (line 20) | [MenuItem("Sunflower/Save Data", priority = 504)]
    method ClearSunDataPath (line 27) | [MenuItem("Sunflower/Clear Path Data", priority = 502)]
    method OpenSunPathData (line 35) | [MenuItem("Sunflower/Open Path Data", priority = 503)]

FILE: VirtueSky/DataStorage/Runtime/GameData.cs
  class GameData (line 9) | public static class GameData
    method Init (line 21) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Serialize (line 29) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Deserialize (line 36) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method RequireNullCheck (line 42) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method GetDataPath (line 51) | static string GetDataPath(string name)
    method GetPersistentDataPath (line 62) | public static string GetPersistentDataPath()
    method ChangeProfile (line 77) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method VerifyProfile (line 87) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Save (line 93) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method SaveAsync (line 103) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Load (line 112) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method LoadAsync (line 131) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Get (line 157) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method TryGet (line 168) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Set (line 188) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method HasKey (line 197) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method DeleteKey (line 200) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method DeleteAll (line 203) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method DeleteFileData (line 206) | public static void DeleteFileData()
    method Backup (line 218) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method Restore (line 228) | [MethodImpl(MethodImplOptions.AggressiveInlining)]

FILE: VirtueSky/DataStorage/Runtime/SerializeAdapter.cs
  class SerializeAdapter (line 10) | public static class SerializeAdapter
    method ToBinary (line 20) | public static unsafe byte[] ToBinary<T>(T obj, IReadOnlyList<IBinaryAd...
    method FromBinary (line 39) | public static unsafe T FromBinary<T>(byte[] serializedBytes, IReadOnly...

FILE: VirtueSky/DataType/DictionaryCustom.cs
  class DictionaryCustom (line 10) | [Serializable]
    method OnAfterDeserialize (line 18) | public void OnAfterDeserialize()
    method OnBeforeSerialize (line 23) | public void OnBeforeSerialize()
    method UpdateDict (line 29) | private void UpdateDict()
    method UpdateList (line 48) | private void UpdateList()
    method Add (line 60) | public void Add(object key, object value)
    method Add (line 66) | public void Add(KeyValuePair<TKey, TValue> item)
    method Clear (line 72) | void ICollection<KeyValuePair<TKey, TValue>>.Clear()
    method Contains (line 77) | public bool Contains(KeyValuePair<TKey, TValue> item)
    method CopyTo (line 82) | public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex)
    method Remove (line 87) | public bool Remove(KeyValuePair<TKey, TValue> item)
    method Clear (line 99) | void IDictionary.Clear()
    method Contains (line 104) | public bool Contains(object key)
    method GetEnumerator (line 109) | IEnumerator<KeyValuePair<TKey, TValue>> IEnumerable<KeyValuePair<TKey,...
    method GetEnumerator (line 114) | IDictionaryEnumerator IDictionary.GetEnumerator()
    method Remove (line 119) | public void Remove(object key)
    method Add (line 142) | public void Add(TKey key, TValue value)
    method Clear (line 148) | public void Clear()
    method ContainsKey (line 154) | public bool ContainsKey(TKey key)
    method ContainsValue (line 159) | public bool ContainsValue(TValue value)
    method Remove (line 164) | public bool Remove(TKey key)
    method Remove (line 171) | public bool Remove(TKey key, out TValue value)
    
Condensed preview — 2099 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,111K chars).
[
  {
    "path": ".github/workflows/notify-discord-on-release.yml",
    "chars": 2562,
    "preview": "name: Notify Discord on Release or Tag\n\non:\n  release:\n    types: [published]\n  push:\n    tags:\n      - '*'\n\njobs:\n  not"
  },
  {
    "path": "LICENSE",
    "chars": 1066,
    "preview": "MIT License\n\nCopyright (c) 2024 VirtueSky\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\n"
  },
  {
    "path": "LICENSE.meta",
    "chars": 155,
    "preview": "fileFormatVersion: 2\nguid: 602f2b07fec879a41853f704b2b884a5\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetB"
  },
  {
    "path": "README.md",
    "chars": 2676,
    "preview": "# Core scriptable object architecture for building Unity games (Android & iOS)\n\n<p align=\"left\">\n  <a>\n    <img alt=\"Mad"
  },
  {
    "path": "README.md.meta",
    "chars": 158,
    "preview": "fileFormatVersion: 2\nguid: 7b4ab53c22cea684aa8898738b406520\nTextScriptImporter:\n  externalObjects: {}\n  userData: \n  ass"
  },
  {
    "path": "VirtueSky/Advertising/Editor/AdSettingEditor.cs",
    "chars": 14876,
    "preview": "#if UNITY_EDITOR\nusing System;\nusing UnityEditor;\nusing UnityEngine;\nusing VirtueSky.Inspector;\nusing VirtueSky.UtilsEd"
  },
  {
    "path": "VirtueSky/Advertising/Editor/AdSettingEditor.cs.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 6439b65cc7b34375ace31c6d3f331f3e\ntimeCreated: 1700021422"
  },
  {
    "path": "VirtueSky/Advertising/Editor/AdsWindowEditor.cs",
    "chars": 6490,
    "preview": "#if UNITY_EDITOR\nusing UnityEditor;\nusing UnityEngine;\nusing VirtueSky.Inspector;\nusing VirtueSky.UtilsEditor;\n\nnamespac"
  },
  {
    "path": "VirtueSky/Advertising/Editor/AdsWindowEditor.cs.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 6fd65ccaee60423bbab98afe628d2016\ntimeCreated: 1695461341"
  },
  {
    "path": "VirtueSky/Advertising/Editor/Virtuesky.Sunflower.Advertising.Editor.asmdef",
    "chars": 593,
    "preview": "{\n    \"name\": \"Virtuesky.Sunflower.Advertising.Editor\",\n    \"rootNamespace\": \"\",\n    \"references\": [\n        \"GUID:abd57"
  },
  {
    "path": "VirtueSky/Advertising/Editor/Virtuesky.Sunflower.Advertising.Editor.asmdef.meta",
    "chars": 166,
    "preview": "fileFormatVersion: 2\nguid: ea1af3c654880af4ca6bb44b012e055e\nAssemblyDefinitionImporter:\n  externalObjects: {}\n  userData"
  },
  {
    "path": "VirtueSky/Advertising/Editor.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: c0fa69d79e042904290c060082316cf1\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmobAdClient.cs",
    "chars": 4092,
    "preview": "#if VIRTUESKY_ADS && VIRTUESKY_ADMOB\nusing GoogleMobileAds.Api;\n#endif\nusing VirtueSky.Core;\nusing VirtueSky.Tracking;\n\n"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmobAdClient.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: 9dfd25949deb4dd5b2c3d85ef6e79929\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmobAdUnitVariable.cs",
    "chars": 1158,
    "preview": "using System;\nusing UnityEngine;\n\nnamespace VirtueSky.Ads\n{\n    public class AdmobAdUnitVariable : AdUnitVariable\n    {\n"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmobAdUnitVariable.cs.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 87d7f6324d01404eb012e525818f93de\ntimeCreated: 1728634495"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobAppOpenVariable.cs",
    "chars": 4684,
    "preview": "using System;\n#if VIRTUESKY_ADS && VIRTUESKY_ADMOB\nusing GoogleMobileAds.Api;\nusing VirtueSky.Tracking;\n#endif\nusing Uni"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobAppOpenVariable.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: bcb8d284edcd4713bbddf482061bd612\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobBannerVariable.cs",
    "chars": 7092,
    "preview": "using System;\nusing System.Collections;\n#if VIRTUESKY_ADS && VIRTUESKY_ADMOB\nusing GoogleMobileAds.Api;\nusing VirtueSky."
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobBannerVariable.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: 87ac8fce1cfb4b09805621d419310150\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobInterVariable.cs",
    "chars": 4278,
    "preview": "using System;\n#if VIRTUESKY_ADS && VIRTUESKY_ADMOB\nusing GoogleMobileAds.Api;\nusing VirtueSky.Tracking;\n#endif\nusing Uni"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobInterVariable.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: b04367785ed74ad986055150f5961286\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobNativeOverlayVariable.cs",
    "chars": 13196,
    "preview": "using System;\nusing UnityEngine;\nusing VirtueSky.Inspector;\nusing VirtueSky.Utils;\nusing System.Collections;\n#if VIRTUES"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobNativeOverlayVariable.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: 8b15194a160445d694586481bfdc91cb\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobRewardInterVariable.cs",
    "chars": 5299,
    "preview": "using System;\n#if VIRTUESKY_ADS && VIRTUESKY_ADMOB\nusing GoogleMobileAds.Api;\n#endif\nusing UnityEngine;\nusing VirtueSky."
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobRewardInterVariable.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: ddd2127be5434974aa775c9d809bc25f\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobRewardVariable.cs",
    "chars": 5034,
    "preview": "using System;\n#if VIRTUESKY_ADS && VIRTUESKY_ADMOB\nusing GoogleMobileAds.Api;\n#endif\nusing UnityEngine;\nusing VirtueSky."
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable/AdmobRewardVariable.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: 0199f7cf7b5f44cfa63f780b9ff50857\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob/AdmodUnitVariable.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 5a8d9ff9a56c4478887d3a9190da2563\ntimeCreated: 1695462336"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Admob.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: 488c040c267923f4e91f3c963c4e9536\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/General/AdClient.cs",
    "chars": 869,
    "preview": "using VirtueSky.Tracking;\n\nnamespace VirtueSky.Ads\n{\n    public abstract class AdClient\n    {\n        protected AdSettin"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/General/AdClient.cs.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 7af305bf9c13403badeef5393ca8283a\ntimeCreated: 1695566887"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/General/AdInfo.cs",
    "chars": 2609,
    "preview": "namespace VirtueSky.Ads\n{\n    public class AdsInfo\n    {\n        public string AdUnitId { get; private set; }\n        pu"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/General/AdInfo.cs.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 12c07896615a460a871b51f30257302f\ntimeCreated: 1776757990"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/General/AdSetting.cs",
    "chars": 5659,
    "preview": "using System.Collections.Generic;\nusing UnityEngine;\nusing UnityEngine.Serialization;\nusing VirtueSky.Inspector;\n#if UNI"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/General/AdSetting.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: 4faf330974234e808669c796dc78cdee\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/General/AdStatic.cs",
    "chars": 4276,
    "preview": "using System;\nusing UnityEngine;\nusing VirtueSky.DataStorage;\n\nnamespace VirtueSky.Ads\n{\n    public static class AdStati"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/General/AdStatic.cs.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 4132cc5be9fa4959a8bafd62a51bb7ca\ntimeCreated: 1695460884"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/General/AdUnitVariable.cs",
    "chars": 1702,
    "preview": "using System;\nusing UnityEngine;\n\n\nnamespace VirtueSky.Ads\n{\n    public abstract class AdUnitVariable : ScriptableObject"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/General/AdUnitVariable.cs.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 0a0b123368074cd1a359dea0f1ef9233\ntimeCreated: 1695460627"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/General/Advertising.cs",
    "chars": 9890,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\n#if VIRTUESKY_ADMOB\nusing GoogleMobileAds.Api;"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/General/Advertising.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: e380b752cb6c40aaace317083692044f\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/General/IAdUnit.cs",
    "chars": 186,
    "preview": "namespace VirtueSky.Ads\n{\n    public interface IAdUnit\n    {\n        public void Init();\n        public void Load();\n   "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/General/IAdUnit.cs.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 5114c7ef942a40ff9e7dbf458d6ed339\ntimeCreated: 1728631990"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/General.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: f3d6f74e978547a43947efa49ed48e87\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayAdClient.cs",
    "chars": 2936,
    "preview": "#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY\nusing Unity.Services.LevelPlay;\n#endif\nusing VirtueSky.Core;\nusing VirtueSky.Tr"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayAdClient.cs.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 163589e8de4d4fcaaac2df3fbf96f414\ntimeCreated: 1719850536"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayAdUnitVariable.cs",
    "chars": 1118,
    "preview": "using System;\nusing UnityEngine;\n\nnamespace VirtueSky.Ads\n{\n    public class LevelPlayAdUnitVariable : AdUnitVariable\n  "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayAdUnitVariable.cs.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 591b3c010489423bba0d8576ef5fbe49\ntimeCreated: 1728631885"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable/LevelPlayBannerVariable.cs",
    "chars": 5930,
    "preview": "using System;\n#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY\nusing Unity.Services.LevelPlay;\nusing VirtueSky.Core;\n#endif\nusin"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable/LevelPlayBannerVariable.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: f5151f19197e497aa56422344920b819\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable/LevelPlayInterVariable.cs",
    "chars": 3540,
    "preview": "using System;\n#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY\nusing Unity.Services.LevelPlay;\n#endif\nusing UnityEngine;\nusing V"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable/LevelPlayInterVariable.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: d1c4f30e37f14d78abad68a6b2d0a847\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable/LevelPlayRewardVariable.cs",
    "chars": 4403,
    "preview": "using System;\n#if VIRTUESKY_ADS && VIRTUESKY_LEVELPLAY\nusing Unity.Services.LevelPlay;\n#endif\nusing VirtueSky.Inspector;"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable/LevelPlayRewardVariable.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: 6cb21eb6778e4c0ea10445060b08a271\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/LevelPlay/LevelPlayUnitVariable.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 7d50cc93b33f4995a04161afc0514175\ntimeCreated: 1719850500"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/LevelPlay.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 1170ec045aef4f39ba9d642d37973423\ntimeCreated: 1719850368"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Max/MaxAdClient.cs",
    "chars": 2251,
    "preview": "using VirtueSky.Core;\n\nnamespace VirtueSky.Ads\n{\n    public sealed class MaxAdClient : AdClient\n    {\n        public Max"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Max/MaxAdClient.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: ccaea541beb11497691c82e48d3e2bf7\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Max/MaxAdUnitVariable.cs",
    "chars": 1166,
    "preview": "using System;\nusing UnityEngine;\n\nnamespace VirtueSky.Ads\n{\n    public class MaxAdUnitVariable : AdUnitVariable\n    {\n  "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Max/MaxAdUnitVariable.cs.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 8d49a7d460324b64bf0e810452eb8db6\ntimeCreated: 1728632190"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxAppOpenVariable.cs",
    "chars": 4020,
    "preview": "using System;\nusing UnityEngine;\nusing VirtueSky.Inspector;\nusing VirtueSky.Misc;\nusing VirtueSky.Tracking;\n\nnamespace V"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxAppOpenVariable.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: 1e29fec6165f4c3baceac878abc88638\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxBannerVariable.cs",
    "chars": 5392,
    "preview": "using System;\nusing UnityEngine;\nusing VirtueSky.Inspector;\nusing VirtueSky.Misc;\nusing VirtueSky.Tracking;\n\nnamespace V"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxBannerVariable.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: 2d54005e18d14434a4feed9988bfd43c\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxInterVariable.cs",
    "chars": 3789,
    "preview": "using System;\nusing UnityEngine;\nusing VirtueSky.Ads;\nusing VirtueSky.Inspector;\nusing VirtueSky.Misc;\nusing VirtueSky.T"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxInterVariable.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: 7f2517077a9341d38d7486727d83a132\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxRewardVariable.cs",
    "chars": 4600,
    "preview": "using System;\nusing UnityEngine;\nusing VirtueSky.Inspector;\nusing VirtueSky.Misc;\nusing VirtueSky.Tracking;\n\nnamespace V"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Max/MaxUnitVariable/MaxRewardVariable.cs.meta",
    "chars": 294,
    "preview": "fileFormatVersion: 2\nguid: 20d8d1652da34664a50db28dbc997814\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Max/MaxUnitVariable.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 74b6a60977c643ee956805295399665c\ntimeCreated: 1695462087"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Max.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: f30fd55eb75a48b4691e1a17d8ad50c2\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Virtuesky.Sunflower.Advertising.asmdef",
    "chars": 956,
    "preview": "{\n    \"name\": \"Virtuesky.Sunflower.Advertising\",\n    \"rootNamespace\": \"\",\n    \"references\": [\n        \"GUID:fca7ec166e04"
  },
  {
    "path": "VirtueSky/Advertising/Runtime/Virtuesky.Sunflower.Advertising.asmdef.meta",
    "chars": 166,
    "preview": "fileFormatVersion: 2\nguid: abd57f653a468a04c8d4e281527ff293\nAssemblyDefinitionImporter:\n  externalObjects: {}\n  userData"
  },
  {
    "path": "VirtueSky/Advertising/Runtime.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: f71c7d92eeff8c34492800ba35756ee8\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "VirtueSky/Advertising.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: 4a6fce59e6956244e8e4045dcfa6387c\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/AssetFinder.cs",
    "chars": 13943,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/AssetFinder.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 336a181c1abdb455f8388370e58f0496\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/AssetFinderAssetType.cs",
    "chars": 11,
    "preview": "// deleted"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/AssetFinderAssetType.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: b077597d32a3b4e43bd7bfc007c3e6dc\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/AssetFinderCacheEditor.cs",
    "chars": 11,
    "preview": "// deleted"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/AssetFinderCacheEditor.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 18708e9bf7db0f04fa917a0db924382c\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/AssetFinderDuplicate.cs",
    "chars": 11,
    "preview": "// deleted"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/AssetFinderDuplicate.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 57aae5701da3c644c937c59e2da6da85\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/AssetFinderRef.cs",
    "chars": 11,
    "preview": "// deleted"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/AssetFinderRef.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 7ef09719313b4f943a49eb3a2b0f934d\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/AssetFinderWindowExtension.cs",
    "chars": 291,
    "preview": "namespace VirtueSky.AssetFinder.Editor {\n    public class AssetFinderWindowExtension {\n        public static void ShowW"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/AssetFinderWindowExtension.cs.meta",
    "chars": 84,
    "preview": "fileFormatVersion: 2\nguid: 10b0c9ac533b455baa0c863c779748bd\ntimeCreated: 1764820294"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.AssetState.cs",
    "chars": 197,
    "preview": "namespace VirtueSky.AssetFinder.Editor\n{\n    partial class AssetFinderAsset\n    {\n        public enum AssetState\n       "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.AssetState.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: cd01dcf20ca0ec442af562e1bb400560\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.AssetType.cs",
    "chars": 403,
    "preview": "namespace VirtueSky.AssetFinder.Editor\n{\n    partial class AssetFinderAsset\n    {\n        public enum AssetType\n        "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.AssetType.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 0d8fbadc1183faf4fa0008a3c8ef122e\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.Classes.cs",
    "chars": 288,
    "preview": "using System;\nusing System.Collections.Generic;\nnamespace VirtueSky.AssetFinder.Editor\n{\n    internal partial class Asse"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.Classes.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 5474ab83390e2904b92f5b45bd2fe0dc\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.Constants.cs",
    "chars": 3039,
    "preview": "using System;\nusing System.Collections.Generic;\nusing UnityEngine;\n\nnamespace VirtueSky.AssetFinder.Editor\n{\n    interna"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.Constants.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 9e3eb5ee34a8a3a41b281a3f9d1652e8\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.ContentLoader.cs",
    "chars": 14516,
    "preview": "using System;\nusing System.IO;\nusing System.Collections.Generic;\nusing UnityEditor;\nusing UnityEngine;\nusing UnityObject"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.ContentLoader.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 8b4f01c105762d742adedeca5785b5ca\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.Drawing.cs",
    "chars": 15097,
    "preview": "using System;\nusing System.IO;\nusing UnityEditor;\nusing UnityEngine;\nusing UnityObject = UnityEngine.Object;\n\nnamespace "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.Drawing.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 92421bd9e4cef8a4e969c1da1c6f6769\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.FileInfo.cs",
    "chars": 6316,
    "preview": "using System;\nusing System.IO;\nusing UnityEditor;\nusing UnityEngine;\n\nnamespace VirtueSky.AssetFinder.Editor\n{\n    inter"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.FileInfo.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: def6a6c199d5b5c44b9920f983b64d92\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.GuidManager.cs",
    "chars": 4311,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing UnityEditor;\n\nnamespace VirtueSky.AssetFinder.E"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.GuidManager.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 9bb02cbb695900d4b91c00fbee372c7d\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.PathInfo.cs",
    "chars": 3566,
    "preview": "using System;\nusing System.Globalization;\nusing UnityEditor;\nusing UnityEngine;\n\nnamespace VirtueSky.AssetFinder.Editor\n"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.PathInfo.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: aeaa48e4ac2b35e43951fa13a606b81c\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.cs",
    "chars": 14084,
    "preview": "#if AssetFinderADDRESSABLE\nusing UnityEditor.AddressableAssets;\nusing UnityEngine.AddressableAssets;\n#endif\nusing System"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAsset.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: c543b7730e7086043a9e90ab6713e909\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAutoRefreshMode.cs",
    "chars": 259,
    "preview": "namespace VirtueSky.AssetFinder.Editor\n{\n    public enum AssetFinderAutoRefreshMode\n    {\n        On, // Auto refresh en"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderAutoRefreshMode.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: fcfe60c37601b3e419b544b3cf969b50\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.AssetSearch.cs",
    "chars": 29,
    "preview": "// this file has been deleted"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.AssetSearch.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 8e7f2fbc78d4980488c970632c6aaab2\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.AsyncProcessor.cs",
    "chars": 9419,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\n\nnamespace Virt"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.AsyncProcessor.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 6b401fe2e5dd2e740bfc479d22492019\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.Constants.cs",
    "chars": 1810,
    "preview": "using System.Collections.Generic;\n\nnamespace VirtueSky.AssetFinder.Editor\n{\n    internal partial class AssetFinderCache\n"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.Constants.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 6c55ca682f1f6844b8cd730021311b53\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.Lifecycle.cs",
    "chars": 3740,
    "preview": "using System;\nusing System.IO;\nusing UnityEditor;\nusing UnityEngine;\nusing System.Linq;\n\nnamespace VirtueSky.AssetFinder"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.Lifecycle.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: f5c9fe5f4b20f53498fda1e06bf8ef0a\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.ProjectManager.cs",
    "chars": 8947,
    "preview": "using System.Collections.Generic;\nusing UnityEditor;\nusing UnityEngine;\n\nnamespace VirtueSky.AssetFinder.Editor\n{\n    in"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.ProjectManager.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 462f88bf52231f446ad48db4501584fa\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.Scanner.cs",
    "chars": 9936,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing UnityEditor;\n\nnamespace VirtueSky.AssetFinder.E"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.Scanner.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 294f715733c2fbf41b655b25454bf807\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.Search.cs",
    "chars": 4229,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing UnityEngine;\n\nnamespace VirtueSky.AssetFinder.Editor\n{\n    in"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.Search.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 96e6f3d54f320f74cbcb5ebb0e8f987e\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.cs",
    "chars": 5944,
    "preview": "//#define AssetFinderDEBUG\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Un"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderCache.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 30361f5a1e2f6bf449882a4a0fb04e00\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderGitUtil.cs",
    "chars": 2479,
    "preview": "using System.IO;\nusing UnityEngine;\n\nnamespace VirtueSky.AssetFinder.Editor\n{\n    internal static class AssetFinderGitUt"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderGitUtil.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: fdb05d77241c6fe4093af96a6787ef3a\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderNavigationHistory.cs",
    "chars": 5232,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\nusing UnityObject = UnityEngi"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderNavigationHistory.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: ac0493b90c0af8f4fb734aa7650864ac\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderSelectionManager.cs",
    "chars": 12407,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing UnityEditor;\nusing Uni"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderSelectionManager.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 21a87406f1e91644592297a6bf1e285d\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderSettingExt.cs",
    "chars": 4696,
    "preview": "using System;\nusing System.IO;\nusing UnityEditor;\nusing UnityEngine;\nnamespace VirtueSky.AssetFinder.Editor\n{\n    [Seria"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderSettingExt.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 42a3a6faf827daa46aa8f448c8aec943\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderSmartLock.cs",
    "chars": 1622,
    "preview": "// #define AssetFinderDEBUG\n\n\nusing System;\nusing UnityEditor;\nusing UnityEngine;\nusing UnityObject = UnityEngine.Object"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderSmartLock.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: b83b815529ea4e343857b73a07eb868b\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderWindowFocus.cs",
    "chars": 2536,
    "preview": "\nusing System;\nusing UnityEditor;\nusing UnityEditor.Compilation;\n\nnamespace VirtueSky.AssetFinder.Editor\n{\n    [Initiali"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core/AssetFinderWindowFocus.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: cdd3a4fc755761c42b4a385842caecbc\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Core.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: fd43daf252014e319860d77e81a52db8\ntimeCreated: 1746365393"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Dev/AssetFinderDefine.cs",
    "chars": 3770,
    "preview": "namespace VirtueSky.AssetFinder.Editor\n{\n    internal static class AssetFinderDefine\n    {\n        internal static bool "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Dev/AssetFinderDefine.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 6012e303bbe76174e8881b5cb101e950\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Dev/AssetFinderDev.cs",
    "chars": 711,
    "preview": "// #define AssetFinderDEV\nusing System;\n\nnamespace VirtueSky.AssetFinder.Editor\n{\n    public class AssetFinderDev\n    {\n"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Dev/AssetFinderDev.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 2e217d3aaf8ffd94d97abbbf9b0e9df5\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Dev/AssetFinderReferenceValidator.cs",
    "chars": 13493,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\n\nnamespace VirtueSky.AssetFin"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Dev/AssetFinderReferenceValidator.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 95909f9cceec2c94d98b1f9a061b26d3\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Dev/AssetFinderWindowAll.Validator.cs",
    "chars": 3002,
    "preview": "using UnityEditor;\nusing UnityEngine;\n\nnamespace VirtueSky.AssetFinder.Editor\n{\n    internal partial class AssetFinderWi"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Dev/AssetFinderWindowAll.Validator.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: dd971677ed211ef41826f4ab2d3bb028\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Dev.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: d6d7bf6fb14b44c697ed962d9ca4fac6\ntimeCreated: 1753192840"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderAddressableDrawer.cs",
    "chars": 9221,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\n\nnamespace Virt"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderAddressableDrawer.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: d1f842a83edda6e42a6c4ea4dc024049\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderAssetGroup.cs",
    "chars": 487,
    "preview": "using System.Collections.Generic;\nnamespace VirtueSky.AssetFinder.Editor\n{\n    internal class AssetFinderAssetGroup\n    "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderAssetGroup.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: bd3abcb0505d46544820add49a5c7377\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderAssetGroupDrawer.cs",
    "chars": 4896,
    "preview": "using UnityEditor;\nusing UnityEngine;\nnamespace VirtueSky.AssetFinder.Editor\n{\n\n\n    internal static class AssetFinderAs"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderAssetGroupDrawer.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 253072b20ae7c4f4d8119fcba52ca790\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderAssetOrganizer.cs",
    "chars": 35870,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderAssetOrganizer.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 994fa27b9be091e499e68d19ffd1f368\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderBookmark.cs",
    "chars": 8043,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\nusing UnityObje"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderBookmark.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 3ddd7baef5a53d048a4d84bd7fb20e35\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderDeleteEmptyFolder.cs",
    "chars": 9355,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderDeleteEmptyFolder.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: f83f35cc96d96694c80d7bec055f99f8\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderIgnoreDrawer.cs",
    "chars": 4299,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\nnamespace VirtueSky.AssetFind"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderIgnoreDrawer.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: dab80339cf5e1324f9ce59b4af29e79a\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderMissingReference.cs",
    "chars": 16593,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing UnityEditor;\nusing UnityEdit"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderMissingReference.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 5c3cf0d585651d34a80d39be086bc224\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderSetting.cs",
    "chars": 9733,
    "preview": "using System;\nusing System.Collections.Generic;\nusing UnityEditor;\nusing UnityEngine;\nusing UnityEngine.Serialization;\n\n"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderSetting.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 84c3e9e57209fbc45b591d007e25f316\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderUsedInBuild.cs",
    "chars": 4346,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\nnamespace Virtu"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer/AssetFinderUsedInBuild.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 6480768d52898e346865d2e94ba43ffd\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Drawer.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: b8dc12b3e4ad4bb8ac5cea3451bbc66f\ntimeCreated: 1746365376"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Duplicate/AssetFinderChunk.cs",
    "chars": 293,
    "preview": "using System.IO;\nnamespace VirtueSky.AssetFinder.Editor\n{\n    internal class AssetFinderChunk\n    {\n        public byte["
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Duplicate/AssetFinderChunk.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: bbaa77776ba63e24bbc227ec3072fc43\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Duplicate/AssetFinderDuplicateTree2.cs",
    "chars": 14879,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\nusing Object = "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Duplicate/AssetFinderDuplicateTree2.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: f858ea142423a864caf1f7888f216d13\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Duplicate/AssetFinderFileCompare.cs",
    "chars": 9106,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Duplicate/AssetFinderFileCompare.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 1fcea19945e771a46ad57540490f9275\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Duplicate/AssetFinderHead.cs",
    "chars": 5858,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing UnityEngine;\nnamespace VirtueS"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Duplicate/AssetFinderHead.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 2bfaaba7291e7244d984c18caaa91464\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Duplicate.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: b5e941cf0fab44ba90c39a055cd2602e\ntimeCreated: 1747080908"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extension/AssetFinderExtension.cs",
    "chars": 8099,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\nnamespace Virtu"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extension/AssetFinderExtension.cs.meta",
    "chars": 83,
    "preview": "fileFormatVersion: 2\nguid: 7ab1834f1ebc4a3fb6bb0a8d6835c370\ntimeCreated: 1725377102"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extension/AssetFinderHelper.cs",
    "chars": 2430,
    "preview": "using System.Collections.Generic;\nusing UnityEditor;\nusing UnityEngine;\nusing UnityEngine.SceneManagement;\nnamespace Vir"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extension/AssetFinderHelper.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 8828b643803591948bdcb8e6e9d898c3\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extension/AssetFinderUnity.cs",
    "chars": 36398,
    "preview": "#if UNITY_5_3_OR_NEWER\n#define UNITY_4_3_OR_NEWER\n#define UNITY_4_4_OR_NEWER\n#define UNITY_4_5_OR_NEWER\n#define UNITY_4_"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extension/AssetFinderUnity.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 65be7edb17b7a8b4092a809fc881f206\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extension/GUI2.cs",
    "chars": 17021,
    "preview": "using System;\nusing System.Collections.Generic;\nusing UnityEditor;\nusing UnityEngine;\nusing UnityEngine.Profiling;\nusing"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extension/GUI2.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 9fa484b2aa858464fb8254e4bbf1f6ac\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extension.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: 7c7413730e214b0ab9b5a7a25cbd9a44\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extensions/AssetFinderWindowExtensions.cs",
    "chars": 4907,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\nusing UnityObje"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extensions/AssetFinderWindowExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 393ff0810b1b94cefabaa2d9449560ee\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extensions/CollectionExtensions.cs",
    "chars": 464,
    "preview": "using System.Collections.Generic;\n\nnamespace VirtueSky.AssetFinder.Editor\n{\n    internal static class CollectionExtensio"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extensions/CollectionExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 1dbc4e32a727c4ecdb4be457da481199\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extensions/ColorExtensions.cs",
    "chars": 252,
    "preview": "using UnityEngine;\n\nnamespace VirtueSky.AssetFinder.Editor\n{\n    internal static class ColorExtensions\n    {\n        int"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extensions/ColorExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: d9b900ca884e345308acc476c8af4e53\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extensions/DictionaryExtensions.cs",
    "chars": 884,
    "preview": "using System;\nusing System.Collections.Generic;\n\nnamespace VirtueSky.AssetFinder.Editor\n{\n    internal static class Dict"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extensions/DictionaryExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 3f57a4bab3eb042b981518071fa681fa\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extensions/GameObjectExtensions.cs",
    "chars": 3877,
    "preview": "using System.Collections.Generic;\nusing UnityEngine;\nusing UnityEngine.SceneManagement;\nusing UnityEditor;\nusing UnityOb"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extensions/GameObjectExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 20b7c860188d14e36883165f4230bab3\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extensions/RectExtensions.cs",
    "chars": 2208,
    "preview": "using UnityEngine;\n\nnamespace VirtueSky.AssetFinder.Editor\n{\n    internal static class RectExtensions\n    {\n        inte"
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extensions/RectExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: d3ef94fba7a6949beb1eeb13be0b2e6a\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extensions/RectGUIExtensions.cs",
    "chars": 1688,
    "preview": "using System;\nusing UnityEngine;\nusing UnityEditor;\n\nnamespace VirtueSky.AssetFinder.Editor\n{\n    internal static class "
  },
  {
    "path": "VirtueSky/AssetFinder/Editor/Script/Extensions/RectGUIExtensions.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: c7cd0bdf6c8394e4cbde439e5052c9bb\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  }
]

// ... and 1899 more files (download for full content)

About this extraction

This page contains the full source code of the VirtueSky/sunflower GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2099 files (3.6 MB), approximately 1.1M tokens, and a symbol index with 5712 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!