From 3448c86bc248b6005a8a63eb865d1490466e09b3 Mon Sep 17 00:00:00 2001 From: SnowShow Date: Thu, 27 Mar 2025 16:12:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20Essential=20Kit=20-=20Mobi?= =?UTF-8?q?le=20(iOS=20&=20Android)=203.2.1=20=E6=8F=92=E4=BB=B6=20=20?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E5=9C=B0=E5=9D=80=EF=BC=9Ahttps://assetstore?= =?UTF-8?q?.essentialkit.voxelbusters.com/whats-new-in-v3/version-3-vs-ver?= =?UTF-8?q?sion-2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/ExternalDependencyManager.meta | 8 + .../ExternalDependencyManager/Editor.meta | 8 + .../Editor/1.2.183.meta | 8 + .../Editor/1.2.183/Google.IOSResolver.dll | Bin 0 -> 74240 bytes .../1.2.183/Google.IOSResolver.dll.meta | 38 + .../Editor/1.2.183/Google.JarResolver.dll | Bin 0 -> 364032 bytes .../1.2.183/Google.JarResolver.dll.meta | 38 + .../1.2.183/Google.PackageManagerResolver.dll | Bin 0 -> 74240 bytes .../Google.PackageManagerResolver.dll.meta | 38 + .../1.2.183/Google.VersionHandlerImpl.dll | Bin 0 -> 119296 bytes .../Google.VersionHandlerImpl.dll.meta | 38 + .../Editor/CHANGELOG.md | 1417 +++ .../Editor/CHANGELOG.md.meta | 12 + .../Editor/Google.VersionHandler.dll | Bin 0 -> 15360 bytes .../Editor/Google.VersionHandler.dll.meta | 36 + .../ExternalDependencyManager/Editor/LICENSE | 245 + .../Editor/LICENSE.meta | 12 + .../Editor/README.md | 897 ++ .../Editor/README.md.meta | 12 + ...dency-manager_version-1.2.183_manifest.txt | 13 + ...-manager_version-1.2.183_manifest.txt.meta | 15 + .../HotFix/GameLogic/GameLogic.asmdef | 3 +- EintooAR/Assets/Plugins/VoxelBusters.meta | 8 + .../Plugins/VoxelBusters/CoreLibrary.meta | 8 + .../VoxelBusters/CoreLibrary/Editor.meta | 8 + .../CoreLibrary/Editor/CoreLibrary.meta | 8 + .../Editor/CoreLibrary/Controllers.meta | 8 + .../Controllers/DomainReloadManager.cs | 136 + .../Controllers/DomainReloadManager.cs.meta | 11 + .../SettingsObjectEditorManager.cs | 23 + .../SettingsObjectEditorManager.cs.meta | 11 + .../Editor/CoreLibrary/Inspectors.meta | 8 + .../Inspectors/CustomEditorStyles.cs | 228 + .../Inspectors/CustomEditorStyles.cs.meta | 11 + .../CoreLibrary/Inspectors/CustomInspector.cs | 52 + .../Inspectors/CustomInspector.cs.meta | 12 + .../Inspectors/EditorLayoutBuilder.cs | 527 ++ .../Inspectors/EditorLayoutBuilder.cs.meta | 11 + .../Inspectors/EditorLayoutUtility.cs | 117 + .../Inspectors/EditorLayoutUtility.cs.meta | 11 + .../CoreLibrary/Inspectors/EditorSplitView.cs | 185 + .../Inspectors/EditorSplitView.cs.meta | 11 + .../CoreLibrary/Inspectors/EditorWindowZ.cs | 41 + .../Inspectors/EditorWindowZ.cs.meta | 11 + .../Inspectors/EnumMaskFieldDrawer.cs | 49 + .../Inspectors/EnumMaskFieldDrawer.cs.meta | 12 + .../Inspectors/FileBrowserAttributeDrawer.cs | 52 + .../FileBrowserAttributeDrawer.cs.meta | 12 + .../FolderBrowserAttributeDrawer.cs | 51 + .../FolderBrowserAttributeDrawer.cs.meta | 12 + .../InterfaceFieldAttributeDrawer.cs | 38 + .../InterfaceFieldAttributeDrawer.cs.meta | 12 + .../Inspectors/ReadOnlyAttributeDrawer.cs | 66 + .../ReadOnlyAttributeDrawer.cs.meta | 11 + .../RuntimePlatformConstantDrawer.cs | 38 + .../RuntimePlatformConstantDrawer.cs.meta | 11 + .../Inspectors/SettingsObjectInspector.cs | 244 + .../SettingsObjectInspector.cs.meta | 11 + .../Inspectors/SettingsProviderZ.cs | 89 + .../Inspectors/SettingsProviderZ.cs.meta | 11 + .../Inspectors/StringPopupAttributeDrawer.cs | 49 + .../StringPopupAttributeDrawer.cs.meta | 11 + .../Inspectors/UnityEditorUtility.cs | 105 + .../Inspectors/UnityEditorUtility.cs.meta | 12 + .../CoreLibrary/Editor/CoreLibrary/Misc.meta | 8 + .../Misc/AddUnityPackageOperation.cs | 115 + .../Misc/AddUnityPackageOperation.cs.meta | 11 + .../Misc/ScriptingDefinesManager.cs | 152 + .../Misc/ScriptingDefinesManager.cs.meta | 11 + .../Editor/CoreLibrary/Utilities.meta | 8 + .../Utilities/AddUpmPackageRequest.cs | 60 + .../Utilities/AddUpmPackageRequest.cs.meta | 11 + .../Utilities/AssemblyDefinitionData.cs | 61 + .../Utilities/AssemblyDefinitionData.cs.meta | 11 + .../Utilities/AssemblyDefinitionProxy.cs | 52 + .../Utilities/AssemblyDefinitionProxy.cs.meta | 11 + .../Utilities/AssemblyDefinitionServices.cs | 39 + .../AssemblyDefinitionServices.cs.meta | 11 + .../Utilities/AssetDatabaseUtility.cs | 90 + .../Utilities/AssetDatabaseUtility.cs.meta | 12 + .../Utilities/DeleteAssetRequest.cs | 39 + .../Utilities/DeleteAssetRequest.cs.meta | 11 + .../Utilities/EditorApplicationUtility.cs | 31 + .../EditorApplicationUtility.cs.meta | 11 + .../Utilities/ImportPackageRequest.cs | 40 + .../Utilities/ImportPackageRequest.cs.meta | 11 + .../Utilities/RemoveUpmPackageRequest.cs | 60 + .../Utilities/RemoveUpmPackageRequest.cs.meta | 11 + .../Editor/CoreLibrary/Utilities/TypeCache.cs | 122 + .../CoreLibrary/Utilities/TypeCache.cs.meta | 11 + .../Utilities/UnityPackageServices.cs | 89 + .../Utilities/UnityPackageServices.cs.meta | 11 + .../VoxelBusters.CoreLibrary.Editor.asmdef | 16 + ...oxelBusters.CoreLibrary.Editor.asmdef.meta | 7 + .../CoreLibrary/Editor/Experimental.meta | 8 + .../Editor/Experimental/Inspectors.meta | 8 + .../Experimental/Inspectors/InstallPath.cs | 25 + .../Inspectors/InstallPath.cs.meta | 11 + .../Inspectors/ProxyMenuManager.cs | 65 + .../Inspectors/ProxyMenuManager.cs.meta | 11 + .../Inspectors/ProxySettingsProvider.cs | 115 + .../Inspectors/ProxySettingsProvider.cs.meta | 11 + .../Editor/Experimental/PackageServices.meta | 8 + .../AssetPackageDependencyResolver.cs | 163 + .../AssetPackageDependencyResolver.cs.meta | 11 + ...ers.CoreLibrary.Editor.Experimental.asmdef | 17 + ...oreLibrary.Editor.Experimental.asmdef.meta | 7 + .../CoreLibrary/Editor/NativePlugins.meta | 9 + .../Editor/NativePlugins/BuildPipeline.meta | 8 + .../NativePlugins/BuildPipeline/Android.meta | 8 + .../Android/AndroidNativePluginsManager.cs | 48 + .../AndroidNativePluginsManager.cs.meta | 11 + .../Android/AndroidNativePluginsProcessor.cs | 10 + .../AndroidNativePluginsProcessor.cs.meta | 11 + .../BuildPipeline/Android/Base.meta | 9 + .../BuildPipeline/Android/Base/Attribute.cs | 27 + .../Android/Base/Attribute.cs.meta | 12 + .../BuildPipeline/Android/Base/Element.cs | 83 + .../Android/Base/Element.cs.meta | 12 + .../BuildPipeline/Android/Manifest.meta | 9 + .../Android/Manifest/Application.meta | 9 + .../Manifest/Application/Activity.meta | 9 + .../Manifest/Application/Activity/Activity.cs | 21 + .../Application/Activity/Activity.cs.meta | 12 + .../Manifest/Application/Activity/Layout.cs | 14 + .../Application/Activity/Layout.cs.meta | 12 + .../Manifest/Application/ActivityAlias.cs | 14 + .../Application/ActivityAlias.cs.meta | 12 + .../Manifest/Application/AppComponent.cs | 19 + .../Manifest/Application/AppComponent.cs.meta | 12 + .../Manifest/Application/Application.cs | 47 + .../Manifest/Application/Application.cs.meta | 12 + .../Android/Manifest/Application/Common.meta | 9 + .../Application/Common/IntentFilters.meta | 9 + .../Common/IntentFilters/Action.cs | 15 + .../Common/IntentFilters/Action.cs.meta | 12 + .../Common/IntentFilters/Category.cs | 14 + .../Common/IntentFilters/Category.cs.meta | 12 + .../Application/Common/IntentFilters/Data.cs | 14 + .../Common/IntentFilters/Data.cs.meta | 12 + .../Common/IntentFilters/IntentFilter.cs | 30 + .../Common/IntentFilters/IntentFilter.cs.meta | 12 + .../Manifest/Application/Common/MetaData.cs | 14 + .../Application/Common/MetaData.cs.meta | 12 + .../Android/Manifest/Application/Library.cs | 15 + .../Manifest/Application/Library.cs.meta | 12 + .../Manifest/Application/Provider.meta | 9 + .../Provider/GrantURIPermission.cs | 14 + .../Provider/GrantURIPermission.cs.meta | 12 + .../Application/Provider/PathPermission.cs | 14 + .../Provider/PathPermission.cs.meta | 12 + .../Manifest/Application/Provider/Provider.cs | 19 + .../Application/Provider/Provider.cs.meta | 12 + .../Android/Manifest/Application/Receiver.cs | 14 + .../Manifest/Application/Receiver.cs.meta | 12 + .../Android/Manifest/Application/Service.cs | 14 + .../Manifest/Application/Service.cs.meta | 12 + .../Android/Manifest/CompatibleScreens.cs | 25 + .../Manifest/CompatibleScreens.cs.meta | 12 + .../Android/Manifest/Configuration.cs | 14 + .../Android/Manifest/Configuration.cs.meta | 12 + .../BuildPipeline/Android/Manifest/Feature.cs | 14 + .../Android/Manifest/Feature.cs.meta | 12 + .../Android/Manifest/Instrumentation.cs | 14 + .../Android/Manifest/Instrumentation.cs.meta | 12 + .../Android/Manifest/Manifest.cs | 79 + .../Android/Manifest/Manifest.cs.meta | 12 + .../Android/Manifest/Permission.cs | 14 + .../Android/Manifest/Permission.cs.meta | 12 + .../Android/Manifest/PermissionGroup.cs | 14 + .../Android/Manifest/PermissionGroup.cs.meta | 12 + .../Android/Manifest/PermissionTree.cs | 14 + .../Android/Manifest/PermissionTree.cs.meta | 12 + .../Android/Manifest/Queries.meta | 8 + .../Android/Manifest/Queries/Intent.cs | 29 + .../Android/Manifest/Queries/Intent.cs.meta | 11 + .../Android/Manifest/Queries/Package.cs | 14 + .../Android/Manifest/Queries/Package.cs.meta | 11 + .../Android/Manifest/Queries/Queries.cs | 24 + .../Android/Manifest/Queries/Queries.cs.meta | 11 + .../BuildPipeline/Android/Manifest/SDK.cs | 14 + .../Android/Manifest/SDK.cs.meta | 12 + .../Android/Manifest/SupportedGLTexture.cs | 14 + .../Manifest/SupportedGLTexture.cs.meta | 12 + .../Android/Manifest/SupportedScreens.cs | 14 + .../Android/Manifest/SupportedScreens.cs.meta | 12 + .../BuildPipeline/INativeBindingsWriter.cs | 24 + .../INativeBindingsWriter.cs.meta | 11 + .../LinkXmlWriter.AssemblyDefinition.cs | 88 + .../LinkXmlWriter.AssemblyDefinition.cs.meta | 11 + .../BuildPipeline/LinkXmlWriter.cs | 183 + .../BuildPipeline/LinkXmlWriter.cs.meta | 11 + .../BuildPipeline/NativeBindingsGenerator.cs | 128 + .../NativeBindingsGenerator.cs.meta | 11 + .../NativePluginsExporterObject.cs | 92 + .../NativePluginsExporterObject.cs.meta | 12 + .../NativePluginsExporterObjectEditor.cs | 12 + .../NativePluginsExporterObjectEditor.cs.meta | 12 + .../NativePluginsExporterObjectGroup.cs | 28 + .../NativePluginsExporterObjectGroup.cs.meta | 11 + .../BuildPipeline/NativePluginsManager.cs | 112 + .../NativePluginsManager.cs.meta | 11 + .../BuildPipeline/NativePluginsProcessor.cs | 53 + .../NativePluginsProcessor.cs.meta | 11 + .../BuildPipeline/TargetBuilder.cs | 182 + .../BuildPipeline/TargetBuilder.cs.meta | 11 + ...UnsupportedPlatformNativePluginsManager.cs | 36 + ...portedPlatformNativePluginsManager.cs.meta | 11 + ...supportedPlatformNativePluginsProcessor.cs | 9 + ...rtedPlatformNativePluginsProcessor.cs.meta | 11 + .../NativePlugins/BuildPipeline/Xcode.meta | 9 + .../Xcode/BuildConfigurationKey.cs | 25 + .../Xcode/BuildConfigurationKey.cs.meta | 12 + .../BuildPipeline/Xcode/InfoPlistKey.cs | 43 + .../BuildPipeline/Xcode/InfoPlistKey.cs.meta | 12 + .../Xcode/MacroDefinitionsManager.cs | 65 + .../Xcode/MacroDefinitionsManager.cs.meta | 12 + .../Xcode/PBXAssociatedDomainsEntitlement.cs | 34 + .../PBXAssociatedDomainsEntitlement.cs.meta | 12 + .../BuildPipeline/Xcode/PBXCapability.cs | 72 + .../BuildPipeline/Xcode/PBXCapability.cs.meta | 12 + .../BuildPipeline/Xcode/PBXCapabilityType.cs | 15 + .../Xcode/PBXCapabilityType.cs.meta | 12 + .../BuildPipeline/Xcode/PBXFIle.cs | 40 + .../BuildPipeline/Xcode/PBXFIle.cs.meta | 12 + .../BuildPipeline/Xcode/PBXFileDrawer.cs | 37 + .../BuildPipeline/Xcode/PBXFileDrawer.cs.meta | 12 + .../BuildPipeline/Xcode/PBXFramework.cs | 77 + .../BuildPipeline/Xcode/PBXFramework.cs.meta | 12 + .../BuildPipeline/Xcode/PBXFrameworkDrawer.cs | 41 + .../Xcode/PBXFrameworkDrawer.cs.meta | 12 + .../Xcode/PBXFrameworkNameAttribute.cs | 40 + .../Xcode/PBXFrameworkNameAttribute.cs.meta | 12 + .../Xcode/PBXFrameworkNameAttributeDrawer.cs | 31 + .../PBXFrameworkNameAttributeDrawer.cs.meta | 12 + .../Xcode/PBXNativePluginsExporterObject.cs | 124 + .../PBXNativePluginsExporterObject.cs.meta | 11 + .../Xcode/PBXNativePluginsManager.cs | 585 ++ .../Xcode/PBXNativePluginsManager.cs.meta | 12 + .../Xcode/PBXNativePluginsProcessor.cs | 31 + .../Xcode/PBXNativePluginsProcessor.cs.meta | 11 + .../Xcode/PBXProjectExtensions.cs | 87 + .../Xcode/PBXProjectExtensions.cs.meta | 12 + .../Xcode/PBXTargetMembership.cs | 16 + .../Xcode/PBXTargetMembership.cs.meta | 11 + .../BuildPipeline/Xcode/PlistUtility.cs | 76 + .../BuildPipeline/Xcode/PlistUtility.cs.meta | 12 + .../ProjectCapabilityManagerExtensions.cs | 48 + ...ProjectCapabilityManagerExtensions.cs.meta | 11 + .../Editor/NativePlugins/DemoKit.meta | 9 + .../DemoKit/EditorDemoManager.cs | 24 + .../DemoKit/EditorDemoManager.cs.meta | 12 + .../NativePluginsPackageLayout.cs | 13 + .../NativePluginsPackageLayout.cs.meta | 11 + .../ObjectiveCBindingsGenerator.cs | 340 + .../ObjectiveCBindingsGenerator.cs.meta | 11 + .../NativePlugins/PluginFeatureObject.cs | 80 + .../NativePlugins/PluginFeatureObject.cs.meta | 11 + .../SimulatorServices.Database.cs | 78 + .../SimulatorServices.Database.cs.meta | 12 + .../Editor/NativePlugins/SimulatorServices.cs | 102 + .../NativePlugins/SimulatorServices.cs.meta | 12 + .../Editor/NativePlugins/UnityUI.meta | 8 + .../UnityUI/UnityUIEditorUtility.cs | 33 + .../UnityUI/UnityUIEditorUtility.cs.meta | 12 + ...rs.CoreLibrary.Editor.NativePlugins.asmdef | 18 + ...reLibrary.Editor.NativePlugins.asmdef.meta | 7 + .../CoreLibrary/EditorResources.meta | 8 + .../CoreLibrary/EditorResources/Textures.meta | 8 + .../EditorResources/Textures/toggle-off.png | Bin 0 -> 3929 bytes .../Textures/toggle-off.png.meta | 159 + .../EditorResources/Textures/toggle-on.png | Bin 0 -> 3421 bytes .../Textures/toggle-on.png.meta | 159 + .../VoxelBusters/CoreLibrary/Extras.meta | 8 + .../CoreLibrary/Extras/Helpers.meta | 8 + .../Helpers/DefaultJsonServiceProvider.cs | 44 + .../DefaultJsonServiceProvider.cs.meta | 12 + .../DefaultLocalisationServiceProvider.cs | 34 + ...DefaultLocalisationServiceProvider.cs.meta | 11 + .../Helpers/DefaultSaveServiceProvider.cs | 94 + .../DefaultSaveServiceProvider.cs.meta | 12 + .../VoxelBusters/CoreLibrary/Fonts.meta | 8 + .../CoreLibrary/Fonts/Lato-Regular.ttf | Bin 0 -> 75136 bytes .../CoreLibrary/Fonts/Lato-Regular.ttf.meta | 23 + .../VoxelBusters/CoreLibrary/Plugins.meta | 8 + .../VoxelBusters/CoreLibrary/Plugins/iOS.meta | 9 + .../CoreLibrary/Plugins/iOS/Base.asset | 28 + .../CoreLibrary/Plugins/iOS/Base.asset.meta | 9 + .../CoreLibrary/Plugins/iOS/Frameworks.meta | 8 + .../Frameworks/VBCoreLibrary.framework.meta | 80 + .../Headers/VBCoreLibrary-Swift.h | 315 + .../Headers/VBCoreLibrary.h | 11 + .../VBCoreLibrary.framework/Info.plist | Bin 0 -> 762 bytes .../Project/arm64-apple-ios.swiftsourceinfo | Bin 0 -> 3392 bytes .../arm64-apple-ios.abi.json | 9 + .../arm64-apple-ios.swiftdoc | Bin 0 -> 412 bytes .../arm64-apple-ios.swiftmodule | Bin 0 -> 25016 bytes .../Modules/module.modulemap | 11 + .../VBCoreLibrary.framework/VBCoreLibrary | Bin 0 -> 216992 bytes .../_CodeSignature/CodeResources | 179 + .../CoreLibrary/Plugins/iOS/NPBindingHelper.h | 70 + .../Plugins/iOS/NPBindingHelper.h.meta | 42 + .../Plugins/iOS/NPBindingHelper.mm | 606 ++ .../Plugins/iOS/NPBindingHelper.mm.meta | 50 + .../CoreLibrary/Plugins/iOS/NPConfig.h | 7 + .../CoreLibrary/Plugins/iOS/NPConfig.h.meta | 50 + .../CoreLibrary/Plugins/iOS/NPDefines.h | 31 + .../CoreLibrary/Plugins/iOS/NPDefines.h.meta | 50 + .../CoreLibrary/Plugins/iOS/NPKit.h | 14 + .../CoreLibrary/Plugins/iOS/NPKit.h.meta | 50 + .../Plugins/iOS/NPListenerWrapperBase.h | 17 + .../Plugins/iOS/NPListenerWrapperBase.h.meta | 42 + .../Plugins/iOS/NPListenerWrapperBase.mm | 20 + .../Plugins/iOS/NPListenerWrapperBase.mm.meta | 52 + .../Plugins/iOS/NPManagedPointerCache.h | 19 + .../Plugins/iOS/NPManagedPointerCache.h.meta | 45 + .../Plugins/iOS/NPManagedPointerCache.mm | 62 + .../Plugins/iOS/NPManagedPointerCache.mm.meta | 55 + .../Plugins/iOS/NPUnityAppController.h | 29 + .../Plugins/iOS/NPUnityAppController.h.meta | 127 + .../Plugins/iOS/NPUnityAppController.mm | 145 + .../Plugins/iOS/NPUnityAppController.mm.meta | 55 + .../Plugins/iOS/NPUnityDataTypes.h | 108 + .../Plugins/iOS/NPUnityDataTypes.h.meta | 50 + .../Plugins/iOS/NPUnityDataTypes.mm | 34 + .../Plugins/iOS/NPUnityDataTypes.mm.meta | 50 + .../Plugins/iOS/NPUnityDateComponents.h | 53 + .../Plugins/iOS/NPUnityDateComponents.h.meta | 50 + .../Plugins/iOS/NPUnityDateComponents.mm | 202 + .../Plugins/iOS/NPUnityDateComponents.mm.meta | 50 + .../Plugins/iOS/NPUtilityBinding.h | 13 + .../Plugins/iOS/NPUtilityBinding.h.meta | 42 + .../Plugins/iOS/NPUtilityBinding.mm | 78 + .../Plugins/iOS/NPUtilityBinding.mm.meta | 52 + .../CoreLibrary/Plugins/iOS/NSError+Utility.h | 25 + .../Plugins/iOS/NSError+Utility.h.meta | 80 + .../Plugins/iOS/NSError+Utility.mm | 36 + .../Plugins/iOS/NSError+Utility.mm.meta | 85 + .../Plugins/iOS/NativePluginsBaseGroup.asset | 16 + .../iOS/NativePluginsBaseGroup.asset.meta | 8 + .../Plugins/iOS/UIView+LayoutConstraints.h | 16 + .../iOS/UIView+LayoutConstraints.h.meta | 42 + .../Plugins/iOS/UIView+LayoutConstraints.mm | 27 + .../iOS/UIView+LayoutConstraints.mm.meta | 115 + .../iOS/UIViewController+Presentation.h | 29 + .../iOS/UIViewController+Presentation.h.meta | 50 + .../iOS/UIViewController+Presentation.mm | 78 + .../iOS/UIViewController+Presentation.mm.meta | 50 + .../VoxelBusters/CoreLibrary/Prefabs.meta | 9 + .../CoreLibrary/Prefabs/Examples.meta | 9 + .../Prefabs/Examples/ActionPanel.prefab | 294 + .../Prefabs/Examples/ActionPanel.prefab.meta | 9 + .../Prefabs/Examples/BackButton.prefab | 233 + .../Prefabs/Examples/BackButton.prefab.meta | 9 + .../Prefabs/Examples/Button.prefab | 220 + .../Prefabs/Examples/Button.prefab.meta | 9 + .../Prefabs/Examples/ConsolePanel.prefab | 464 + .../Prefabs/Examples/ConsolePanel.prefab.meta | 9 + .../Prefabs/Examples/DemoPanel.prefab | 157 + .../Prefabs/Examples/DemoPanel.prefab.meta | 9 + .../Prefabs/Examples/DemoResources.prefab | 60 + .../Examples/DemoResources.prefab.meta | 9 + .../Prefabs/Examples/Dropdown.prefab | 797 ++ .../Prefabs/Examples/Dropdown.prefab.meta | 9 + .../CoreLibrary/Prefabs/Examples/Grid.prefab | 70 + .../Prefabs/Examples/Grid.prefab.meta | 9 + .../Prefabs/Examples/Header.prefab | 177 + .../Prefabs/Examples/Header.prefab.meta | 9 + .../Prefabs/Examples/InputField.prefab | 322 + .../Prefabs/Examples/InputField.prefab.meta | 9 + .../CoreLibrary/Prefabs/Examples/Label.prefab | 138 + .../Prefabs/Examples/Label.prefab.meta | 9 + .../Prefabs/Examples/Row (Horizontal).prefab | 105 + .../Examples/Row (Horizontal).prefab.meta | 9 + .../CoreLibrary/Prefabs/Examples/Row.prefab | 46 + .../Prefabs/Examples/Row.prefab.meta | 9 + .../Prefabs/Examples/Section.prefab | 198 + .../Prefabs/Examples/Section.prefab.meta | 9 + .../Prefabs/Examples/SelectableButton.prefab | 299 + .../Examples/SelectableButton.prefab.meta | 9 + .../Prefabs/Examples/SubHeader.prefab | 156 + .../Prefabs/Examples/SubHeader.prefab.meta | 9 + .../Prefabs/Examples/SubTitle.prefab | 138 + .../Prefabs/Examples/SubTitle.prefab.meta | 9 + .../Prefabs/Examples/Toggle.prefab | 383 + .../Prefabs/Examples/Toggle.prefab.meta | 9 + .../Prefabs/UnityUIAlertDialog.prefab | 787 ++ .../Prefabs/UnityUIAlertDialog.prefab.meta | 9 + .../Prefabs/UnityUIRenderer.prefab | 114 + .../Prefabs/UnityUIRenderer.prefab.meta | 9 + .../VoxelBusters/CoreLibrary/README.md | 29 + .../VoxelBusters/CoreLibrary/README.md.meta | 7 + .../VoxelBusters/CoreLibrary/Runtime.meta | 9 + .../CoreLibrary/Runtime/CoreLibrary.meta | 8 + .../Runtime/CoreLibrary/AssemblyInfo.cs | 25 + .../Runtime/CoreLibrary/AssemblyInfo.cs.meta | 11 + .../Runtime/CoreLibrary/AsyncOperations.meta | 8 + .../AsyncOperations/AsyncOperation.cs | 217 + .../AsyncOperations/AsyncOperation.cs.meta | 11 + .../AsyncOperations/AsyncOperationHandle.cs | 140 + .../AsyncOperationHandle.cs.meta | 11 + .../AsyncOperations/AsyncOperationManager.cs | 74 + .../AsyncOperationManager.cs.meta | 11 + .../AsyncOperationResultContainer.cs | 88 + .../AsyncOperationResultContainer.cs.meta | 11 + .../AsyncOperations/AsyncOperationStatus.cs | 17 + .../AsyncOperationStatus.cs.meta | 11 + .../AsyncOperations/ChainedOperation.cs | 148 + .../AsyncOperations/ChainedOperation.cs.meta | 11 + .../AsyncOperations/GroupOperation.cs | 161 + .../AsyncOperations/GroupOperation.cs.meta | 11 + .../AsyncOperations/IAsyncOperation.cs | 61 + .../AsyncOperations/IAsyncOperation.cs.meta | 11 + .../AsyncOperations/IAsyncOperationHandle.cs | 48 + .../IAsyncOperationHandle.cs.meta | 11 + .../IAsyncOperationResultContainer.cs | 35 + .../IAsyncOperationResultContainer.cs.meta | 11 + .../Runtime/CoreLibrary/Attributes.meta | 8 + .../Attributes/ClearOnReloadAttribute.cs | 56 + .../Attributes/ClearOnReloadAttribute.cs.meta | 11 + .../Attributes/DefaultAttribute.cs | 92 + .../Attributes/DefaultAttribute.cs.meta | 11 + .../Attributes/EnumMaskFieldAttribute.cs | 30 + .../Attributes/EnumMaskFieldAttribute.cs.meta | 12 + .../Attributes/ExecuteOnReloadAttribute.cs | 15 + .../ExecuteOnReloadAttribute.cs.meta | 11 + .../Attributes/FileBrowserAttribute.cs | 28 + .../Attributes/FileBrowserAttribute.cs.meta | 12 + .../Attributes/FolderBrowserAttribute.cs | 25 + .../Attributes/FolderBrowserAttribute.cs.meta | 12 + .../Attributes/IncludeInDocsAttribute.cs | 9 + .../Attributes/IncludeInDocsAttribute.cs.meta | 11 + .../Attributes/InterfaceFieldAttribute.cs | 30 + .../InterfaceFieldAttribute.cs.meta | 12 + .../Attributes/ReadOnlyAttribute.cs | 22 + .../Attributes/ReadOnlyAttribute.cs.meta | 11 + .../Attributes/StringPopupAttribute.cs | 58 + .../Attributes/StringPopupAttribute.cs.meta | 11 + .../Runtime/CoreLibrary/Components.meta | 8 + .../Components/ActionTriggerComponent.cs | 158 + .../Components/ActionTriggerComponent.cs.meta | 11 + .../Components/CallbackDispatcher.cs | 228 + .../Components/CallbackDispatcher.cs.meta | 11 + .../CoreLibrary/Components/EditorScheduler.cs | 91 + .../Components/EditorScheduler.cs.meta | 11 + .../Components/IOperationResultContainer.cs | 17 + .../IOperationResultContainer.cs.meta | 12 + .../CoreLibrary/Components/IScheduler.cs | 25 + .../CoreLibrary/Components/IScheduler.cs.meta | 11 + .../Components/ISchedulerUpdateHandler.cs | 15 + .../ISchedulerUpdateHandler.cs.meta | 11 + .../CoreLibrary/Components/MonoBehaviourZ.cs | 52 + .../Components/MonoBehaviourZ.cs.meta | 11 + .../Components/PersistentObject.cs | 18 + .../Components/PersistentObject.cs.meta | 12 + .../Components/RuntimeScheduler.cs | 67 + .../Components/RuntimeScheduler.cs.meta | 11 + .../CoreLibrary/Components/Scheduler.cs | 75 + .../CoreLibrary/Components/Scheduler.cs.meta | 11 + .../Components/SurrogateCoroutine.cs | 80 + .../Components/SurrogateCoroutine.cs.meta | 12 + .../Runtime/CoreLibrary/Constants.meta | 8 + .../CoreLibrary/Constants/ConsentStatus.cs | 15 + .../Constants/ConsentStatus.cs.meta | 11 + .../CoreLibrary/Constants/ContentRating.cs | 28 + .../Constants/ContentRating.cs.meta | 11 + .../Constants/CoreLibraryDomain.cs | 13 + .../Constants/CoreLibraryDomain.cs.meta | 11 + .../Runtime/CoreLibrary/Constants/MimeType.cs | 153 + .../CoreLibrary/Constants/MimeType.cs.meta | 12 + .../Constants/TextEncodingFormat.cs | 22 + .../Constants/TextEncodingFormat.cs.meta | 12 + .../Constants/TextureEncodingFormat.cs | 18 + .../Constants/TextureEncodingFormat.cs.meta | 12 + .../Runtime/CoreLibrary/DataModels.meta | 9 + .../ApplicationPrivacyConfiguration.cs | 48 + .../ApplicationPrivacyConfiguration.cs.meta | 11 + .../CoreLibrary/DataModels/ApplicationUser.cs | 81 + .../DataModels/ApplicationUser.cs.meta | 11 + .../Runtime/CoreLibrary/DataModels/Asset.cs | 61 + .../CoreLibrary/DataModels/Asset.cs.meta | 11 + .../Runtime/CoreLibrary/DataModels/Error.cs | 68 + .../CoreLibrary/DataModels/Error.cs.meta | 12 + .../DataModels/KeyValueDataStore.cs | 226 + .../DataModels/KeyValueDataStore.cs.meta | 11 + .../CoreLibrary/DataModels/ReadableId.cs | 39 + .../CoreLibrary/DataModels/ReadableId.cs.meta | 11 + .../DataModels/RuntimePlatformConstant.cs | 115 + .../RuntimePlatformConstant.cs.meta | 11 + .../DataModels/RuntimePlatformConstantSet.cs | 77 + .../RuntimePlatformConstantSet.cs.meta | 11 + .../DataModels/SerializableKeyValuePair.cs | 59 + .../SerializableKeyValuePair.cs.meta | 12 + .../DataModels/StringKeyValuePair.cs | 16 + .../DataModels/StringKeyValuePair.cs.meta | 12 + .../CoreLibrary/DataModels/TextureData.cs | 83 + .../DataModels/TextureData.cs.meta | 12 + .../CoreLibrary/DataModels/URLString.cs | 95 + .../CoreLibrary/DataModels/URLString.cs.meta | 12 + .../DataModels/UnityPackageDefinition.cs | 92 + .../DataModels/UnityPackageDefinition.cs.meta | 11 + .../CoreLibrary/DataModels/VBException.cs | 59 + .../DataModels/VBException.cs.meta | 12 + .../DataModels/ValidationResult.cs | 67 + .../DataModels/ValidationResult.cs.meta | 11 + .../Runtime/CoreLibrary/DesignPatterns.meta | 9 + .../PrivateSingletonBehaviour.cs | 197 + .../PrivateSingletonBehaviour.cs.meta | 12 + .../DesignPatterns/SingletonBehaviour.cs | 17 + .../DesignPatterns/SingletonBehaviour.cs.meta | 12 + .../DesignPatterns/SingletonObject.cs | 46 + .../DesignPatterns/SingletonObject.cs.meta | 12 + .../Runtime/CoreLibrary/Events.meta | 8 + .../Events/EventHandlerCollection.cs | 147 + .../Events/EventHandlerCollection.cs.meta | 11 + .../CoreLibrary/Events/IEventHandler.cs | 16 + .../CoreLibrary/Events/IEventHandler.cs.meta | 11 + .../Runtime/CoreLibrary/Interfaces.meta | 8 + .../Interfaces/ExternalServiceProvider.cs | 82 + .../ExternalServiceProvider.cs.meta | 12 + .../Interfaces/IJsonServiceProvider.cs | 30 + .../Interfaces/IJsonServiceProvider.cs.meta | 12 + .../ILocalisationServiceProvider.cs | 11 + .../ILocalisationServiceProvider.cs.meta | 11 + .../Interfaces/ISaveServiceProvider.cs | 36 + .../Interfaces/ISaveServiceProvider.cs.meta | 12 + .../CoreLibrary/Interfaces/IValidator.cs | 19 + .../CoreLibrary/Interfaces/IValidator.cs.meta | 11 + .../Runtime/CoreLibrary/Managers.meta | 8 + .../CoreLibrary/Managers/CommandProcessor.cs | 159 + .../Managers/CommandProcessor.cs.meta | 11 + .../Runtime/CoreLibrary/Managers/ICommand.cs | 23 + .../CoreLibrary/Managers/ICommand.cs.meta | 11 + .../CoreLibrary/Runtime/CoreLibrary/Misc.meta | 8 + .../Runtime/CoreLibrary/Misc/Assert.cs | 107 + .../Runtime/CoreLibrary/Misc/Assert.cs.meta | 12 + .../Runtime/CoreLibrary/Misc/DebugLogger.cs | 194 + .../CoreLibrary/Misc/DebugLogger.cs.meta | 12 + .../Runtime/CoreLibrary/Misc/ListPool{T}.cs | 57 + .../CoreLibrary/Misc/ListPool{T}.cs.meta | 11 + .../Runtime/CoreLibrary/Misc/ObjectPool{T}.cs | 96 + .../CoreLibrary/Misc/ObjectPool{T}.cs.meta | 11 + .../Runtime/CoreLibrary/Networking.meta | 8 + .../CoreLibrary/Networking/RestClient.cs | 82 + .../CoreLibrary/Networking/RestClient.cs.meta | 11 + .../Runtime/CoreLibrary/Setup.meta | 8 + .../CoreLibrary/Setup/CoreLibrarySettings.cs | 39 + .../Setup/CoreLibrarySettings.cs.meta | 11 + .../CoreLibrary/Setup/SettingsObject.cs | 34 + .../CoreLibrary/Setup/SettingsObject.cs.meta | 11 + .../Setup/SettingsPropertyGroup.cs | 47 + .../Setup/SettingsPropertyGroup.cs.meta | 11 + .../Runtime/CoreLibrary/Utilities.meta | 9 + .../Utilities/ApplicationLifecycleObserver.cs | 53 + .../ApplicationLifecycleObserver.cs.meta | 11 + .../Utilities/ApplicationServices.cs | 109 + .../Utilities/ApplicationServices.cs.meta | 11 + .../Utilities/CollectionUtility.cs | 252 + .../Utilities/CollectionUtility.cs.meta | 11 + .../CoreLibrary/Utilities/ComponentUtility.cs | 88 + .../Utilities/ComponentUtility.cs.meta | 12 + .../CoreLibrary/Utilities/EnumUtility.cs | 42 + .../CoreLibrary/Utilities/EnumUtility.cs.meta | 11 + .../Utilities/GameObjectUtility.cs | 109 + .../Utilities/GameObjectUtility.cs.meta | 12 + .../IApplicationLifecycleListener.cs | 9 + .../IApplicationLifecycleListener.cs.meta | 11 + .../CoreLibrary/Utilities/IOServices.cs | 279 + .../CoreLibrary/Utilities/IOServices.cs.meta | 12 + .../CoreLibrary/Utilities/ObjectHelper.cs | 22 + .../Utilities/ObjectHelper.cs.meta | 11 + .../CoreLibrary/Utilities/PropertyHelper.cs | 60 + .../Utilities/PropertyHelper.cs.meta | 11 + .../Utilities/ReflectionUtility.cs | 298 + .../Utilities/ReflectionUtility.cs.meta | 12 + .../CoreLibrary/Utilities/ResourcesUtility.cs | 24 + .../Utilities/ResourcesUtility.cs.meta | 11 + .../RuntimePlatformConstantUtility.cs | 42 + .../RuntimePlatformConstantUtility.cs.meta | 11 + .../Utilities/RuntimePlatformUtility.cs | 16 + .../Utilities/RuntimePlatformUtility.cs.meta | 11 + .../CoreLibrary/Utilities/ScreenUtility.cs | 54 + .../Utilities/ScreenUtility.cs.meta | 11 + .../CoreLibrary/Utilities/SystemUtility.cs | 60 + .../Utilities/SystemUtility.cs.meta | 12 + .../CoreLibrary/Utilities/TextureUtility.cs | 126 + .../Utilities/TextureUtility.cs.meta | 11 + .../CoreLibrary/Utilities/TransformUtility.cs | 49 + .../Utilities/TransformUtility.cs.meta | 12 + .../Utilities/UnityEngineUtility.cs | 27 + .../Utilities/UnityEngineUtility.cs.meta | 12 + .../Utilities/UnityPackagePathResolver.cs | 102 + .../UnityPackagePathResolver.cs.meta | 11 + .../VoxelBusters.CoreLibrary.asmdef | 12 + .../VoxelBusters.CoreLibrary.asmdef.meta | 7 + .../CoreLibrary/Runtime/NativePlugins.meta | 8 + .../Runtime/NativePlugins/Android.meta | 8 + .../Runtime/NativePlugins/Android/Common.meta | 8 + .../Android/Common/JNIUtility.cs | 90 + .../Android/Common/JNIUtility.cs.meta | 12 + .../Android/Common/NativeActivity.cs | 27 + .../Android/Common/NativeActivity.cs.meta | 11 + .../Common/NativeAndroidJavaObjectWrapper.cs | 116 + .../NativeAndroidJavaObjectWrapper.cs.meta | 11 + .../Android/Common/NativeArrayBuffer.cs | 73 + .../Android/Common/NativeArrayBuffer.cs.meta | 12 + .../Android/Common/NativeByteBuffer.cs | 68 + .../Android/Common/NativeByteBuffer.cs.meta | 12 + .../Android/Common/NativeContext.cs | 13 + .../Android/Common/NativeContext.cs.meta | 12 + .../Android/Common/NativeDate.cs | 43 + .../Android/Common/NativeDate.cs.meta | 12 + .../Android/Common/NativeErrorInfo.cs | 78 + .../Android/Common/NativeErrorInfo.cs.meta | 11 + .../Common/NativeErrorInfoExtensions.cs | 14 + .../Common/NativeErrorInfoExtensions.cs.meta | 11 + .../Android/Common/NativeException.cs | 26 + .../Android/Common/NativeException.cs.meta | 11 + .../Android/Common/NativeFloat.cs | 19 + .../Android/Common/NativeFloat.cs.meta | 11 + .../Android/Common/NativeInteger.cs | 19 + .../Android/Common/NativeInteger.cs.meta | 11 + .../Android/Common/NativeJSONObject.cs | 20 + .../Android/Common/NativeJSONObject.cs.meta | 12 + .../Android/Common/NativeList.cs | 37 + .../Android/Common/NativeList.cs.meta | 12 + .../Android/Common/NativeObject.cs | 13 + .../Android/Common/NativeObject.cs.meta | 11 + .../Android/Common/NativeParcel.cs | 13 + .../Android/Common/NativeParcel.cs.meta | 11 + .../Android/Common/NativePoint.cs | 134 + .../Android/Common/NativePoint.cs.meta | 11 + .../Android/Common/NativePointF.cs | 134 + .../Android/Common/NativePointF.cs.meta | 11 + .../Android/Common/NativeProxy.cs | 31 + .../Android/Common/NativeProxy.cs.meta | 12 + .../Android/Common/NativeRect.cs | 299 + .../Android/Common/NativeRect.cs.meta | 11 + .../Android/Common/NativeRectF.cs | 260 + .../Android/Common/NativeRectF.cs.meta | 11 + .../Common/NativeUnityPluginUtility.cs | 72 + .../Common/NativeUnityPluginUtility.cs.meta | 11 + .../Android/Common/NativeViewGroup.cs | 13 + .../Android/Common/NativeViewGroup.cs.meta | 11 + .../NativePlugins/Android/Common/Utility.cs | 50 + .../Android/Common/Utility.cs.meta | 12 + ...Library.NativePlugins.AndroidModule.asmdef | 18 + ...ry.NativePlugins.AndroidModule.asmdef.meta | 7 + .../Runtime/NativePlugins/AssemblyInfo.cs | 20 + .../NativePlugins/AssemblyInfo.cs.meta | 11 + .../Runtime/NativePlugins/Core.meta | 8 + .../Runtime/NativePlugins/Core/Base.meta | 8 + .../Core/Base/NativeFeatureActivator.cs | 110 + .../Core/Base/NativeFeatureActivator.cs.meta | 12 + .../Core/Base/NativeFeatureBehaviour.cs | 86 + .../Core/Base/NativeFeatureBehaviour.cs.meta | 12 + .../Core/Base/NativeFeatureInterfaceBase.cs | 37 + .../Base/NativeFeatureInterfaceBase.cs.meta | 11 + .../Base/NativeFeatureRuntimeConfiguration.cs | 50 + .../NativeFeatureRuntimeConfiguration.cs.meta | 11 + .../Core/Base/NativeFeatureRuntimePackage.cs | 153 + .../Base/NativeFeatureRuntimePackage.cs.meta | 11 + .../NativeFeatureUsagePermissionDefinition.cs | 78 + ...veFeatureUsagePermissionDefinition.cs.meta | 11 + .../NativeFeatureUsagePermissionHandler.cs | 15 + ...ativeFeatureUsagePermissionHandler.cs.meta | 11 + .../Core/Base/NativeObjectBase.cs | 80 + .../Core/Base/NativeObjectBase.cs.meta | 11 + .../Core/Base/NativeObjectRef.cs | 89 + .../Core/Base/NativeObjectRef.cs.meta | 11 + .../Runtime/NativePlugins/Core/Constants.meta | 8 + .../NativePlugins/Core/Constants/Calendar.cs | 60 + .../Core/Constants/Calendar.cs.meta | 12 + .../Core/Constants/NativePlatform.cs | 25 + .../Core/Constants/NativePlatform.cs.meta | 11 + .../NativePlugins/Core/Controllers.meta | 8 + .../TouchScreenKeyboardController.cs | 172 + .../TouchScreenKeyboardController.cs.meta | 11 + .../NativePlugins/Core/DataModels.meta | 8 + .../Core/DataModels/CircularRegion.cs | 58 + .../Core/DataModels/CircularRegion.cs.meta | 12 + .../Core/DataModels/DateComponents.cs | 214 + .../Core/DataModels/DateComponents.cs.meta | 12 + .../Core/DataModels/LocationCoordinate.cs | 43 + .../DataModels/LocationCoordinate.cs.meta | 12 + .../DataModels/NativePlatformConstantSet.cs | 70 + .../NativePlatformConstantSet.cs.meta | 11 + .../Core/DataModels/PlatformConstant.cs | 130 + .../Core/DataModels/PlatformConstant.cs.meta | 11 + .../NativePlugins/Core/Interfaces.meta | 8 + .../Interfaces/INativeFeatureInterface.cs | 15 + .../INativeFeatureInterface.cs.meta | 11 + .../INativeFeatureInterfaceProvider.cs | 12 + .../INativeFeatureInterfaceProvider.cs.meta | 11 + .../INativeFeatureUsagePermissionHandler.cs | 12 + ...ativeFeatureUsagePermissionHandler.cs.meta | 12 + .../Core/Interfaces/INativeObject.cs | 21 + .../Core/Interfaces/INativeObject.cs.meta | 11 + .../Runtime/NativePlugins/Core/Misc.meta | 8 + .../NativePlugins/Core/Misc/Diagnostics.cs | 40 + .../Core/Misc/Diagnostics.cs.meta | 12 + .../Core/Misc/ManagedObjectReferencePool.cs | 50 + .../Misc/ManagedObjectReferencePool.cs.meta | 11 + .../Runtime/NativePlugins/Core/Unmanaged.meta | 9 + .../Core/Unmanaged/NativeArray.cs | 48 + .../Core/Unmanaged/NativeArray.cs.meta | 12 + .../Core/Unmanaged/NativeError.cs | 19 + .../Core/Unmanaged/NativeError.cs.meta | 11 + .../Core/Unmanaged/NativeErrorExtensions.cs | 17 + .../Unmanaged/NativeErrorExtensions.cs.meta | 11 + .../Core/Unmanaged/NativeInstanceMap.cs | 56 + .../Core/Unmanaged/NativeInstanceMap.cs.meta | 12 + .../Core/Unmanaged/NativeSize.cs | 29 + .../Core/Unmanaged/NativeSize.cs.meta | 11 + .../Core/Unmanaged/UnityAttachment.cs | 23 + .../Core/Unmanaged/UnityAttachment.cs.meta | 12 + .../Core/Unmanaged/UnityCircularRegion.cs | 49 + .../Unmanaged/UnityCircularRegion.cs.meta | 12 + .../Core/Unmanaged/UnityColor.cs | 43 + .../Core/Unmanaged/UnityColor.cs.meta | 12 + .../Core/Unmanaged/UnityDateComponent.cs | 78 + .../Core/Unmanaged/UnityDateComponent.cs.meta | 12 + .../NativePlugins/Core/Unmanaged/UnityRect.cs | 43 + .../Core/Unmanaged/UnityRect.cs.meta | 12 + .../Runtime/NativePlugins/Core/Utilities.meta | 8 + .../Core/Utilities/IntPtrUtility.cs | 44 + .../Core/Utilities/IntPtrUtility.cs.meta | 11 + .../Core/Utilities/MarshalUtility.cs | 177 + .../Core/Utilities/MarshalUtility.cs.meta | 12 + .../Core/Utilities/PlatformConstantUtility.cs | 43 + .../Utilities/PlatformConstantUtility.cs.meta | 11 + .../Core/Utilities/PlatformMappingServices.cs | 70 + .../Utilities/PlatformMappingServices.cs.meta | 11 + .../Runtime/NativePlugins/DemoKit.meta | 9 + .../NativePlugins/DemoKit/ConsoleRect.cs | 73 + .../NativePlugins/DemoKit/ConsoleRect.cs.meta | 12 + .../DemoKit/DemoActionBehaviour.cs | 102 + .../DemoKit/DemoActionBehaviour.cs.meta | 12 + ...emoActionPanelBase{TAction,TActionType}.cs | 127 + ...tionPanelBase{TAction,TActionType}.cs.meta | 11 + .../NativePlugins/DemoKit/DemoBackButton.cs | 22 + .../DemoKit/DemoBackButton.cs.meta | 12 + .../NativePlugins/DemoKit/DemoHelper.cs | 61 + .../NativePlugins/DemoKit/DemoHelper.cs.meta | 12 + .../NativePlugins/DemoKit/DemoMainMenu.cs | 71 + .../DemoKit/DemoMainMenu.cs.meta | 12 + .../NativePlugins/DemoKit/DemoPanel.cs | 16 + .../NativePlugins/DemoKit/DemoPanel.cs.meta | 12 + .../NativePlugins/DemoKit/DemoResources.cs | 53 + .../DemoKit/DemoResources.cs.meta | 12 + .../Runtime/NativePlugins/UnityUI.meta | 9 + .../UnityUI/DefaultUnityUIAlertDialog.cs | 56 + .../UnityUI/DefaultUnityUIAlertDialog.cs.meta | 12 + .../UnityUI/IUnityUIAlertDialog.cs | 39 + .../UnityUI/IUnityUIAlertDialog.cs.meta | 12 + .../UnityUI/UnityUIAlertDialog.cs | 123 + .../UnityUI/UnityUIAlertDialog.cs.meta | 12 + .../NativePlugins/UnityUI/UnityUIRenderer.cs | 33 + .../UnityUI/UnityUIRenderer.cs.meta | 12 + ...elBusters.CoreLibrary.NativePlugins.asmdef | 14 + ...ters.CoreLibrary.NativePlugins.asmdef.meta | 7 + .../Runtime/NativePlugins/iOS.meta | 9 + .../NativePlugins/iOS/IosNativeObjectRef.cs | 35 + .../iOS/IosNativeObjectRef.cs.meta | 11 + .../iOS/IosNativePluginsUtility.cs | 208 + .../iOS/IosNativePluginsUtility.cs.meta | 12 + ...CoreLibrary.NativePlugins.iOSModule.asmdef | 19 + ...ibrary.NativePlugins.iOSModule.asmdef.meta | 7 + .../CoreLibrary/Runtime/Parser.meta | 8 + .../CoreLibrary/Runtime/Parser/Json.meta | 8 + .../Runtime/Parser/Json/JsonConstants.cs | 18 + .../Runtime/Parser/Json/JsonConstants.cs.meta | 11 + .../Runtime/Parser/Json/JsonExtensions.cs | 24 + .../Parser/Json/JsonExtensions.cs.meta | 11 + .../Runtime/Parser/Json/JsonReader.cs | 499 ++ .../Runtime/Parser/Json/JsonReader.cs.meta | 11 + .../Runtime/Parser/Json/JsonString.cs | 49 + .../Runtime/Parser/Json/JsonString.cs.meta | 11 + .../Runtime/Parser/Json/JsonToken.cs | 34 + .../Runtime/Parser/Json/JsonToken.cs.meta | 11 + .../Runtime/Parser/Json/JsonUtility.cs | 46 + .../Runtime/Parser/Json/JsonUtility.cs.meta | 11 + .../Runtime/Parser/Json/JsonWriter.cs | 349 + .../Runtime/Parser/Json/JsonWriter.cs.meta | 11 + .../VoxelBusters.CoreLibrary.Parser.asmdef | 12 + ...oxelBusters.CoreLibrary.Parser.asmdef.meta | 7 + .../VoxelBusters/CoreLibrary/package.json | 17 + .../CoreLibrary/package.json.meta | 7 + .../Plugins/VoxelBusters/EssentialKit.meta | 8 + .../EssentialKit/Documentation.meta | 8 + .../EssentialKit/Documentation/Readme.pdf | Bin 0 -> 4498327 bytes .../Documentation/Readme.pdf.meta | 8 + .../VoxelBusters/EssentialKit/Editor.meta | 9 + .../EssentialKit/Editor/BuildPipeline.meta | 8 + .../Editor/BuildPipeline/Android.meta | 9 + .../AndroidGradleDependenciesPostProcessor.cs | 116 + ...oidGradleDependenciesPostProcessor.cs.meta | 11 + .../AndroidLibraryDependenciesGenerator.cs | 256 + ...ndroidLibraryDependenciesGenerator.cs.meta | 11 + .../Android/AndroidManifestGenerator.cs | 253 + .../Android/AndroidManifestGenerator.cs.meta | 12 + .../Android/AndroidManifestPostProcessor.cs | 141 + .../AndroidManifestPostProcessor.cs.meta | 11 + ...EssentialKitAndroidNativePluginsManager.cs | 18 + ...tialKitAndroidNativePluginsManager.cs.meta | 11 + ...sentialKitAndroidNativePluginsProcessor.cs | 287 + ...alKitAndroidNativePluginsProcessor.cs.meta | 11 + .../Android/FirebaseSettingsGenerator.cs | 136 + .../Android/FirebaseSettingsGenerator.cs.meta | 11 + .../Android/GradlePostProcessor.cs | 268 + .../Android/GradlePostProcessor.cs.meta | 11 + .../Android/google-services.template | 11 + .../Android/google-services.template.meta | 7 + .../Editor/BuildPipeline/Unsupported.meta | 8 + .../UnsupportedPlatformBuildProcessor.cs | 58 + .../UnsupportedPlatformBuildProcessor.cs.meta | 11 + .../Editor/BuildPipeline/Xcode.meta | 8 + .../Xcode/PBXNativePluginsProcessor.cs | 429 + .../Xcode/PBXNativePluginsProcessor.cs.meta | 12 + ...EssentialKit.Editor.Build.iOSModule.asmdef | 23 + ...tialKit.Editor.Build.iOSModule.asmdef.meta | 7 + .../Editor/EssentialKitBuildUtility.cs | 26 + .../Editor/EssentialKitBuildUtility.cs.meta | 12 + .../Editor/EssentialKitEditorUtility.cs | 173 + .../Editor/EssentialKitEditorUtility.cs.meta | 12 + .../Editor/EssentialKitMenuManager.cs | 63 + .../Editor/EssentialKitMenuManager.cs.meta | 12 + .../Editor/EssentialKitPackageLayout.cs | 42 + .../Editor/EssentialKitPackageLayout.cs.meta | 12 + .../EssentialKitSettingsEditorUtility.cs | 165 + .../EssentialKitSettingsEditorUtility.cs.meta | 12 + .../EssentialKit/Editor/Inspectors.meta | 8 + .../EssentialKitSettingsInspector.cs | 421 + .../EssentialKitSettingsInspector.cs.meta | 11 + .../EssentialKit/Editor/MyRegistries.xml | 12 + .../EssentialKit/Editor/MyRegistries.xml.meta | 7 + .../EssentialKit/Editor/UninstallPlugin.cs | 49 + .../Editor/UninstallPlugin.cs.meta | 12 + .../EssentialKit/Editor/UpgradeUtility.cs | 350 + .../Editor/UpgradeUtility.cs.meta | 12 + .../VoxelBusters.EssentialKit.Editor.asmdef | 21 + ...xelBusters.EssentialKit.Editor.asmdef.meta | 7 + .../EssentialKit/EditorResources.meta | 9 + .../EditorResources/SampleFiles.meta | 8 + .../SampleFiles/DeepLinkTest.html | 9 + .../SampleFiles/DeepLinkTest.html.meta | 7 + .../EditorResources/Textures.meta | 8 + .../Textures/app-icon-custom-coloured.png | Bin 0 -> 28814 bytes .../app-icon-custom-coloured.png.meta | 135 + .../Textures/app-icon-custom-white.png | Bin 0 -> 29565 bytes .../Textures/app-icon-custom-white.png.meta | 135 + .../Textures/down-arrow-icon.png | Bin 0 -> 1702 bytes .../Textures/down-arrow-icon.png.meta | 159 + .../EditorResources/Textures/logo-bg.png | Bin 0 -> 37182 bytes .../EditorResources/Textures/logo-bg.png.meta | 147 + .../EditorResources/Textures/logo-fg.png | Bin 0 -> 10552 bytes .../EditorResources/Textures/logo-fg.png.meta | 147 + .../EditorResources/Textures/logo.png | Bin 0 -> 37876 bytes .../EditorResources/Textures/logo.png.meta | 135 + .../VoxelBusters/EssentialKit/Essentials.meta | 8 + .../EssentialKit/Essentials/Editor.meta | 8 + .../CrossPlatformEssentialKitDependencies.xml | 33 + ...sPlatformEssentialKitDependencies.xml.meta | 7 + .../VoxelBusters/EssentialKit/Examples.meta | 9 + .../EssentialKit/Examples/Images.meta | 8 + .../Images/profile-picture-placeholder.png | Bin 0 -> 4600 bytes .../profile-picture-placeholder.png.meta | 135 + .../EssentialKit/Examples/Scenes.meta | 9 + .../Examples/Scenes/AddressBookDemo.unity | 3258 +++++++ .../Scenes/AddressBookDemo.unity.meta | 8 + .../Examples/Scenes/AlertDialogDemo.unity | 4045 +++++++++ .../Scenes/AlertDialogDemo.unity.meta | 8 + .../Examples/Scenes/AppUpdaterDemo.unity | 2094 +++++ .../Examples/Scenes/AppUpdaterDemo.unity.meta | 8 + .../Examples/Scenes/BillingServicesDemo.unity | 3799 ++++++++ .../Scenes/BillingServicesDemo.unity.meta | 8 + .../Examples/Scenes/CloudServicesDemo.unity | 4874 ++++++++++ .../Scenes/CloudServicesDemo.unity.meta | 8 + .../Examples/Scenes/DatePickerDemo.unity | 2140 +++++ .../Examples/Scenes/DatePickerDemo.unity.meta | 8 + .../Scenes/DeepLinkServicesDemo.unity | 1325 +++ .../Scenes/DeepLinkServicesDemo.unity.meta | 8 + .../Examples/Scenes/DemoMenu.unity | 802 ++ .../Examples/Scenes/DemoMenu.unity.meta | 8 + .../Examples/Scenes/GameServicesDemo.unity | 6082 +++++++++++++ .../Scenes/GameServicesDemo.unity.meta | 8 + .../Examples/Scenes/MailComposerDemo.unity | 5384 +++++++++++ .../Scenes/MailComposerDemo.unity.meta | 8 + .../Examples/Scenes/MediaServicesDemo.unity | 3548 ++++++++ .../Scenes/MediaServicesDemo.unity.meta | 8 + .../Examples/Scenes/MessageComposerDemo.unity | 3839 ++++++++ .../Scenes/MessageComposerDemo.unity.meta | 8 + .../Examples/Scenes/NetworkServicesDemo.unity | 2244 +++++ .../Scenes/NetworkServicesDemo.unity.meta | 8 + .../Scenes/NotificationServicesDemo.unity | 7951 +++++++++++++++++ .../NotificationServicesDemo.unity.meta | 8 + .../Examples/Scenes/RateMyAppDemo.unity | 1910 ++++ .../Examples/Scenes/RateMyAppDemo.unity.meta | 8 + .../Examples/Scenes/ShareSheetDemo.unity | 3606 ++++++++ .../Examples/Scenes/ShareSheetDemo.unity.meta | 8 + .../Scenes/SocialShareComposerDemo.unity | 4601 ++++++++++ .../Scenes/SocialShareComposerDemo.unity.meta | 8 + .../Examples/Scenes/UtilitiesDemo.unity | 2159 +++++ .../Examples/Scenes/UtilitiesDemo.unity.meta | 8 + .../Examples/Scenes/WebViewDemo.unity | 6936 ++++++++++++++ .../Examples/Scenes/WebViewDemo.unity.meta | 8 + .../EssentialKit/Examples/Scripts.meta | 9 + .../Examples/Scripts/AddressBookDemo.cs | 143 + .../Examples/Scripts/AddressBookDemo.cs.meta | 12 + .../Examples/Scripts/AddressBookDemoAction.cs | 18 + .../Scripts/AddressBookDemoAction.cs.meta | 12 + .../Examples/Scripts/AlertDialogDemo.cs | 134 + .../Examples/Scripts/AlertDialogDemo.cs.meta | 12 + .../Examples/Scripts/AlertDialogDemoAction.cs | 24 + .../Scripts/AlertDialogDemoAction.cs.meta | 12 + .../Examples/Scripts/AppUpdaterDemo.cs | 70 + .../Examples/Scripts/AppUpdaterDemo.cs.meta | 12 + .../Examples/Scripts/AppUpdaterDemoAction.cs | 18 + .../Scripts/AppUpdaterDemoAction.cs.meta | 12 + .../Examples/Scripts/BillingServicesDemo.cs | 274 + .../Scripts/BillingServicesDemo.cs.meta | 12 + .../Scripts/BillingServicesDemoAction.cs | 23 + .../Scripts/BillingServicesDemoAction.cs.meta | 12 + .../Examples/Scripts/CalendarTriggerFields.cs | 73 + .../Scripts/CalendarTriggerFields.cs.meta | 11 + .../Examples/Scripts/CloudServicesDemo.cs | 255 + .../Scripts/CloudServicesDemo.cs.meta | 12 + .../Scripts/CloudServicesDemoAction.cs | 30 + .../Scripts/CloudServicesDemoAction.cs.meta | 12 + .../Examples/Scripts/DatePickerDemo.cs | 90 + .../Examples/Scripts/DatePickerDemo.cs.meta | 12 + .../Examples/Scripts/DatePickerDemoAction.cs | 18 + .../Scripts/DatePickerDemoAction.cs.meta | 12 + .../Examples/Scripts/DeepLinkServicesDemo.cs | 67 + .../Scripts/DeepLinkServicesDemo.cs.meta | 12 + .../Scripts/DeepLinkServicesDemoAction.cs | 16 + .../DeepLinkServicesDemoAction.cs.meta | 12 + .../Examples/Scripts/GameServicesDemo.cs | 597 ++ .../Examples/Scripts/GameServicesDemo.cs.meta | 12 + .../Scripts/GameServicesDemoAction.cs | 33 + .../Scripts/GameServicesDemoAction.cs.meta | 12 + .../Examples/Scripts/MailComposerDemo.cs | 172 + .../Examples/Scripts/MailComposerDemo.cs.meta | 12 + .../Scripts/MailComposerDemoAction.cs | 26 + .../Scripts/MailComposerDemoAction.cs.meta | 12 + .../Examples/Scripts/MediaServicesDemo.cs | 204 + .../Scripts/MediaServicesDemo.cs.meta | 12 + .../Scripts/MediaServicesDemoAction.cs | 21 + .../Scripts/MediaServicesDemoAction.cs.meta | 11 + .../Examples/Scripts/MessageComposerDemo.cs | 134 + .../Scripts/MessageComposerDemo.cs.meta | 12 + .../Scripts/MessageComposerDemoAction.cs | 23 + .../Scripts/MessageComposerDemoAction.cs.meta | 12 + .../Examples/Scripts/NetworkServicesDemo.cs | 84 + .../Scripts/NetworkServicesDemo.cs.meta | 12 + .../Scripts/NetworkServicesDemoAction.cs | 21 + .../Scripts/NetworkServicesDemoAction.cs.meta | 12 + .../Scripts/NotificationServicesDemo.cs | 378 + .../Scripts/NotificationServicesDemo.cs.meta | 12 + .../Scripts/NotificationServicesDemoAction.cs | 31 + .../NotificationServicesDemoAction.cs.meta | 12 + .../Examples/Scripts/RateMyAppDemo.cs | 47 + .../Examples/Scripts/RateMyAppDemo.cs.meta | 12 + .../Examples/Scripts/RateMyAppDemoAction.cs | 18 + .../Scripts/RateMyAppDemoAction.cs.meta | 12 + .../Examples/Scripts/ShareSheetDemo.cs | 155 + .../Examples/Scripts/ShareSheetDemo.cs.meta | 12 + .../Examples/Scripts/ShareSheetDemoAction.cs | 22 + .../Scripts/ShareSheetDemoAction.cs.meta | 12 + .../Scripts/SocialShareComposerDemo.cs | 148 + .../Scripts/SocialShareComposerDemo.cs.meta | 12 + .../Scripts/SocialShareComposerDemoAction.cs | 23 + .../SocialShareComposerDemoAction.cs.meta | 12 + .../Examples/Scripts/UtilitiesDemo.cs | 58 + .../Examples/Scripts/UtilitiesDemo.cs.meta | 12 + .../Examples/Scripts/UtilitiesDemoAction.cs | 19 + .../Scripts/UtilitiesDemoAction.cs.meta | 12 + .../VoxelBusters.EssentialKit.Demo.asmdef | 16 + ...VoxelBusters.EssentialKit.Demo.asmdef.meta | 7 + .../Examples/Scripts/WebViewDemo.cs | 367 + .../Examples/Scripts/WebViewDemo.cs.meta | 12 + .../Examples/Scripts/WebViewDemoAction.cs | 38 + .../Scripts/WebViewDemoAction.cs.meta | 12 + .../EssentialKit/PackageResources.meta | 8 + .../PackageResources/Extras.unitypackage | Bin 0 -> 152157 bytes .../PackageResources/Extras.unitypackage.meta | 7 + .../VoxelBusters/EssentialKit/Plugins.meta | 8 + .../EssentialKit/Plugins/Android.meta | 8 + ...voxelbusters.essentialkit-address-book.aar | Bin 0 -> 13653 bytes ...busters.essentialkit-address-book.aar.meta | 32 + ....voxelbusters.essentialkit-app-updater.aar | Bin 0 -> 12383 bytes ...lbusters.essentialkit-app-updater.aar.meta | 32 + ...lbusters.essentialkit-billing-services.aar | Bin 0 -> 67282 bytes ...ers.essentialkit-billing-services.aar.meta | 32 + ...xelbusters.essentialkit-cloud-services.aar | Bin 0 -> 34217 bytes ...sters.essentialkit-cloud-services.aar.meta | 32 + ...usters.essentialkit-deep-link-services.aar | Bin 0 -> 4585 bytes ...s.essentialkit-deep-link-services.aar.meta | 32 + .../com.voxelbusters.essentialkit-extras.aar | Bin 0 -> 2261 bytes ....voxelbusters.essentialkit-extras.aar.meta | 32 + ...oxelbusters.essentialkit-game-services.aar | Bin 0 -> 47579 bytes ...usters.essentialkit-game-services.aar.meta | 32 + ...xelbusters.essentialkit-media-services.aar | Bin 0 -> 29589 bytes ...sters.essentialkit-media-services.aar.meta | 32 + ...lbusters.essentialkit-network-services.aar | Bin 0 -> 7239 bytes ...ers.essentialkit-network-services.aar.meta | 32 + ...ers.essentialkit-notification-services.aar | Bin 0 -> 55488 bytes ...ssentialkit-notification-services.aar.meta | 32 + ....voxelbusters.essentialkit-rate-my-app.aar | Bin 0 -> 5515 bytes ...lbusters.essentialkit-rate-my-app.aar.meta | 32 + ...lbusters.essentialkit-sharing-services.aar | Bin 0 -> 22502 bytes ...ers.essentialkit-sharing-services.aar.meta | 32 + ....voxelbusters.essentialkit-social-auth.aar | Bin 0 -> 9048 bytes ...lbusters.essentialkit-social-auth.aar.meta | 32 + ...com.voxelbusters.essentialkit-ui-views.aar | Bin 0 -> 11250 bytes ...oxelbusters.essentialkit-ui-views.aar.meta | 32 + ...om.voxelbusters.essentialkit-utilities.aar | Bin 0 -> 44171 bytes ...xelbusters.essentialkit-utilities.aar.meta | 32 + ...com.voxelbusters.essentialkit-web-view.aar | Bin 0 -> 51010 bytes ...oxelbusters.essentialkit-web-view.aar.meta | 32 + ....voxelbusters.essentialkit.androidlib.meta | 32 + .../AndroidManifest.xml | 28 + .../FindMethodCount.command | 27 + .../build.gradle | 39 + .../lint.xml | 6 + .../project.properties | 15 + .../res/drawable/app_icon_custom_coloured.png | Bin 0 -> 28814 bytes .../res/drawable/app_icon_custom_white.png | Bin 0 -> 29565 bytes .../res/values/essential_kit_strings.xml | 36 + .../EssentialKit/Plugins/iOS.meta | 9 + .../EssentialKit/Plugins/iOS/AddressBook.meta | 9 + .../Plugins/iOS/AddressBook/AddressBook.asset | 25 + .../iOS/AddressBook/AddressBook.asset.meta | 9 + .../iOS/AddressBook/NPAddressBookBinding.mm | 59 + .../AddressBook/NPAddressBookBinding.mm.meta | 52 + .../iOS/AddressBook/NPAddressBookDataTypes.h | 56 + .../AddressBook/NPAddressBookDataTypes.h.meta | 52 + .../iOS/AddressBook/NPAddressBookDataTypes.mm | 71 + .../NPAddressBookDataTypes.mm.meta | 50 + .../NativePluginsContactsWrapper.h | 42 + .../NativePluginsContactsWrapper.h.meta | 50 + .../NativePluginsContactsWrapper.mm | 201 + .../NativePluginsContactsWrapper.mm.meta | 52 + .../EssentialKit/Plugins/iOS/AppUpdater.meta | 9 + .../Plugins/iOS/AppUpdater/AppUpdater.asset | 22 + .../iOS/AppUpdater/AppUpdater.asset.meta | 8 + .../Plugins/iOS/AppUpdater/NPAppUpdater.h | 54 + .../iOS/AppUpdater/NPAppUpdater.h.meta | 52 + .../Plugins/iOS/AppUpdater/NPAppUpdater.mm | 169 + .../iOS/AppUpdater/NPAppUpdater.mm.meta | 85 + .../iOS/AppUpdater/NPAppUpdaterBinding.mm | 42 + .../AppUpdater/NPAppUpdaterBinding.mm.meta | 52 + .../iOS/AppUpdater/NPAppUpdaterDataTypes.h | 41 + .../AppUpdater/NPAppUpdaterDataTypes.h.meta | 52 + .../Plugins/iOS/BillingServices.meta | 9 + .../iOS/BillingServices/BillingServices.asset | 28 + .../BillingServices.asset.meta | 9 + .../iOS/BillingServices/Frameworks.meta | 8 + .../Frameworks/BillingServices.framework.meta | 80 + .../BillingServices.framework/BillingServices | Bin 0 -> 941104 bytes .../Headers/BillingServices-Swift.h | 963 ++ .../BillingServices.framework/Info.plist | Bin 0 -> 768 bytes .../Project/arm64-apple-ios.swiftsourceinfo | Bin 0 -> 65488 bytes .../arm64-apple-ios.abi.json | 9 + .../arm64-apple-ios.swiftdoc | Bin 0 -> 412 bytes .../arm64-apple-ios.swiftmodule | Bin 0 -> 242128 bytes .../Modules/module.modulemap | 4 + .../_CodeSignature/CodeResources | 168 + .../NPBillingServicesBinding.mm | 176 + .../NPBillingServicesBinding.mm.meta | 50 + .../NPBillingServicesDataTypes.h | 225 + .../NPBillingServicesDataTypes.h.meta | 50 + .../NPBillingServicesDataTypes.mm | 281 + .../NPBillingServicesDataTypes.mm.meta | 52 + .../Plugins/iOS/CloudServices.meta | 9 + .../iOS/CloudServices/CloudServices.asset | 28 + .../CloudServices/CloudServices.asset.meta | 9 + .../CloudServices/NPCloudServicesBinding.mm | 305 + .../NPCloudServicesBinding.mm.meta | 50 + .../CloudServices/NPCloudServicesDataTypes.h | 32 + .../NPCloudServicesDataTypes.h.meta | 52 + .../CloudServices/NPCloudServicesDataTypes.mm | 20 + .../NPCloudServicesDataTypes.mm.meta | 52 + .../Plugins/iOS/DeepLinkServices.meta | 9 + .../DeepLinkServices/DeepLinkServices.asset | 28 + .../DeepLinkServices.asset.meta | 9 + .../NPDeepLinkServicesBinding.mm | 27 + .../NPDeepLinkServicesBinding.mm.meta | 58 + .../Plugins/iOS/EssentialKitGroup.asset | 16 + .../Plugins/iOS/EssentialKitGroup.asset.meta | 8 + .../Plugins/iOS/GameServices.meta | 9 + .../iOS/GameServices/GameServices.asset | 28 + .../iOS/GameServices/GameServices.asset.meta | 9 + .../NPGameKitAchievementBinding.mm | 106 + .../NPGameKitAchievementBinding.mm.meta | 52 + .../NPGameKitAchievementDescriptionBinding.mm | 110 + ...meKitAchievementDescriptionBinding.mm.meta | 52 + .../NPGameKitLeaderboardBinding.mm | 151 + .../NPGameKitLeaderboardBinding.mm.meta | 52 + .../NPGameKitLeaderboardScoreEntryBinding.mm | 54 + ...ameKitLeaderboardScoreEntryBinding.mm.meta | 89 + .../iOS/GameServices/NPGameKitManager.h | 31 + .../iOS/GameServices/NPGameKitManager.h.meta | 141 + .../iOS/GameServices/NPGameKitManager.mm | 289 + .../iOS/GameServices/NPGameKitManager.mm.meta | 122 + .../GameServices/NPGameKitPlayerBinding.mm | 166 + .../NPGameKitPlayerBinding.mm.meta | 50 + .../GameServices/NPGameServicesDataTypes.h | 38 + .../NPGameServicesDataTypes.h.meta | 52 + .../iOS/GameServices/NPGameServicesError.h | 36 + .../GameServices/NPGameServicesError.h.meta | 141 + .../iOS/GameServices/NPGameServicesError.mm | 103 + .../GameServices/NPGameServicesError.mm.meta | 122 + .../Plugins/iOS/MediaServices.meta | 9 + .../iOS/MediaServices/MediaServices.asset | 34 + .../MediaServices/MediaServices.asset.meta | 9 + .../iOS/MediaServices/NPMediaContent.h | 38 + .../iOS/MediaServices/NPMediaContent.h.meta | 40 + .../iOS/MediaServices/NPMediaContent.mm | 240 + .../iOS/MediaServices/NPMediaContent.mm.meta | 50 + .../iOS/MediaServices/NPMediaServices.h | 59 + .../iOS/MediaServices/NPMediaServices.h.meta | 40 + .../iOS/MediaServices/NPMediaServices.mm | 379 + .../iOS/MediaServices/NPMediaServices.mm.meta | 50 + .../MediaServices/NPMediaServicesBinding.mm | 86 + .../NPMediaServicesBinding.mm.meta | 52 + .../MediaServices/NPMediaServicesDataTypes.h | 61 + .../NPMediaServicesDataTypes.h.meta | 102 + .../iOS/MediaServices/NPMediaServicesError.h | 28 + .../MediaServices/NPMediaServicesError.h.meta | 40 + .../iOS/MediaServices/NPMediaServicesError.mm | 65 + .../NPMediaServicesError.mm.meta | 50 + .../EssentialKit/Plugins/iOS/NativeUI.meta | 9 + .../iOS/NativeUI/NPAlertControllerBinding.mm | 78 + .../NativeUI/NPAlertControllerBinding.mm.meta | 50 + .../NativeUI/NPDatePickerControllerBinding.mm | 25 + .../NPDatePickerControllerBinding.mm.meta | 104 + .../Plugins/iOS/NativeUI/NPUIManager.h | 29 + .../Plugins/iOS/NativeUI/NPUIManager.h.meta | 103 + .../Plugins/iOS/NativeUI/NPUIManager.mm | 157 + .../Plugins/iOS/NativeUI/NPUIManager.mm.meta | 103 + .../Plugins/iOS/NativeUI/NativeUI.asset | 22 + .../Plugins/iOS/NativeUI/NativeUI.asset.meta | 9 + .../NativeUI/UIAlertController+DatePicker.h | 18 + .../UIAlertController+DatePicker.h.meta | 39 + .../NativeUI/UIAlertController+DatePicker.m | 73 + .../UIAlertController+DatePicker.m.meta | 49 + .../Plugins/iOS/NetworkServices.meta | 9 + .../NPNetworkServicesBinding.mm | 216 + .../NPNetworkServicesBinding.mm.meta | 52 + .../NPNetworkServicesDataTypes.h | 12 + .../NPNetworkServicesDataTypes.h.meta | 52 + .../iOS/NetworkServices/NetworkServices.asset | 25 + .../NetworkServices.asset.meta | 9 + .../iOS/NetworkServices/Reachability.h | 104 + .../iOS/NetworkServices/Reachability.h.meta | 52 + .../iOS/NetworkServices/Reachability.m | 282 + .../iOS/NetworkServices/Reachability.m.meta | 52 + .../Plugins/iOS/NotificationServices.meta | 9 + .../NPAppDelegateListener.h | 31 + .../NPAppDelegateListener.h.meta | 52 + .../NPAppDelegateListener.mm | 172 + .../NPAppDelegateListener.mm.meta | 52 + .../NPNotificationBinding.mm | 286 + .../NPNotificationBinding.mm.meta | 50 + .../NPNotificationCenterBinding.mm | 166 + .../NPNotificationCenterBinding.mm.meta | 103 + .../NPNotificationCenterDataTypes.h | 58 + .../NPNotificationCenterDataTypes.h.meta | 50 + .../NPNotificationServicesError.h | 30 + .../NPNotificationServicesError.h.meta | 52 + .../NPNotificationServicesError.m | 79 + .../NPNotificationServicesError.m.meta | 85 + .../NotificationServices.asset | 32 + .../NotificationServices.asset.meta | 9 + .../UNNotificationRequest+TriggerType.h | 17 + .../UNNotificationRequest+TriggerType.h.meta | 52 + .../UNNotificationRequest+TriggerType.mm | 36 + .../UNNotificationRequest+TriggerType.mm.meta | 52 + .../UNNotificationSettings+ManagedData.h | 17 + .../UNNotificationSettings+ManagedData.h.meta | 52 + .../UNNotificationSettings+ManagedData.mm | 53 + ...UNNotificationSettings+ManagedData.mm.meta | 97 + .../EssentialKit/Plugins/iOS/RateMyApp.meta | 9 + .../iOS/RateMyApp/NPStoreReviewBinding.mm | 21 + .../RateMyApp/NPStoreReviewBinding.mm.meta | 52 + .../Plugins/iOS/RateMyApp/RateMyApp.asset | 25 + .../iOS/RateMyApp/RateMyApp.asset.meta | 8 + .../Plugins/iOS/SharingServices.meta | 9 + .../SharingServices/NPMailComposerBinding.mm | 101 + .../NPMailComposerBinding.mm.meta | 52 + .../NPMessageComposerBinding.mm | 98 + .../NPMessageComposerBinding.mm.meta | 52 + .../NPSLComposeViewControllerWrapper.h | 22 + .../NPSLComposeViewControllerWrapper.h.meta | 141 + .../NPSLComposeViewControllerWrapper.m | 135 + .../NPSLComposeViewControllerWrapper.m.meta | 127 + .../SharingServices/NPShareSheetBinding.mm | 65 + .../NPShareSheetBinding.mm.meta | 52 + .../iOS/SharingServices/NPShareSheetWrapper.h | 20 + .../NPShareSheetWrapper.h.meta | 52 + .../SharingServices/NPShareSheetWrapper.mm | 106 + .../NPShareSheetWrapper.mm.meta | 52 + .../NPSharingServicesDataTypes.h | 38 + .../NPSharingServicesDataTypes.h.meta | 52 + .../SharingServices/NPSharingServicesError.h | 24 + .../NPSharingServicesError.h.meta | 39 + .../SharingServices/NPSharingServicesError.m | 56 + .../NPSharingServicesError.m.meta | 49 + .../NPSharingServicesManager.h | 20 + .../NPSharingServicesManager.h.meta | 105 + .../NPSharingServicesManager.mm | 104 + .../NPSharingServicesManager.mm.meta | 52 + .../NPSocialShareComposerBinding.mm | 76 + .../NPSocialShareComposerBinding.mm.meta | 104 + .../NPSocialShareComposerProtocol.h | 26 + .../NPSocialShareComposerProtocol.h.meta | 52 + .../SharingServices/NPWhatsAppShareComposer.h | 19 + .../NPWhatsAppShareComposer.h.meta | 52 + .../SharingServices/NPWhatsAppShareComposer.m | 201 + .../NPWhatsAppShareComposer.m.meta | 52 + .../iOS/SharingServices/SharingServices.asset | 28 + .../SharingServices.asset.meta | 9 + .../EssentialKit/Plugins/iOS/WebView.meta | 9 + .../Plugins/iOS/WebView/NPWebView.h | 73 + .../Plugins/iOS/WebView/NPWebView.h.meta | 52 + .../Plugins/iOS/WebView/NPWebView.mm | 641 ++ .../Plugins/iOS/WebView/NPWebView.mm.meta | 52 + .../Plugins/iOS/WebView/NPWebViewBinding.mm | 205 + .../iOS/WebView/NPWebViewBinding.mm.meta | 52 + .../Plugins/iOS/WebView/NPWebViewDataTypes.h | 17 + .../iOS/WebView/NPWebViewDataTypes.h.meta | 52 + .../Plugins/iOS/WebView/NPWebViewError.h | 22 + .../Plugins/iOS/WebView/NPWebViewError.h.meta | 52 + .../Plugins/iOS/WebView/NPWebViewError.mm | 52 + .../iOS/WebView/NPWebViewError.mm.meta | 52 + .../Plugins/iOS/WebView/NPWebViewTabBar.h | 33 + .../iOS/WebView/NPWebViewTabBar.h.meta | 52 + .../Plugins/iOS/WebView/NPWebViewTabBar.mm | 155 + .../iOS/WebView/NPWebViewTabBar.mm.meta | 52 + .../Plugins/iOS/WebView/WebView.asset | 25 + .../Plugins/iOS/WebView/WebView.asset.meta | 9 + .../iOS/WebView/webview_close_button.png | Bin 0 -> 5536 bytes .../iOS/WebView/webview_close_button.png.meta | 159 + .../iOS/WebView/webview_close_button@2x.png | Bin 0 -> 11216 bytes .../WebView/webview_close_button@2x.png.meta | 159 + .../VoxelBusters/EssentialKit/Runtime.meta | 8 + .../EssentialKit/Runtime/Android.meta | 8 + .../Runtime/Android/AddressBook.meta | 8 + .../Android/AddressBook/AddressBookContact.cs | 92 + .../AddressBook/AddressBookContact.cs.meta | 11 + .../AddressBook/AddressBookInterface.cs | 60 + .../AddressBook/AddressBookInterface.cs.meta | 11 + .../Android/AddressBook/NativeAddressBook.cs | 88 + .../AddressBook/NativeAddressBook.cs.meta | 11 + .../AddressBook/NativeAddressBookContact.cs | 102 + .../NativeAddressBookContact.cs.meta | 11 + .../NativeAddressBookReadOptions.cs | 103 + .../NativeAddressBookReadOptions.cs.meta | 11 + .../AddressBook/NativeReadContactsListener.cs | 90 + .../NativeReadContactsListener.cs.meta | 11 + ...NativeRequestContactsPermissionListener.cs | 90 + ...eRequestContactsPermissionListener.cs.meta | 11 + .../Runtime/Android/AppUpdater.meta | 8 + .../Android/AppUpdater/AppUpdaterInterface.cs | 68 + .../AppUpdater/AppUpdaterInterface.cs.meta | 11 + .../Android/AppUpdater/NativeAppUpdater.cs | 73 + .../AppUpdater/NativeAppUpdater.cs.meta | 11 + .../NativeOnPromptUpdateComplete.cs | 90 + .../NativeOnPromptUpdateComplete.cs.meta | 11 + .../NativeOnRequestUpdateInfoComplete.cs | 90 + .../NativeOnRequestUpdateInfoComplete.cs.meta | 11 + .../AppUpdater/NativePromptUpdateOptions.cs | 117 + .../NativePromptUpdateOptions.cs.meta | 11 + .../Android/AppUpdater/NativeUpdateInfo.cs | 98 + .../AppUpdater/NativeUpdateInfo.cs.meta | 11 + .../Android/AppUpdater/NativeUpdateStatus.cs | 36 + .../AppUpdater/NativeUpdateStatus.cs.meta | 11 + .../Runtime/Android/BillingServices.meta | 8 + .../Android/BillingServices/BillingProduct.cs | 97 + .../BillingServices/BillingProduct.cs.meta | 11 + .../BillingServicesInterface.cs | 171 + .../BillingServicesInterface.cs.meta | 11 + .../BillingServices/BillingTransaction.cs | 117 + .../BillingTransaction.cs.meta | 11 + .../Android/BillingServices/Converter.cs | 103 + .../Android/BillingServices/Converter.cs.meta | 11 + .../NativeBillingEnvironment.cs | 35 + .../NativeBillingEnvironment.cs.meta | 11 + .../BillingServices/NativeBillingPeriod.cs | 75 + .../NativeBillingPeriod.cs.meta | 11 + .../NativeBillingPeriodUnit.cs | 35 + .../NativeBillingPeriodUnit.cs.meta | 11 + .../BillingServices/NativeBillingPrice.cs | 83 + .../NativeBillingPrice.cs.meta | 11 + .../BillingServices/NativeBillingProduct.cs | 101 + .../NativeBillingProduct.cs.meta | 11 + .../NativeBillingProductOffer.cs | 82 + .../NativeBillingProductOffer.cs.meta | 11 + .../NativeBillingProductOfferCategory.cs | 35 + .../NativeBillingProductOfferCategory.cs.meta | 11 + .../NativeBillingProductOfferPaymentMode.cs | 35 + ...tiveBillingProductOfferPaymentMode.cs.meta | 11 + .../NativeBillingProductOfferPricingPhase.cs | 89 + ...iveBillingProductOfferPricingPhase.cs.meta | 11 + .../NativeBillingProductRevocationInfo.cs | 77 + ...NativeBillingProductRevocationInfo.cs.meta | 11 + .../NativeBillingProductRevocationReason.cs | 34 + ...tiveBillingProductRevocationReason.cs.meta | 11 + ...lingProductSubscriptionExpirationReason.cs | 37 + ...roductSubscriptionExpirationReason.cs.meta | 11 + .../NativeBillingProductSubscriptionInfo.cs | 85 + ...tiveBillingProductSubscriptionInfo.cs.meta | 11 + ...gProductSubscriptionPriceIncreaseStatus.cs | 35 + ...uctSubscriptionPriceIncreaseStatus.cs.meta | 11 + ...veBillingProductSubscriptionRenewalInfo.cs | 127 + ...lingProductSubscriptionRenewalInfo.cs.meta | 11 + ...eBillingProductSubscriptionRenewalState.cs | 37 + ...ingProductSubscriptionRenewalState.cs.meta | 11 + .../NativeBillingProductSubscriptionStatus.cs | 99 + ...veBillingProductSubscriptionStatus.cs.meta | 11 + .../NativeBillingProductType.cs | 34 + .../NativeBillingProductType.cs.meta | 11 + .../NativeBillingTransaction.cs | 164 + .../NativeBillingTransaction.cs.meta | 11 + .../NativeBillingTransactionState.cs | 38 + .../NativeBillingTransactionState.cs.meta | 11 + .../NativeBillingTransactionStateListener.cs | 102 + ...iveBillingTransactionStateListener.cs.meta | 11 + ...tiveBillingTransactionVerificationState.cs | 34 + ...illingTransactionVerificationState.cs.meta | 11 + .../NativeFetchBillingProductsListener.cs | 90 + ...NativeFetchBillingProductsListener.cs.meta | 11 + .../NativeGoogleBillingServices.cs | 149 + .../NativeGoogleBillingServices.cs.meta | 11 + .../NativeRestorePurchasesListener.cs | 90 + .../NativeRestorePurchasesListener.cs.meta | 11 + .../Runtime/Android/CloudServices.meta | 8 + .../CloudServices/CloudServicesInterface.cs | 173 + .../CloudServicesInterface.cs.meta | 11 + .../Android/CloudServices/Converter.cs | 25 + .../Android/CloudServices/Converter.cs.meta | 11 + .../CloudServices/NativeCloudServices.cs | 210 + .../CloudServices/NativeCloudServices.cs.meta | 11 + .../NativeExternalChangeReason.cs | 34 + .../NativeExternalChangeReason.cs.meta | 11 + .../NativeExternalDataChangedListener.cs | 78 + .../NativeExternalDataChangedListener.cs.meta | 11 + .../NativeOnUserChangedListener.cs | 78 + .../NativeOnUserChangedListener.cs.meta | 11 + .../CloudServices/NativeSyncronizeListener.cs | 90 + .../NativeSyncronizeListener.cs.meta | 11 + .../EssentialKit/Runtime/Android/Common.meta | 8 + .../Runtime/Android/Common/NativeAsset.cs | 89 + .../Android/Common/NativeAsset.cs.meta | 11 + .../Android/Common/NativeBytesWrapper.cs | 45 + .../Android/Common/NativeBytesWrapper.cs.meta | 11 + .../Android/Common/NativeCopyAssetListener.cs | 90 + .../Common/NativeCopyAssetListener.cs.meta | 11 + .../Android/Common/NativeLoadAssetListener.cs | 90 + .../Common/NativeLoadAssetListener.cs.meta | 11 + .../Common/NativePluginBootstrapper.cs | 63 + .../Common/NativePluginBootstrapper.cs.meta | 11 + .../Runtime/Android/DeepLinkServices.meta | 8 + .../DeepLinkServicesInterface.cs | 45 + .../DeepLinkServicesInterface.cs.meta | 11 + .../NativeDeepLinkRequestListener.cs | 78 + .../NativeDeepLinkRequestListener.cs.meta | 11 + .../NativeDeepLinkServices.cs | 81 + .../NativeDeepLinkServices.cs.meta | 11 + .../EssentialKit/Runtime/Android/Extras.meta | 8 + .../Extras/NativeApplicationUtility.cs | 85 + .../Extras/NativeApplicationUtility.cs.meta | 11 + .../Android/Extras/UtilityInterface.cs | 43 + .../Android/Extras/UtilityInterface.cs.meta | 11 + .../Runtime/Android/GameServices.meta | 8 + .../Android/GameServices/Achievement.cs | 74 + .../Android/GameServices/Achievement.cs.meta | 11 + .../GameServices/AchievementDescription.cs | 135 + .../AchievementDescription.cs.meta | 11 + .../Runtime/Android/GameServices/Converter.cs | 66 + .../Android/GameServices/Converter.cs.meta | 11 + .../GameServices/GameServicesInterface.cs | 256 + .../GameServicesInterface.cs.meta | 11 + .../Android/GameServices/Leaderboard.cs | 204 + .../Android/GameServices/Leaderboard.cs.meta | 11 + .../Android/GameServices/LeaderboardScore.cs | 67 + .../GameServices/LeaderboardScore.cs.meta | 11 + .../Android/GameServices/LocalPlayer.cs | 75 + .../Android/GameServices/LocalPlayer.cs.meta | 11 + .../GameServices/NativeGameAchievement.cs | 122 + .../NativeGameAchievement.cs.meta | 11 + .../GameServices/NativeGameLeaderboard.cs | 110 + .../NativeGameLeaderboard.cs.meta | 11 + .../NativeGameLeaderboardScore.cs | 94 + .../NativeGameLeaderboardScore.cs.meta | 11 + .../Android/GameServices/NativeGamePlayer.cs | 105 + .../GameServices/NativeGamePlayer.cs.meta | 11 + .../GameServices/NativeGameServices.cs | 187 + .../GameServices/NativeGameServices.cs.meta | 11 + .../NativeLeaderboardCollectionVariant.cs | 33 + ...NativeLeaderboardCollectionVariant.cs.meta | 11 + .../NativeLeaderboardTimeVariant.cs | 34 + .../NativeLeaderboardTimeVariant.cs.meta | 11 + .../NativeLoadAchievementsListener.cs | 90 + .../NativeLoadAchievementsListener.cs.meta | 11 + .../NativeLoadLeaderboardsListener.cs | 90 + .../NativeLoadLeaderboardsListener.cs.meta | 11 + .../NativeLoadLocalPlayerScoreListener.cs | 90 + ...NativeLoadLocalPlayerScoreListener.cs.meta | 11 + .../GameServices/NativeLoadPlayersListener.cs | 90 + .../NativeLoadPlayersListener.cs.meta | 11 + .../GameServices/NativeLoadScoresListener.cs | 90 + .../NativeLoadScoresListener.cs.meta | 11 + .../NativeLoadServerCredentials.cs | 90 + .../NativeLoadServerCredentials.cs.meta | 11 + .../NativePlayerAuthenticationListener.cs | 90 + ...NativePlayerAuthenticationListener.cs.meta | 11 + .../NativeReportProgressListener.cs | 90 + .../NativeReportProgressListener.cs.meta | 11 + .../GameServices/NativeSubmitScoreListener.cs | 90 + .../NativeSubmitScoreListener.cs.meta | 11 + .../GameServices/NativeViewListener.cs | 78 + .../GameServices/NativeViewListener.cs.meta | 11 + .../Runtime/Android/GameServices/Player.cs | 99 + .../Android/GameServices/Player.cs.meta | 11 + .../Runtime/Android/MediaServices.meta | 8 + .../MediaServices/AssetMediaContent.cs | 54 + .../MediaServices/AssetMediaContent.cs.meta | 11 + .../Android/MediaServices/Converter.cs | 39 + .../Android/MediaServices/Converter.cs.meta | 11 + .../MediaServices/MediaServicesInterface.cs | 123 + .../MediaServicesInterface.cs.meta | 11 + .../MediaServices/NativeCameraAccessStatus.cs | 34 + .../NativeCameraAccessStatus.cs.meta | 11 + .../NativeGalleryAccessStatus.cs | 34 + .../NativeGalleryAccessStatus.cs.meta | 11 + .../MediaServices/NativeMediaCaptureType.cs | 33 + .../NativeMediaCaptureType.cs.meta | 11 + .../MediaServices/NativeMediaContentBase.cs | 73 + .../NativeMediaContentBase.cs.meta | 11 + .../NativeMediaContentCaptureListener.cs | 90 + .../NativeMediaContentCaptureListener.cs.meta | 11 + .../NativeMediaContentPathCallback.cs | 90 + .../NativeMediaContentPathCallback.cs.meta | 11 + .../NativeMediaContentRawDataCallback.cs | 90 + .../NativeMediaContentRawDataCallback.cs.meta | 11 + .../NativeMediaContentSaveListener.cs | 90 + .../NativeMediaContentSaveListener.cs.meta | 11 + .../NativeMediaContentSelectionListener.cs | 90 + ...ativeMediaContentSelectionListener.cs.meta | 11 + .../MediaServices/NativeMediaServices.cs | 125 + .../MediaServices/NativeMediaServices.cs.meta | 11 + .../Runtime/Android/NativeUI.meta | 8 + .../Runtime/Android/NativeUI/AlertDialog.cs | 76 + .../Android/NativeUI/AlertDialog.cs.meta | 11 + .../Android/NativeUI/DateTimePicker.cs | 160 + .../Android/NativeUI/DateTimePicker.cs.meta | 11 + .../Runtime/Android/NativeUI/NativeAlert.cs | 125 + .../Android/NativeUI/NativeAlert.cs.meta | 11 + .../NativeUI/NativeButtonClickListener.cs | 78 + .../NativeButtonClickListener.cs.meta | 11 + .../Android/NativeUI/NativeDatePicker.cs | 113 + .../Android/NativeUI/NativeDatePicker.cs.meta | 11 + .../NativeUI/NativeDatePickerListener.cs | 90 + .../NativeUI/NativeDatePickerListener.cs.meta | 11 + .../Android/NativeUI/NativeTimePicker.cs | 93 + .../Android/NativeUI/NativeTimePicker.cs.meta | 11 + .../NativeUI/NativeTimePickerListener.cs | 90 + .../NativeUI/NativeTimePickerListener.cs.meta | 11 + .../Runtime/Android/NativeUI/UIInterface.cs | 31 + .../Android/NativeUI/UIInterface.cs.meta | 11 + .../Runtime/Android/NetworkServices.meta | 8 + .../NativeNetworkChangeListener.cs | 78 + .../NativeNetworkChangeListener.cs.meta | 11 + .../NativeNetworkConnectivity.cs | 81 + .../NativeNetworkConnectivity.cs.meta | 11 + .../NativeNetworkPollSettings.cs | 113 + .../NativeNetworkPollSettings.cs.meta | 11 + .../NetworkServicesInterface.cs | 58 + .../NetworkServicesInterface.cs.meta | 11 + .../Runtime/Android/NotificationServices.meta | 8 + .../MutableNotification.cs | 139 + .../MutableNotification.cs.meta | 11 + .../NativeCalendarNotificationTrigger.cs | 205 + .../NativeCalendarNotificationTrigger.cs.meta | 11 + .../NativeCalendarType.cs | 32 + .../NativeCalendarType.cs.meta | 11 + .../NativeLocationNotificationTrigger.cs | 130 + .../NativeLocationNotificationTrigger.cs.meta | 11 + .../NativeNotification.cs | 353 + .../NativeNotification.cs.meta | 11 + .../NativeNotificationAccessState.cs | 34 + .../NativeNotificationAccessState.cs.meta | 11 + .../NativeNotificationBuilder.cs | 136 + .../NativeNotificationBuilder.cs.meta | 11 + .../NativeNotificationImportance.cs | 36 + .../NativeNotificationImportance.cs.meta | 11 + .../NativeNotificationPriority.cs | 35 + .../NativeNotificationPriority.cs.meta | 11 + .../NativeNotificationReceivedListener.cs | 78 + ...NativeNotificationReceivedListener.cs.meta | 11 + .../NativeNotificationServices.cs | 225 + .../NativeNotificationServices.cs.meta | 11 + .../NativeNotificationTrigger.cs | 86 + .../NativeNotificationTrigger.cs.meta | 11 + .../NativeNotificationType.cs | 40 + .../NativeNotificationType.cs.meta | 11 + .../NativeNotificationsRequestListener.cs | 90 + ...NativeNotificationsRequestListener.cs.meta | 11 + ...tiveRegisterRemoteNotificationsListener.cs | 90 + ...egisterRemoteNotificationsListener.cs.meta | 11 + ...eRequestNotificationPermissionsListener.cs | 90 + ...estNotificationPermissionsListener.cs.meta | 11 + .../NativeScheduleNotificationListener.cs | 90 + ...NativeScheduleNotificationListener.cs.meta | 11 + .../NativeTimeIntervalNotificationTrigger.cs | 119 + ...iveTimeIntervalNotificationTrigger.cs.meta | 11 + ...gisterRemoteNotificationServiceListener.cs | 90 + ...rRemoteNotificationServiceListener.cs.meta | 11 + .../NotificationServices/Notification.cs | 167 + .../NotificationServices/Notification.cs.meta | 11 + .../NotificationCenterInterface.cs | 165 + .../NotificationCenterInterface.cs.meta | 11 + .../Runtime/Android/RateMyApp.meta | 8 + .../NativeRequestStoreReviewListener.cs | 90 + .../NativeRequestStoreReviewListener.cs.meta | 11 + .../Android/RateMyApp/NativeStoreReview.cs | 81 + .../RateMyApp/NativeStoreReview.cs.meta | 11 + .../Android/RateMyApp/RateMyAppInterface.cs | 34 + .../RateMyApp/RateMyAppInterface.cs.meta | 11 + .../Runtime/Android/SharingServices.meta | 8 + .../Android/SharingServices/Converter.cs | 85 + .../Android/SharingServices/Converter.cs.meta | 11 + .../Android/SharingServices/MailComposer.cs | 96 + .../SharingServices/MailComposer.cs.meta | 11 + .../SharingServices/MessageComposer.cs | 101 + .../SharingServices/MessageComposer.cs.meta | 11 + .../SharingServices/NativeMailComposer.cs | 129 + .../NativeMailComposer.cs.meta | 11 + .../NativeMailComposerListener.cs | 78 + .../NativeMailComposerListener.cs.meta | 11 + .../NativeMailComposerResult.cs | 34 + .../NativeMailComposerResult.cs.meta | 11 + .../SharingServices/NativeMessageComposer.cs | 125 + .../NativeMessageComposer.cs.meta | 11 + .../NativeMessageComposerListener.cs | 78 + .../NativeMessageComposerListener.cs.meta | 11 + .../NativeMessageComposerResult.cs | 34 + .../NativeMessageComposerResult.cs.meta | 11 + .../SharingServices/NativeShareSheet.cs | 115 + .../SharingServices/NativeShareSheet.cs.meta | 11 + .../NativeShareSheetListener.cs | 78 + .../NativeShareSheetListener.cs.meta | 11 + .../SharingServices/NativeShareSheetResult.cs | 34 + .../NativeShareSheetResult.cs.meta | 11 + .../NativeSocialShareComposer.cs | 113 + .../NativeSocialShareComposer.cs.meta | 11 + .../NativeSocialShareComposerListener.cs | 78 + .../NativeSocialShareComposerListener.cs.meta | 11 + .../NativeSocialShareComposerResult.cs | 35 + .../NativeSocialShareComposerResult.cs.meta | 11 + .../NativeSocialShareComposerType.cs | 36 + .../NativeSocialShareComposerType.cs.meta | 11 + .../Android/SharingServices/ShareSheet.cs | 127 + .../SharingServices/ShareSheet.cs.meta | 11 + .../SharingServicesInterface.cs | 70 + .../SharingServicesInterface.cs.meta | 11 + .../SharingServices/SocialShareComposer.cs | 95 + .../SocialShareComposer.cs.meta | 11 + ...lBusters.EssentialKit.AndroidModule.asmdef | 20 + ...ers.EssentialKit.AndroidModule.asmdef.meta | 7 + .../EssentialKit/Runtime/Android/WebView.meta | 8 + .../Runtime/Android/WebView/Converter.cs | 25 + .../Runtime/Android/WebView/Converter.cs.meta | 11 + .../NativeEvaluateJavaScriptListener.cs | 90 + .../NativeEvaluateJavaScriptListener.cs.meta | 11 + .../WebView/NativeWebKitWebViewStyle.cs | 34 + .../WebView/NativeWebKitWebViewStyle.cs.meta | 11 + .../Android/WebView/NativeWebViewListener.cs | 138 + .../WebView/NativeWebViewListener.cs.meta | 11 + .../Android/WebView/NativeWebViewMessage.cs | 112 + .../WebView/NativeWebViewMessage.cs.meta | 11 + .../Android/WebView/NativeWebkitWebView.cs | 333 + .../WebView/NativeWebkitWebView.cs.meta | 11 + .../Runtime/Android/WebView/WebView.cs | 165 + .../Runtime/Android/WebView/WebView.cs.meta | 11 + .../EssentialKit/Runtime/AssemblyInfo.cs | 9 + .../EssentialKit/Runtime/AssemblyInfo.cs.meta | 11 + .../EssentialKit/Runtime/Core.meta | 8 + .../Runtime/Core/AddressBook.meta | 8 + .../Runtime/Core/AddressBook/AddressBook.cs | 136 + .../Core/AddressBook/AddressBook.cs.meta | 12 + .../AddressBook/AddressBookContactBase.cs | 114 + .../AddressBookContactBase.cs.meta | 12 + .../AddressBookContactsAccessStatus.cs | 29 + .../AddressBookContactsAccessStatus.cs.meta | 11 + .../Core/AddressBook/AddressBookError.cs | 36 + .../Core/AddressBook/AddressBookError.cs.meta | 11 + .../Core/AddressBook/AddressBookErrorCode.cs | 20 + .../AddressBook/AddressBookErrorCode.cs.meta | 11 + .../AddressBookReadContactsResult.cs | 41 + .../AddressBookReadContactsResult.cs.meta | 11 + .../AddressBookRequestContactsAccessResult.cs | 33 + ...essBookRequestContactsAccessResult.cs.meta | 11 + .../Runtime/Core/AddressBook/Delegates.cs | 11 + .../Core/AddressBook/Delegates.cs.meta | 12 + .../Core/AddressBook/IAddressBookContact.cs | 56 + .../AddressBook/IAddressBookContact.cs.meta | 12 + .../IAddressBookContactsEnumerator.cs | 23 + .../IAddressBookContactsEnumerator.cs.meta | 12 + .../INativeAddressBookInterface.cs | 15 + .../INativeAddressBookInterface.cs.meta | 12 + .../NativeAddressBookContactData.cs | 36 + .../NativeAddressBookContactData.cs.meta | 12 + .../NativeAddressBookInterfaceBase.cs | 23 + .../NativeAddressBookInterfaceBase.cs.meta | 12 + .../AddressBook/NullAddressBookInterface.cs | 45 + .../NullAddressBookInterface.cs.meta | 12 + .../AddressBook/ReadContactsConstraint.cs | 32 + .../ReadContactsConstraint.cs.meta | 11 + .../Core/AddressBook/ReadContactsOptions.cs | 84 + .../AddressBook/ReadContactsOptions.cs.meta | 11 + .../EssentialKit/Runtime/Core/AppUpdater.meta | 8 + .../Runtime/Core/AppUpdater/AppUpdater.cs | 101 + .../Core/AppUpdater/AppUpdater.cs.meta | 12 + .../Core/AppUpdater/AppUpdaterError.cs | 71 + .../Core/AppUpdater/AppUpdaterError.cs.meta | 11 + .../Core/AppUpdater/AppUpdaterErrorCode.cs | 45 + .../AppUpdater/AppUpdaterErrorCode.cs.meta | 11 + .../Core/AppUpdater/AppUpdaterUpdateInfo.cs | 41 + .../AppUpdater/AppUpdaterUpdateInfo.cs.meta | 11 + .../Core/AppUpdater/AppUpdaterUpdateStatus.cs | 30 + .../AppUpdater/AppUpdaterUpdateStatus.cs.meta | 11 + .../Runtime/Core/AppUpdater/Delegates.cs | 11 + .../Runtime/Core/AppUpdater/Delegates.cs.meta | 12 + .../AppUpdater/INativeAppUpdaterInterface.cs | 16 + .../INativeAppUpdaterInterface.cs.meta | 12 + .../AppUpdater/NullAppUpdaterInterface.cs | 42 + .../NullAppUpdaterInterface.cs.meta | 12 + .../Core/AppUpdater/PresentUpdateOptions.cs | 105 + .../AppUpdater/PresentUpdateOptions.cs.meta | 11 + .../Runtime/Core/BillingServices.meta | 8 + .../BillingServices/BillingEnvironment.cs | 32 + .../BillingEnvironment.cs.meta | 11 + .../Core/BillingServices/BillingPayment.cs | 52 + .../BillingServices/BillingPayment.cs.meta | 12 + .../Core/BillingServices/BillingPeriod.cs | 32 + .../BillingServices/BillingPeriod.cs.meta | 11 + .../Core/BillingServices/BillingPeriodUnit.cs | 28 + .../BillingServices/BillingPeriodUnit.cs.meta | 11 + .../Core/BillingServices/BillingPrice.cs | 35 + .../Core/BillingServices/BillingPrice.cs.meta | 11 + .../BillingServices/BillingProductBase.cs | 88 + .../BillingProductBase.cs.meta | 12 + .../BillingProductDefinition.cs | 132 + .../BillingProductDefinition.cs.meta | 11 + .../BillingProductIdAttribute.cs | 52 + .../BillingProductIdAttribute.cs.meta | 11 + .../BillingServices/BillingProductOffer.cs | 42 + .../BillingProductOffer.cs.meta | 11 + .../BillingProductOfferCategory.cs | 25 + .../BillingProductOfferCategory.cs.meta | 11 + .../BillingProductOfferPricingPhase.cs | 48 + .../BillingProductOfferPricingPhase.cs.meta | 11 + .../BillingProductOfferRedeemDetails.cs | 175 + .../BillingProductOfferRedeemDetails.cs.meta | 11 + .../BillingProductPayoutCategory.cs | 27 + .../BillingProductPayoutCategory.cs.meta | 11 + .../BillingProductPayoutDefinition.cs | 104 + .../BillingProductPayoutDefinition.cs.meta | 11 + .../BillingServices/BillingProductPlain.cs | 85 + .../BillingProductPlain.cs.meta | 11 + .../BillingProductRevocationInfo.cs | 44 + .../BillingProductRevocationInfo.cs.meta | 11 + .../BillingProductRevocationReason.cs | 27 + .../BillingProductRevocationReason.cs.meta | 11 + ...lingProductSubscriptionExpirationReason.cs | 40 + ...roductSubscriptionExpirationReason.cs.meta | 11 + .../BillingProductSubscriptionInfo.cs | 55 + .../BillingProductSubscriptionInfo.cs.meta | 11 + ...gProductSubscriptionPriceIncreaseStatus.cs | 25 + ...uctSubscriptionPriceIncreaseStatus.cs.meta | 11 + .../BillingProductSubscriptionRenewalInfo.cs | 92 + ...lingProductSubscriptionRenewalInfo.cs.meta | 11 + .../BillingProductSubscriptionRenewalState.cs | 37 + ...ingProductSubscriptionRenewalState.cs.meta | 11 + .../BillingProductSubscriptionStatus.cs | 66 + .../BillingProductSubscriptionStatus.cs.meta | 11 + .../BillingServices/BillingProductType.cs | 21 + .../BillingProductType.cs.meta | 12 + .../BillingServices/BillingProductUtility.cs | 18 + .../BillingProductUtility.cs.meta | 11 + .../BillingReceiptVerificationState.cs | 21 + .../BillingReceiptVerificationState.cs.meta | 12 + .../Core/BillingServices/BillingServices.cs | 579 ++ .../BillingServices/BillingServices.cs.meta | 12 + .../BillingServices/BillingServicesError.cs | 86 + .../BillingServicesError.cs.meta | 11 + .../BillingServicesErrorCode.cs | 64 + .../BillingServicesErrorCode.cs.meta | 11 + .../BillingServicesInitializeStoreResult.cs | 38 + ...llingServicesInitializeStoreResult.cs.meta | 11 + .../BillingServicesOfferPaymentMode.cs | 28 + .../BillingServicesOfferPaymentMode.cs.meta | 11 + .../BillingServicesRestorePurchasesResult.cs | 32 + ...lingServicesRestorePurchasesResult.cs.meta | 11 + ...ingServicesTransactionStateChangeResult.cs | 32 + ...rvicesTransactionStateChangeResult.cs.meta | 12 + .../BillingTransactionAndroidProperties.cs | 34 + ...illingTransactionAndroidProperties.cs.meta | 11 + .../BillingServices/BillingTransactionBase.cs | 115 + .../BillingTransactionBase.cs.meta | 12 + .../BillingTransactionPlain.cs | 144 + .../BillingTransactionPlain.cs.meta | 11 + .../BillingTransactionState.cs | 33 + .../BillingTransactionState.cs.meta | 12 + .../Core/BillingServices/BuyProductOptions.cs | 159 + .../BillingServices/BuyProductOptions.cs.meta | 11 + .../Runtime/Core/BillingServices/Delegates.cs | 13 + .../Core/BillingServices/Delegates.cs.meta | 12 + .../Core/BillingServices/IBillingPayment.cs | 37 + .../BillingServices/IBillingPayment.cs.meta | 12 + .../Core/BillingServices/IBillingProduct.cs | 89 + .../BillingServices/IBillingProduct.cs.meta | 12 + .../BillingServices/IBillingTransaction.cs | 116 + .../IBillingTransaction.cs.meta | 12 + .../INativeBillingServicesInterface.cs | 42 + .../INativeBillingServicesInterface.cs.meta | 12 + .../NativeBillingServicesInterfaceBase.cs | 64 + ...NativeBillingServicesInterfaceBase.cs.meta | 12 + .../NullBillingServicesInterface.cs | 82 + .../NullBillingServicesInterface.cs.meta | 12 + .../Runtime/Core/CloudServices.meta | 9 + .../CloudSavedDataChangeReasonCode.cs | 24 + .../CloudSavedDataChangeReasonCode.cs.meta | 12 + .../Core/CloudServices/CloudServices.cs | 593 ++ .../Core/CloudServices/CloudServices.cs.meta | 12 + .../Core/CloudServices/CloudServicesError.cs | 17 + .../CloudServices/CloudServicesError.cs.meta | 11 + .../CloudServices/CloudServicesErrorCode.cs | 16 + .../CloudServicesErrorCode.cs.meta | 11 + .../CloudServicesSavedDataChangeResult.cs | 40 + ...CloudServicesSavedDataChangeResult.cs.meta | 11 + .../CloudServicesSynchronizeResult.cs | 33 + .../CloudServicesSynchronizeResult.cs.meta | 11 + .../CloudServicesUserChangeResult.cs | 32 + .../CloudServicesUserChangeResult.cs.meta | 11 + .../CloudServices/CloudServicesUtility.cs | 78 + .../CloudServicesUtility.cs.meta | 11 + .../Runtime/Core/CloudServices/CloudUser.cs | 28 + .../Core/CloudServices/CloudUser.cs.meta | 12 + .../CloudServices/CloudUserAccountStatus.cs | 24 + .../CloudUserAccountStatus.cs.meta | 12 + .../Runtime/Core/CloudServices/Delegates.cs | 13 + .../Core/CloudServices/Delegates.cs.meta | 12 + .../Runtime/Core/CloudServices/ICloudUser.cs | 27 + .../Core/CloudServices/ICloudUser.cs.meta | 12 + .../INativeCloudServicesInterface.cs | 67 + .../INativeCloudServicesInterface.cs.meta | 12 + .../NativeCloudServicesInterfaceBase.cs | 70 + .../NativeCloudServicesInterfaceBase.cs.meta | 12 + .../NullCloudServicesInterface.cs | 119 + .../NullCloudServicesInterface.cs.meta | 12 + .../Runtime/Core/DeepLinkServices.meta | 9 + .../DeepLinkServices/DeepLinkDefinition.cs | 100 + .../DeepLinkDefinition.cs.meta | 11 + .../Core/DeepLinkServices/DeepLinkServices.cs | 147 + .../DeepLinkServices/DeepLinkServices.cs.meta | 12 + .../DeepLinkServicesDynamicLinkOpenResult.cs | 39 + ...pLinkServicesDynamicLinkOpenResult.cs.meta | 11 + .../Core/DeepLinkServices/Delegates.cs | 10 + .../Core/DeepLinkServices/Delegates.cs.meta | 12 + .../IDeepLinkServicesDelegate.cs | 14 + .../IDeepLinkServicesDelegate.cs.meta | 12 + .../INativeDeepLinkServicesInterface.cs | 28 + .../INativeDeepLinkServicesInterface.cs.meta | 12 + .../NativeDeepLinkServicesInterfaceBase.cs | 71 + ...ativeDeepLinkServicesInterfaceBase.cs.meta | 12 + .../NullDeepLinkServicesInterface.cs | 27 + .../NullDeepLinkServicesInterface.cs.meta | 12 + .../Runtime/Core/EssentialKitManager.cs | 48 + .../Runtime/Core/EssentialKitManager.cs.meta | 11 + .../EssentialKit/Runtime/Core/Extras.meta | 9 + .../Core/Extras/INativeUtilityInterface.cs | 18 + .../Extras/INativeUtilityInterface.cs.meta | 12 + .../Core/Extras/NativeUtilityInterfaceBase.cs | 26 + .../Extras/NativeUtilityInterfaceBase.cs.meta | 12 + .../Core/Extras/NullNativeUtilityInterface.cs | 44 + .../Extras/NullNativeUtilityInterface.cs.meta | 12 + .../Runtime/Core/Extras/Utilities.cs | 144 + .../Runtime/Core/Extras/Utilities.cs.meta | 12 + .../Runtime/Core/GameServices.meta | 9 + .../Core/GameServices/AchievementBase.cs | 77 + .../Core/GameServices/AchievementBase.cs.meta | 12 + ...entDefinition.AndroidPlatformProperties.cs | 21 + ...finition.AndroidPlatformProperties.cs.meta | 11 + ...evementDefinition.IosPlatformProperties.cs | 21 + ...ntDefinition.IosPlatformProperties.cs.meta | 11 + .../GameServices/AchievementDefinition.cs | 96 + .../AchievementDefinition.cs.meta | 11 + .../AchievementDescriptionBase.cs | 145 + .../AchievementDescriptionBase.cs.meta | 12 + .../GameServices/AchievementIdAttribute.cs | 52 + .../AchievementIdAttribute.cs.meta | 11 + .../AchievementProgressReporter.cs | 53 + .../AchievementProgressReporter.cs.meta | 11 + .../Runtime/Core/GameServices/Delegates.cs | 29 + .../Core/GameServices/Delegates.cs.meta | 12 + .../Runtime/Core/GameServices/GameServices.cs | 679 ++ .../Core/GameServices/GameServices.cs.meta | 12 + .../GameServicesAuthStatusChangeResult.cs | 38 + ...GameServicesAuthStatusChangeResult.cs.meta | 11 + .../Core/GameServices/GameServicesError.cs | 71 + .../GameServices/GameServicesError.cs.meta | 11 + .../GameServices/GameServicesErrorCode.cs | 46 + .../GameServicesErrorCode.cs.meta | 11 + ...rvicesLoadAchievementDescriptionsResult.cs | 33 + ...sLoadAchievementDescriptionsResult.cs.meta | 11 + .../GameServicesLoadAchievementsResult.cs | 33 + ...GameServicesLoadAchievementsResult.cs.meta | 11 + .../GameServicesLoadLeaderboardsResult.cs | 33 + ...GameServicesLoadLeaderboardsResult.cs.meta | 11 + .../GameServicesLoadPlayerFriendsResult.cs | 28 + ...ameServicesLoadPlayerFriendsResult.cs.meta | 11 + .../GameServicesLoadPlayersResult.cs | 34 + .../GameServicesLoadPlayersResult.cs.meta | 11 + ...GameServicesLoadServerCredentialsResult.cs | 32 + ...ervicesLoadServerCredentialsResult.cs.meta | 11 + .../GameServices/GameServicesViewResult.cs | 26 + .../GameServicesViewResult.cs.meta | 12 + .../GameServicesViewResultCode.cs | 19 + .../GameServicesViewResultCode.cs.meta | 12 + .../Runtime/Core/GameServices/IAchievement.cs | 62 + .../Core/GameServices/IAchievement.cs.meta | 12 + .../GameServices/IAchievementDescription.cs | 83 + .../IAchievementDescription.cs.meta | 12 + .../Runtime/Core/GameServices/ILeaderboard.cs | 103 + .../Core/GameServices/ILeaderboard.cs.meta | 12 + .../Core/GameServices/ILeaderboardScore.cs | 61 + .../GameServices/ILeaderboardScore.cs.meta | 11 + .../Runtime/Core/GameServices/ILocalPlayer.cs | 52 + .../Core/GameServices/ILocalPlayer.cs.meta | 12 + .../INativeGameServicesInterface.cs | 43 + .../INativeGameServicesInterface.cs.meta | 12 + .../Runtime/Core/GameServices/IPlayer.cs | 69 + .../Runtime/Core/GameServices/IPlayer.cs.meta | 12 + .../Runtime/Core/GameServices/IScore.cs | 74 + .../Runtime/Core/GameServices/IScore.cs.meta | 12 + .../Core/GameServices/LeaderboardBase.cs | 205 + .../Core/GameServices/LeaderboardBase.cs.meta | 12 + ...ardDefinition.AndroidPlatformProperties.cs | 21 + ...finition.AndroidPlatformProperties.cs.meta | 11 + ...erboardDefinition.IosPlatformProperties.cs | 21 + ...rdDefinition.IosPlatformProperties.cs.meta | 11 + .../GameServices/LeaderboardDefinition.cs | 95 + .../LeaderboardDefinition.cs.meta | 11 + .../GameServices/LeaderboardIdAttribute.cs | 52 + .../LeaderboardIdAttribute.cs.meta | 11 + .../LeaderboardLoadScoresResult.cs | 38 + .../LeaderboardLoadScoresResult.cs.meta | 11 + .../GameServices/LeaderboardPlayerScope.cs | 19 + .../LeaderboardPlayerScope.cs.meta | 12 + .../Core/GameServices/LeaderboardScoreBase.cs | 75 + .../GameServices/LeaderboardScoreBase.cs.meta | 12 + .../GameServices/LeaderboardScoreReporter.cs | 53 + .../LeaderboardScoreReporter.cs.meta | 11 + .../Core/GameServices/LeaderboardTimeScope.cs | 22 + .../GameServices/LeaderboardTimeScope.cs.meta | 12 + .../GameServices/LocalPlayerAuthStatus.cs | 21 + .../LocalPlayerAuthStatus.cs.meta | 12 + .../NativeGameServicesInterfaceBase.cs | 51 + .../NativeGameServicesInterfaceBase.cs.meta | 12 + .../Core/GameServices/NullAchievement.cs | 87 + .../Core/GameServices/NullAchievement.cs.meta | 12 + .../NullAchievementDescription.cs | 99 + .../NullAchievementDescription.cs.meta | 12 + .../GameServices/NullGameServicesInterface.cs | 93 + .../NullGameServicesInterface.cs.meta | 12 + .../Core/GameServices/NullLeaderboard.cs | 129 + .../Core/GameServices/NullLeaderboard.cs.meta | 12 + .../Core/GameServices/NullLeaderboardScore.cs | 61 + .../GameServices/NullLeaderboardScore.cs.meta | 12 + .../Core/GameServices/NullLocalPlayer.cs | 101 + .../Core/GameServices/NullLocalPlayer.cs.meta | 12 + .../Runtime/Core/GameServices/NullPlayer.cs | 84 + .../Core/GameServices/NullPlayer.cs.meta | 12 + .../Runtime/Core/GameServices/PlayerBase.cs | 79 + .../Core/GameServices/PlayerBase.cs.meta | 12 + ...erCredentials.AndroidPlatformProperties.cs | 38 + ...dentials.AndroidPlatformProperties.cs.meta | 11 + ...ServerCredentials.IosPlatformProperties.cs | 87 + ...rCredentials.IosPlatformProperties.cs.meta | 11 + .../Core/GameServices/ServerCredentials.cs | 50 + .../GameServices/ServerCredentials.cs.meta | 11 + .../EssentialKit/Runtime/Core/Internal.meta | 8 + .../Runtime/Core/Internal/Delegates.cs | 9 + .../Runtime/Core/Internal/Delegates.cs.meta | 12 + .../Core/Internal/ImplementationSchema.cs | 451 + .../Internal/ImplementationSchema.cs.meta | 12 + .../Core/Internal/NativeFeatureType.cs | 43 + .../Core/Internal/NativeFeatureType.cs.meta | 11 + .../NativeFeatureUsagePermissionType.cs | 23 + .../NativeFeatureUsagePermissionType.cs.meta | 11 + .../Runtime/Core/Internal/ProductResources.cs | 113 + .../Core/Internal/ProductResources.cs.meta | 12 + .../Runtime/Core/MediaServices.meta | 8 + .../Core/MediaServices/CameraAccessStatus.cs | 24 + .../MediaServices/CameraAccessStatus.cs.meta | 12 + .../Runtime/Core/MediaServices/Delegates.cs | 21 + .../Core/MediaServices/Delegates.cs.meta | 12 + .../Core/MediaServices/GalleryAccessMode.cs | 19 + .../MediaServices/GalleryAccessMode.cs.meta | 11 + .../Core/MediaServices/GalleryAccessStatus.cs | 24 + .../MediaServices/GalleryAccessStatus.cs.meta | 12 + .../Core/MediaServices/IMediaContent.cs | 44 + .../Core/MediaServices/IMediaContent.cs.meta | 11 + .../INativeMediaServicesInterface.cs | 24 + .../INativeMediaServicesInterface.cs.meta | 11 + .../Core/MediaServices/MediaContent.cs | 53 + .../Core/MediaServices/MediaContent.cs.meta | 11 + .../MediaContentCaptureOptions.cs | 79 + .../MediaContentCaptureOptions.cs.meta | 11 + .../MediaContentCaptureSource.cs | 15 + .../MediaContentCaptureSource.cs.meta | 11 + .../MediaServices/MediaContentCaptureType.cs | 19 + .../MediaContentCaptureType.cs.meta | 11 + .../MediaServices/MediaContentSaveOptions.cs | 37 + .../MediaContentSaveOptions.cs.meta | 11 + .../MediaContentSelectOptions.cs | 105 + .../MediaContentSelectOptions.cs.meta | 11 + .../Core/MediaServices/MediaServices.cs | 232 + .../Core/MediaServices/MediaServices.cs.meta | 11 + .../Core/MediaServices/MediaServicesError.cs | 40 + .../MediaServices/MediaServicesError.cs.meta | 11 + .../MediaServices/MediaServicesErrorCode.cs | 28 + .../MediaServicesErrorCode.cs.meta | 11 + .../MediaServicesRequestCameraAccessResult.cs | 33 + ...aServicesRequestCameraAccessResult.cs.meta | 11 + ...MediaServicesRequestGalleryAccessResult.cs | 32 + ...ServicesRequestGalleryAccessResult.cs.meta | 11 + .../MediaServicesSaveImageToGalleryResult.cs | 36 + ...iaServicesSaveImageToGalleryResult.cs.meta | 11 + .../MediaServicesSelectMediaContentResult.cs | 36 + ...iaServicesSelectMediaContentResult.cs.meta | 11 + .../NativeMediaServicesInterfaceBase.cs | 29 + .../NativeMediaServicesInterfaceBase.cs.meta | 11 + .../NullMediaServicesInterface.cs | 66 + .../NullMediaServicesInterface.cs.meta | 11 + .../Core/MediaServices/RawMediaData.cs | 30 + .../Core/MediaServices/RawMediaData.cs.meta | 11 + .../EssentialKit/Runtime/Core/NativeUI.meta | 9 + .../Runtime/Core/NativeUI/AlertDialog.cs | 326 + .../Runtime/Core/NativeUI/AlertDialog.cs.meta | 12 + .../Core/NativeUI/AlertDialogBuilder.cs | 122 + .../Core/NativeUI/AlertDialogBuilder.cs.meta | 11 + .../Runtime/Core/NativeUI/AlertDialogStyle.cs | 18 + .../Core/NativeUI/AlertDialogStyle.cs.meta | 12 + .../Runtime/Core/NativeUI/DatePicker.cs | 405 + .../Runtime/Core/NativeUI/DatePicker.cs.meta | 12 + .../Runtime/Core/NativeUI/DatePickerMode.cs | 27 + .../Core/NativeUI/DatePickerMode.cs.meta | 11 + .../Runtime/Core/NativeUI/DatePickerResult.cs | 34 + .../Core/NativeUI/DatePickerResult.cs.meta | 12 + .../Runtime/Core/NativeUI/Delegates.cs | 11 + .../Runtime/Core/NativeUI/Delegates.cs.meta | 12 + .../NativeUI/INativeAlertDialogInterface.cs | 37 + .../INativeAlertDialogInterface.cs.meta | 12 + .../NativeUI/INativeDatePickerInterface.cs | 37 + .../INativeDatePickerInterface.cs.meta | 11 + .../Core/NativeUI/INativeUIInterface.cs | 18 + .../Core/NativeUI/INativeUIInterface.cs.meta | 12 + .../Core/NativeUI/IUnityUIDatePicker.cs | 37 + .../Core/NativeUI/IUnityUIDatePicker.cs.meta | 12 + .../NativeAlertDialogInterfaceBase.cs | 40 + .../NativeAlertDialogInterfaceBase.cs.meta | 12 + .../NativeUI/NativeDatePickerInterfaceBase.cs | 53 + .../NativeDatePickerInterfaceBase.cs.meta | 11 + .../Runtime/Core/NativeUI/NativeUI.cs | 67 + .../Runtime/Core/NativeUI/NativeUI.cs.meta | 12 + .../Core/NativeUI/NativeUIInterfaceBase.cs | 26 + .../NativeUI/NativeUIInterfaceBase.cs.meta | 12 + .../Core/NativeUI/NullDatePickerInterface.cs | 90 + .../NativeUI/NullDatePickerInterface.cs.meta | 12 + .../NativeUI/UnityUIAlertDialogInterface.cs | 110 + .../UnityUIAlertDialogInterface.cs.meta | 12 + .../Core/NativeUI/UnityUIDatePicker.cs | 108 + .../Core/NativeUI/UnityUIDatePicker.cs.meta | 12 + .../NativeUI/UnityUIDatePickerInterface.cs | 136 + .../UnityUIDatePickerInterface.cs.meta | 12 + .../Runtime/Core/NativeUI/UnityUIInterface.cs | 89 + .../Core/NativeUI/UnityUIInterface.cs.meta | 12 + .../Runtime/Core/NetworkServices.meta | 9 + .../Runtime/Core/NetworkServices/Delegates.cs | 10 + .../Core/NetworkServices/Delegates.cs.meta | 12 + .../INativeNetworkServicesInterface.cs | 26 + .../INativeNetworkServicesInterface.cs.meta | 12 + .../NativeNetworkServicesInterfaceBase.cs | 45 + ...NativeNetworkServicesInterfaceBase.cs.meta | 12 + .../Core/NetworkServices/NetworkServices.cs | 239 + .../NetworkServices/NetworkServices.cs.meta | 12 + ...vicesHostReachabilityStatusChangeResult.cs | 34 + ...HostReachabilityStatusChangeResult.cs.meta | 12 + ...sInternetConnectivityStatusChangeResult.cs | 34 + ...rnetConnectivityStatusChangeResult.cs.meta | 12 + .../NullNetworkServicesInterface.cs | 41 + .../NullNetworkServicesInterface.cs.meta | 12 + .../UnityNetworkServicesInterface.cs | 140 + .../UnityNetworkServicesInterface.cs.meta | 12 + .../Runtime/Core/NotificationServices.meta | 8 + .../CalendarNotificationTrigger.cs | 78 + .../CalendarNotificationTrigger.cs.meta | 12 + .../Core/NotificationServices/Delegates.cs | 19 + .../NotificationServices/Delegates.cs.meta | 12 + .../IMutableNotification.cs | 33 + .../IMutableNotification.cs.meta | 12 + .../INativeNotificationCenterInterface.cs | 49 + ...INativeNotificationCenterInterface.cs.meta | 12 + .../NotificationServices/INotification.cs | 77 + .../INotification.cs.meta | 12 + .../INotificationTrigger.cs | 22 + .../INotificationTrigger.cs.meta | 12 + .../LocationNotificationTrigger.cs | 76 + .../LocationNotificationTrigger.cs.meta | 12 + .../NativeNotificationCenterInterfaceBase.cs | 60 + ...iveNotificationCenterInterfaceBase.cs.meta | 12 + .../NotificationAlertStyle.cs | 21 + .../NotificationAlertStyle.cs.meta | 11 + .../NotificationAndroidProperties.cs | 43 + .../NotificationAndroidProperties.cs.meta | 12 + .../NotificationServices/NotificationBase.cs | 118 + .../NotificationBase.cs.meta | 12 + .../NotificationBuilder.cs | 326 + .../NotificationBuilder.cs.meta | 12 + .../NotificationIosProperties.cs | 36 + .../NotificationIosProperties.cs.meta | 11 + .../NotificationPermissionOptions.cs | 44 + .../NotificationPermissionOptions.cs.meta | 11 + .../NotificationPermissionStatus.cs | 24 + .../NotificationPermissionStatus.cs.meta | 11 + .../NotificationPresentationOptions.cs | 23 + .../NotificationPresentationOptions.cs.meta | 12 + .../NotificationPreviewStyle.cs | 23 + .../NotificationPreviewStyle.cs.meta | 11 + .../NotificationPriority.cs | 31 + .../NotificationPriority.cs.meta | 11 + .../NotificationServices.cs | 614 ++ .../NotificationServices.cs.meta | 12 + .../NotificationServicesError.cs | 39 + .../NotificationServicesError.cs.meta | 11 + .../NotificationServicesErrorCode.cs | 33 + .../NotificationServicesErrorCode.cs.meta | 11 + ...ServicesGetDeliveredNotificationsResult.cs | 33 + ...cesGetDeliveredNotificationsResult.cs.meta | 11 + ...ServicesGetScheduledNotificationsResult.cs | 33 + ...cesGetScheduledNotificationsResult.cs.meta | 11 + .../NotificationServicesGetSettingsResult.cs | 33 + ...ificationServicesGetSettingsResult.cs.meta | 11 + ...ationServicesNotificationReceivedResult.cs | 32 + ...ServicesNotificationReceivedResult.cs.meta | 11 + ...vicesRegisterForPushNotificationsResult.cs | 33 + ...RegisterForPushNotificationsResult.cs.meta | 12 + ...ficationServicesRequestPermissionResult.cs | 33 + ...ionServicesRequestPermissionResult.cs.meta | 11 + .../NotificationSettingStatus.cs | 26 + .../NotificationSettingStatus.cs.meta | 11 + .../NotificationSettings.cs | 138 + .../NotificationSettings.cs.meta | 11 + .../NotificationSettingsInternal.cs | 63 + .../NotificationSettingsInternal.cs.meta | 11 + .../NotificationTriggerType.cs | 30 + .../NotificationTriggerType.cs.meta | 12 + .../NullMutableNotification.cs | 155 + .../NullMutableNotification.cs.meta | 12 + .../NullNotificationCenterInterface.cs | 129 + .../NullNotificationCenterInterface.cs.meta | 12 + .../PushNotificationServiceType.cs | 18 + .../PushNotificationServiceType.cs.meta | 12 + .../PushNotificationTrigger.cs | 33 + .../PushNotificationTrigger.cs.meta | 12 + .../TimeIntervalNotificationTrigger.cs | 83 + .../TimeIntervalNotificationTrigger.cs.meta | 12 + .../EssentialKit/Runtime/Core/RateMyApp.meta | 9 + .../RateMyApp/INativeRateMyAppInterface.cs | 9 + .../INativeRateMyAppInterface.cs.meta | 11 + .../RateMyApp/NativeRateMyAppInterfaceBase.cs | 24 + .../NativeRateMyAppInterfaceBase.cs.meta | 11 + .../Core/RateMyApp/NullRateMyAppInterface.cs | 34 + .../RateMyApp/NullRateMyAppInterface.cs.meta | 12 + .../Runtime/Core/RateMyApp/RateMyApp.cs | 93 + .../Runtime/Core/RateMyApp/RateMyApp.cs.meta | 12 + .../RateMyAppConfirmationPromptActionType.cs | 23 + ...eMyAppConfirmationPromptActionType.cs.meta | 11 + .../Core/RateMyApp/RateMyAppController.cs | 214 + .../RateMyApp/RateMyAppController.cs.meta | 12 + .../RateMyApp/RateMyAppControllerStateInfo.cs | 127 + .../RateMyAppControllerStateInfo.cs.meta | 11 + .../RateMyApp/RateMyAppLocalisationKey.cs | 38 + .../RateMyAppLocalisationKey.cs.meta | 11 + .../Core/RateMyApp/RateMyAppPresenter.cs | 90 + .../Core/RateMyApp/RateMyAppPresenter.cs.meta | 11 + .../EssentialKit/Runtime/Core/Setup.meta | 9 + .../Core/Setup/AddressBookUnitySettings.cs | 50 + .../Setup/AddressBookUnitySettings.cs.meta | 11 + .../Core/Setup/AppUpdaterUnitySettings.cs | 41 + .../Setup/AppUpdaterUnitySettings.cs.meta | 11 + .../Runtime/Core/Setup/ApplicationSettings.cs | 68 + .../Core/Setup/ApplicationSettings.cs.meta | 12 + ...UnitySettings.AndroidPlatformProperties.cs | 39 + ...Settings.AndroidPlatformProperties.cs.meta | 11 + .../Setup/BillingServicesUnitySettings.cs | 79 + .../BillingServicesUnitySettings.cs.meta | 11 + ...UnitySettings.AndroidPlatformProperties.cs | 50 + ...Settings.AndroidPlatformProperties.cs.meta | 11 + .../Core/Setup/CloudServicesUnitySettings.cs | 36 + .../Setup/CloudServicesUnitySettings.cs.meta | 11 + ...UnitySettings.AndroidPlatformProperties.cs | 60 + ...Settings.AndroidPlatformProperties.cs.meta | 11 + ...icesUnitySettings.IosPlatformProperties.cs | 59 + ...nitySettings.IosPlatformProperties.cs.meta | 11 + .../Setup/DeepLinkServicesUnitySettings.cs | 128 + .../DeepLinkServicesUnitySettings.cs.meta | 11 + .../Core/Setup/EssentialKitSettings.cs | 390 + .../Core/Setup/EssentialKitSettings.cs.meta | 12 + ...UnitySettings.AndroidPlatformProperties.cs | 80 + ...Settings.AndroidPlatformProperties.cs.meta | 11 + .../Core/Setup/GameServicesUnitySettings.cs | 87 + .../Setup/GameServicesUnitySettings.cs.meta | 11 + .../Core/Setup/MediaServicesUnitySettings.cs | 63 + .../Setup/MediaServicesUnitySettings.cs.meta | 11 + .../NativeFeatureUsagePermissionSettings.cs | 77 + ...tiveFeatureUsagePermissionSettings.cs.meta | 11 + ...NativeUIUnitySettings.UnityUICollection.cs | 67 + ...eUIUnitySettings.UnityUICollection.cs.meta | 11 + .../Core/Setup/NativeUIUnitySettings.cs | 37 + .../Core/Setup/NativeUIUnitySettings.cs.meta | 11 + .../NetworkServicesUnitySettings.Address.cs | 58 + ...tworkServicesUnitySettings.Address.cs.meta | 11 + ...kServicesUnitySettings.PingTestSettings.cs | 60 + ...icesUnitySettings.PingTestSettings.cs.meta | 11 + .../Setup/NetworkServicesUnitySettings.cs | 52 + .../NetworkServicesUnitySettings.cs.meta | 11 + ...UnitySettings.AndroidPlatformProperties.cs | 271 + ...Settings.AndroidPlatformProperties.cs.meta | 11 + .../NotificationServicesUnitySettings.cs | 61 + .../NotificationServicesUnitySettings.cs.meta | 11 + .../RateMyAppConfirmationDialogSettings.cs | 111 + ...ateMyAppConfirmationDialogSettings.cs.meta | 12 + .../Core/Setup/RateMyAppConstraints.cs | 75 + .../Core/Setup/RateMyAppConstraints.cs.meta | 12 + .../Core/Setup/RateMyAppUnitySettings.cs | 60 + .../Core/Setup/RateMyAppUnitySettings.cs.meta | 12 + .../Setup/SharingServicesUnitySettings.cs | 20 + .../SharingServicesUnitySettings.cs.meta | 11 + .../Core/Setup/UtilityUnitySettings.cs | 31 + .../Core/Setup/UtilityUnitySettings.cs.meta | 11 + ...UnitySettings.AndroidPlatformProperties.cs | 53 + ...Settings.AndroidPlatformProperties.cs.meta | 11 + .../Core/Setup/WebViewUnitySettings.cs | 36 + .../Core/Setup/WebViewUnitySettings.cs.meta | 11 + .../Runtime/Core/SharingServices.meta | 9 + .../SharingServices/INativeMailComposer.cs | 39 + .../INativeMailComposer.cs.meta | 12 + .../SharingServices/INativeMessageComposer.cs | 37 + .../INativeMessageComposer.cs.meta | 12 + .../Core/SharingServices/INativeShareSheet.cs | 35 + .../SharingServices/INativeShareSheet.cs.meta | 12 + .../INativeSharingInterface.cs | 44 + .../INativeSharingInterface.cs.meta | 12 + .../INativeSocialShareComposer.cs | 33 + .../INativeSocialShareComposer.cs.meta | 12 + .../Core/SharingServices/InternalDelegates.cs | 15 + .../SharingServices/InternalDelegates.cs.meta | 12 + .../Core/SharingServices/MailComposer.cs | 371 + .../Core/SharingServices/MailComposer.cs.meta | 12 + .../SharingServices/MailComposerExtensions.cs | 17 + .../MailComposerExtensions.cs.meta | 12 + .../SharingServices/MailComposerResult.cs | 33 + .../MailComposerResult.cs.meta | 11 + .../SharingServices/MailComposerResultCode.cs | 27 + .../MailComposerResultCode.cs.meta | 11 + .../Core/SharingServices/MessageComposer.cs | 359 + .../SharingServices/MessageComposer.cs.meta | 12 + .../MessageComposerExtensions.cs | 14 + .../MessageComposerExtensions.cs.meta | 12 + .../SharingServices/MessageComposerResult.cs | 33 + .../MessageComposerResult.cs.meta | 11 + .../MessageComposerResultCode.cs | 24 + .../MessageComposerResultCode.cs.meta | 11 + .../SharingServices/NativeMailComposerBase.cs | 42 + .../NativeMailComposerBase.cs.meta | 12 + .../NativeMessageComposerBase.cs | 40 + .../NativeMessageComposerBase.cs.meta | 12 + .../SharingServices/NativeShareSheetBase.cs | 38 + .../NativeShareSheetBase.cs.meta | 12 + .../NativeSharingInterfaceBase.cs | 40 + .../NativeSharingInterfaceBase.cs.meta | 12 + .../NativeSocialShareComposerBase.cs | 36 + .../NativeSocialShareComposerBase.cs.meta | 12 + .../Core/SharingServices/NullMailComposer.cs | 73 + .../SharingServices/NullMailComposer.cs.meta | 12 + .../SharingServices/NullMessageComposer.cs | 68 + .../NullMessageComposer.cs.meta | 12 + .../Core/SharingServices/NullShareSheet.cs | 64 + .../SharingServices/NullShareSheet.cs.meta | 12 + .../SharingServices/NullSharingInterface.cs | 66 + .../NullSharingInterface.cs.meta | 12 + .../NullSocialShareComposer.cs | 59 + .../NullSocialShareComposer.cs.meta | 12 + .../Runtime/Core/SharingServices/ShareItem.cs | 234 + .../Core/SharingServices/ShareItem.cs.meta | 12 + .../Core/SharingServices/ShareSheet.cs | 275 + .../Core/SharingServices/ShareSheet.cs.meta | 12 + .../Core/SharingServices/ShareSheetResult.cs | 33 + .../SharingServices/ShareSheetResult.cs.meta | 11 + .../SharingServices/ShareSheetResultCode.cs | 22 + .../ShareSheetResultCode.cs.meta | 11 + .../Core/SharingServices/SharingServices.cs | 262 + .../SharingServices/SharingServices.cs.meta | 12 + .../SharingServices/SharingServicesError.cs | 24 + .../SharingServicesError.cs.meta | 11 + .../SharingServicesErrorCode.cs | 18 + .../SharingServicesErrorCode.cs.meta | 11 + .../SharingServices/SocialShareComposer.cs | 289 + .../SocialShareComposer.cs.meta | 12 + .../SocialShareComposerResult.cs | 33 + .../SocialShareComposerResult.cs.meta | 11 + .../SocialShareComposerResultCode.cs | 21 + .../SocialShareComposerResultCode.cs.meta | 11 + .../SocialShareComposerType.cs | 21 + .../SocialShareComposerType.cs.meta | 12 + .../EssentialKit/Runtime/Core/WebView.meta | 8 + .../Runtime/Core/WebView/INativeWebView.cs | 68 + .../Core/WebView/INativeWebView.cs.meta | 12 + .../Runtime/Core/WebView/InternalDelegates.cs | 13 + .../Core/WebView/InternalDelegates.cs.meta | 12 + .../Runtime/Core/WebView/NativeWebViewBase.cs | 117 + .../Core/WebView/NativeWebViewBase.cs.meta | 12 + .../Runtime/Core/WebView/NullNativeWebView.cs | 177 + .../Core/WebView/NullNativeWebView.cs.meta | 12 + .../Runtime/Core/WebView/WebView.cs | 795 ++ .../Runtime/Core/WebView/WebView.cs.meta | 12 + .../Runtime/Core/WebView/WebViewError.cs | 19 + .../Runtime/Core/WebView/WebViewError.cs.meta | 11 + .../Runtime/Core/WebView/WebViewErrorCode.cs | 7 + .../Core/WebView/WebViewErrorCode.cs.meta | 11 + .../Runtime/Core/WebView/WebViewExtensions.cs | 64 + .../Core/WebView/WebViewExtensions.cs.meta | 12 + .../WebView/WebViewRunJavaScriptResult.cs | 33 + .../WebViewRunJavaScriptResult.cs.meta | 11 + .../Runtime/Core/WebView/WebViewStyle.cs | 35 + .../Runtime/Core/WebView/WebViewStyle.cs.meta | 12 + .../EssentialKit/Runtime/Simulator.meta | 8 + .../Runtime/Simulator/AddressBook.meta | 9 + .../AddressBook/AddressBookContact.cs | 85 + .../AddressBook/AddressBookContact.cs.meta | 12 + .../AddressBook/AddressBookInterface.cs | 32 + .../AddressBook/AddressBookInterface.cs.meta | 12 + .../AddressBook/AddressBookSimulator.cs | 162 + .../AddressBook/AddressBookSimulator.cs.meta | 12 + .../AddressBook/AddressBookSimulatorData.cs | 34 + .../AddressBookSimulatorData.cs.meta | 12 + .../Runtime/Simulator/AppUpdater.meta | 9 + .../AppUpdater/AppUpdaterInterface.cs | 149 + .../AppUpdater/AppUpdaterInterface.cs.meta | 12 + .../Runtime/Simulator/BillingServices.meta | 9 + .../BillingServices/BillingProductData.cs | 125 + .../BillingProductData.cs.meta | 12 + .../BillingServicesInterface.cs | 228 + .../BillingServicesInterface.cs.meta | 12 + .../BillingServices/BillingStoreSimulator.cs | 192 + .../BillingStoreSimulator.cs.meta | 12 + .../BillingStoreSimulatorData.cs | 40 + .../BillingStoreSimulatorData.cs.meta | 12 + .../BillingServices/BillingTransactionData.cs | 142 + .../BillingTransactionData.cs.meta | 12 + .../Runtime/Simulator/CloudServices.meta | 9 + .../CloudServices/CloudServicesInterface.cs | 128 + .../CloudServicesInterface.cs.meta | 12 + .../CloudServices/CloudServicesSimulator.cs | 96 + .../CloudServicesSimulator.cs.meta | 12 + .../CloudServicesSimulatorData.cs | 88 + .../CloudServicesSimulatorData.cs.meta | 12 + .../Runtime/Simulator/GameServices.meta | 9 + .../Simulator/GameServices/Achievement.cs | 119 + .../GameServices/Achievement.cs.meta | 12 + .../Simulator/GameServices/AchievementData.cs | 84 + .../GameServices/AchievementData.cs.meta | 12 + .../GameServices/AchievementDescription.cs | 127 + .../AchievementDescription.cs.meta | 12 + .../AchievementDescriptionData.cs | 49 + .../AchievementDescriptionData.cs.meta | 12 + .../GameServices/GameServicesInterface.cs | 91 + .../GameServicesInterface.cs.meta | 12 + .../GameServices/GameServicesSimulator.cs | 318 + .../GameServicesSimulator.cs.meta | 12 + .../GameServices/GameServicesSimulatorData.cs | 169 + .../GameServicesSimulatorData.cs.meta | 12 + .../Simulator/GameServices/Leaderboard.cs | 198 + .../GameServices/Leaderboard.cs.meta | 12 + .../Simulator/GameServices/LeaderboardData.cs | 47 + .../GameServices/LeaderboardData.cs.meta | 12 + .../GameServices/LeaderboardScore.cs | 87 + .../GameServices/LeaderboardScore.cs.meta | 12 + .../Simulator/GameServices/LocalPlayer.cs | 123 + .../GameServices/LocalPlayer.cs.meta | 12 + .../Runtime/Simulator/GameServices/Player.cs | 94 + .../Simulator/GameServices/Player.cs.meta | 12 + .../Simulator/GameServices/PlayerData.cs | 49 + .../Simulator/GameServices/PlayerData.cs.meta | 12 + .../Simulator/GameServices/ScoreData.cs | 92 + .../Simulator/GameServices/ScoreData.cs.meta | 12 + .../Runtime/Simulator/MediaServices.meta | 9 + .../MediaServices/MediaServicesInterface.cs | 46 + .../MediaServicesInterface.cs.meta | 11 + .../MediaServices/MediaServicesSimulator.cs | 264 + .../MediaServicesSimulator.cs.meta | 12 + .../MediaServicesSimulatorData.cs | 60 + .../MediaServicesSimulatorData.cs.meta | 11 + .../Simulator/NotificationServices.meta | 9 + .../MutableNotification.cs | 101 + .../MutableNotification.cs.meta | 12 + .../NotificationServices/Notification.cs | 142 + .../NotificationServices/Notification.cs.meta | 12 + .../NotificationCenterInterface.cs | 128 + .../NotificationCenterInterface.cs.meta | 12 + .../NotificationServicesSimulator.cs | 241 + .../NotificationServicesSimulator.cs.meta | 12 + .../NotificationServicesSimulatorData.cs | 121 + .../NotificationServicesSimulatorData.cs.meta | 12 + .../Runtime/Simulator/RateMyApp.meta | 8 + .../Simulator/RateMyApp/RateMyAppInterface.cs | 54 + .../RateMyApp/RateMyAppInterface.cs.meta | 12 + .../Runtime/Simulator/SharingServices.meta | 9 + .../SharingServices/NativeMailComposer.cs | 75 + .../NativeMailComposer.cs.meta | 12 + .../SharingServices/NativeSharingInterface.cs | 66 + .../NativeSharingInterface.cs.meta | 12 + ...usters.EssentialKit.SimulatorModule.asmdef | 20 + ...s.EssentialKit.SimulatorModule.asmdef.meta | 7 + .../Runtime/VoxelBusters.EssentialKit.asmdef | 15 + .../VoxelBusters.EssentialKit.asmdef.meta | 7 + .../EssentialKit/Runtime/iOS.meta | 8 + .../EssentialKit/Runtime/iOS/AddressBook.meta | 9 + .../iOS/AddressBook/AddressBookBinding.cs | 20 + .../AddressBook/AddressBookBinding.cs.meta | 12 + .../iOS/AddressBook/AddressBookContact.cs | 116 + .../AddressBook/AddressBookContact.cs.meta | 12 + .../iOS/AddressBook/AddressBookInterface.cs | 74 + .../AddressBook/AddressBookInterface.cs.meta | 12 + .../iOS/AddressBook/AddressBookUtility.cs | 75 + .../AddressBook/AddressBookUtility.cs.meta | 12 + .../iOS/AddressBook/CNAuthorizationStatus.cs | 21 + .../AddressBook/CNAuthorizationStatus.cs.meta | 12 + .../iOS/AddressBook/NativeDelegates.cs | 12 + .../iOS/AddressBook/NativeDelegates.cs.meta | 12 + .../NativeReadContactsOptionsData.cs | 32 + .../NativeReadContactsOptionsData.cs.meta | 11 + .../EssentialKit/Runtime/iOS/AppUpdater.meta | 9 + .../iOS/AppUpdater/AppUpdaterBinding.cs | 23 + .../iOS/AppUpdater/AppUpdaterBinding.cs.meta | 12 + .../iOS/AppUpdater/AppUpdaterInterface.cs | 97 + .../AppUpdater/AppUpdaterInterface.cs.meta | 12 + .../NativeAppUpdaterPromptOptionsData.cs | 34 + .../NativeAppUpdaterPromptOptionsData.cs.meta | 11 + .../NativeAppUpdaterUpdateInfoData.cs | 21 + .../NativeAppUpdaterUpdateInfoData.cs.meta | 11 + .../Runtime/iOS/AppUpdater/NativeDelegates.cs | 15 + .../iOS/AppUpdater/NativeDelegates.cs.meta | 12 + .../iOS/AppUpdater/NativeUpdateInfoStatus.cs | 12 + .../AppUpdater/NativeUpdateInfoStatus.cs.meta | 11 + .../EssentialKit/Runtime/iOS/AssemblyInfo.cs | 4 + .../Runtime/iOS/AssemblyInfo.cs.meta | 11 + .../Runtime/iOS/BillingServices.meta | 9 + .../iOS/BillingServices/BillingProduct.cs | 81 + .../BillingServices/BillingProduct.cs.meta | 12 + .../BillingServices/BillingServicesBinding.cs | 43 + .../BillingServicesBinding.cs.meta | 12 + .../BillingServicesInterface.cs | 155 + .../BillingServicesInterface.cs.meta | 12 + .../BillingServices/BillingServicesUtility.cs | 192 + .../BillingServicesUtility.cs.meta | 12 + .../iOS/BillingServices/BillingTransaction.cs | 148 + .../BillingTransaction.cs.meta | 12 + .../iOS/BillingServices/NativeDelegates.cs | 16 + .../BillingServices/NativeDelegates.cs.meta | 12 + .../BillingServices/SKBillingPeriodData.cs | 24 + .../SKBillingPeriodData.cs.meta | 11 + .../SKBillingProductOfferRedeemDetailsData.cs | 41 + ...llingProductOfferRedeemDetailsData.cs.meta | 11 + .../SKBuyProductOptionsData.cs | 30 + .../SKBuyProductOptionsData.cs.meta | 11 + .../iOS/BillingServices/SKPaymentData.cs | 36 + .../iOS/BillingServices/SKPaymentData.cs.meta | 12 + .../SKPaymentTransactionData.cs | 121 + .../SKPaymentTransactionData.cs.meta | 12 + .../iOS/BillingServices/SKPriceData.cs | 36 + .../iOS/BillingServices/SKPriceData.cs.meta | 11 + .../iOS/BillingServices/SKProductData.cs | 61 + .../iOS/BillingServices/SKProductData.cs.meta | 12 + .../iOS/BillingServices/SKProductOfferData.cs | 40 + .../SKProductOfferData.cs.meta | 11 + .../BillingServices/SKSubscriptionInfoData.cs | 49 + .../SKSubscriptionInfoData.cs.meta | 11 + .../SKSubscriptionRenewalInfoData.cs | 78 + .../SKSubscriptionRenewalInfoData.cs.meta | 11 + .../SKSubscriptionStatusData.cs | 54 + .../SKSubscriptionStatusData.cs.meta | 11 + .../SkProductOfferPricingPhaseData.cs | 34 + .../SkProductOfferPricingPhaseData.cs.meta | 11 + .../Runtime/iOS/CloudServices.meta | 9 + .../iOS/CloudServices/CKAccountData.cs | 24 + .../iOS/CloudServices/CKAccountData.cs.meta | 12 + .../iOS/CloudServices/CKAccountStatus.cs | 19 + .../iOS/CloudServices/CKAccountStatus.cs.meta | 12 + .../iOS/CloudServices/CloudServicesBinding.cs | 73 + .../CloudServicesBinding.cs.meta | 12 + .../CloudServices/CloudServicesInterface.cs | 176 + .../CloudServicesInterface.cs.meta | 12 + .../iOS/CloudServices/CloudServicesUtility.cs | 59 + .../CloudServicesUtility.cs.meta | 12 + .../NSUbiquitousKeyValueStoreChange.cs | 19 + .../NSUbiquitousKeyValueStoreChange.cs.meta | 12 + .../iOS/CloudServices/NativeDelegates.cs | 13 + .../iOS/CloudServices/NativeDelegates.cs.meta | 12 + .../Runtime/iOS/DeepLinkServices.meta | 9 + .../DeepLinkServicesBinding.cs | 15 + .../DeepLinkServicesBinding.cs.meta | 12 + .../DeepLinkServicesInterface.cs | 71 + .../DeepLinkServicesInterface.cs.meta | 12 + .../iOS/DeepLinkServices/NativeDelegates.cs | 12 + .../DeepLinkServices/NativeDelegates.cs.meta | 12 + .../EssentialKit/Runtime/iOS/Extras.meta | 9 + .../iOS/Extras/NativeUtilityInterface.cs | 43 + .../iOS/Extras/NativeUtilityInterface.cs.meta | 12 + .../Runtime/iOS/GameServices.meta | 9 + .../Runtime/iOS/GameServices/Achievement.cs | 168 + .../iOS/GameServices/Achievement.cs.meta | 12 + .../iOS/GameServices/AchievementBinding.cs | 46 + .../GameServices/AchievementBinding.cs.meta | 12 + .../GameServices/AchievementDescription.cs | 165 + .../AchievementDescription.cs.meta | 12 + .../AchievementDescriptionBinding.cs | 46 + .../AchievementDescriptionBinding.cs.meta | 12 + .../GameServices/GKLeaderboardPlayerScope.cs | 15 + .../GKLeaderboardPlayerScope.cs.meta | 12 + .../GameServices/GKLeaderboardTimeScope.cs | 17 + .../GKLeaderboardTimeScope.cs.meta | 12 + .../GameServices/GKLocalPlayerAuthState.cs | 17 + .../GKLocalPlayerAuthState.cs.meta | 12 + .../iOS/GameServices/GameCenterBinding.cs | 22 + .../GameServices/GameCenterBinding.cs.meta | 12 + .../iOS/GameServices/GameCenterInterface.cs | 101 + .../GameServices/GameCenterInterface.cs.meta | 12 + .../iOS/GameServices/GameCenterUtility.cs | 97 + .../GameServices/GameCenterUtility.cs.meta | 12 + .../Runtime/iOS/GameServices/Leaderboard.cs | 348 + .../iOS/GameServices/Leaderboard.cs.meta | 12 + .../iOS/GameServices/LeaderboardBinding.cs | 40 + .../GameServices/LeaderboardBinding.cs.meta | 12 + .../iOS/GameServices/LeaderboardScore.cs | 62 + .../iOS/GameServices/LeaderboardScore.cs.meta | 11 + .../GameServices/LeaderboardScoreBinding.cs | 25 + .../LeaderboardScoreBinding.cs.meta | 11 + .../Runtime/iOS/GameServices/LocalPlayer.cs | 131 + .../iOS/GameServices/LocalPlayer.cs.meta | 12 + .../GameServices/NativeCallbackResponder.cs | 120 + .../NativeCallbackResponder.cs.meta | 12 + .../iOS/GameServices/NativeDelegates.cs | 24 + .../iOS/GameServices/NativeDelegates.cs.meta | 12 + .../Runtime/iOS/GameServices/Player.cs | 116 + .../Runtime/iOS/GameServices/Player.cs.meta | 12 + .../Runtime/iOS/GameServices/PlayerBinding.cs | 58 + .../iOS/GameServices/PlayerBinding.cs.meta | 12 + .../Runtime/iOS/MediaServices.meta | 9 + .../MediaServices/AVAuthorizationStatus.cs | 19 + .../AVAuthorizationStatus.cs.meta | 12 + .../iOS/MediaServices/MediaContentBinding.cs | 16 + .../MediaServices/MediaContentBinding.cs.meta | 11 + .../iOS/MediaServices/MediaServicesBinding.cs | 28 + .../MediaServicesBinding.cs.meta | 11 + .../MediaServices/MediaServicesInterface.cs | 202 + .../MediaServicesInterface.cs.meta | 11 + .../iOS/MediaServices/MediaServicesUtility.cs | 86 + .../MediaServicesUtility.cs.meta | 11 + .../iOS/MediaServices/NativeCallback.cs | 26 + .../iOS/MediaServices/NativeCallback.cs.meta | 12 + .../iOS/MediaServices/NativeMediaContent.cs | 103 + .../MediaServices/NativeMediaContent.cs.meta | 11 + .../NativeMediaContentCaptureOptionsData.cs | 28 + ...tiveMediaContentCaptureOptionsData.cs.meta | 11 + .../NativeMediaContentSaveOptionsData.cs | 22 + .../NativeMediaContentSaveOptionsData.cs.meta | 11 + .../NativeMediaContentSelectionOptionsData.cs | 34 + ...veMediaContentSelectionOptionsData.cs.meta | 11 + .../MediaServices/PHAuthorizationStatus.cs | 19 + .../PHAuthorizationStatus.cs.meta | 12 + .../MediaServices/PickImageFinishReason.cs | 17 + .../PickImageFinishReason.cs.meta | 12 + .../EssentialKit/Runtime/iOS/NativeUI.meta | 9 + .../iOS/NativeUI/AlertControllerBinding.cs | 41 + .../NativeUI/AlertControllerBinding.cs.meta | 12 + .../iOS/NativeUI/AlertControllerUtility.cs | 32 + .../NativeUI/AlertControllerUtility.cs.meta | 12 + .../NativeUI/DatePickerControllerBinding.cs | 19 + .../DatePickerControllerBinding.cs.meta | 11 + .../Runtime/iOS/NativeUI/DatePickerUtility.cs | 35 + .../iOS/NativeUI/DatePickerUtility.cs.meta | 11 + .../Runtime/iOS/NativeUI/NativeAlertDialog.cs | 114 + .../iOS/NativeUI/NativeAlertDialog.cs.meta | 12 + .../Runtime/iOS/NativeUI/NativeDatepicker.cs | 141 + .../iOS/NativeUI/NativeDatepicker.cs.meta | 11 + .../Runtime/iOS/NativeUI/NativeDelegates.cs | 12 + .../iOS/NativeUI/NativeDelegates.cs.meta | 12 + .../Runtime/iOS/NativeUI/NativeUIInterface.cs | 33 + .../iOS/NativeUI/NativeUIInterface.cs.meta | 12 + .../iOS/NativeUI/UIAlertControllerStyle.cs | 16 + .../NativeUI/UIAlertControllerStyle.cs.meta | 12 + .../Runtime/iOS/NativeUI/UIDatePickerMode.cs | 16 + .../iOS/NativeUI/UIDatePickerMode.cs.meta | 11 + .../Runtime/iOS/NetworkServices.meta | 9 + .../iOS/NetworkServices/NativeDelegates.cs | 11 + .../NetworkServices/NativeDelegates.cs.meta | 12 + .../NetworkServices/NetworkServicesBinding.cs | 30 + .../NetworkServicesBinding.cs.meta | 12 + .../NetworkServicesInterface.cs | 72 + .../NetworkServicesInterface.cs.meta | 12 + .../iOS/NetworkServices/NetworkStatus.cs | 17 + .../iOS/NetworkServices/NetworkStatus.cs.meta | 12 + .../Runtime/iOS/NotificationServices.meta | 9 + .../MutableNotification.cs | 134 + .../MutableNotification.cs.meta | 12 + .../NotificationServices/NativeDelegates.cs | 24 + .../NativeDelegates.cs.meta | 12 + .../iOS/NotificationServices/Notification.cs | 192 + .../NotificationServices/Notification.cs.meta | 12 + .../NotificationBinding.cs | 98 + .../NotificationBinding.cs.meta | 12 + .../NotificationCenterBinding.cs | 61 + .../NotificationCenterBinding.cs.meta | 12 + .../NotificationCenterInterface.cs | 303 + .../NotificationCenterInterface.cs.meta | 12 + .../NotificationServicesUtility.cs | 164 + .../NotificationServicesUtility.cs.meta | 12 + .../NotificationTrigger.cs | 86 + .../NotificationTrigger.cs.meta | 12 + .../iOS/NotificationServices/UNAlertStyle.cs | 17 + .../NotificationServices/UNAlertStyle.cs.meta | 12 + .../UNAuthorizationOptions.cs | 29 + .../UNAuthorizationOptions.cs.meta | 12 + .../UNAuthorizationStatus.cs | 23 + .../UNAuthorizationStatus.cs.meta | 12 + .../UNNotificationPresentationOptions.cs | 19 + .../UNNotificationPresentationOptions.cs.meta | 12 + .../UNNotificationSetting.cs | 20 + .../UNNotificationSetting.cs.meta | 12 + .../UNNotificationSettingsData.cs | 83 + .../UNNotificationSettingsData.cs.meta | 12 + .../UNNotificationTriggerType.cs | 21 + .../UNNotificationTriggerType.cs.meta | 12 + .../UNShowPreviewsSetting.cs | 17 + .../UNShowPreviewsSetting.cs.meta | 11 + .../EssentialKit/Runtime/iOS/RateMyApp.meta | 9 + .../iOS/RateMyApp/NativeRateMyAppInterface.cs | 31 + .../NativeRateMyAppInterface.cs.meta | 12 + .../Runtime/iOS/RateMyApp/RateMyAppBinding.cs | 12 + .../iOS/RateMyApp/RateMyAppBinding.cs.meta | 11 + .../Runtime/iOS/SharingServices.meta | 9 + .../SharingServices/MFMailComposeResult.cs | 19 + .../MFMailComposeResult.cs.meta | 12 + .../SharingServices/MFMessageComposeResult.cs | 17 + .../MFMessageComposeResult.cs.meta | 12 + .../SharingServices/MailComposerBinding.cs | 41 + .../MailComposerBinding.cs.meta | 12 + .../iOS/SharingServices/MailRecipientType.cs | 17 + .../SharingServices/MailRecipientType.cs.meta | 12 + .../SharingServices/MessageComposerBinding.cs | 47 + .../MessageComposerBinding.cs.meta | 12 + .../iOS/SharingServices/NativeDelegates.cs | 18 + .../SharingServices/NativeDelegates.cs.meta | 12 + .../iOS/SharingServices/NativeMailComposer.cs | 146 + .../NativeMailComposer.cs.meta | 12 + .../SharingServices/NativeMessageComposer.cs | 150 + .../NativeMessageComposer.cs.meta | 12 + .../iOS/SharingServices/NativeShareSheet.cs | 132 + .../SharingServices/NativeShareSheet.cs.meta | 12 + .../SharingServices/NativeSharingInterface.cs | 68 + .../NativeSharingInterface.cs.meta | 12 + .../NativeSocialShareComposer.cs | 123 + .../NativeSocialShareComposer.cs.meta | 12 + .../SLComposeViewControllerResult.cs | 15 + .../SLComposeViewControllerResult.cs.meta | 12 + .../iOS/SharingServices/ShareSheetBinding.cs | 39 + .../SharingServices/ShareSheetBinding.cs.meta | 12 + .../iOS/SharingServices/SharingUtility.cs | 71 + .../SharingServices/SharingUtility.cs.meta | 12 + .../SocialShareComposerBinding.cs | 37 + .../SocialShareComposerBinding.cs.meta | 12 + ...VoxelBusters.EssentialKit.iOSModule.asmdef | 21 + ...Busters.EssentialKit.iOSModule.asmdef.meta | 7 + .../EssentialKit/Runtime/iOS/WebView.meta | 9 + .../Runtime/iOS/WebView/NativeDelegates.cs | 16 + .../iOS/WebView/NativeDelegates.cs.meta | 12 + .../Runtime/iOS/WebView/NativeWebView.cs | 264 + .../Runtime/iOS/WebView/NativeWebView.cs.meta | 12 + .../Runtime/iOS/WebView/WebViewBinding.cs | 103 + .../iOS/WebView/WebViewBinding.cs.meta | 12 + .../VoxelBusters/EssentialKit/Scripts.meta | 8 + .../EssentialKit/Scripts/Essentials.meta | 8 + .../Scripts/Essentials/BillingServices.meta | 8 + .../Essentials/BillingServices/IAPManager.cs | 292 + .../BillingServices/IAPManager.cs.meta | 11 + .../BillingServices/UnityIAPUtility.cs | 166 + .../BillingServices/UnityIAPUtility.cs.meta | 11 + .../UnityIapServicesInterface.cs | 257 + .../UnityIapServicesInterface.cs.meta | 11 + .../Scripts/Essentials/DatePicker.meta | 8 + .../Essentials/DatePicker/TMP_DatePicker.cs | 219 + .../DatePicker/TMP_DatePicker.cs.meta | 12 + .../DatePicker/TMP_DatePickerInputField.cs | 255 + .../TMP_DatePickerInputField.cs.meta | 11 + .../VoxelBusters/EssentialKit/package.json | 15 + .../EssentialKit/package.json.meta | 7 + .../UserSettings/Layouts/default-6000.dwlt | 299 +- 2624 files changed, 192828 insertions(+), 95 deletions(-) create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager.meta create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor.meta create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183.meta create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183/Google.IOSResolver.dll create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183/Google.IOSResolver.dll.meta create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183/Google.JarResolver.dll create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183/Google.JarResolver.dll.meta create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183/Google.PackageManagerResolver.dll create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183/Google.PackageManagerResolver.dll.meta create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183/Google.VersionHandlerImpl.dll create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183/Google.VersionHandlerImpl.dll.meta create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/CHANGELOG.md create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/CHANGELOG.md.meta create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/Google.VersionHandler.dll create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/LICENSE create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/LICENSE.meta create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/README.md create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/README.md.meta create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.183_manifest.txt create mode 100644 EintooAR/Assets/Editor/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.183_manifest.txt.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/DomainReloadManager.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/DomainReloadManager.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/SettingsObjectEditorManager.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/SettingsObjectEditorManager.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomEditorStyles.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomEditorStyles.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomInspector.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomInspector.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutBuilder.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutBuilder.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorSplitView.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorSplitView.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorWindowZ.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorWindowZ.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EnumMaskFieldDrawer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EnumMaskFieldDrawer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FileBrowserAttributeDrawer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FileBrowserAttributeDrawer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FolderBrowserAttributeDrawer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FolderBrowserAttributeDrawer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/InterfaceFieldAttributeDrawer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/InterfaceFieldAttributeDrawer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/ReadOnlyAttributeDrawer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/ReadOnlyAttributeDrawer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/RuntimePlatformConstantDrawer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/RuntimePlatformConstantDrawer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsObjectInspector.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsObjectInspector.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsProviderZ.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsProviderZ.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/StringPopupAttributeDrawer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/StringPopupAttributeDrawer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/UnityEditorUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/UnityEditorUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/AddUnityPackageOperation.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/AddUnityPackageOperation.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/ScriptingDefinesManager.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/ScriptingDefinesManager.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AddUpmPackageRequest.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AddUpmPackageRequest.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionProxy.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionProxy.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssetDatabaseUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssetDatabaseUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/DeleteAssetRequest.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/DeleteAssetRequest.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/EditorApplicationUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/EditorApplicationUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/ImportPackageRequest.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/ImportPackageRequest.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/RemoveUpmPackageRequest.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/RemoveUpmPackageRequest.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/TypeCache.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/TypeCache.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/UnityPackageServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/UnityPackageServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/VoxelBusters.CoreLibrary.Editor.asmdef create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/VoxelBusters.CoreLibrary.Editor.asmdef.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/InstallPath.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/InstallPath.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxyMenuManager.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxyMenuManager.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxySettingsProvider.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxySettingsProvider.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/PackageServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/PackageServices/AssetPackageDependencyResolver.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/PackageServices/AssetPackageDependencyResolver.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/VoxelBusters.CoreLibrary.Editor.Experimental.asmdef create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/VoxelBusters.CoreLibrary.Editor.Experimental.asmdef.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsManager.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsManager.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsProcessor.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsProcessor.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Attribute.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Attribute.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Element.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Element.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Activity.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Activity.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Layout.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Layout.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/ActivityAlias.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/ActivityAlias.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/AppComponent.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/AppComponent.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Application.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Application.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Action.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Action.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Category.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Category.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Data.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Data.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/IntentFilter.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/IntentFilter.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/MetaData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/MetaData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Library.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Library.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/GrantURIPermission.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/GrantURIPermission.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/PathPermission.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/PathPermission.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/Provider.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/Provider.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Receiver.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Receiver.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Service.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Service.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/CompatibleScreens.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/CompatibleScreens.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Configuration.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Configuration.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Feature.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Feature.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Instrumentation.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Instrumentation.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Manifest.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Manifest.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Permission.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Permission.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionGroup.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionGroup.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionTree.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionTree.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Intent.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Intent.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Package.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Package.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Queries.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Queries.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SDK.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SDK.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedGLTexture.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedGLTexture.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedScreens.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedScreens.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/INativeBindingsWriter.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/INativeBindingsWriter.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.AssemblyDefinition.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.AssemblyDefinition.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativeBindingsGenerator.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativeBindingsGenerator.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObject.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObject.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectEditor.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectEditor.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectGroup.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectGroup.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsManager.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsManager.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsProcessor.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsProcessor.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/TargetBuilder.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/TargetBuilder.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsManager.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsManager.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsProcessor.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsProcessor.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/BuildConfigurationKey.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/BuildConfigurationKey.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/InfoPlistKey.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/InfoPlistKey.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/MacroDefinitionsManager.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/MacroDefinitionsManager.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXAssociatedDomainsEntitlement.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXAssociatedDomainsEntitlement.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapability.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapability.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapabilityType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapabilityType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFIle.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFIle.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFileDrawer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFileDrawer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFramework.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFramework.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkDrawer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkDrawer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttribute.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttribute.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttributeDrawer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttributeDrawer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsExporterObject.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsExporterObject.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsManager.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsManager.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsProcessor.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsProcessor.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXProjectExtensions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXProjectExtensions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXTargetMembership.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXTargetMembership.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PlistUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PlistUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/ProjectCapabilityManagerExtensions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/ProjectCapabilityManagerExtensions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/DemoKit.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/DemoKit/EditorDemoManager.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/DemoKit/EditorDemoManager.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/NativePluginsPackageLayout.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/NativePluginsPackageLayout.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/ObjectiveCBindingsGenerator.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/ObjectiveCBindingsGenerator.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/PluginFeatureObject.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/PluginFeatureObject.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.Database.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.Database.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/UnityUI.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/UnityUI/UnityUIEditorUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/UnityUI/UnityUIEditorUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/VoxelBusters.CoreLibrary.Editor.NativePlugins.asmdef create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/VoxelBusters.CoreLibrary.Editor.NativePlugins.asmdef.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures/toggle-off.png create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures/toggle-off.png.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures/toggle-on.png create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures/toggle-on.png.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultJsonServiceProvider.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultJsonServiceProvider.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultLocalisationServiceProvider.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultLocalisationServiceProvider.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultSaveServiceProvider.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultSaveServiceProvider.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Fonts.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Fonts/Lato-Regular.ttf create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Fonts/Lato-Regular.ttf.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Base.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Base.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Headers/VBCoreLibrary-Swift.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Headers/VBCoreLibrary.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Info.plist create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Modules/VBCoreLibrary.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Modules/VBCoreLibrary.swiftmodule/arm64-apple-ios.abi.json create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Modules/VBCoreLibrary.swiftmodule/arm64-apple-ios.swiftdoc create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Modules/VBCoreLibrary.swiftmodule/arm64-apple-ios.swiftmodule create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Modules/module.modulemap create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/VBCoreLibrary create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/_CodeSignature/CodeResources create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPConfig.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPConfig.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPDefines.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPDefines.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPKit.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPKit.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NativePluginsBaseGroup.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NativePluginsBaseGroup.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ActionPanel.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ActionPanel.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/BackButton.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/BackButton.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Button.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Button.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ConsolePanel.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ConsolePanel.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoPanel.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoPanel.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoResources.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoResources.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Dropdown.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Dropdown.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Grid.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Grid.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Header.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Header.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/InputField.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/InputField.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Label.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Label.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row (Horizontal).prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row (Horizontal).prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Section.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Section.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SelectableButton.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SelectableButton.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubHeader.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubHeader.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubTitle.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubTitle.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Toggle.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Toggle.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIAlertDialog.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIAlertDialog.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIRenderer.prefab create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIRenderer.prefab.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/README.md create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/README.md.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AssemblyInfo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AssemblyInfo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperation.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperation.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationHandle.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationHandle.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationManager.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationManager.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationResultContainer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationResultContainer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/ChainedOperation.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/ChainedOperation.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/GroupOperation.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/GroupOperation.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperation.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperation.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationHandle.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationHandle.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationResultContainer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationResultContainer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ClearOnReloadAttribute.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ClearOnReloadAttribute.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/DefaultAttribute.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/DefaultAttribute.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/EnumMaskFieldAttribute.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/EnumMaskFieldAttribute.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ExecuteOnReloadAttribute.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ExecuteOnReloadAttribute.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FileBrowserAttribute.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FileBrowserAttribute.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FolderBrowserAttribute.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FolderBrowserAttribute.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/IncludeInDocsAttribute.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/IncludeInDocsAttribute.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/InterfaceFieldAttribute.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/InterfaceFieldAttribute.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ReadOnlyAttribute.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ReadOnlyAttribute.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/StringPopupAttribute.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/StringPopupAttribute.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ActionTriggerComponent.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ActionTriggerComponent.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/CallbackDispatcher.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/CallbackDispatcher.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/EditorScheduler.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/EditorScheduler.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IOperationResultContainer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IOperationResultContainer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IScheduler.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IScheduler.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ISchedulerUpdateHandler.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ISchedulerUpdateHandler.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/MonoBehaviourZ.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/MonoBehaviourZ.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/PersistentObject.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/PersistentObject.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/RuntimeScheduler.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/RuntimeScheduler.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/Scheduler.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/Scheduler.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/SurrogateCoroutine.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/SurrogateCoroutine.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ConsentStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ConsentStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ContentRating.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ContentRating.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/CoreLibraryDomain.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/CoreLibraryDomain.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/MimeType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/MimeType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextEncodingFormat.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextEncodingFormat.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextureEncodingFormat.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextureEncodingFormat.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationPrivacyConfiguration.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationPrivacyConfiguration.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationUser.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationUser.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Asset.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Asset.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Error.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Error.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/KeyValueDataStore.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/KeyValueDataStore.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ReadableId.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ReadableId.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstant.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstant.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstantSet.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstantSet.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/SerializableKeyValuePair.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/SerializableKeyValuePair.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/StringKeyValuePair.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/StringKeyValuePair.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/TextureData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/TextureData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/URLString.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/URLString.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/UnityPackageDefinition.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/UnityPackageDefinition.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/VBException.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/VBException.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ValidationResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ValidationResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/PrivateSingletonBehaviour.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/PrivateSingletonBehaviour.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonBehaviour.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonBehaviour.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonObject.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonObject.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/EventHandlerCollection.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/EventHandlerCollection.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/IEventHandler.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/IEventHandler.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ExternalServiceProvider.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ExternalServiceProvider.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IJsonServiceProvider.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IJsonServiceProvider.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ILocalisationServiceProvider.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ILocalisationServiceProvider.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ISaveServiceProvider.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ISaveServiceProvider.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IValidator.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IValidator.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/CommandProcessor.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/CommandProcessor.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/ICommand.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/ICommand.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/Assert.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/Assert.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/DebugLogger.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/DebugLogger.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ListPool{T}.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ListPool{T}.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ObjectPool{T}.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ObjectPool{T}.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Networking.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Networking/RestClient.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Networking/RestClient.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/CoreLibrarySettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/CoreLibrarySettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsObject.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsObject.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsPropertyGroup.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsPropertyGroup.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationLifecycleObserver.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationLifecycleObserver.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/CollectionUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/CollectionUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ComponentUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ComponentUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/EnumUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/EnumUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/GameObjectUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/GameObjectUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IApplicationLifecycleListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IApplicationLifecycleListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IOServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IOServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ObjectHelper.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ObjectHelper.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/PropertyHelper.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/PropertyHelper.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ReflectionUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ReflectionUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ResourcesUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ResourcesUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformConstantUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformConstantUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ScreenUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ScreenUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/SystemUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/SystemUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TextureUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TextureUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TransformUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TransformUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityEngineUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityEngineUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityPackagePathResolver.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityPackagePathResolver.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/VoxelBusters.CoreLibrary.asmdef create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/VoxelBusters.CoreLibrary.asmdef.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/JNIUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/JNIUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeActivity.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeActivity.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeAndroidJavaObjectWrapper.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeAndroidJavaObjectWrapper.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeArrayBuffer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeArrayBuffer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeByteBuffer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeByteBuffer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeContext.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeContext.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeDate.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeDate.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfoExtensions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfoExtensions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeException.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeException.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeFloat.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeFloat.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeInteger.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeInteger.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeJSONObject.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeJSONObject.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeList.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeList.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeObject.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeObject.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeParcel.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeParcel.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePoint.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePoint.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePointF.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePointF.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeProxy.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeProxy.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRect.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRect.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRectF.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRectF.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeUnityPluginUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeUnityPluginUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeViewGroup.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeViewGroup.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/Utility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/Utility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/VoxelBusters.CoreLibrary.NativePlugins.AndroidModule.asmdef create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/VoxelBusters.CoreLibrary.NativePlugins.AndroidModule.asmdef.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/AssemblyInfo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/AssemblyInfo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureActivator.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureActivator.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureBehaviour.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureBehaviour.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureInterfaceBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureInterfaceBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimeConfiguration.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimeConfiguration.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimePackage.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimePackage.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionDefinition.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionDefinition.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionHandler.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionHandler.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectRef.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectRef.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/Calendar.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/Calendar.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/NativePlatform.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/NativePlatform.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Controllers.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Controllers/TouchScreenKeyboardController.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Controllers/TouchScreenKeyboardController.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/CircularRegion.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/CircularRegion.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/DateComponents.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/DateComponents.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/LocationCoordinate.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/LocationCoordinate.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/NativePlatformConstantSet.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/NativePlatformConstantSet.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/PlatformConstant.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/PlatformConstant.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterfaceProvider.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterfaceProvider.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureUsagePermissionHandler.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureUsagePermissionHandler.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeObject.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeObject.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/Diagnostics.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/Diagnostics.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/ManagedObjectReferencePool.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/ManagedObjectReferencePool.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeArray.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeArray.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeError.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeError.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeErrorExtensions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeErrorExtensions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeInstanceMap.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeInstanceMap.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeSize.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeSize.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityAttachment.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityAttachment.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityCircularRegion.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityCircularRegion.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityColor.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityColor.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityDateComponent.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityDateComponent.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityRect.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityRect.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/IntPtrUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/IntPtrUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/MarshalUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/MarshalUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformConstantUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformConstantUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformMappingServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformMappingServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/ConsoleRect.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/ConsoleRect.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionBehaviour.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionBehaviour.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionPanelBase{TAction,TActionType}.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionPanelBase{TAction,TActionType}.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoBackButton.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoBackButton.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoHelper.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoHelper.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoMainMenu.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoMainMenu.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoPanel.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoPanel.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoResources.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoResources.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/UnityUI.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/UnityUI/DefaultUnityUIAlertDialog.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/UnityUI/DefaultUnityUIAlertDialog.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/UnityUI/IUnityUIAlertDialog.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/UnityUI/IUnityUIAlertDialog.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/UnityUI/UnityUIAlertDialog.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/UnityUI/UnityUIAlertDialog.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/UnityUI/UnityUIRenderer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/UnityUI/UnityUIRenderer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/VoxelBusters.CoreLibrary.NativePlugins.asmdef create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/VoxelBusters.CoreLibrary.NativePlugins.asmdef.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/iOS.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/iOS/IosNativeObjectRef.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/iOS/IosNativeObjectRef.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/iOS/IosNativePluginsUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/iOS/IosNativePluginsUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/iOS/VoxelBusters.CoreLibrary.NativePlugins.iOSModule.asmdef create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/iOS/VoxelBusters.CoreLibrary.NativePlugins.iOSModule.asmdef.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/Json.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/Json/JsonConstants.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/Json/JsonConstants.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/Json/JsonExtensions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/Json/JsonExtensions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/Json/JsonReader.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/Json/JsonReader.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/Json/JsonString.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/Json/JsonString.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/Json/JsonToken.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/Json/JsonToken.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/Json/JsonUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/Json/JsonUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/Json/JsonWriter.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/Json/JsonWriter.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/VoxelBusters.CoreLibrary.Parser.asmdef create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/Parser/VoxelBusters.CoreLibrary.Parser.asmdef.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/package.json create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/package.json.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Documentation.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Documentation/Readme.pdf create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Documentation/Readme.pdf.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/AndroidGradleDependenciesPostProcessor.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/AndroidGradleDependenciesPostProcessor.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/AndroidLibraryDependenciesGenerator.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/AndroidLibraryDependenciesGenerator.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/AndroidManifestGenerator.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/AndroidManifestGenerator.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/AndroidManifestPostProcessor.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/AndroidManifestPostProcessor.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/EssentialKitAndroidNativePluginsManager.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/EssentialKitAndroidNativePluginsManager.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/EssentialKitAndroidNativePluginsProcessor.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/EssentialKitAndroidNativePluginsProcessor.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/FirebaseSettingsGenerator.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/FirebaseSettingsGenerator.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/GradlePostProcessor.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/GradlePostProcessor.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/google-services.template create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Android/google-services.template.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Unsupported.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Unsupported/UnsupportedPlatformBuildProcessor.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Unsupported/UnsupportedPlatformBuildProcessor.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Xcode.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Xcode/PBXNativePluginsProcessor.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Xcode/PBXNativePluginsProcessor.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Xcode/VoxelBusters.EssentialKit.Editor.Build.iOSModule.asmdef create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/BuildPipeline/Xcode/VoxelBusters.EssentialKit.Editor.Build.iOSModule.asmdef.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/EssentialKitBuildUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/EssentialKitBuildUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/EssentialKitEditorUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/EssentialKitEditorUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/EssentialKitMenuManager.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/EssentialKitMenuManager.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/EssentialKitPackageLayout.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/EssentialKitPackageLayout.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/EssentialKitSettingsEditorUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/EssentialKitSettingsEditorUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/Inspectors.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/Inspectors/EssentialKitSettingsInspector.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/Inspectors/EssentialKitSettingsInspector.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/MyRegistries.xml create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/MyRegistries.xml.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/UninstallPlugin.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/UninstallPlugin.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/UpgradeUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/UpgradeUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/VoxelBusters.EssentialKit.Editor.asmdef create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Editor/VoxelBusters.EssentialKit.Editor.asmdef.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/SampleFiles.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/SampleFiles/DeepLinkTest.html create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/SampleFiles/DeepLinkTest.html.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/Textures.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/Textures/app-icon-custom-coloured.png create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/Textures/app-icon-custom-coloured.png.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/Textures/app-icon-custom-white.png create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/Textures/app-icon-custom-white.png.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/Textures/down-arrow-icon.png create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/Textures/down-arrow-icon.png.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/Textures/logo-bg.png create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/Textures/logo-bg.png.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/Textures/logo-fg.png create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/Textures/logo-fg.png.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/Textures/logo.png create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/EditorResources/Textures/logo.png.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Essentials.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Essentials/Editor.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Essentials/Editor/CrossPlatformEssentialKitDependencies.xml create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Essentials/Editor/CrossPlatformEssentialKitDependencies.xml.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Images.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Images/profile-picture-placeholder.png create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Images/profile-picture-placeholder.png.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/AddressBookDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/AddressBookDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/AlertDialogDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/AlertDialogDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/AppUpdaterDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/AppUpdaterDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/BillingServicesDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/BillingServicesDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/CloudServicesDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/CloudServicesDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/DatePickerDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/DatePickerDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/DeepLinkServicesDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/DeepLinkServicesDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/DemoMenu.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/DemoMenu.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/GameServicesDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/GameServicesDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/MailComposerDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/MailComposerDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/MediaServicesDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/MediaServicesDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/MessageComposerDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/MessageComposerDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/NetworkServicesDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/NetworkServicesDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/NotificationServicesDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/NotificationServicesDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/RateMyAppDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/RateMyAppDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/ShareSheetDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/ShareSheetDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/SocialShareComposerDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/SocialShareComposerDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/UtilitiesDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/UtilitiesDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/WebViewDemo.unity create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/WebViewDemo.unity.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/AddressBookDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/AddressBookDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/AddressBookDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/AddressBookDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/AlertDialogDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/AlertDialogDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/AlertDialogDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/AlertDialogDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/AppUpdaterDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/AppUpdaterDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/AppUpdaterDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/AppUpdaterDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/BillingServicesDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/BillingServicesDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/BillingServicesDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/BillingServicesDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/CalendarTriggerFields.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/CalendarTriggerFields.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/CloudServicesDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/CloudServicesDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/CloudServicesDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/CloudServicesDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/DatePickerDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/DatePickerDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/DatePickerDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/DatePickerDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/DeepLinkServicesDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/DeepLinkServicesDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/DeepLinkServicesDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/DeepLinkServicesDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/GameServicesDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/GameServicesDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/GameServicesDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/GameServicesDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/MailComposerDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/MailComposerDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/MailComposerDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/MailComposerDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/MediaServicesDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/MediaServicesDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/MediaServicesDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/MediaServicesDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/MessageComposerDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/MessageComposerDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/MessageComposerDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/MessageComposerDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/NetworkServicesDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/NetworkServicesDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/NetworkServicesDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/NetworkServicesDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/NotificationServicesDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/NotificationServicesDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/NotificationServicesDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/NotificationServicesDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/RateMyAppDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/RateMyAppDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/RateMyAppDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/RateMyAppDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/ShareSheetDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/ShareSheetDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/ShareSheetDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/ShareSheetDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/SocialShareComposerDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/SocialShareComposerDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/SocialShareComposerDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/SocialShareComposerDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/UtilitiesDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/UtilitiesDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/UtilitiesDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/UtilitiesDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/VoxelBusters.EssentialKit.Demo.asmdef create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/VoxelBusters.EssentialKit.Demo.asmdef.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/WebViewDemo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/WebViewDemo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/WebViewDemoAction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scripts/WebViewDemoAction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/PackageResources.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/PackageResources/Extras.unitypackage create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/PackageResources/Extras.unitypackage.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-address-book.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-address-book.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-app-updater.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-app-updater.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-billing-services.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-billing-services.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-cloud-services.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-cloud-services.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-deep-link-services.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-deep-link-services.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-extras.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-extras.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-game-services.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-game-services.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-media-services.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-media-services.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-network-services.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-network-services.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-notification-services.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-notification-services.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-rate-my-app.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-rate-my-app.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-sharing-services.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-sharing-services.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-social-auth.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-social-auth.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-ui-views.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-ui-views.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-utilities.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-utilities.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-web-view.aar create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit-web-view.aar.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit.androidlib.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit.androidlib/AndroidManifest.xml create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit.androidlib/FindMethodCount.command create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit.androidlib/build.gradle create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit.androidlib/lint.xml create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit.androidlib/project.properties create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit.androidlib/res/drawable/app_icon_custom_coloured.png create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit.androidlib/res/drawable/app_icon_custom_white.png create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/Android/com.voxelbusters.essentialkit.androidlib/res/values/essential_kit_strings.xml create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AddressBook.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AddressBook/AddressBook.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AddressBook/AddressBook.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AddressBook/NPAddressBookBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AddressBook/NPAddressBookBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AddressBook/NPAddressBookDataTypes.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AddressBook/NPAddressBookDataTypes.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AddressBook/NPAddressBookDataTypes.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AddressBook/NPAddressBookDataTypes.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AddressBook/NativePluginsContactsWrapper.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AddressBook/NativePluginsContactsWrapper.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AddressBook/NativePluginsContactsWrapper.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AddressBook/NativePluginsContactsWrapper.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AppUpdater.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AppUpdater/AppUpdater.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AppUpdater/AppUpdater.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AppUpdater/NPAppUpdater.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AppUpdater/NPAppUpdater.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AppUpdater/NPAppUpdater.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AppUpdater/NPAppUpdater.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AppUpdater/NPAppUpdaterBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AppUpdater/NPAppUpdaterBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AppUpdater/NPAppUpdaterDataTypes.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/AppUpdater/NPAppUpdaterDataTypes.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/BillingServices.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/BillingServices.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/Frameworks.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/Frameworks/BillingServices.framework.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/Frameworks/BillingServices.framework/BillingServices create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/Frameworks/BillingServices.framework/Headers/BillingServices-Swift.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/Frameworks/BillingServices.framework/Info.plist create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/Frameworks/BillingServices.framework/Modules/BillingServices.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/Frameworks/BillingServices.framework/Modules/BillingServices.swiftmodule/arm64-apple-ios.abi.json create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/Frameworks/BillingServices.framework/Modules/BillingServices.swiftmodule/arm64-apple-ios.swiftdoc create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/Frameworks/BillingServices.framework/Modules/BillingServices.swiftmodule/arm64-apple-ios.swiftmodule create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/Frameworks/BillingServices.framework/Modules/module.modulemap create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/Frameworks/BillingServices.framework/_CodeSignature/CodeResources create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/NPBillingServicesBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/NPBillingServicesBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/NPBillingServicesDataTypes.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/NPBillingServicesDataTypes.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/NPBillingServicesDataTypes.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/BillingServices/NPBillingServicesDataTypes.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/CloudServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/CloudServices/CloudServices.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/CloudServices/CloudServices.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/CloudServices/NPCloudServicesBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/CloudServices/NPCloudServicesBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/CloudServices/NPCloudServicesDataTypes.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/CloudServices/NPCloudServicesDataTypes.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/CloudServices/NPCloudServicesDataTypes.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/CloudServices/NPCloudServicesDataTypes.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/DeepLinkServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/DeepLinkServices/DeepLinkServices.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/DeepLinkServices/DeepLinkServices.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/DeepLinkServices/NPDeepLinkServicesBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/DeepLinkServices/NPDeepLinkServicesBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/EssentialKitGroup.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/EssentialKitGroup.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/GameServices.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/GameServices.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameKitAchievementBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameKitAchievementBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameKitAchievementDescriptionBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameKitAchievementDescriptionBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameKitLeaderboardBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameKitLeaderboardBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameKitLeaderboardScoreEntryBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameKitLeaderboardScoreEntryBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameKitManager.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameKitManager.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameKitManager.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameKitManager.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameKitPlayerBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameKitPlayerBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameServicesDataTypes.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameServicesDataTypes.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameServicesError.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameServicesError.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameServicesError.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/GameServices/NPGameServicesError.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/MediaServices.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/MediaServices.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaContent.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaContent.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaContent.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaContent.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaServices.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaServices.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaServices.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaServices.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaServicesBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaServicesBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaServicesDataTypes.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaServicesDataTypes.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaServicesError.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaServicesError.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaServicesError.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/MediaServices/NPMediaServicesError.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NativeUI.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NativeUI/NPAlertControllerBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NativeUI/NPAlertControllerBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NativeUI/NPDatePickerControllerBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NativeUI/NPDatePickerControllerBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NativeUI/NPUIManager.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NativeUI/NPUIManager.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NativeUI/NPUIManager.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NativeUI/NPUIManager.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NativeUI/NativeUI.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NativeUI/NativeUI.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NativeUI/UIAlertController+DatePicker.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NativeUI/UIAlertController+DatePicker.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NativeUI/UIAlertController+DatePicker.m create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NativeUI/UIAlertController+DatePicker.m.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NetworkServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NetworkServices/NPNetworkServicesBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NetworkServices/NPNetworkServicesBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NetworkServices/NPNetworkServicesDataTypes.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NetworkServices/NPNetworkServicesDataTypes.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NetworkServices/NetworkServices.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NetworkServices/NetworkServices.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NetworkServices/Reachability.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NetworkServices/Reachability.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NetworkServices/Reachability.m create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NetworkServices/Reachability.m.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NPAppDelegateListener.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NPAppDelegateListener.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NPAppDelegateListener.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NPAppDelegateListener.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NPNotificationBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NPNotificationBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NPNotificationCenterBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NPNotificationCenterBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NPNotificationCenterDataTypes.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NPNotificationCenterDataTypes.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NPNotificationServicesError.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NPNotificationServicesError.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NPNotificationServicesError.m create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NPNotificationServicesError.m.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NotificationServices.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/NotificationServices.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/UNNotificationRequest+TriggerType.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/UNNotificationRequest+TriggerType.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/UNNotificationRequest+TriggerType.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/UNNotificationRequest+TriggerType.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/UNNotificationSettings+ManagedData.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/UNNotificationSettings+ManagedData.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/UNNotificationSettings+ManagedData.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/NotificationServices/UNNotificationSettings+ManagedData.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/RateMyApp.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/RateMyApp/NPStoreReviewBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/RateMyApp/NPStoreReviewBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/RateMyApp/RateMyApp.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/RateMyApp/RateMyApp.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPMailComposerBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPMailComposerBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPMessageComposerBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPMessageComposerBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSLComposeViewControllerWrapper.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSLComposeViewControllerWrapper.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSLComposeViewControllerWrapper.m create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSLComposeViewControllerWrapper.m.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPShareSheetBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPShareSheetBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPShareSheetWrapper.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPShareSheetWrapper.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPShareSheetWrapper.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPShareSheetWrapper.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSharingServicesDataTypes.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSharingServicesDataTypes.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSharingServicesError.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSharingServicesError.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSharingServicesError.m create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSharingServicesError.m.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSharingServicesManager.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSharingServicesManager.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSharingServicesManager.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSharingServicesManager.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSocialShareComposerBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSocialShareComposerBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSocialShareComposerProtocol.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPSocialShareComposerProtocol.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPWhatsAppShareComposer.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPWhatsAppShareComposer.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPWhatsAppShareComposer.m create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/NPWhatsAppShareComposer.m.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/SharingServices.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/SharingServices/SharingServices.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebView.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebView.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebView.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebView.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebViewBinding.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebViewBinding.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebViewDataTypes.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebViewDataTypes.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebViewError.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebViewError.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebViewError.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebViewError.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebViewTabBar.h create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebViewTabBar.h.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebViewTabBar.mm create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/NPWebViewTabBar.mm.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/WebView.asset create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/WebView.asset.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/webview_close_button.png create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/webview_close_button.png.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/webview_close_button@2x.png create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Plugins/iOS/WebView/webview_close_button@2x.png.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AddressBook.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AddressBook/AddressBookContact.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AddressBook/AddressBookContact.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AddressBook/AddressBookInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AddressBook/AddressBookInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AddressBook/NativeAddressBook.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AddressBook/NativeAddressBook.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AddressBook/NativeAddressBookContact.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AddressBook/NativeAddressBookContact.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AddressBook/NativeAddressBookReadOptions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AddressBook/NativeAddressBookReadOptions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AddressBook/NativeReadContactsListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AddressBook/NativeReadContactsListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AddressBook/NativeRequestContactsPermissionListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AddressBook/NativeRequestContactsPermissionListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AppUpdater.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AppUpdater/AppUpdaterInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AppUpdater/AppUpdaterInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AppUpdater/NativeAppUpdater.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AppUpdater/NativeAppUpdater.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AppUpdater/NativeOnPromptUpdateComplete.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AppUpdater/NativeOnPromptUpdateComplete.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AppUpdater/NativeOnRequestUpdateInfoComplete.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AppUpdater/NativeOnRequestUpdateInfoComplete.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AppUpdater/NativePromptUpdateOptions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AppUpdater/NativePromptUpdateOptions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AppUpdater/NativeUpdateInfo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AppUpdater/NativeUpdateInfo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AppUpdater/NativeUpdateStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/AppUpdater/NativeUpdateStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/BillingProduct.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/BillingProduct.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/BillingServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/BillingServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/BillingTransaction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/BillingTransaction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/Converter.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/Converter.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingEnvironment.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingEnvironment.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingPeriod.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingPeriod.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingPeriodUnit.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingPeriodUnit.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingPrice.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingPrice.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProduct.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProduct.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductOffer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductOffer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductOfferCategory.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductOfferCategory.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductOfferPaymentMode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductOfferPaymentMode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductOfferPricingPhase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductOfferPricingPhase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductRevocationInfo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductRevocationInfo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductRevocationReason.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductRevocationReason.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductSubscriptionExpirationReason.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductSubscriptionExpirationReason.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductSubscriptionInfo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductSubscriptionInfo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductSubscriptionPriceIncreaseStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductSubscriptionPriceIncreaseStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductSubscriptionRenewalInfo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductSubscriptionRenewalInfo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductSubscriptionRenewalState.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductSubscriptionRenewalState.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductSubscriptionStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductSubscriptionStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingProductType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingTransaction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingTransaction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingTransactionState.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingTransactionState.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingTransactionStateListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingTransactionStateListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingTransactionVerificationState.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeBillingTransactionVerificationState.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeFetchBillingProductsListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeFetchBillingProductsListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeGoogleBillingServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeGoogleBillingServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeRestorePurchasesListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/BillingServices/NativeRestorePurchasesListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/CloudServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/CloudServices/CloudServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/CloudServices/CloudServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/CloudServices/Converter.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/CloudServices/Converter.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/CloudServices/NativeCloudServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/CloudServices/NativeCloudServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/CloudServices/NativeExternalChangeReason.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/CloudServices/NativeExternalChangeReason.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/CloudServices/NativeExternalDataChangedListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/CloudServices/NativeExternalDataChangedListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/CloudServices/NativeOnUserChangedListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/CloudServices/NativeOnUserChangedListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/CloudServices/NativeSyncronizeListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/CloudServices/NativeSyncronizeListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Common.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Common/NativeAsset.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Common/NativeAsset.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Common/NativeBytesWrapper.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Common/NativeBytesWrapper.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Common/NativeCopyAssetListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Common/NativeCopyAssetListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Common/NativeLoadAssetListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Common/NativeLoadAssetListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Common/NativePluginBootstrapper.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Common/NativePluginBootstrapper.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/DeepLinkServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/DeepLinkServices/DeepLinkServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/DeepLinkServices/DeepLinkServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/DeepLinkServices/NativeDeepLinkRequestListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/DeepLinkServices/NativeDeepLinkRequestListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/DeepLinkServices/NativeDeepLinkServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/DeepLinkServices/NativeDeepLinkServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Extras.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Extras/NativeApplicationUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Extras/NativeApplicationUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Extras/UtilityInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/Extras/UtilityInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/Achievement.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/Achievement.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/AchievementDescription.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/AchievementDescription.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/Converter.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/Converter.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/GameServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/GameServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/Leaderboard.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/Leaderboard.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/LeaderboardScore.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/LeaderboardScore.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/LocalPlayer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/LocalPlayer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeGameAchievement.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeGameAchievement.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeGameLeaderboard.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeGameLeaderboard.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeGameLeaderboardScore.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeGameLeaderboardScore.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeGamePlayer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeGamePlayer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeGameServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeGameServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLeaderboardCollectionVariant.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLeaderboardCollectionVariant.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLeaderboardTimeVariant.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLeaderboardTimeVariant.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLoadAchievementsListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLoadAchievementsListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLoadLeaderboardsListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLoadLeaderboardsListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLoadLocalPlayerScoreListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLoadLocalPlayerScoreListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLoadPlayersListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLoadPlayersListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLoadScoresListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLoadScoresListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLoadServerCredentials.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeLoadServerCredentials.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativePlayerAuthenticationListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativePlayerAuthenticationListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeReportProgressListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeReportProgressListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeSubmitScoreListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeSubmitScoreListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeViewListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/NativeViewListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/Player.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/GameServices/Player.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/AssetMediaContent.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/AssetMediaContent.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/Converter.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/Converter.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/MediaServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/MediaServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeCameraAccessStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeCameraAccessStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeGalleryAccessStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeGalleryAccessStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaCaptureType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaCaptureType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaContentBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaContentBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaContentCaptureListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaContentCaptureListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaContentPathCallback.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaContentPathCallback.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaContentRawDataCallback.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaContentRawDataCallback.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaContentSaveListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaContentSaveListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaContentSelectionListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaContentSelectionListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/MediaServices/NativeMediaServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/AlertDialog.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/AlertDialog.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/DateTimePicker.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/DateTimePicker.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/NativeAlert.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/NativeAlert.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/NativeButtonClickListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/NativeButtonClickListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/NativeDatePicker.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/NativeDatePicker.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/NativeDatePickerListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/NativeDatePickerListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/NativeTimePicker.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/NativeTimePicker.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/NativeTimePickerListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/NativeTimePickerListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/UIInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NativeUI/UIInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NetworkServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NetworkServices/NativeNetworkChangeListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NetworkServices/NativeNetworkChangeListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NetworkServices/NativeNetworkConnectivity.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NetworkServices/NativeNetworkConnectivity.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NetworkServices/NativeNetworkPollSettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NetworkServices/NativeNetworkPollSettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NetworkServices/NetworkServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NetworkServices/NetworkServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/MutableNotification.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/MutableNotification.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeCalendarNotificationTrigger.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeCalendarNotificationTrigger.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeCalendarType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeCalendarType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeLocationNotificationTrigger.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeLocationNotificationTrigger.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotification.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotification.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationAccessState.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationAccessState.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationBuilder.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationBuilder.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationImportance.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationImportance.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationPriority.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationPriority.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationReceivedListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationReceivedListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationTrigger.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationTrigger.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationsRequestListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeNotificationsRequestListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeRegisterRemoteNotificationsListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeRegisterRemoteNotificationsListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeRequestNotificationPermissionsListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeRequestNotificationPermissionsListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeScheduleNotificationListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeScheduleNotificationListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeTimeIntervalNotificationTrigger.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeTimeIntervalNotificationTrigger.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeUnRegisterRemoteNotificationServiceListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NativeUnRegisterRemoteNotificationServiceListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/Notification.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/Notification.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NotificationCenterInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/NotificationServices/NotificationCenterInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/RateMyApp.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/RateMyApp/NativeRequestStoreReviewListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/RateMyApp/NativeRequestStoreReviewListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/RateMyApp/NativeStoreReview.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/RateMyApp/NativeStoreReview.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/RateMyApp/RateMyAppInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/RateMyApp/RateMyAppInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/Converter.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/Converter.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/MailComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/MailComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/MessageComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/MessageComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeMailComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeMailComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeMailComposerListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeMailComposerListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeMailComposerResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeMailComposerResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeMessageComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeMessageComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeMessageComposerListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeMessageComposerListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeMessageComposerResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeMessageComposerResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeShareSheet.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeShareSheet.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeShareSheetListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeShareSheetListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeShareSheetResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeShareSheetResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeSocialShareComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeSocialShareComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeSocialShareComposerListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeSocialShareComposerListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeSocialShareComposerResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeSocialShareComposerResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeSocialShareComposerType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/NativeSocialShareComposerType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/ShareSheet.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/ShareSheet.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/SharingServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/SharingServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/SocialShareComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/SharingServices/SocialShareComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/VoxelBusters.EssentialKit.AndroidModule.asmdef create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/VoxelBusters.EssentialKit.AndroidModule.asmdef.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/WebView.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/WebView/Converter.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/WebView/Converter.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/WebView/NativeEvaluateJavaScriptListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/WebView/NativeEvaluateJavaScriptListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/WebView/NativeWebKitWebViewStyle.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/WebView/NativeWebKitWebViewStyle.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/WebView/NativeWebViewListener.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/WebView/NativeWebViewListener.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/WebView/NativeWebViewMessage.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/WebView/NativeWebViewMessage.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/WebView/NativeWebkitWebView.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/WebView/NativeWebkitWebView.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/WebView/WebView.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Android/WebView/WebView.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/AssemblyInfo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/AssemblyInfo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/AddressBook.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/AddressBook.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/AddressBookContactBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/AddressBookContactBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/AddressBookContactsAccessStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/AddressBookContactsAccessStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/AddressBookError.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/AddressBookError.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/AddressBookErrorCode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/AddressBookErrorCode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/AddressBookReadContactsResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/AddressBookReadContactsResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/AddressBookRequestContactsAccessResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/AddressBookRequestContactsAccessResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/Delegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/Delegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/IAddressBookContact.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/IAddressBookContact.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/IAddressBookContactsEnumerator.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/IAddressBookContactsEnumerator.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/INativeAddressBookInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/INativeAddressBookInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/NativeAddressBookContactData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/NativeAddressBookContactData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/NativeAddressBookInterfaceBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/NativeAddressBookInterfaceBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/NullAddressBookInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/NullAddressBookInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/ReadContactsConstraint.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/ReadContactsConstraint.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/ReadContactsOptions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AddressBook/ReadContactsOptions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/AppUpdater.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/AppUpdater.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/AppUpdaterError.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/AppUpdaterError.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/AppUpdaterErrorCode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/AppUpdaterErrorCode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/AppUpdaterUpdateInfo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/AppUpdaterUpdateInfo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/AppUpdaterUpdateStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/AppUpdaterUpdateStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/Delegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/Delegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/INativeAppUpdaterInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/INativeAppUpdaterInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/NullAppUpdaterInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/NullAppUpdaterInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/PresentUpdateOptions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/AppUpdater/PresentUpdateOptions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingEnvironment.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingEnvironment.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingPayment.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingPayment.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingPeriod.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingPeriod.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingPeriodUnit.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingPeriodUnit.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingPrice.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingPrice.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductDefinition.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductDefinition.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductIdAttribute.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductIdAttribute.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductOffer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductOffer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductOfferCategory.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductOfferCategory.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductOfferPricingPhase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductOfferPricingPhase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductOfferRedeemDetails.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductOfferRedeemDetails.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductPayoutCategory.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductPayoutCategory.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductPayoutDefinition.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductPayoutDefinition.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductPlain.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductPlain.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductRevocationInfo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductRevocationInfo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductRevocationReason.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductRevocationReason.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductSubscriptionExpirationReason.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductSubscriptionExpirationReason.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductSubscriptionInfo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductSubscriptionInfo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductSubscriptionPriceIncreaseStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductSubscriptionPriceIncreaseStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductSubscriptionRenewalInfo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductSubscriptionRenewalInfo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductSubscriptionRenewalState.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductSubscriptionRenewalState.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductSubscriptionStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductSubscriptionStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingProductUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingReceiptVerificationState.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingReceiptVerificationState.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingServicesError.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingServicesError.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingServicesErrorCode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingServicesErrorCode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingServicesInitializeStoreResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingServicesInitializeStoreResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingServicesOfferPaymentMode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingServicesOfferPaymentMode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingServicesRestorePurchasesResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingServicesRestorePurchasesResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingServicesTransactionStateChangeResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingServicesTransactionStateChangeResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingTransactionAndroidProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingTransactionAndroidProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingTransactionBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingTransactionBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingTransactionPlain.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingTransactionPlain.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingTransactionState.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BillingTransactionState.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BuyProductOptions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/BuyProductOptions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/Delegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/Delegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/IBillingPayment.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/IBillingPayment.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/IBillingProduct.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/IBillingProduct.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/IBillingTransaction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/IBillingTransaction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/INativeBillingServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/INativeBillingServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/NativeBillingServicesInterfaceBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/NativeBillingServicesInterfaceBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/NullBillingServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/BillingServices/NullBillingServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudSavedDataChangeReasonCode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudSavedDataChangeReasonCode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudServicesError.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudServicesError.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudServicesErrorCode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudServicesErrorCode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudServicesSavedDataChangeResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudServicesSavedDataChangeResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudServicesSynchronizeResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudServicesSynchronizeResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudServicesUserChangeResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudServicesUserChangeResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudServicesUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudServicesUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudUser.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudUser.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudUserAccountStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/CloudUserAccountStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/Delegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/Delegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/ICloudUser.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/ICloudUser.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/INativeCloudServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/INativeCloudServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/NativeCloudServicesInterfaceBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/NativeCloudServicesInterfaceBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/NullCloudServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/CloudServices/NullCloudServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/DeepLinkDefinition.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/DeepLinkDefinition.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/DeepLinkServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/DeepLinkServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/DeepLinkServicesDynamicLinkOpenResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/DeepLinkServicesDynamicLinkOpenResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/Delegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/Delegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/IDeepLinkServicesDelegate.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/IDeepLinkServicesDelegate.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/INativeDeepLinkServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/INativeDeepLinkServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/NativeDeepLinkServicesInterfaceBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/NativeDeepLinkServicesInterfaceBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/NullDeepLinkServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/DeepLinkServices/NullDeepLinkServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/EssentialKitManager.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/EssentialKitManager.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Extras.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Extras/INativeUtilityInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Extras/INativeUtilityInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Extras/NativeUtilityInterfaceBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Extras/NativeUtilityInterfaceBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Extras/NullNativeUtilityInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Extras/NullNativeUtilityInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Extras/Utilities.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Extras/Utilities.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/AchievementBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/AchievementBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/AchievementDefinition.AndroidPlatformProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/AchievementDefinition.AndroidPlatformProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/AchievementDefinition.IosPlatformProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/AchievementDefinition.IosPlatformProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/AchievementDefinition.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/AchievementDefinition.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/AchievementDescriptionBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/AchievementDescriptionBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/AchievementIdAttribute.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/AchievementIdAttribute.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/AchievementProgressReporter.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/AchievementProgressReporter.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/Delegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/Delegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesAuthStatusChangeResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesAuthStatusChangeResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesError.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesError.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesErrorCode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesErrorCode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesLoadAchievementDescriptionsResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesLoadAchievementDescriptionsResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesLoadAchievementsResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesLoadAchievementsResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesLoadLeaderboardsResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesLoadLeaderboardsResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesLoadPlayerFriendsResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesLoadPlayerFriendsResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesLoadPlayersResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesLoadPlayersResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesLoadServerCredentialsResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesLoadServerCredentialsResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesViewResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesViewResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesViewResultCode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/GameServicesViewResultCode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/IAchievement.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/IAchievement.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/IAchievementDescription.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/IAchievementDescription.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/ILeaderboard.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/ILeaderboard.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/ILeaderboardScore.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/ILeaderboardScore.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/ILocalPlayer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/ILocalPlayer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/INativeGameServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/INativeGameServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/IPlayer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/IPlayer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/IScore.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/IScore.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardDefinition.AndroidPlatformProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardDefinition.AndroidPlatformProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardDefinition.IosPlatformProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardDefinition.IosPlatformProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardDefinition.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardDefinition.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardIdAttribute.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardIdAttribute.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardLoadScoresResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardLoadScoresResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardPlayerScope.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardPlayerScope.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardScoreBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardScoreBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardScoreReporter.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardScoreReporter.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardTimeScope.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LeaderboardTimeScope.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LocalPlayerAuthStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/LocalPlayerAuthStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NativeGameServicesInterfaceBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NativeGameServicesInterfaceBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NullAchievement.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NullAchievement.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NullAchievementDescription.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NullAchievementDescription.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NullGameServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NullGameServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NullLeaderboard.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NullLeaderboard.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NullLeaderboardScore.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NullLeaderboardScore.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NullLocalPlayer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NullLocalPlayer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NullPlayer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/NullPlayer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/PlayerBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/PlayerBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/ServerCredentials.AndroidPlatformProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/ServerCredentials.AndroidPlatformProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/ServerCredentials.IosPlatformProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/ServerCredentials.IosPlatformProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/ServerCredentials.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/GameServices/ServerCredentials.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Internal.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Internal/Delegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Internal/Delegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Internal/ImplementationSchema.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Internal/ImplementationSchema.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Internal/NativeFeatureType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Internal/NativeFeatureType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Internal/NativeFeatureUsagePermissionType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Internal/NativeFeatureUsagePermissionType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Internal/ProductResources.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Internal/ProductResources.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/CameraAccessStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/CameraAccessStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/Delegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/Delegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/GalleryAccessMode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/GalleryAccessMode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/GalleryAccessStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/GalleryAccessStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/IMediaContent.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/IMediaContent.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/INativeMediaServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/INativeMediaServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaContent.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaContent.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaContentCaptureOptions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaContentCaptureOptions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaContentCaptureSource.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaContentCaptureSource.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaContentCaptureType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaContentCaptureType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaContentSaveOptions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaContentSaveOptions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaContentSelectOptions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaContentSelectOptions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaServicesError.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaServicesError.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaServicesErrorCode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaServicesErrorCode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaServicesRequestCameraAccessResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaServicesRequestCameraAccessResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaServicesRequestGalleryAccessResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaServicesRequestGalleryAccessResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaServicesSaveImageToGalleryResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaServicesSaveImageToGalleryResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaServicesSelectMediaContentResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/MediaServicesSelectMediaContentResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/NativeMediaServicesInterfaceBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/NativeMediaServicesInterfaceBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/NullMediaServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/NullMediaServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/RawMediaData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/MediaServices/RawMediaData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/AlertDialog.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/AlertDialog.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/AlertDialogBuilder.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/AlertDialogBuilder.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/AlertDialogStyle.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/AlertDialogStyle.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/DatePicker.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/DatePicker.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/DatePickerMode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/DatePickerMode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/DatePickerResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/DatePickerResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/Delegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/Delegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/INativeAlertDialogInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/INativeAlertDialogInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/INativeDatePickerInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/INativeDatePickerInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/INativeUIInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/INativeUIInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/IUnityUIDatePicker.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/IUnityUIDatePicker.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/NativeAlertDialogInterfaceBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/NativeAlertDialogInterfaceBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/NativeDatePickerInterfaceBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/NativeDatePickerInterfaceBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/NativeUI.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/NativeUI.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/NativeUIInterfaceBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/NativeUIInterfaceBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/NullDatePickerInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/NullDatePickerInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/UnityUIAlertDialogInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/UnityUIAlertDialogInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/UnityUIDatePicker.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/UnityUIDatePicker.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/UnityUIDatePickerInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/UnityUIDatePickerInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/UnityUIInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NativeUI/UnityUIInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/Delegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/Delegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/INativeNetworkServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/INativeNetworkServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/NativeNetworkServicesInterfaceBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/NativeNetworkServicesInterfaceBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/NetworkServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/NetworkServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/NetworkServicesHostReachabilityStatusChangeResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/NetworkServicesHostReachabilityStatusChangeResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/NetworkServicesInternetConnectivityStatusChangeResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/NetworkServicesInternetConnectivityStatusChangeResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/NullNetworkServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/NullNetworkServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/UnityNetworkServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NetworkServices/UnityNetworkServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/CalendarNotificationTrigger.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/CalendarNotificationTrigger.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/Delegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/Delegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/IMutableNotification.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/IMutableNotification.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/INativeNotificationCenterInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/INativeNotificationCenterInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/INotification.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/INotification.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/INotificationTrigger.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/INotificationTrigger.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/LocationNotificationTrigger.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/LocationNotificationTrigger.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NativeNotificationCenterInterfaceBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NativeNotificationCenterInterfaceBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationAlertStyle.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationAlertStyle.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationAndroidProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationAndroidProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationBuilder.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationBuilder.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationIosProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationIosProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationPermissionOptions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationPermissionOptions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationPermissionStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationPermissionStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationPresentationOptions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationPresentationOptions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationPreviewStyle.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationPreviewStyle.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationPriority.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationPriority.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesError.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesError.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesErrorCode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesErrorCode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesGetDeliveredNotificationsResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesGetDeliveredNotificationsResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesGetScheduledNotificationsResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesGetScheduledNotificationsResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesGetSettingsResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesGetSettingsResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesNotificationReceivedResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesNotificationReceivedResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesRegisterForPushNotificationsResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesRegisterForPushNotificationsResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesRequestPermissionResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationServicesRequestPermissionResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationSettingStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationSettingStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationSettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationSettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationSettingsInternal.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationSettingsInternal.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationTriggerType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NotificationTriggerType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NullMutableNotification.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NullMutableNotification.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NullNotificationCenterInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/NullNotificationCenterInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/PushNotificationServiceType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/PushNotificationServiceType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/PushNotificationTrigger.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/PushNotificationTrigger.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/TimeIntervalNotificationTrigger.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/NotificationServices/TimeIntervalNotificationTrigger.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/INativeRateMyAppInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/INativeRateMyAppInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/NativeRateMyAppInterfaceBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/NativeRateMyAppInterfaceBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/NullRateMyAppInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/NullRateMyAppInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/RateMyApp.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/RateMyApp.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/RateMyAppConfirmationPromptActionType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/RateMyAppConfirmationPromptActionType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/RateMyAppController.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/RateMyAppController.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/RateMyAppControllerStateInfo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/RateMyAppControllerStateInfo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/RateMyAppLocalisationKey.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/RateMyAppLocalisationKey.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/RateMyAppPresenter.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/RateMyApp/RateMyAppPresenter.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/AddressBookUnitySettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/AddressBookUnitySettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/AppUpdaterUnitySettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/AppUpdaterUnitySettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/ApplicationSettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/ApplicationSettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/BillingServicesUnitySettings.AndroidPlatformProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/BillingServicesUnitySettings.AndroidPlatformProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/BillingServicesUnitySettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/BillingServicesUnitySettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/CloudServicesUnitySettings.AndroidPlatformProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/CloudServicesUnitySettings.AndroidPlatformProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/CloudServicesUnitySettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/CloudServicesUnitySettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/DeepLinkServicesUnitySettings.AndroidPlatformProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/DeepLinkServicesUnitySettings.AndroidPlatformProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/DeepLinkServicesUnitySettings.IosPlatformProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/DeepLinkServicesUnitySettings.IosPlatformProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/DeepLinkServicesUnitySettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/DeepLinkServicesUnitySettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/EssentialKitSettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/EssentialKitSettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/GameServicesUnitySettings.AndroidPlatformProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/GameServicesUnitySettings.AndroidPlatformProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/GameServicesUnitySettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/GameServicesUnitySettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/MediaServicesUnitySettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/MediaServicesUnitySettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NativeFeatureUsagePermissionSettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NativeFeatureUsagePermissionSettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NativeUIUnitySettings.UnityUICollection.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NativeUIUnitySettings.UnityUICollection.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NativeUIUnitySettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NativeUIUnitySettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NetworkServicesUnitySettings.Address.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NetworkServicesUnitySettings.Address.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NetworkServicesUnitySettings.PingTestSettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NetworkServicesUnitySettings.PingTestSettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NetworkServicesUnitySettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NetworkServicesUnitySettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NotificationServicesUnitySettings.AndroidPlatformProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NotificationServicesUnitySettings.AndroidPlatformProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NotificationServicesUnitySettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/NotificationServicesUnitySettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/RateMyAppConfirmationDialogSettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/RateMyAppConfirmationDialogSettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/RateMyAppConstraints.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/RateMyAppConstraints.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/RateMyAppUnitySettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/RateMyAppUnitySettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/SharingServicesUnitySettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/SharingServicesUnitySettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/UtilityUnitySettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/UtilityUnitySettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/WebViewUnitySettings.AndroidPlatformProperties.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/WebViewUnitySettings.AndroidPlatformProperties.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/WebViewUnitySettings.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/Setup/WebViewUnitySettings.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/INativeMailComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/INativeMailComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/INativeMessageComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/INativeMessageComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/INativeShareSheet.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/INativeShareSheet.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/INativeSharingInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/INativeSharingInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/INativeSocialShareComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/INativeSocialShareComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/InternalDelegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/InternalDelegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MailComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MailComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MailComposerExtensions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MailComposerExtensions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MailComposerResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MailComposerResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MailComposerResultCode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MailComposerResultCode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MessageComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MessageComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MessageComposerExtensions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MessageComposerExtensions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MessageComposerResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MessageComposerResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MessageComposerResultCode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/MessageComposerResultCode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NativeMailComposerBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NativeMailComposerBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NativeMessageComposerBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NativeMessageComposerBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NativeShareSheetBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NativeShareSheetBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NativeSharingInterfaceBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NativeSharingInterfaceBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NativeSocialShareComposerBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NativeSocialShareComposerBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NullMailComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NullMailComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NullMessageComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NullMessageComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NullShareSheet.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NullShareSheet.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NullSharingInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NullSharingInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NullSocialShareComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/NullSocialShareComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/ShareItem.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/ShareItem.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/ShareSheet.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/ShareSheet.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/ShareSheetResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/ShareSheetResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/ShareSheetResultCode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/ShareSheetResultCode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/SharingServices.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/SharingServices.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/SharingServicesError.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/SharingServicesError.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/SharingServicesErrorCode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/SharingServicesErrorCode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/SocialShareComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/SocialShareComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/SocialShareComposerResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/SocialShareComposerResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/SocialShareComposerResultCode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/SocialShareComposerResultCode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/SocialShareComposerType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/SharingServices/SocialShareComposerType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/INativeWebView.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/INativeWebView.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/InternalDelegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/InternalDelegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/NativeWebViewBase.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/NativeWebViewBase.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/NullNativeWebView.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/NullNativeWebView.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/WebView.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/WebView.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/WebViewError.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/WebViewError.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/WebViewErrorCode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/WebViewErrorCode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/WebViewExtensions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/WebViewExtensions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/WebViewRunJavaScriptResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/WebViewRunJavaScriptResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/WebViewStyle.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Core/WebView/WebViewStyle.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/AddressBook.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/AddressBook/AddressBookContact.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/AddressBook/AddressBookContact.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/AddressBook/AddressBookInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/AddressBook/AddressBookInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/AddressBook/AddressBookSimulator.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/AddressBook/AddressBookSimulator.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/AddressBook/AddressBookSimulatorData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/AddressBook/AddressBookSimulatorData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/AppUpdater.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/AppUpdater/AppUpdaterInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/AppUpdater/AppUpdaterInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/BillingServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/BillingServices/BillingProductData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/BillingServices/BillingProductData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/BillingServices/BillingServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/BillingServices/BillingServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/BillingServices/BillingStoreSimulator.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/BillingServices/BillingStoreSimulator.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/BillingServices/BillingStoreSimulatorData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/BillingServices/BillingStoreSimulatorData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/BillingServices/BillingTransactionData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/BillingServices/BillingTransactionData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/CloudServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/CloudServices/CloudServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/CloudServices/CloudServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/CloudServices/CloudServicesSimulator.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/CloudServices/CloudServicesSimulator.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/CloudServices/CloudServicesSimulatorData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/CloudServices/CloudServicesSimulatorData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/Achievement.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/Achievement.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/AchievementData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/AchievementData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/AchievementDescription.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/AchievementDescription.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/AchievementDescriptionData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/AchievementDescriptionData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/GameServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/GameServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/GameServicesSimulator.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/GameServicesSimulator.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/GameServicesSimulatorData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/GameServicesSimulatorData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/Leaderboard.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/Leaderboard.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/LeaderboardData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/LeaderboardData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/LeaderboardScore.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/LeaderboardScore.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/LocalPlayer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/LocalPlayer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/Player.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/Player.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/PlayerData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/PlayerData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/ScoreData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/GameServices/ScoreData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/MediaServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/MediaServices/MediaServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/MediaServices/MediaServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/MediaServices/MediaServicesSimulator.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/MediaServices/MediaServicesSimulator.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/MediaServices/MediaServicesSimulatorData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/MediaServices/MediaServicesSimulatorData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/NotificationServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/NotificationServices/MutableNotification.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/NotificationServices/MutableNotification.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/NotificationServices/Notification.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/NotificationServices/Notification.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/NotificationServices/NotificationCenterInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/NotificationServices/NotificationCenterInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/NotificationServices/NotificationServicesSimulator.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/NotificationServices/NotificationServicesSimulator.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/NotificationServices/NotificationServicesSimulatorData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/NotificationServices/NotificationServicesSimulatorData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/RateMyApp.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/RateMyApp/RateMyAppInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/RateMyApp/RateMyAppInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/SharingServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/SharingServices/NativeMailComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/SharingServices/NativeMailComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/SharingServices/NativeSharingInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/SharingServices/NativeSharingInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/VoxelBusters.EssentialKit.SimulatorModule.asmdef create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/Simulator/VoxelBusters.EssentialKit.SimulatorModule.asmdef.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/VoxelBusters.EssentialKit.asmdef create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/VoxelBusters.EssentialKit.asmdef.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AddressBook.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AddressBook/AddressBookBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AddressBook/AddressBookBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AddressBook/AddressBookContact.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AddressBook/AddressBookContact.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AddressBook/AddressBookInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AddressBook/AddressBookInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AddressBook/AddressBookUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AddressBook/AddressBookUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AddressBook/CNAuthorizationStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AddressBook/CNAuthorizationStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AddressBook/NativeDelegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AddressBook/NativeDelegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AddressBook/NativeReadContactsOptionsData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AddressBook/NativeReadContactsOptionsData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AppUpdater.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AppUpdater/AppUpdaterBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AppUpdater/AppUpdaterBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AppUpdater/AppUpdaterInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AppUpdater/AppUpdaterInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AppUpdater/NativeAppUpdaterPromptOptionsData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AppUpdater/NativeAppUpdaterPromptOptionsData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AppUpdater/NativeAppUpdaterUpdateInfoData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AppUpdater/NativeAppUpdaterUpdateInfoData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AppUpdater/NativeDelegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AppUpdater/NativeDelegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AppUpdater/NativeUpdateInfoStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AppUpdater/NativeUpdateInfoStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AssemblyInfo.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/AssemblyInfo.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/BillingProduct.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/BillingProduct.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/BillingServicesBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/BillingServicesBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/BillingServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/BillingServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/BillingServicesUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/BillingServicesUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/BillingTransaction.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/BillingTransaction.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/NativeDelegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/NativeDelegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKBillingPeriodData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKBillingPeriodData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKBillingProductOfferRedeemDetailsData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKBillingProductOfferRedeemDetailsData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKBuyProductOptionsData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKBuyProductOptionsData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKPaymentData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKPaymentData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKPaymentTransactionData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKPaymentTransactionData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKPriceData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKPriceData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKProductData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKProductData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKProductOfferData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKProductOfferData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKSubscriptionInfoData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKSubscriptionInfoData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKSubscriptionRenewalInfoData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKSubscriptionRenewalInfoData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKSubscriptionStatusData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SKSubscriptionStatusData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SkProductOfferPricingPhaseData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/BillingServices/SkProductOfferPricingPhaseData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/CloudServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/CloudServices/CKAccountData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/CloudServices/CKAccountData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/CloudServices/CKAccountStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/CloudServices/CKAccountStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/CloudServices/CloudServicesBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/CloudServices/CloudServicesBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/CloudServices/CloudServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/CloudServices/CloudServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/CloudServices/CloudServicesUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/CloudServices/CloudServicesUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/CloudServices/NSUbiquitousKeyValueStoreChange.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/CloudServices/NSUbiquitousKeyValueStoreChange.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/CloudServices/NativeDelegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/CloudServices/NativeDelegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/DeepLinkServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/DeepLinkServices/DeepLinkServicesBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/DeepLinkServices/DeepLinkServicesBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/DeepLinkServices/DeepLinkServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/DeepLinkServices/DeepLinkServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/DeepLinkServices/NativeDelegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/DeepLinkServices/NativeDelegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/Extras.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/Extras/NativeUtilityInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/Extras/NativeUtilityInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/Achievement.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/Achievement.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/AchievementBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/AchievementBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/AchievementDescription.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/AchievementDescription.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/AchievementDescriptionBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/AchievementDescriptionBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/GKLeaderboardPlayerScope.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/GKLeaderboardPlayerScope.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/GKLeaderboardTimeScope.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/GKLeaderboardTimeScope.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/GKLocalPlayerAuthState.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/GKLocalPlayerAuthState.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/GameCenterBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/GameCenterBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/GameCenterInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/GameCenterInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/GameCenterUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/GameCenterUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/Leaderboard.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/Leaderboard.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/LeaderboardBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/LeaderboardBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/LeaderboardScore.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/LeaderboardScore.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/LeaderboardScoreBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/LeaderboardScoreBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/LocalPlayer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/LocalPlayer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/NativeCallbackResponder.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/NativeCallbackResponder.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/NativeDelegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/NativeDelegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/Player.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/Player.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/PlayerBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/GameServices/PlayerBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/AVAuthorizationStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/AVAuthorizationStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/MediaContentBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/MediaContentBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/MediaServicesBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/MediaServicesBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/MediaServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/MediaServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/MediaServicesUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/MediaServicesUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/NativeCallback.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/NativeCallback.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/NativeMediaContent.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/NativeMediaContent.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/NativeMediaContentCaptureOptionsData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/NativeMediaContentCaptureOptionsData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/NativeMediaContentSaveOptionsData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/NativeMediaContentSaveOptionsData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/NativeMediaContentSelectionOptionsData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/NativeMediaContentSelectionOptionsData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/PHAuthorizationStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/PHAuthorizationStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/PickImageFinishReason.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/MediaServices/PickImageFinishReason.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/AlertControllerBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/AlertControllerBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/AlertControllerUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/AlertControllerUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/DatePickerControllerBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/DatePickerControllerBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/DatePickerUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/DatePickerUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/NativeAlertDialog.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/NativeAlertDialog.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/NativeDatepicker.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/NativeDatepicker.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/NativeDelegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/NativeDelegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/NativeUIInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/NativeUIInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/UIAlertControllerStyle.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/UIAlertControllerStyle.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/UIDatePickerMode.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NativeUI/UIDatePickerMode.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NetworkServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NetworkServices/NativeDelegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NetworkServices/NativeDelegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NetworkServices/NetworkServicesBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NetworkServices/NetworkServicesBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NetworkServices/NetworkServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NetworkServices/NetworkServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NetworkServices/NetworkStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NetworkServices/NetworkStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/MutableNotification.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/MutableNotification.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/NativeDelegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/NativeDelegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/Notification.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/Notification.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/NotificationBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/NotificationBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/NotificationCenterBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/NotificationCenterBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/NotificationCenterInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/NotificationCenterInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/NotificationServicesUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/NotificationServicesUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/NotificationTrigger.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/NotificationTrigger.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNAlertStyle.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNAlertStyle.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNAuthorizationOptions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNAuthorizationOptions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNAuthorizationStatus.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNAuthorizationStatus.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNNotificationPresentationOptions.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNNotificationPresentationOptions.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNNotificationSetting.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNNotificationSetting.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNNotificationSettingsData.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNNotificationSettingsData.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNNotificationTriggerType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNNotificationTriggerType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNShowPreviewsSetting.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/NotificationServices/UNShowPreviewsSetting.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/RateMyApp.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/RateMyApp/NativeRateMyAppInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/RateMyApp/NativeRateMyAppInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/RateMyApp/RateMyAppBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/RateMyApp/RateMyAppBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/MFMailComposeResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/MFMailComposeResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/MFMessageComposeResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/MFMessageComposeResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/MailComposerBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/MailComposerBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/MailRecipientType.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/MailRecipientType.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/MessageComposerBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/MessageComposerBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/NativeDelegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/NativeDelegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/NativeMailComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/NativeMailComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/NativeMessageComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/NativeMessageComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/NativeShareSheet.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/NativeShareSheet.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/NativeSharingInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/NativeSharingInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/NativeSocialShareComposer.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/NativeSocialShareComposer.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/SLComposeViewControllerResult.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/SLComposeViewControllerResult.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/ShareSheetBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/ShareSheetBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/SharingUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/SharingUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/SocialShareComposerBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/SharingServices/SocialShareComposerBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/VoxelBusters.EssentialKit.iOSModule.asmdef create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/VoxelBusters.EssentialKit.iOSModule.asmdef.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/WebView.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/WebView/NativeDelegates.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/WebView/NativeDelegates.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/WebView/NativeWebView.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/WebView/NativeWebView.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/WebView/WebViewBinding.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Runtime/iOS/WebView/WebViewBinding.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Scripts.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Scripts/Essentials.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Scripts/Essentials/BillingServices.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Scripts/Essentials/BillingServices/IAPManager.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Scripts/Essentials/BillingServices/IAPManager.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Scripts/Essentials/BillingServices/UnityIAPUtility.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Scripts/Essentials/BillingServices/UnityIAPUtility.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Scripts/Essentials/BillingServices/UnityIapServicesInterface.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Scripts/Essentials/BillingServices/UnityIapServicesInterface.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Scripts/Essentials/DatePicker.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Scripts/Essentials/DatePicker/TMP_DatePicker.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Scripts/Essentials/DatePicker/TMP_DatePicker.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Scripts/Essentials/DatePicker/TMP_DatePickerInputField.cs create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/Scripts/Essentials/DatePicker/TMP_DatePickerInputField.cs.meta create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/package.json create mode 100644 EintooAR/Assets/Plugins/VoxelBusters/EssentialKit/package.json.meta diff --git a/EintooAR/Assets/Editor/ExternalDependencyManager.meta b/EintooAR/Assets/Editor/ExternalDependencyManager.meta new file mode 100644 index 00000000..4d7b5ef2 --- /dev/null +++ b/EintooAR/Assets/Editor/ExternalDependencyManager.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e08fb507e0b034036b8cc7edd9deeb68 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Editor/ExternalDependencyManager/Editor.meta b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor.meta new file mode 100644 index 00000000..2a07fb5d --- /dev/null +++ b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 60eed25df4a46427aa405831f8a1c54a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183.meta b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183.meta new file mode 100644 index 00000000..8165a97a --- /dev/null +++ b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5467eebe589ed445d8de6152fa6beb06 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183/Google.IOSResolver.dll b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183/Google.IOSResolver.dll new file mode 100644 index 0000000000000000000000000000000000000000..e756847277b41ab96e9f353e133d1c02f32c1b52 GIT binary patch literal 74240 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 V$;7eF{oVr~T93c#=obhB{|7;1K0N>c literal 0 HcmV?d00001 diff --git a/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183/Google.IOSResolver.dll.meta b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183/Google.IOSResolver.dll.meta new file mode 100644 index 00000000..f04bec07 --- /dev/null +++ b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183/Google.IOSResolver.dll.meta @@ -0,0 +1,38 @@ +fileFormatVersion: 2 +guid: a366c71c93ae411ea1ece423e8b1538f +labels: +- gvh +- gvh_version-1.2.183 +- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.183/Google.IOSResolver.dll +- gvhp_targets-editor +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183/Google.JarResolver.dll b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/1.2.183/Google.JarResolver.dll new file mode 100644 index 0000000000000000000000000000000000000000..736956c740bdc0233751fcebd01c40a8e1d375e0 GIT binary patch literal 364032 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
{g(x>w8!P|@Obq{~y%+xnVOW3NXmhdvSQiB^+a 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

AD~HWR-3cPR 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≈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

|uL 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%0DtqRJwz$0nayxR(sY3unKbr&rZc$b5+41 z8-(rHjQ&G?>Kph=d6pO?q8dTZ&ac58q$TrNmPYM{wIudi2C}G6g?JrKorN$SjP-OV zI(d~rlQo9p&HjyUOemP))L4st&yzTYUD2jC)+(`!;cwUMrJ+z~Skmm=s!p1W{7~dh z>gc+znz6)94ge(#5gqEp7K#pbgn2EsDEvx)piQ8;y{=X_MuU|bJRx^uCm|R~c^0Bh z6l99i6=J@^DzNnyqJ19jxV4cpF%nyopl8({B3TyJ@9lW zpyI-HcVS7pIht1P3bk%vnTieW){XwI5F-OOEI5T4Y$u_Q2v=KM3%a_A26(G0nxeOl z^pI-GQ6ZogP67jF1I^SzZ7R5(TU&YN=6ovr{*4~iW{VE8+XU5Vlu}abjwsQ71gEb} zS&%4qW7N~(4P6~BAB{uQ3pgt^C{}gQ-mN@25XO9`30b z1q{7zUC>Xv(~Q?(V&VWP1Fg~IXN)HE2!_2pu$f^tFC*BP(*Lel(7#C{)0+=BH>w=doJJF82FEDnu1oAI2yR z>Q&rmv?D?8;_@y`#N@m&hlUM@uZ@})ezRviT!3JePwjm!_Iu#~mv`$;%WstLFR=vU z1-wgt2dRnUfD#TJk;J*O- zNsUos3I<3xV>BAt1!A0*_*5Uw5BOIg}*J7TaAxU7p7!FsV2dT-bZap*6viw(f zwh9+&phtVAyF&0iILa0Su)o6+N|7yIlca z4OWn>6O8ikj9k7@1>BM@5Xs-7zi2c}?xcS#v$ycyM#OC0z@q~>U(_U=hF*bj$1%ft z{Us{AShWc?z`KRn#!Y@UE726d@PeZT!PB*}7M?22GYg?7$}s*73u+y;i?qD56G!ZIflp0FZhbFPh0!h!+pJ9M}L8zU^|R;=;qSU5s5rD3S+ zJ?&iqKI}T19p&mrnC2#HaD^x6K|PxM5ng!8?N|qYC9IFdURQfCf>IN}*QbLU?5Vi6 zawv*#mJV}FTUTo+5)u77f|yct1Qx)oFenRWLcZ=u9PR3G*A02rdAyiHB3!*77melJ zXv8*l-?8b%2T$-OaOl|O7EYh~OSZ(PGlKh-3N~W<43o`;ZiSKz4xbc)9*FX*aGN^M zQ^;o84-}2A&G4uQP%KZ7j=6x4BZXmw7W(+CwL9nzXo(JwuMrvXP|z>z+RF5BQBZQk zQpJkeOvBosv5U5V+@ZSlq8c5p3Vm@a!jwOa=J546bu+B@($y9jF-eejQMx*5ZVA?- zH=B{Zfj$_yxoPnnr>_;em^#BSqDrzJ)!tz88r=O*y+_Gjs#zotmKS7Tgi~i#Aq-I~ zF&q=IPMwRY&oOJPs2^6WF=w#V)#;`oSQEIdb(m+fu=QwSSnV3e=uBNtV;A6fQU@`7 z6Qj0^x=NE@Qfg#0J;(4DKExhZojI9KQa1m zArS>Cp=@|js1~dJm#(@Cz<@B|!d_}O|(H@v@^m8 z&1Z}t2KJjY!U>pD8?yr#3Czm{ydxf-dk4LLAnG@C2g!Zn$WR-3vK;0;F>;?6>k7J+ z-8Nz7H)W&4j*z0_+uIn)s9ub_x6-1EgPl~BmAv3s>1jh)Ek0D3nq&)8DOBzDwL<`2 zjo-J@gAi7FK@MPE3WQXU2hbp#XC<+<)!nIr9j>jF2yYN=44VTU=$0l(?BWUkx(jGI zkJWv7!0p;79Kmj1t9c87Hl@vpJ4{of##v3cD@-~cBVmG@3R33fR48V(3Mm`xko_ZpePCq2TLFo_R%771vt(PctxdNobyah1htH#P#1nQJ78FIyE-^+^7lAR z4n%xFc*4Ferg=z0RSP=tbO^Q56#-uGij^x@F2*(|)fQ`N_T{;vdU`jvL2*oj`F$V} zk<9tu>!vOk7KhTlfpbkT^(ZGpj2vk9Cip=k73KthXcWY+wD^hN)t9LecE4FVakej3>C(`r@UJsAr_`q zrp?bvKOOCH)9GU}O`)w8ob53uNP%o*c7D|W@ND)p+?Sb%ezf#WCdE6|U3ph1g#A8EqXkw!HVs{91Wj|nLq^?nKJY^H zWw7XrVFOm=G>An`G6ehIQTUR8zpFC}#|5k?OfCN@%OE^5jLZ}?XInZYXF{tVPB4d9 z#aNQ!x}ze{`ZSE-5Ct145fmE7&a4s)^1$zIQ;w?kJ$QYuDar$hrl=hQ&DP5>jp@aP z#?WW0UESzV8mCg~lOGTHcE90|P-S6LH0ki3p1Z9d9cu~RrH-OvK8lFY zmPvTQ%(f8WHTzs$=;Lq!aB;bnu7yT;G|s!w`OP9Y0`0sF9HG#@3Qjz6M>R^U4t-%g zj#?vPRL}m+AGNv-&v23Ej^?)YGn;6RUn%As`1OLEd!a0t3>(^lr_+fM74sVH@KpKM zgQ7NnILy-`Ur=JS2HVEi3?Zqo@5>mv7Zz%vZboP@fcw?95`K|r^t#=EA$&%LZ5NwB z*g4|ynA|p8D+pkppZ_?#kzLP5cc%+$et&>Dq#2qA!U*lqsdb4Ulhr| znC9tGNMmX>LrX|^fHv=RXlpp6{DO!8U4+$GK*g$3HUKSb_E0J+Nj{nb##15w>Vt2! zm#*hIjbKQn(=b|mu!A403+Vm5pq5xdXK#`92dy5yLGnNEWm3AM0kHzZAu5!WFCOW6*Y4yr<3)|i&EARye*B8N_CJ-j^<|k z#iCKb-^XJD8dqPg>Q8S z^tlmiT&NQu3Xu`kxGwPPkjJM(+P0X5TYaFSt=N@1n-e`5MnyndI0FI1)ME*U^$JHZ zxUF$og5w%B;lb8u7(yIoVU#v6tb=4;OGf`;r^SZ>iF*@YP2NoXN)*zKen9?%68Coy z)pQJn4Nm9kX_*=v5>Qg@xX=N^7eV|S>w+S@IgbshV0cfG_B7!NF-_C@~ zHbYqS0!l;Aqu2;&_o2SHx;1bwA#$mUTnrpf;FvtfE!X77(yhjW%rP%w0t~7POBk4| zeErDSh;?Bc>ql!Fghu9|tlIP#)EJ72eGQ!1Bg~68U0}+zixrG|(SUSj??_9qiJ%ixJGamdD0vNpi97a(D zdOAVrP9Hi4#bR$)a04%95Jq9ult~7N<3wDkFngZHNJZi67Oa*CrUr`$4huA=6iTQ~ zA7to6X;4tDkG@ZrH)x=y1uDD|ARb?y(r zD2&1k)w~s^VEx=py;SF+4ZuXhmrlb1q=>UmtJNTK)*-gQW}#lngcIoOf6k5d1gtFJ z)*g0PtZ{>XOBliUh7J2bcbE_~3+UYt6aoBbOEHLBxHDT?LK{37jj;CJg!=-}E1Vvj zkC&n|dt!|qb&XYE zACONDT^%Zpc}PoLQdww!N>nfA$5pgkRG6A1e3d1V%m5NPB78l^dW;lG#={xX3J`k{ z=F}8fm@6km4V>nXq&L}+MqY_yXS&UOZt;b_C`PJk{;Q9g{;1iA5Y~ce0?DzYl=!2~wRKn)m#iJ|cQ4iLg z?g%mZ(mB?(n3KuzFfS9~Ix#MD!+vlqup!|0`MY$77^08i(20X-j?9;k^@4KZV3&w=Z$gH;YP5{*Q62~7&9 z7)TwaOASYV^eQiWi-i+Z1C`)O+UaZ4-9a^~iC`cKnjJ++!oULNH8F0Qs-P3k=XRSh z)Pz*yb_Kfvyw}7+ivzB9x=g0;&12+t`ZjxD=}bgnVM@fNI#;NtIrOkglLm1xO4IWW zfx#Z@aBe1vW<1yNpJeC~AZJ4N|5ytg;B5W4N-6ZpDsqrh!DLU6>kU5_ZVz{s&GeU^ z>ePcc7TsodRw}HM2<=u5xUfY@`QH^+G*@gQ@0yGy@BOpk_SAI`pX25MC-VnT=hA0s&Vyhe&TrvEHO< z2yM$pRpC8K^BD=+p5kem1A3)OgD^CQi#J{#kd<+nh&s^briYli%wb}!WDuajWO00e zMez!cdy6`(jKZm8c-eta^AUxJqMMaaG&KFG$4}*^4vEoryu5?1l{cZus%{!FeH8XP zG)?(_d;v-+SJRVu_#5IJ{Hye*=ot4Zdwmuwen5v0YoU1%#c=vtcohA#f8IjpvrMm zql0oq_#harf%z9(zc@SX=6zk90^pKkpga0eY)+A8DRjN%iajSy-f(UI+<^sN(dgfU)WjhfWnp+~6+J7Kh!&G73V$==5egiy-fn4%a zs4D$mQh|Ne0R(DJJtaqyMiKQG9HI4lSAlsFiCYGw~(*ApxPK{~ihBv^BnTq!{Z5A8w zW+yM+F4c~|ZFrj#p68^uIi;<{+h`i_c9|;tmf)>5b|I3Tpfuq9Q4I>um%j{kFMR4G(E(X3MnDas)YXW$4m=lr-FQh{7v7@P zA;ic?8l9Z?M!M@RvT0Lp4z4wWFN}*2k{3X-5o-DSED4$x85|dUj+>3bCWQ z9#qMVPzV$|3bO&p2AI+XOsUfjDIX_j=S(SXh~sQvNtJ~ije;v2XaJJ7i!Jy|Mq`KZ zQPtX6xv0>ZCQv;{-Hx(Q!@Ce_1*BN(!g-U@%yN0q+?^eYG7ua zYq&(z73xuU>XOtsDW`gHR9@&x@lA+Bx;0H~h-qRLyo+jRA$ZgYU3g2NS>6d+0^e1# z;JZ&2yi(Evy{A@ic}ZtV!(!TE#Pe{gM_Q5w8X8zkDN_$fq4a+vZ^!GrRA)fUk<{I& zm1*ExV6&e*Sent&QL-azP+A&xR0~9L=KZHs?0Cr+X_baw8s?(n_C8GG8#N3y zJawgZG_Yxq%?MLBp@yNTWa0sYN$pe=)d8uiP_a7jqp^}CREHg}D>@!#I0SD2j2;z~ z1a)J|H##T0jRmuU9q$y6jI)(Uml~Sp1By|I5s5ktQStm;RP`p{Eoy7SC1{P3QlpNk z2AXlGd}O>-K0C%?H7Jk~m^CoVw-)b9^Ke=;hmaP!2bAG#zF87#Fg1?4&;*pz5d3dM zxm8CiMhPM#Vq`cNypy6s%lC0F5iG? zA@nY?h-vt*?2D!aEd3xz{eYUi5aWqy2s5|}t;n(iG5U{9)1u^}Qwu_}9Xu-5G&FTH zUMx2iFRh!7m)Ok`veAj@oF>0c!K*006An*?2}L*)Q2$AwEW|7O#HEx(0CG& zn26W|bDDrx^9`gejEd7Q|Dg_OiDoj4j)|0mk2U9o+u;Bef8%Mi^&wX=yb*e%4njse zm8WnT0c2t$UcBqTuNg)tCPz!rNUz+ih*^>2L+ua8qcqY@X^K~KDRst`{GaBJ!6n2{ znn$RsVm`>Gj*D$wE+=*7rT9_TP@|LRxtbD*_z!BNAkT@cJdzN-QCJP6<3U#=)3+zB zVyGTZ4gnchCugh1xb;lwKx&jS^-H{qHC5$7mDB!B#o(1JjH>)fq`Gc^pGA`%xdJra z3VdhI>{8LH#G7vhr5D0WruuK;dXk?<>iQrj8i$%boMQcJ#t`+k*7(fAbPJHY+f_XfUJiq zR>Q?m&VRH)P;)8Svn7-PnBERm_G}r|_$2e~3M2m|+K5ycX0Yj)IeeR%&dzyeIIb%H zw=3}M_$3_Qj&k)^ys6m1OFT=*>fZ%sGgbaCjj|FN`4$t4H~nf+^=&O|N)6soRd-ii z6O-A(Z_krv5NzK3pZ2ajM6T<+pL^$V@6OKN-MK4SD{ICcSr(Qe??aYkS#cE0NNZcM z)>6EZA5BzurCrN%_3}y^OOD;lY~oTwOq$Y^7-C3E3=JgU(1a$?Km!THrGW%$s38Rh zWGaK9cB!HNxasfrefP|{_s(d&tF)n%%desY+99X5NTB-sy$T8aD<2CrUD*>5SsTdIzq%m)pOM z71f+E;)FRHpqD4L#77)miUaAI3{W_^)EU}1uwTl2Ch={ce!;Az?CCU|+fn!)<%YL+ zMkt^Wznh7SBO(|DC-^tonR<_cUh`t8==Ic0V9I}^Gnu_OVeaZRM*1D)x3whQ98X5E zTK8)FImxAMFuRwAYVA~BiV~P}`$3290B#lm9I2k3U0O(*ETGi5X*p@csETsUR*dJ= zHJpcY@HQTiQq}k;ah<`d8g5t59O;FNQiT#^r}0@g+zXqg#EZlZQo2B{NMuTvAV?Sxz+>y=ve`JP5

jX=U!urUje1P>KAd+_}V|rNmeg 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 static` will be added to `Podfile` by + default instead of `use_frameworks!`. This can be changed in iOS Resolver + settings. This fixes odd behaviors when pods include static libraries, ex. + Firebase Analytics. +* iOS Resolver - Added a workaround when app crashes on launch due to + `Library not loaded: @rpath/libswiftCore.dylib` when some pods includes Swift + framework. This is turned `OFF` by default and can be changed in iOS Resolver + settings. + +# Version 1.2.169 - Jan 20, 2022 +* General - Fixes #425 - Change to save `GvhProjectSettings.xml` without + Unicode byte order mark (BoM). +* Android Resolver - Remove reference to `jcenter()` +* iOS Resolver - Force setting `LANG` when executing Cocoapods in shell mode on + Mac. + +# Version 1.2.168 - Dec 9, 2021 +* All - Fixes #472 by removing the use of `System.Diagnostics.Debug.Assert` +* All - Fixed #477 by properly enabling EDM4U libraries for Unity 2021.2+ when + the package is installed through `.tgz` + +# Version 1.2.167 - Oct 6, 2021 +* All - Moved versioned `.dll` in EDM4U to a versioned folder and remove their + version postfix in their filename. For instance, `IOSResolver.dll` will be + placed at `ExternalDependencyManager/Editor/1.2.167/Google.IOSResolver.dll`. +* Android Resolver - Fixed #243 by only using the highest version in + `mainTemplate.gradle` when duplicated dependencies are presented. +* Android Resolver - Added supports to x86_64 to ABI list for Android apps on + Chrome OS. + +# Version 1.2.166 - Jun 30, 2021 +* All - Fixed #440 and fixed #447 by specifying the parameter type while calling + `GetApplicationIdentifier()` Unity API using reflection, due to a new + overloaded method introduced in Unity 2021.2. +* Android Resolver - Fixed #442 by patching `Dependency.IsGreater()` when the + version strings end '+'. + +# Version 1.2.165 - Apr 28, 2021 +## Bug Fixes +* Version Handler - Fixed #431 by replacing the use of `HttpUtility.UrlEncode()` + which causes NullReferenceException in certain version of Unity. +* Android Resolver - Check that androidSdkRootPath directory exists before using + as sdkPath. +* Android Resolver - Fixed Android Resolver integration tests with Unity + 2019.3+. + +# Version 1.2.164 - Feb 4, 2021 +## New Features +* Android Resolver - Added support for Android packages with classifier in their + namespaces. +* iOS Resolver - Added new settings in iOS Resolver to configure generated + Podfile. +* iOS Resolver - Added a new attribute `addToAllTargets` in Dependencies.xml. + +## Bug Fixes +* iOS Resolver - Fixed XML parsing for `bitcodeEnabled` attribute in + Dependencies.xml. + +# Version 1.2.163 - Dec 15, 2020 +## Bug Fixes +* Version Handler - Fixed measurement reporting + +# Version 1.2.162 - Nov 19, 2020 +## Bug Fixes +* Version Handler - Improved #413 by preventing Version Handler from running + from static constructor when it is disabled. +* Package Manager Resolver - Remove GPR + +# Version 1.2.161 - Oct 12, 2020 +## Bug Fixes +* Android Resolver - Fixed the issue that Android Resolver does not resolve + again before build in Unity 2020 if it failed to resolve previously. + +# Version 1.2.160 - Sep 30, 2020 +## Bug Fixes +* Android Resolver - Fixed a regression that gradleResolver can be null until + Initialize() is called. +* Android Resolver - Fixed a regression that Android Resolver failed in Unity + 2019.3+ due to `gradleTemplate.properties` not enabled when + `mainTemplate.gradle` is not enabled at all. + +# Version 1.2.159 - Sep 11, 2020 +## Bug Fixes +* Android Resolver - Fixed #322 where the Unity editor will lose its target SDK + setting between Unity restarts if `>28` is selected in 2019. This is due to + Unity AndroidSdkVersions enum does not contain values above 28. +* Android Resolver - Fixed #360 where building Android app with Untiy 2019.3+ + may fail due to Jetifier and AndroidX not enabled properly in generated + Gradle project. This fix requires the user to enable + `Custom Gradle Properties Template` found under + `Player Settings > Settings for Android > Publishing Settings`. + +# Version 1.2.158 - Sep 3, 2020 +## Bug Fixes +* Version Handler: Fixed editor freeze when `-executeMethod` is used in + non-batch mode. +* Android Resolver: Normalized file paths when generating local Maven repo + since the path may contains a mix of forward and backward slash on Windows. +* Export Unity Package: Fixed generation of .unitypackage with tarfile on + Windows. + +# Version 1.2.157 - Aug 6, 2020 +## Bug Fixes +* Android Resolver: Delay initialization until active build target is Android + and the editor is not in play mode. +* iOS Resolver: Delay initialization until active build target is iOS + and the editor is not in play mode. +* Export Unity Package: Workaround directory creation racy if multiple export + operations are spawned at the same time. + +# Version 1.2.156 - June 10, 2020 +## Bug Fixes +* Android Resolver: Fixed that the generated local repo assets contains + redundent labels which are causing Version Handler to failed while + uninstalling packages. +* Android Resolver: Fixed that the repo url injected into mainTemplate.gradle + is incorrect when Unity is configured to export gradle project. +* Android Resolver: Limited to only create local Maven repo when the source + repo contains ".srcaar" file. + +## Changes +* All: Described EDM4U analytics data usage in readme. + +# Version 1.2.155 - May 14, 2020 +## Bug Fixes +* All: Fixed compiler error when build with Unity 5.4 or below due to the + usage of Rect.zero. +* All: Ignore cases when checking command line arguments. + +# Version 1.2.154 - May 14, 2020 +## Bug Fixes +* All: Make each MultiSelectWindow for different purposes to have its own + unique window. + +## Changes +* All: Replace all dialog with DialogWindow which is implemented from + EditorWindow. +* Package Manager Resolver: Clarify how manifest.json will be changed in Package + Manager Resolver window. + +# Version 1.2.153 - Apr 24, 2020 +## Bug Fixes +* Android Resolver: Fixed an exception when repainting the Android resolution + window in Unity 2019.3.x. + +# Version 1.2.152 - Apr 17, 2020 +## Bug Fixes +* Version Handler: Fixed exception when waiting for enabled editor DLLs to + load. +* Android Resolver: Fixed regression when using a Custom Gradle Template + on Windows. + +# Version 1.2.151 - Apr 16, 2020 +## Bug Fixes +* Version Handler: When waiting for newly enabled editor DLLs to load, ignore + all DLLs that do not have a file-system location. +* Android Resolver: Fixed resolution when using a Custom Gradle Template with + libraries stored in a local maven repository distributed with a plugin + installed with the Unity Package Manager. + +# Version 1.2.150 - Apr 9, 2020 +## Bug Fixes +* All: The new packaging script when run on MacOS was generating a + .unitypackage archive that could not be read by Unity on Windows. + This release simply repackages the plugin with tar/gzip to fix the problem. + +# Version 1.2.149 - Apr 8, 2020 +## Bug Fixes +* Package Manager Resolver: Fixed spurious error message when resuming + migration after installing a UPM package. + +# Version 1.2.148 - Apr 8, 2020 +## Bug Fixes +* Package Manager Resolver: Fixed an exception when resuming migration + after installing a UPM package. + +# Version 1.2.147 - Apr 8, 2020 +## Bug Fixes +* Version Handler: Fixed alias traversal bug which caused problems when + migrating from installed .unitypackage files to UPM packages. + +# Version 1.2.146 - Apr 8, 2020 +## Bug Fixes +* Version Handler: Fixed exception in manifest parsing when a manifest is + detected with no aliases. + +# Version 1.2.145 - Apr 2, 2020 +## New Features +* Package Manager Resolver: Added a method to migrate Version Handler + managed packages installed via `.unitypackage` to Unity Package Manager + packages. This is initially used to migrate the External Dependency Manager + to UPM. + +## Changes +* All: Verbose logging is now no longer automatically enabled in batch mode + across all components. Instead logging can be configured using each + component's verbose logging setting or by using the `-gvh_log_debug` command + line flag when starting Unity. +* Version Handler: Sped up version handler updates when the app domain isn't + reloaded. + +## Bug Fixes +* Version Handler: Fixed the display of the obsolete files clean up dialog + when the asset database refreshes. +* Version Handler: Improved reliability of callback from + the VersionHandler.UpdateCompleteMethods event when an asset database + refresh occurs. +* Version Handler: Fixed duplicate exportPath labels when 'Assets/' is the + root of paths assigned to files. +* Version Handler: Handle empty lines in manifest files. + +# Version 1.2.144 - Mar 23, 2020 +## Changed +* iOS Resolver: Removed the ability to configure the Xcode target a Cocoapod + is added to. + +## Bug Fixes +* iOS Resolver: Reverted support for adding Cocoapods to multiple targets as + it caused a regression (exception thrown during post-build step) in some + versions of Unity. + +# Version 1.2.143 - Mar 20, 2020 +## Bug Fixes +* Android Resolver: Fixed caching of resolution state which was causing + the resolver to always run when no dependencies had changed. + +# Version 1.2.142 - Mar 19, 2020 +## Changes +* Package Manager Resolver: Enabled auto-add by default. + +# Version 1.2.141 - Mar 19, 2020 +## Bug Fixes +* Fixed a bug when retrieving project settings. If a plugin was configured + to fetch project settings, if a setting was fetched (e.g "foo") and this + setting existed in the system settings but not the project settings the + system value would override the default value leading to unexpected + behavior. +* Fixed a warning when caching web request classes in Unity 5.6. + +# Version 1.2.140 - Mar 19, 2020 +## Bug Fixes +* Fixed measurement reporting in Unity 5.x. +* Version Handler: Fixed NullReferenceException when an asset doesn't have + an AssetImporter. + +# Version 1.2.139 - Mar 18, 2020 +## Changed +* Added documentation to the built plugin. + +# Version 1.2.138 - Mar 17, 2020 +## New Features +* Package Manager Resolver: Added the Package Manager Resolver + component that allows developers to easily boostrap Unity Package Manager + (UPM) registry addition using unitypackage plugins. +* Version Handler: Added a window that allows plugins to managed by the + Version Handler to be uninstalled. +* Version Handler: Added support for displaying installed plugins. +* Version Handler: Added support for moving files in plugins to their install + locations (if the plugin has been configured to support this). +* iOS Resolver: Added the ability to configure the Xcode target a Cocoapod is + added to. + +## Bug Fixes +* Fixed upgrade from version 1.2.137 and below after the plugin rename to + EDM4U broke the upgrade process. +* Android Resolver: Worked around PlayerSettings.Android.targetSdkVersion + returning empty names for some values in 2019.x. +* Version Handler: Fixed the display of the obsolete files clean up window. +* Version Handler: Fixed managed file check when assets are modified in the + project after plugin import. + +# Version 1.2.137 - Mar 6, 2020 +## Changed +* Renamed package to External Package Manager for Unity (EDM4U). + We changed this to reflect what this plugin is doing today which is far more + than the original scope which just consisted of importing jar files from the + Android SDK maven repository. + Scripts that used to pull `play-services-resolver*.unitypackage` will now have + to request `external-dependency-manager*.unitypackage` instead. + We'll still be shipping a `play-services-resolver*_manifest.txt` file to + handle upgrading from older versions of the plugin. + +## New Features +* All Components: Added reporting of usage so that we can remotely detect + errors and target improvements. +* Android Resolver: Added support for *Dependencies.xml files in Unity Package + Manager packages. +* iOS Resolver: Added support for *Dependencies.xml files in Unity Package + Manager packages. + +## Bug Fixes +* Version Handler: Disabled attempts to disable asset metadata modification + when assets are in a Unity Package Manager managed package. + +# Version 1.2.136 - Feb 19, 2019 +## Bug Fixes +* Android Resolver: Fixed OpenJDK path discovery in Unity 2019.3.1. + +# Version 1.2.135 - Dec 5, 2019 +## Bug Fixes +* All Components: Fixed stack overflow when loading project settings. + +# Version 1.2.134 - Dec 4, 2019 +## Bug Fixes +* All Components: Fixed an issue which caused project settings to be cleared + when running in batch mode. + +# Version 1.2.133 - Nov 18, 2019 +## Bug Fixes +* All Components: Failure to save project settings will now report an error + to the log rather than throwing an exception. + +# Version 1.2.132 - Nov 11, 2019 +## Bug Fixes +* Android Resolver: Worked around expansion of DIR_UNITYPROJECT on Windows + breaking Gradle builds when used as part of a file URI. +* Android Resolver: mainTemplate.gradle is only written if it needs to be + modified. + +# Version 1.2.131 - Oct 29, 2019 +## Bug Fixes +* Version Handler: Improved execution of events on the main thread in batch + mode. +* Version Handler: Improved log level configuration at startup. +* Version Handler: Improved performance of class lookup in deferred method + calls. +* Version Handler: Fixed rename to enable / disable for editor assets. +* iOS Resolver: Improved log level configuration at startup. +* Android Resolver: Improved local maven repo path reference in + mainTemplate.gradle using DIR_UNITYPROJECT. DIR_UNITYPROJECT by Unity + to point to the local filesystem path of the Unity project when Unity + generates the Gradle project. + +# Version 1.2.130 - Oct 23, 2019 +## New Features +* iOS Resolver: Added support for modifying the Podfile before `pod install` + is executed. + +## Bug Fixes +* Version Handler: Fixed invalid classname error when calling + `VersionHandler.UpdateVersionedAssets()`. + +# Version 1.2.129 - Oct 2, 2019 +## Bug Fixes +* iOS Resolver: Changed Cocoapod integration in Unity 2019.3+ to + only add Pods to the UnityFramework target. + +# Version 1.2.128 - Oct 1, 2019 +## Bug Fixes +* iOS Resolver: Fixed Cocoapod project integration mode with Unity + 2019.3+. + +# Version 1.2.127 - Sep 30, 2019 +## Changes +* Android Resolver: All Android Resolver settings File paths are now + serialized with POSIX directory separators. + +# Version 1.2.126 - Sep 27, 2019 +## Changes +* Android Resolver: File paths are now serialized with POSIX directory + separators. +## Bug Fixes +* Android Resolver: Fixed resolution when the parent directory of a Unity + project contains a Gradle project (i.e `settings.gradle` file). + +# Version 1.2.125 - Sep 23, 2019 +## Bug Fixes +* All components: Silenced a warning about not being able to set the console + encoding to UTF8. +* Android Resolver: Worked around broken AndroidSDKTools class in some + versions of Unity. +* iOS Resolver: Fixed iOS target SDK version check +* Version Handler: Changed clean up obsolete files window so that it doesn't + exceed the screen size. + +# Version 1.2.124 - Jul 28, 2019 +## Bug Fixes +* All components: Fixed regression with source control integration when using + Unity 2019.1+. + +# Version 1.2.123 - Jul 23, 2019 +## New Features +* All components: Source control integration for project settings. +## Changes +* Android Resolver: Removed AAR cache as it now makes little difference to + incremental resolution performance. +* Android Resolver: Improved embedded resource management so that embedded + resources should upgrade when the plugin is updated without restarting + the Unity editor. +## Bug Fixes +* Version Handler: Fixed InvokeMethod() and InvokeStaticMethod() when calling + methods that have interface typed arguments. + +# Version 1.2.122 - Jul 2, 2019 +## Bug Fixes +* iOS Resolver: Worked around Unity not loading the iOS Resolver DLL as it + referenced the Xcode extension in a public interface. The iOS Resolver + DLL still references the Xcode extension internally and just handles + missing type exceptions dynamically. + +# Version 1.2.121 - Jun 27, 2019 +## Bug Fixes +* Android Resolver: Fixed warning about missing Packages folder when loading + XML dependencies files in versions of Unity without the package manager. +* Android Resolver: Fixed resolution window progress bar exceeding 100%. +* Android Resolver: If AndroidX is detected in the set of resolved libraries, + the user will be prompted to enable the Jetifier. +* Android Resolver: Improved text splitting in text area windows. +* iOS Resolver: Added support for Unity's breaking changes to the Xcode API + in 2019.3.+. Cocoapods are now added to build targets, Unity-iPhone and + UnityFramework in Unity 2019.3+. + +# Version 1.2.120 - Jun 26, 2019 +## New Features +* Android Resolver: Added support for loading *Dependencies.xml files from + Unity Package Manager packages. +* Android Resolver: Resolution window is now closed if resolution runs as + a pre-build step. +* iOS Resolver: Added support for loading *Dependencies.xml files from + Unity Package Manager packages. +## Bug Fixes +* Android Resolver: Fixed generation of relative repo paths when using + mainTemplate.gradle resolver. +* Android Resolver: Fixed copy of .srcaar to .aar files in repos embedded in a + project when a project path has characters (e.g whitespace) that are escaped + during conversion to URIs. +* Android Resolver: Fixed auto-resolution always running if the Android SDK + is managed by Unity Hub. + +# Version 1.2.119 - Jun 19, 2019 +## Bug Fixes +* Android Resolver: Fixed error reported when using Jetifier integration + in Unity 2018+ if the target SDK is set to "highest installed". + +# Version 1.2.118 - Jun 18, 2019 +## New Features +* Android Resolver: Added initial + [Jetifier](https://developer.android.com/studio/command-line/jetifier) + integration which simplifies + [migration](ttps://developer.android.com/jetpack/androidx/migrate) + to Jetpack ([AndroidX](https://developer.android.com/jetpack/androidx)) + libraries in cases where all dependencies are managed by the Android + Resolver. + This can be enabled via the `Use Jetifier` option in the + `Assets > Play Services Resolver > Android Resolver > Settings` menu. + Caveats: + - If your project contains legacy Android Support Library .jar and .aar + files, these files will need to be removed and replaced with references to + artifacts on Maven via `*Dependencies.xml` files so that the Jetifier + can map them to Jetpack (AndroidX) libraries. + For example, remove the file `support-v4-27.0.2.jar` and replace it with + `` in a + `*Dependencies.xml` file. + - If your project contains .jar or .aar files that use the legacy Android + Support Libraries, these will need to be moved into a local Maven repo + [See this guide](https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html) + and then these files should be removed from your Unity project and instead + referenced via `*Dependencies.xml` files so that the Jetifier can + patch them to reference the Jetpack lirbaries. + +## Bug Fixes +* Android Resolver: Disabled version locking of com.android.support:multidex + does not use the same versioning scheme as other legacy Android support + libraries. +* Version Handler: Made Google.VersionHandler.dll's asset GUID stable across + releases. This faciliates error-free import into projects where + Google.VersionHandler.dll is moved from the default install location. + +# Version 1.2.117 - Jun 12, 2019 +## Bug Fixes +* Android Resolver: Fix copying of .srcaar to .aar files for + mainTemplate.gradle resolution. PluginImporter configuration was previously + not being applied to .aar files unless the Unity project was saved. + +# Version 1.2.116 - Jun 7, 2019 +## Bug Fixes +* Android Resolver: Fixed resolution of Android dependencies without version + specifiers. +* Android Resolver: Fixed Maven repo not found warning in Android Resolver. +* Android Resolver: Fixed Android Player directory not found exception in + Unity 2019.x when the Android Player isn't installed. + +# Version 1.2.115 - May 28, 2019 +## Bug Fixes +* Android Resolver: Fixed exception due to Unity 2019.3.0a4 removing + x86 from the set of supported ABIs. + +# Version 1.2.114 - May 27, 2019 +## New Features +* Android Resolver: Added support for ABI stripping when using + mainTemplate.gradle. This only works with AARs stored in repos + on the local filesystem. + +# Version 1.2.113 - May 24, 2019 +## New Features +* Android Resolver: If local repos are moved, the plugin will search the + project for matching directories in an attempt to correct the error. +* Version Handler: Files can be now targeted to multiple build targets + using multiple "gvh_" asset labels. +## Bug Fixes +* Android Resolver: "implementation" or "compile" are now added correctly + to mainTemplate.gradle in Unity versions prior to 2019. + +# Version 1.2.112 - May 22, 2019 +## New Features +* Android Resolver: Added option to disable addition of dependencies to + mainTemplate.gradle. + See `Assets > Play Services Resolver > Android Resolver > Settings`. +* Android Resolver: Made paths to local maven repositories in + mainTemplate.gradle relative to the Unity project when a project is not + being exported. +## Bug Fixes +* Android Resolver: Fixed builds with mainTemplate.gradle integration in + Unity 2019. +* Android Resolver: Changed dependency inclusion in mainTemplate.gradle to + use "implementation" or "compile" depending upon the version of Gradle + included with Unity. +* Android Resolver: Gracefully handled exceptions if the console encoding + can't be modified. +* Android Resolver: Now gracefully fails if the AndroidPlayer directory + can't be found. + +# Version 1.2.111 - May 9, 2019 +## Bug Fixes +* Version Handler: Fixed invocation of methods with named arguments. +* Version Handler: Fixed occasional hang when the editor is compiling + while activating plugins. + +# Version 1.2.110 - May 7, 2019 +## Bug Fixes +* Android Resolver: Fixed inclusion of some srcaar artifacts in builds with + Gradle builds when using mainTemplate.gradle. + +# Version 1.2.109 - May 6, 2019 +## New Features: +* Added links to documentation from menu. +* Android Resolver: Added option to auto-resolve Android libraries on build. +* Android Resolver: Added support for packaging specs of Android libraries. +* Android Resolver: Pop up a window when displaying Android dependencies. + +## Bug Fixes +* Android Resolver: Support for Unity 2019 Android SDK and JDK install locations +* Android Resolver: e-enable AAR explosion if internal builds are enabled. +* Android Resolver: Gracefully handle exceptions on file deletion. +* Android Resolver: Fixed Android Resolver log spam on load. +* Android Resolver: Fixed save of Android Resolver PromptBeforeAutoResolution + setting. +* Android Resolver: Fixed AAR processing failure when an AAR without + classes.jar is found. +* Android Resolver: Removed use of EditorUtility.DisplayProgressBar which + was occasionally left displayed when resolution had completed. +* Version Handler: Fixed asset rename to disable when a disabled file exists. + +# Version 1.2.108 - May 3, 2019 +## Bug Fixes: +* Version Handler: Fixed occasional hang on startup. + +# Version 1.2.107 - May 3, 2019 +## New Features: +* Version Handler: Added support for enabling / disabling assets that do not + support the PluginImporter, based upon build target selection. +* Android Resolver: Added support for the global specification of maven repos. +* iOS Resolver: Added support for the global specification of Cocoapod sources. + +# Version 1.2.106 - May 1, 2019 +## New Features +* iOS Resolver: Added support for development pods in Xcode project integration + mode. +* iOS Resolver: Added support for source pods with resources in Xcode project + integration mode. + +# Version 1.2.105 - Apr 30, 2019 +## Bug fixes +* Android Resolver: Fixed reference to Java tool path in logs. +* Android and iOS Resolvers: Changed command line execution to emit a warning + rather than throwing an exception and failing, when it is not possible to + change the console input and output encoding to UTF-8. +* Android Resolver: Added menu option and API to delete resolved libraries. +* Android Resolver: Added menu option and API to log the repos and libraries + currently included in the project. +* Android Resolver: If Plugins/Android/mainTemplate.gradle file is present and + Gradle is selected as the build type, resolution will simply patch the file + with Android dependencies specified by plugins in the project. + +# Version 1.2.104 - Apr 10, 2019 +## Bug Fixes +* Android Resolver: Changed Android ABI selection method from using whitelisted + Unity versions to type availability. This fixes an exception on resolution + in some versions of Unity 2017.4. + +# Version 1.2.103 - Apr 2, 2019 +## Bug Fixes +* Android Resolver: Whitelisted Unity 2017.4 and above with ARM64 support. +* Android Resolver: Fixed Java version check to work with Java SE 12 and above. + +# Version 1.2.102 - Feb 13, 2019 +## Bug Fixes +* Android Resolver: Fixed the text overflow on the Android Resolver + prompt before initial run to fit inside the buttons for + smaller screens. + +# Version 1.2.101 - Feb 12, 2019 +## New Features +* Android Resolver: Prompt the user before the resolver runs for the + first time and allow the user to elect to disable from the prompt. +* Android Resolver: Change popup warning when resolver is disabled + to be a console warning. + +# Version 1.2.100 - Jan 25, 2019 +## Bug Fixes +* Android Resolver: Fixed AAR processing sometimes failing on Windows + due to file permissions. + +# Version 1.2.99 - Jan 23, 2019 +## Bug Fixes +* Android Resolver: Improved performance of project property polling. +* Version Handler: Fixed callback of VersionHandler.UpdateCompleteMethods + when the update process is complete. + +# Version 1.2.98 - Jan 9, 2019 +## New Features +* iOS Resolver: Pod declaration properties can now be set via XML pod + references. For example, this can enable pods for a subset of build + configurations. +## Bug Fixes +* iOS Resolver: Fixed incremental builds after local pods support caused + regression in 1.2.96. + +# Version 1.2.97 - Dec 17, 2018 +## Bug Fixes +* Android Resolver: Reduced memory allocation for logic that monitors build + settings when auto-resolution is enabled. If auto-resolution is disabled, + almost all build settings are no longer polled for changes. + +# Version 1.2.96 - Dec 17, 2018 +## Bug Fixes +* Android Resolver: Fixed repacking of AARs to exclude .meta files. +* Android Resolver: Only perform auto-resolution on the first scene while + building. +* Android Resolver: Fixed parsing of version ranges that include whitespace. +* iOS Resolver: Added support for local development pods. +* Version Handler: Fixed Version Handler failing to rename some files. + +# Version 1.2.95 - Oct 23, 2018 +## Bug Fixes: +* Android Resolver: Fixed auto-resolution running in a loop in some scenarios. + +# Version 1.2.94 - Oct 22, 2018 +## Bug Fixes +* iOS Resolver: Added support for PODS_TARGET_SRCROOT in source Cocoapods. + +# Version 1.2.93 - Oct 22, 2018 +## Bug Fixes +* Android Resolver: Fixed removal of Android libraries on auto-resolution when + `*Dependencies.xml` files are deleted. + +# Version 1.2.92 - Oct 2, 2018 +## Bug Fixes +* Android Resolver: Worked around auto-resolution hang on Windows if + resolution starts before compilation is finished. + +# Version 1.2.91 - Sep 27, 2018 +## Bug Fixes +* Android Resolver: Fixed Android Resolution when the selected build target + isn't Android. +* Added C# assembly symbols the plugin to simplify debugging bug reports. + +# Version 1.2.90 - Sep 21, 2018 +## Bug Fixes +* Android Resolver: Fixed transitive dependency selection of version locked + packages. + +# Version 1.2.89 - Aug 31, 2018 +## Bug Fixes +* Fixed FileLoadException in ResolveUnityEditoriOSXcodeExtension an assembly + can't be loaded. + +# Version 1.2.88 - Aug 29, 2018 +## Changed +* Improved reporting of resolution attempts and conflicts found in the Android + Resolver. +## Bug Fixes +* iOS Resolver now correctly handles sample code in CocoaPods. Previously it + would add all sample code to the project when using project level + integration. +* Android Resolver now correctly handles Gradle conflict resolution when the + resolution results in a package that is compatible with all requested + dependencies. + +# Version 1.2.87 - Aug 23, 2018 +## Bug Fixes +* Fixed Android Resolver "Processing AARs" dialog getting stuck in Unity 5.6. + +# Version 1.2.86 - Aug 22, 2018 +## Bug Fixes +* Fixed Android Resolver exception in OnPostProcessScene() when the Android + platform isn't selected. + +# Version 1.2.85 - Aug 17, 2018 +## Changes +* Added support for synchronous resolution in the Android Resolver. + PlayServicesResolver.ResolveSync() now performs resolution synchronously. +* Auto-resolution in the Android Resolver now results in synchronous resolution + of Android dependencies before the Android application build starts via + UnityEditor.Callbacks.PostProcessSceneAttribute. + +# Version 1.2.84 - Aug 16, 2018 +## Bug Fixes +* Fixed Android Resolver crash when the AndroidResolverDependencies.xml + file can't be written. +* Reduced log spam when a conflicting Android library is pinned to a + specific version. + +# Version 1.2.83 - Aug 15, 2018 +## Bug Fixes +* Fixed Android Resolver failures due to an in-accessible AAR / JAR explode + cache file. If the cache can't be read / written the resolver now continues + with reduced performance following recompilation / DLL reloads. +* Fixed incorrect version number in plugin manifest on install. + This was a minor issue since the version handler rewrote the metadata + after installation. + +# Version 1.2.82 - Aug 14, 2018 +## Changed +* Added support for alphanumeric versions in the Android Resolver. + +## Bug Fixes +* Fixed Android Resolver selection of latest duplicated library. +* Fixed Android Resolver conflict resolution when version locked and non-version + locked dependencies are specified. +* Fixed Android Resolver conflict resolution when non-existent artifacts are + referenced. + +# Version 1.2.81 - Aug 9, 2018 +## Bug Fixes +* Fixed editor error that would occur when when + `PlayerSettings.Android.targetArchitectures` was set to + `AndroidArchitecture.All`. + +# Version 1.2.80 - Jul 24, 2018 +## Bug Fixes +* Fixed project level settings incorrectly falling back to system wide settings + when default property values were set. + +# Version 1.2.79 - Jul 23, 2018 +## Bug Fixes +* Fixed AndroidManifest.xml patching on Android Resolver load in Unity 2018.x. + +# Version 1.2.78 - Jul 19, 2018 +## Changed +* Added support for overriding conflicting dependencies. + +# Version 1.2.77 - Jul 19, 2018 +## Changed +* Android Resolver now supports Unity's 2018 ABI filter (i.e arm64-v8a). +* Reduced Android Resolver build option polling frequency. +* Disabled Android Resolver auto-resolution in batch mode. Users now need + to explicitly kick off resolution through the API. +* All Android Resolver and Version Handler dialogs are now disabled in batch + mode. +* Verbose logging for all plugins is now enabled by default in batch mode. +* Version Handler bootstrapper has been improved to no longer call + UpdateComplete multiple times. However, since Unity can still reload the + app domain after plugins have been enabled, users still need to store their + plugin state to persistent storage to handle reloads. + +## Bug Fixes +* Android Resolver no longer incorrectly adds MANIFEST.MF files to AARs. +* Android Resolver auto-resolution jobs are now unscheduled when an explicit + resolve job is started. + +# Version 1.2.76 - Jul 16, 2018 +## Bug Fixes +* Fixed variable replacement in AndroidManifest.xml files in the Android + Resolver. + Version 1.2.75 introduced a regression which caused all variable replacement + to replace the *entire* property value rather than the component of the + property that referenced a variable. For example, + given "applicationId = com.my.app", "${applicationId}.foo" would be + incorrectly expanded as "com.my.app" rather than "com.my.app.foo". This + resulted in numerous issues for Android builds where content provider + initialization would fail and services may not start. + +## Changed +* Gradle prebuild experimental feature has been removed from the Android + Resolver. The feature has been broken for some time and added around 8MB + to the plugin size. +* Added better support for execution of plugin components in batch mode. + In batch mode UnityEditor.update is sometimes never called - like when a + single method is executed - so the new job scheduler will execute all jobs + synchronously from the main thread. + +# Version 1.2.75 - Jun 20, 2018 +## New Features +* Android Resolver now monitors the Android SDK path when + auto-resolution is enabled and triggers resolution when the path is + modified. + +## Changed +* Android auto-resolution is now delayed by 3 seconds when the following build + settings are changed: + - Target ABI. + - Gradle build vs. internal build. + - Project export. +* Added a progress bar display when AARs are being processed during Android + resolution. + +## Bug Fixes +* Fixed incorrect Android package version selection when a mix of + version-locked and non-version-locked packages are specified. +* Fixed non-deterministic Android package version selection to select + the highest version of a specified package rather than the last + package specification passed to the Gradle resolution script. + +# Version 1.2.74 - Jun 19, 2018 +## New Features +* Added workaround for broken AndroidManifest.xml variable replacement in + Unity 2018.x. By default ${applicationId} variables will be replaced by + the bundle ID in the Plugins/Android/AndroidManifest.xml file. The + behavior can be disabled via the Android Resolver settings menu. + +# Version 1.2.73 - May 30, 2018 +## Bug Fixes +* Fixed spurious warning message about missing Android plugins directory on + Windows. + +# Version 1.2.72 - May 23, 2018 +## Bug Fixes +* Fixed spurious warning message about missing Android plugins directory. + +# Version 1.2.71 - May 10, 2018 +## Bug Fixes +* Fixed resolution of Android dependencies when the `Assets/Plugins/Android` + directory is named in a different case e.g `Assets/plugins/Android`. + +# Version 1.2.70 - May 7, 2018 +## Bug Fixes +* Fixed bitcode flag being ignored for iOS pods. + +# Version 1.2.69 - May 7, 2018 +## Bug Fixes +* Fixed escaping of local repository paths in Android Resolver. + +# Version 1.2.68 - May 3, 2018 +## Changes +* Added support for granular builds of Google Play Services. + +# Version 1.2.67 - May 1, 2018 +## Changes +* Improved support for iOS source-only pods in Unity 5.5 and below. + +# Version 1.2.66 - April 27, 2018 +## Bug Fixes +* Fixed Version Handler renaming of Linux libraries with hyphens in filenames. + Previously, libraries named Foo-1.2.3.so were not being renamed to + libFoo-1.2.3.so on Linux which could break native library loading on some + versions of Unity. + +# Version 1.2.65 - April 26, 2018 +## Bug Fixes +* Fix CocoaPods casing in logs and comments. + +# Version 1.2.64 - Mar 16, 2018 +## Bug Fixes +* Fixed bug in download_artifacts.gradle (used by Android Resolver) which + reported a failure if required artifacts already exist. + +# Version 1.2.63 - Mar 15, 2018 +## Bug Fixes +* Fixed iOS Resolver include search paths taking precedence over system headers + when using project level resolution. +* Fixed iOS Resolver includes relative to library root, when using project level + resolution. + +# Version 1.2.62 - Mar 12, 2018 +## Changes +* Improved error reporting when a file can't be moved to trash by the + Version Handler. +## Bug Fixes +* Fixed Android Resolver throwing NullReferenceException when the Android SDK + path isn't set. +* Fixed Version Handler renaming files with underscores if the + "Rename to Canonical Filenames" setting is enabled. + +# Version 1.2.61 - Jan 22, 2018 +## Bug Fixes +* Fixed Android Resolver reporting non-existent conflicting dependencies when + Gradle build system is enabled. + +# Version 1.2.60 - Jan 12, 2018 +## Changes +* Added support for Maven / Ivy version specifications for Android packages. +* Added support for Android SNAPSHOT packages. + +## Bug Fixes +* Fixed Openjdk version check. +* Fixed non-deterministic Android package resolution when two packages contain + an artifact with the same name. + +# Version 1.2.59 - Oct 19, 2017 +## Bug Fixes +* Fixed execution of Android Gradle resolution script when it's located + in a path with whitespace. + +# Version 1.2.58 - Oct 19, 2017 +## Changes +* Removed legacy resolution method from Android Resolver. + It is now only possible to use the Gradle or Gradle prebuild resolution + methods. + +# Version 1.2.57 - Oct 18, 2017 +## Bug Fixes +* Updated Gradle wrapper to 4.2.1 to fix issues using Gradle with the + latest Openjdk. +* Android Gradle resolution now also uses gradle.properties to pass + parameters to Gradle in an attempt to workaround problems with + command line argument parsing on Windows 10. + +# Version 1.2.56 - Oct 12, 2017 +## Bug Fixes +* Fixed Gradle artifact download with non-version locked artifacts. +* Changed iOS resolver to only load dependencies at build time. + +# Version 1.2.55 - Oct 4, 2017 +## Bug Fixes +* Force Android Resolution when the "Install Android Packages" setting changes. + +# Version 1.2.54 - Oct 4, 2017 +## Bug Fixes +* Fixed execution of command line tools on Windows when the path to the tool + contains a single quote (apostrophe). In this case we fallback to executing + the tool via the system shell. + +# Version 1.2.53 - Oct 2, 2017 +## New Features +* Changed Android Resolver "resolution complete" dialog so that it now displays + failures. +* Android Resolver now detects conflicting libraries that it does not manage + warning the user if they're newer than the managed libraries and prompting + the user to clean them up if they're older or at the same version. + +## Bug Fixes +* Improved Android Resolver auto-resolution speed. +* Fixed bug in the Gradle Android Resolver which would result in resolution + succeeding when some dependencies are not found. + +# Version 1.2.52 - Sep 25, 2017 +## New Features +* Changed Android Resolver's Gradle resolution to resolve conflicting + dependencies across Google Play services and Android Support library packages. + +# Version 1.2.51 - Sep 20, 2017 +## Changes +* Changed iOS Resolver to execute the CocoaPods "pod" command via the shell + by default. Some developers customize their shell environment to use + custom ssh certs to access internal git repositories that host pods so + executing "pod" via the shell will work for these scenarios. + The drawback of executing "pod" via the shell could potentially cause + users problems if they break their shell environment. Though users who + customize their shell environments will be able to resolve these issues. + +# Version 1.2.50 - Sep 18, 2017 +## New Features +* Added option to disable the Gradle daemon in the Android Resolver. + This daemon is now disabled by default as some users are getting into a state + where multiple daemon instances are being spawned when changing dependencies + which eventually results in Android resolution failing until all daemon + processes are manually killed. + +## Bug Fixes +* Android resolution is now always executed if the user declines the update + of their Android SDK. This ensure users can continue to use out of date + Android SDK packages if they desire. + +# Version 1.2.49 - Sep 18, 2017 +## Bug Fixes +* Removed modulemap parsing in iOS Resolver. + The framework *.modulemap did not need to be parsed by the iOS Resolver + when injecting Cocoapods into a Xcode project. Simply adding a modular + framework to a Xcode project results in Xcode's Clang parsing the associated + modulemap and injecting any compile and link flags into the build process. + +# Version 1.2.48 - Sep 12, 2017 +## New Features +* Changed settings to be per-project by default. + +## Bug Fixes +* Added Google maven repository to fix GradlePrebuild resolution with Google + components. +* Fixed Android Resolution failure with spaces in paths. + +# Version 1.2.47 - Aug 29, 2017 +## New Features +* Android and iOS dependencies can now be specified using *Dependencies.xml + files. This is now the preferred method for registering dependencies, + we may remove the API for dependency addition in future. +* Added "Reset to Defaults" button to each settings dialog to restore default + settings. +* Android Resolver now validates the configured JDK is new enough to build + recently released Android libraries. +## Bug Fixes +* Fixed a bug that caused dependencies with the "LATEST" version specification + to be ignored when using the Gradle mode of the Android Resolver. +* Fixed a race condition when running Android Resolution. +* Fixed Android Resolver logging if a PlayServicesSupport instance is created + with no logging enabled before the Android Resolver is initialized. +* Fixed iOS resolver dialog in Unity 4. +* Fixed iOS Cocoapod Xcode project integration in Unity 4. + +# Version 1.2.46 - Aug 22, 2017 +## Bug Fixes +* GradlePrebuild Android resolver on Windows now correctly locates dependent + data files. + +# Version 1.2.45 - Aug 22, 2017 +## Bug Fixes +* Improved Android package auto-resolution and fixed clean up of stale + dependencies when using Gradle dependency resolution. + +# Version 1.2.44 - Aug 21, 2017 +## Bug Fixes +* Enabled autoresolution for Gradle Prebuild. +* Made the command line dialog windows have selectable text. +* Fixed incorrect "Android Settings" dialog disabled groups. +* Updated PlayServicesResolver android platform detection to use the package + manager instead of the 'android' tool. +* UnityCompat reflection methods 'GetAndroidPlatform' and + 'GetAndroidBuildToolsVersion' are now Obsolete due to dependence on the + obsolete 'android' build tool. + +# Version 1.2.43 - Aug 18, 2017 +## Bug Fixes +* Fixed Gradle resolution in the Android Resolver when running + PlayServicesResolver.Resolve() in parallel or spawning multiple + resolutions before the previous resolve completed. + +# Version 1.2.42 - Aug 17, 2017 +## Bug Fixes +* Fixed Xcode project level settings not being applied by IOS Resolver when + Xcode project pod integration is enabled. + +# Version 1.2.41 - Aug 15, 2017 +## Bug Fixes +* IOS Resolver's Xcode workspace pod integration is now disabled when Unity + Cloud Build is detected. Unity Cloud Build does not follow the same build + process as the Unity editor and fails to open the generated xcworkspace at + this time. + +# Version 1.2.40 - Aug 15, 2017 +## Bug Fixes +* Moved Android Resolver Gradle Prebuild scripts into Google.JarResolver.dll. + They are now extracted from the DLL when required. +* AARs / JARs are now cleaned up when switching the Android resolution + strategy. + +# Version 1.2.39 - Aug 10, 2017 +## New Features +* Android Resolver now supports resolution with Gradle. This enables support + for non-local artifacts. +## Bug Fixes +* Android Resolver's Gradle Prebuild now uses Android build tools to determine + the Android platform tools version rather than relying upon internal Unity + APIs. +* Android Resolver's Gradle Prebuild now correctly strips binaries that are + not required for the target ABI. + +# Version 1.2.38 - Aug 7, 2017 +## Bug Fixes +* Fixed an issue in VersionHandler where disabled targets are ignored if + the "Any Platform" flag is set on a plugin DLL. + +# Version 1.2.37 - Aug 3, 2017 +## New Features +* Exposed GooglePlayServices.PlayServicesResolver.Resolve() so that it's + possible for a script to be notified when AAR / Jar resolution is complete. + This makes it easier to setup a project to build from the command line. + +# Version 1.2.36 - Aug 3, 2017 +## New Features +* VersionHandler.UpdateCompleteMethods allows a user to provide a list of + methods to be called when VersionHandlerImpl has completed an update. + This makes it easier to import a plugin and wait for VersionHandler to + execute prior executing a build. + +# Version 1.2.35 - Jul 28, 2017 +## New Features +* VersionHandler will now rename Linux libraries so they can target Unity + versions that require different file naming. Libraries need to be labelled + gvh_linuxlibname-${basename} in order to be considered for renaming. + e.g gvh\_linuxlibname-MyLib will be named MyLib.so in Unity 5.5 and below and + libMyLib.so in Unity 5.6 and above. + +# Version 1.2.34 - Jul 28, 2017 +## Bug Fixes +* Made VersionHandler bootstrap module more robust when calling static + methods before the implementation DLL is loaded. + +# Version 1.2.33 - Jul 27, 2017 +## New Features +* Added a bootstrap module for VersionHandler so the implementation + of the VersionHandler module can be versioned without resulting in + a compile error when imported at different versions across multiple + plugins. + +# Version 1.2.32 - Jul 20, 2017 +## New Features +* Added support for build target selection based upon .NET framework + version in the VersionHandler. + When applying either gvh\_dotnet-3.5 or gvh\_dotnet-4.5 labels to + assets, the VersionHandler will only enable the asset for the + specified set of build targets when the matching .NET framework version + is selected in Unity 2017's project settings. This allows assets + to be provided in a plugin that need to differ based upon .NET version. + +# Version 1.2.31 - Jul 5, 2017 +## Bug Fixes +* Force expansion of AARs with native components when using Unity 2017 + with the internal build system. In contrast to Unity 5.x, Unity 2017's + internal build system does not include native libraries included in AARs. + Forcing expansion of AARs with native components generates an + Ant / Eclipse project for each AAR which is correctly included by Unity + 2017's internal build system. + +# Version 1.2.30 - Jul 5, 2017 +## Bug Fixes +* Fixed Cocoapods being installed when the build target isn't iOS. +* Added support for malformed AARs with missing classes.jar. + +# Version 1.2.29 - Jun 16, 2017 +## New Features +* Added support for the Android sdkmanager tool. + +# Version 1.2.28 - Jun 8, 2017 +## Bug Fixes +* Fixed non-shell command line execution (regression from + Cocoapod installation patch). + +# Version 1.2.27 - Jun 7, 2017 +## Bug Fixes +* Added support for stdout / stderr redirection when executing + commands in shell mode. + This fixes CocoaPod tool installation when shell mode is + enabled. +* Fixed incremental builds when additional sources are specified + in the Podfile. + +# Version 1.2.26 - Jun 7, 2017 +## Bug Fixes +* Fixed a crash when importing Version Handler into Unity 4.7.x. + +# Version 1.2.25 - Jun 7, 2017 +## Bug Fixes +* Fixed an issue in the Jar Resolver which incorrectly notified + event handlers of bundle ID changes when the currently selected + (not active) build target changed in Unity 5.6 and above. + +# Version 1.2.24 - Jun 6, 2017 +## New Features +* Added option to control file renaming in Version Handler settings. + Disabling file renaming (default option) significantly increases + the speed of file version management operations with the downside + that any files that are referenced directly by canonical filename + rather than asset ID will no longer be valid. +* Improved logging in the Version Handler. +## Bug Fixes +* Fixed an issue in the Version Handler which caused it to not + re-enable plugins when re-importing a custom package with disabled + version managed files. + +# Version 1.2.23 - May 26, 2017 +## Bug Fixes +* Fixed a bug with gradle prebuild resolver on windows. + +# Version 1.2.22 - May 19, 2017 +## Bug Fixes +* Fixed a bug in the iOS resolver with incremental builds. +* Fixed misdetection of Cocoapods support with Unity beta 5.6. + +# Version 1.2.21 - May 8, 2017 +## Bug Fixes +* Fix for https://github.com/googlesamples/unity-jar-resolver/issues/48 + Android dependency version number parsing when "-alpha" (etc.) are + included in dependency (AAR / JAR) versions. + +# Version 1.2.20 - May 8, 2017 +## Bug Fixes +* Attempted to fix + https://github.com/googlesamples/unity-jar-resolver/issues/48 + where a NullReferenceException could occur if a target file does not + have a valid version string. + +# Version 1.2.19 - May 4, 2017 +## Bug Fixes +* Fixed Jar Resolver exploding and deleting AAR files it isn't managing. + +# Version 1.2.18 - May 4, 2017 +## New Features +* Added support for preserving Unity pods such as when GVR is enabled. + +# Version 1.2.17 - Apr 20, 2017 +## Bug Fixes +* Fixed auto-resolution when an Android application ID is modified. + +# Version 1.2.16 - Apr 17, 2017 +## Bug Fixes +* Fixed Unity version number parsing on machines with a locale that uses + "," for decimal points. +* Fixed null reference exception if JDK path isn't set. + +# Version 1.2.15 - Mar 17, 2017 +## New Features +* Added warning when the Jar Resolver's background resolution is disabled. +## Bug Fixes +* Fixed support of AARs with native libraries when using Gradle. +* Fixed extra repository paths when resolving dependencies. + +# Version 1.2.14 - Mar 7, 2017 +## New Features +* Added experimental Android resolution using Gradle. + This alternative resolver supports proguard stripping with Unity's + internal build system. +* Added Android support for single ABI builds when using AARs include + native libraries. +* Disabled Android resolution on changes to all .cs and .js files. + File patterns that are monitored for auto-resolution can be added + using PlayServicesResolver.AddAutoResolutionFilePatterns(). +* Added tracking of resolved AARs and JARs so they can be cleaned up + if they're no longer referenced by a project. +* Added persistence of AAR / JAR version replacement for each Unity + session. +* Added settings dialog to the iOS resolver. +* Integrated Cocoapod tool installation in the iOS resolver. +* Added option to run pod tool via the shell. +## Bug Fixes +* Fixed build of some source Cocoapods (e.g Protobuf). +* VersionHandler no longer prompts to delete obsolete manifests. +* iOS resolver handles Cocoapod installation when using Ruby < 2.2.2. +* Added workaround for package version selection when including + Google Play Services on Android. +* Fixed support for pods that reference static libraries. +* Fixed support for resource-only pods. + +# Version 1.2.12 - Feb 14, 2017 +## Bug Fixes +* Fixed re-explosion of AARs when the bundle ID is modified. + +# Version 1.2.11 - Jan 30, 2017 +## New Features +* Added support for Android Studio builds. +* Added support for native (C/C++) shared libraries in AARs. + +# Version 1.2.10 - Jan 11, 2017 +## Bug Fixes +* Fixed SDK manager path retrieval. +* Also, report stderr when it's not possible to run the "pod" tool. +* Handle exceptions thrown by Unity.Cecil on asset rename +* Fixed IOSResolver to handle PlayerSettings.iOS.targetOSVersionString + +# Version 1.2.9 - Dec 7, 2016 +## Bug Fixes +* Improved error reporting when "pod repo update" fails. +* Added detection of xml format xcode projects generated by old Cocoapods + installations. + +# Version 1.2.8 - Dec 6, 2016 +## Bug Fixes +* Increased speed of JarResolver resolution. +* Fixed JarResolver caches getting out of sync with requested dependencies + by removing the caches. +* Fixed JarResolver explode cache always being rewritten even when no + dependencies change. + +# Version 1.2.7 - Dec 2, 2016 +## Bug Fixes +* Fixed VersionHandler build errors with Unity 5.5, due to the constantly + changing BuildTarget enum. +* Added support for Unity configured JDK Path rather than requiring + JAVA_HOME to be set in the Jar Resolver. + +# Version 1.2.6 - Nov 15, 2016 +## Bug Fixes +* Fixed IOSResolver errors when iOS support is not installed. +* Added fallback to "pod" executable search which queries the Ruby Gems + package manager for the binary install location. + +# Version 1.2.5 - Nov 3, 2016 +## Bug Fixes +* Added crude support for source only Cocoapods to the IOSResolver. + +# Version 1.2.4 - Oct 27, 2016 +## Bug Fixes +* Automated resolution of out of date pod repositories. + +# Version 1.2.3 - Oct 25, 2016 +## Bug Fixes +* Fixed exception when reporting conflicting dependencies. + +# Version 1.2.2 - Oct 17, 2016 +## Bug Fixes +* Fixed issue working with Unity 5.5 +* Fixed issue with PlayServicesResolver corrupting other iOS dependencies. +* Updated build script to use Unity distributed tools for building. + +# Version 1.2.1 - Jul 25, 2016 +## Bug Fixes +* Removed 1.2 Resolver and hardcoded whitelist of AARs to expand. +* Improved error reporting when the "jar" executable can't be found. +* Removed the need to set JAVA_HOME if "jar" is in the user's path. +* Fixed spurious copying of partially matching AARs. +* Changed resolver to only copy / expand when source AARs change. +* Auto-resolution of dependencies is now performed when the Android + build target is selected. + +## New Features +* Expand AARs that contain manifests with variable expansion like + ${applicationId}. +* Added optional logging in the JarResolverLib module. +* Integration with the Android SDK manager for dependencies that + declare required Android SDK packages. + +# Version 1.2.0 - May 11 2016 +## Bug Fixes +* Handles resolving dependencies when the artifacts are split across 2 repos. +* #4 Misdetecting version for versions like 1.2-alpha. These are now string + compared if alphanumeric +* Removed resolver creation via reflection since it did not work all the time. + Now a resolver needs to be loaded externally (which is existing behavior). + +## New Features +* Expose PlayServicesResolver properties to allow for script access. +* Explodes firebase-common and firebase-measurement aar files to support + ${applicationId} substitution. + +# Version 1.1.1 - 25 Feb 2016 +## Bug Fixes +* #1 Spaces in project path not handled when exploding Aar file. +* #2 Script compilation error: TypeLoadException. + +# Version 1.1.0 - 5 Feb 2016 +## New Features +* Adds friendly alert when JAVA_HOME is not set on Windows platforms. +* Adds flag for disabling background resolution. +* Expands play-services-measurement and replaces ${applicationId} with the + bundle Id. + + ## Bug Fixes +* Fixes infinite loop of resolution triggered by resolution. diff --git a/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/CHANGELOG.md.meta b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/CHANGELOG.md.meta new file mode 100644 index 00000000..fbcd006a --- /dev/null +++ b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/CHANGELOG.md.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2b4957d4e158489ca7b410312d84e001 +labels: +- gvh +- gvh_version-1.2.183 +- gvhp_exportpath-ExternalDependencyManager/Editor/CHANGELOG.md +timeCreated: 1584567712 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/Google.VersionHandler.dll b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/Google.VersionHandler.dll new file mode 100644 index 0000000000000000000000000000000000000000..d313c6232a759fe051ea0896483d91064cf1da2e GIT binary patch literal 15360 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 literal 0 HcmV?d00001 diff --git a/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta new file mode 100644 index 00000000..fa372ec6 --- /dev/null +++ b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 164f2f671ce9410dadebde5826bc0b51 +labels: +- gvh +- gvh_version-1.2.183 +- gvhp_exportpath-ExternalDependencyManager/Editor/Google.VersionHandler.dll +- gvhp_targets-editor +timeCreated: 1480838400 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/LICENSE b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/LICENSE new file mode 100644 index 00000000..6258cc47 --- /dev/null +++ b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/LICENSE @@ -0,0 +1,245 @@ +Copyright (C) 2014 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +==================================================================================================== +This package uses MiniJSON + +Copyright (c) 2013 Calvin Rien + +Based on the JSON parser by Patrick van Bergen +http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html + +Simplified it so that it doesn't throw exceptions +and can be used in Unity iPhone with maximum code stripping. + +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. diff --git a/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/LICENSE.meta b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/LICENSE.meta new file mode 100644 index 00000000..80c30d4f --- /dev/null +++ b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/LICENSE.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 805e2c2846dd44248246ef896b03c176 +labels: +- gvh +- gvh_version-1.2.183 +- gvhp_exportpath-ExternalDependencyManager/Editor/LICENSE +timeCreated: 1584567712 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/README.md b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/README.md new file mode 100644 index 00000000..3a7a5a26 --- /dev/null +++ b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/README.md @@ -0,0 +1,897 @@ +# External Dependency Manager for Unity + +[![openupm](https://img.shields.io/npm/v/com.google.external-dependency-manager?label=openupm®istry_uri=https://package.openupm.com)](https://openupm.com/packages/com.google.external-dependency-manager/) +[![openupm](https://img.shields.io/badge/dynamic/json?color=brightgreen&label=downloads&query=%24.downloads&suffix=%2Fmonth&url=https%3A%2F%2Fpackage.openupm.com%2Fdownloads%2Fpoint%2Flast-month%2Fcom.google.external-dependency-manager)](https://openupm.com/packages/com.google.external-dependency-manager/) + +## Overview + +The External Dependency Manager for Unity (EDM4U) (formerly Play Services +Resolver/Jar Resolver) is intended to be used by any Unity package or user that +requires: + +* Android specific libraries (e.g + [AARs](https://developer.android.com/studio/projects/android-library.html)) + +* iOS [CocoaPods](https://cocoapods.org/) + +* Version management of transitive dependencies + +* Management of Package Manager (PM) Registries + +If you want to add and use iOS/Android dependencies directly in your project, +then you should to install EDM4U in your project. + +If you are a package user and the plugin you are using depends on EDM4U, *and* +the package does not include EDM4U as a package dependency already, then you +should to install EDM4U in your project. + +If you are a UPM package maintainer and your package requires EDM4U, then you +should add EDM4U as a +[package dependency](https://docs.unity3d.com/2019.3/Documentation/Manual/upm-dependencies.html) +in your package manifest (`package.json`): + +```json +{ + "dependencies": { + "com.google.external-dependency-manager": "1.2.178" + } +} +``` + +You should still install EDM4U to test out the package during development. + +If you are a legacy `.unitypackage` package maintainer and your package requires +EDM4U, please ask the user to install EDM4U separately. You should install EDM4U +to test out the package during development. + +Updated releases are available on +[GitHub](https://github.com/googlesamples/unity-jar-resolver) + +## Requirements + +The *Android Resolver* and *iOS Resolver* components of the plugin only work +with Unity version 4.6.8 or higher. + +The *Version Handler* component only works with Unity 5.x or higher as it +depends upon the `PluginImporter` UnityEditor API. + +The *Package Manager Resolver* component only works with Unity 2018.4 or above, +when [scoped registry](https://docs.unity3d.com/Manual/upm-scoped.html) support +was added to the Package Manager. + +## Getting Started + +Check out [troubleshooting](troubleshooting-faq.md) if you need help. + +### Install via OpenUPM + +EDM4U is available on +[OpenUPM](https://openupm.com/packages/com.google.external-dependency-manager/): + +```shell +openupm add com.google.external-dependency-manager +``` + +### Install via Google APIs for Unity + +EDM4U is available both in UPM and legacy `.unitypackage` formats on +[Google APIs for Unity](https://developers.google.com/unity/archive#external_dependency_manager_for_unity). + +You may install the UPM version (.tgz) as a +[local UPM package](https://docs.unity3d.com/Manual/upm-ui-local.html). + +You can also install EDM4U in your project as a `.unitypackage`. This is not +recommended due to potential conflicts. + +### Conflict Resolution + +For historical reasons, a package maintainer may choose to embed EDM4U in their +package for ease of installation. This will create a conflict when you try to +install EDM4U with the steps above, or with another package with embedded EDM4U. +If your project imported a `.unitypackage` that has a copy of EDM4U embedded in +it, you may safely delete it from your Assets folder. If your project depends on +another UPM package with EDM4U, please reach out to the package maintainer and +ask them to replace it with a dependency to this package. In the meantime, you +can workaround the issue by copying the package to your Packages folder (to +create an +[embedded package](https://docs.unity3d.com/Manual/upm-concepts.html#Embedded)) +and perform the steps yourself to avoid a dependency conflict. + +### Config file + +To start adding dependencies to your project, copy and rename the +[SampleDependencies.xml](https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/ExternalDependencyManager/Editor/SampleDependencies.xml) +file into your plugin and add the dependencies your project requires. + +The XML file needs to be under an `Editor` directory and match the name +`*Dependencies.xml`. For example, `MyPlugin/Editor/MyPluginDependencies.xml`. + +## Usages + +### Android Resolver + +The Android Resolver copies specified dependencies from local or remote Maven +repositories into the Unity project when a user selects Android as the build +target in the Unity editor. + +For example, to add the Google Play Games library +(`com.google.android.gms:play-services-games` package) at version `9.8.0` to the +set of a plugin's Android dependencies: + +```xml + + + + + extra-google-m2repository + + + + +``` + +The version specification (last component) supports: + +* Specific versions e.g `9.8.0` + +* Partial matches e.g `9.8.+` would match 9.8.0, 9.8.1 etc. choosing the most + recent version + +* Latest version using `LATEST` or `+`. We do *not* recommend using this + unless you're 100% sure the library you depend upon will not break your + Unity plugin in future + +The above example specifies the dependency as a component of the Android SDK +manager such that the Android SDK manager will be executed to install the +package if it's not found. If your Android dependency is located on Maven +central it's possible to specify the package simply using the `androidPackage` +element: + +```xml + + + + + +``` + +#### Auto-resolution + +By default the Android Resolver automatically monitors the dependencies you have +specified and the `Plugins/Android` folder of your Unity project. The resolution +process runs when the specified dependencies are not present in your project. + +The *auto-resolution* process can be disabled via the `Assets > External +Dependency Manager > Android Resolver > Settings` menu. + +Manual resolution can be performed using the following menu options: + +* `Assets > External Dependency Manager > Android Resolver > Resolve` + +* `Assets > External Dependency Manager > Android Resolver > Force Resolve` + +#### Deleting libraries + +Resolved packages are tracked via asset labels by the Android Resolver. They can +easily be deleted using the `Assets > External Dependency Manager > Android +Resolver > Delete Resolved Libraries` menu item. + +#### Android Manifest Variable Processing + +Some AAR files (for example play-services-measurement) contain variables that +are processed by the Android Gradle plugin. Unfortunately, Unity does not +perform the same processing when using Unity's Internal Build System, so the +Android Resolver plugin handles known cases of this variable substitution by +exploding the AAR into a folder and replacing `${applicationId}` with the +`bundleID`. + +Disabling AAR explosion and therefore Android manifest processing can be done +via the `Assets > External Dependency Manager > Android Resolver > Settings` +menu. You may want to disable explosion of AARs if you're exporting a project to +be built with Gradle/Android Studio. + +#### ABI Stripping + +Some AAR files contain native libraries (.so files) for each ABI supported by +Android. Unfortunately, when targeting a single ABI (e.g x86), Unity does not +strip native libraries for unused ABIs. To strip unused ABIs, the Android +Resolver plugin explodes an AAR into a folder and removes unused ABIs to reduce +the built APK size. Furthermore, if native libraries are not stripped from an +APK (e.g you have a mix of Unity's x86 library and some armeabi-v7a libraries) +Android may attempt to load the wrong library for the current runtime ABI +completely breaking your plugin when targeting some architectures. + +AAR explosion and therefore ABI stripping can be disabled via the `Assets > +External Dependency Manager > Android Resolver > Settings` menu. You may want to +disable explosion of AARs if you're exporting a project to be built with +Gradle/Android Studio. + +#### Resolution Strategies + +By default the Android Resolver will use Gradle to download dependencies prior +to integrating them into a Unity project. This works with Unity's internal build +system and Gradle/Android Studio project export. + +It's possible to change the resolution strategy via the `Assets > External +Dependency Manager > Android Resolver > Settings` menu. + +##### Download Artifacts with Gradle + +Using the default resolution strategy, the Android resolver executes the +following operations: + +- Remove the result of previous Android resolutions. E.g Delete all files and + directories labeled with "gpsr" under `Plugins/Android` from the project. + +- Collect the set of Android dependencies (libraries) specified by a project's + `*Dependencies.xml` files. + +- Run `download_artifacts.gradle` with Gradle to resolve conflicts and, if + successful, download the set of resolved Android libraries (AARs, JARs). + +- Process each AAR/JAR so that it can be used with the currently selected + Unity build system (e.g Internal vs. Gradle, Export vs. No Export). This + involves patching each reference to `applicationId` in the + `AndroidManifest.xml` with the project's bundle ID. This means resolution + must be run again if the bundle ID has changed. + +- Move the processed AARs to `Plugins/Android` so they will be included when + Unity invokes the Android build. + +##### Integrate into mainTemplate.gradle + +Unity 5.6 introduced support for customizing the `build.gradle` used to build +Unity projects with Gradle. When the *Patch mainTemplate.gradle* setting is +enabled, rather than downloading artifacts before the build, Android resolution +results in the execution of the following operations: + +- Remove the result of previous Android resolutions. E.g Delete all files and + directories labeled with "gpsr" under `Plugins/Android` from the project and + remove sections delimited with `// Android Resolver * Start` and `// Android + Resolver * End` lines. + +- Collect the set of Android dependencies (libraries) specified by a project's + `*Dependencies.xml` files. + +- Rename any `.srcaar` files in the build to `.aar` and exclude them from + being included directly by Unity in the Android build as + `mainTemplate.gradle` will be patched to include them instead from their + local maven repositories. + +- Inject the required Gradle repositories into `mainTemplate.gradle` at the + line matching the pattern `.*apply plugin: + 'com\.android\.(application|library)'.*` or the section starting at the line + `// Android Resolver Repos Start`. If you want to control the injection + point in the file, the section delimited by the lines `// Android Resolver + Repos Start` and `// Android Resolver Repos End` should be placed in the + global scope before the `dependencies` section. + +- Inject the required Android dependencies (libraries) into + `mainTemplate.gradle` at the line matching the pattern `***DEPS***` or the + section starting at the line `// Android Resolver Dependencies Start`. If + you want to control the injection point in the file, the section delimited + by the lines `// Android Resolver Dependencies Start` and `// Android + Resolver Dependencies End` should be placed in the `dependencies` section. + +- Inject the packaging options logic, which excludes architecture specific + libraries based upon the selected build target, into `mainTemplate.gradle` + at the line matching the pattern `android +{` or the section starting at the + line `// Android Resolver Exclusions Start`. If you want to control the + injection point in the file, the section delimited by the lines `// Android + Resolver Exclusions Start` and `// Android Resolver Exclusions End` should + be placed in the global scope before the `android` section. + +#### Dependency Tracking + +The Android Resolver creates the +`ProjectSettings/AndroidResolverDependencies.xml` to quickly determine the set +of resolved dependencies in a project. This is used by the auto-resolution +process to only run the expensive resolution process when necessary. + +#### Displaying Dependencies + +It's possible to display the set of dependencies the Android Resolver would +download and process in your project via the `Assets > External Dependency +Manager > Android Resolver > Display Libraries` menu item. + +### iOS Resolver + +The iOS resolver component of this plugin manages +[CocoaPods](https://cocoapods.org/). A CocoaPods `Podfile` is generated and the +`pod` tool is executed as a post build process step to add dependencies to the +Xcode project exported by Unity. + +Dependencies for iOS are added by referring to CocoaPods. + +For example, to add the AdMob pod, version 7.0 or greater with bitcode enabled: + +```xml + + + + + +``` + +#### Integration Strategies + +The `CocoaPods` are either: + +* Downloaded and injected into the Xcode project file directly, rather than + creating a separate xcworkspace. We call this `Xcode project` integration. + +* If the Unity version supports opening a xcworkspace file, the `pod` tool is + used as intended to generate a xcworkspace which references the CocoaPods. + We call this `Xcode workspace` integration. + +The resolution strategy can be changed via the `Assets > External Dependency +Manager > iOS Resolver > Settings` menu. + +##### Appending text to generated Podfile + +In order to modify the generated Podfile you can create a script like this: + +```csharp +using System.IO; + +using UnityEditor; +using UnityEditor.Callbacks; +using UnityEngine; + +public class PostProcessIOS : MonoBehaviour +{ + // Must be between 40 and 50 to ensure that it's not overriden by Podfile generation (40) and + // that it's added before "pod install" (50). + [PostProcessBuildAttribute(45)] + private static void PostProcessBuild_iOS(BuildTarget target, string buildPath) + { + if (target == BuildTarget.iOS) + { + using (StreamWriter sw = File.AppendText(buildPath + "/Podfile")) + { + // E.g. add an app extension + sw.WriteLine("\ntarget 'NSExtension' do\n pod 'Firebase/Messaging', '6.6.0'\nend"); + } + } + } +} +``` + +### Package Manager Resolver + +Adding registries to the +[Package Manager](https://docs.unity3d.com/Manual/Packages.html) (PM) is a +manual process. The Package Manager Resolver (PMR) component of this plugin +makes it easy for plugin maintainers to distribute new PM registry servers and +easy for plugin users to manage PM registry servers. + +#### Adding Registries + +For example, to add a registry for plugins in the scope `com.coolstuff`: + +```xml + + + + com.coolstuff + + + +``` + +When PMR is loaded it will prompt the developer to add the registry to their +project if it isn't already present in the `Packages/manifest.json` file. + +For more information, see Unity's documentation on +[scoped package registries](https://docs.unity3d.com/Manual/upm-scoped.html). + +#### Managing Registries + +It's possible to add and remove registries that are specified via PMR XML +configuration files via the following menu options: + +* `Assets > External Dependency Manager > Package Manager Resolver > Add + Registries` will prompt the user with a window which allows them to add + registries discovered in the project to the Package Manager. + +* `Assets > External Dependency Manager > Package Manager Resolver > Remove + Registries` will prompt the user with a window which allows them to remove + registries discovered in the project from the Package Manager. + +* `Assets > External Dependency Manager > Package Manager Resolver > Modify + Registries` will prompt the user with a window which allows them to add or + remove registries discovered in the project. + +#### Migration + +PMR can migrate Version Handler packages installed in the `Assets` folder to PM +packages. This requires the plugins to implement the following: + +* `.unitypackage` must include a Version Handler manifests that describes the + components of the plugin. If the plugin has no dependencies the manifest + would just include the files in the plugin. + +* The PM package JSON provided by the registry must include a keyword (in the + `versions.VERSION.keyword` list) that maps the PM package to a Version + Handler package using the format `vh-name:VERSION_HANDLER_MANIFEST_NAME` + where `VERSION_HANDLER_MANIFEST_NAME` is the name of the manifest defined in + the `.unitypackage`. For more information see the description of the + `gvhp_manifestname` asset label in the [Version Handler](#version-handler) + section. + +When using the `Assets > External Dependency Manager > Package Manager +Resolver > Migrate Packages` menu option, PMR then will: + +* List all Version Handler manager packages in the project. + +* Search all available packages in the PM registries and fetch keywords + associated with each package parsing the Version Handler manifest names for + each package. + +* Map each installed Version Handler package to a PM package. + +* Prompt the user to migrate the discovered packages. + +* Perform package migration for all selected packages if the user clicks the + `Apply` button. + +#### Configuration + +PMR can be configured via the `Assets > External Dependency Manager > Package +Manager Resolver > Settings` menu option: + +* `Add package registries` when enabled, when the plugin loads or registry + configuration files change, this will prompt the user to add registries that + are not present in the Package Manager. + +* `Prompt to add package registries` will cause a developer to be prompted + with a window that will ask for confirmation before adding registries. When + this is disabled registries are added silently to the project. + +* `Prompt to migrate packages` will cause a developer to be prompted with a + window that will ask for confirmation before migrating packages installed in + the `Assets` directory to PM packages. + +* `Enable Analytics Reporting` when enabled, reports the use of the plugin to + the developers so they can make imrpovements. + +* `Verbose logging` when enabled prints debug information to the console which + can be useful when filing bug reports. + +### Version Handler + +The Version Handler component of this plugin manages: + +* Shared Unity plugin dependencies. + +* Upgrading Unity plugins by cleaning up old files from previous versions. + +* Uninstallation of plugins that are distributed with manifest files. + +* Restoration of plugin assets to their original install locations if assets + are tagged with the `exportpath` label. + +Since the Version Handler needs to modify Unity asset metadata (`.meta` files), +to enable/disable components, rename and delete asset files it does not work +with Package Manager installed packages. It's still possible to include EDM4U in +Package Manager packages, the Version Handler component simply won't do anything +to PM plugins in this case. + +#### Using Version Handler Managed Plugins + +If a plugin is imported at multiple different versions into a project, if the +Version Handler is enabled, it will automatically check all managed assets to +determine the set of assets that are out of date and assets that should be +removed. To disable automatic checking managed assets disable the `Enable +version management` option in the `Assets > External Dependency Manager > +Version Handler > Settings` menu. + +If version management is disabled, it's possible to check managed assets +manually using the `Assets > External Dependency Manager > Version Handler > +Update` menu option. + +##### Listing Managed Plugins + +Plugins managed by the Version Handler, those that ship with manifest files, can +displayed using the `Assets > External Dependency Manager > Version Handler > +Display Managed Packages` menu option. The list of plugins are written to the +console window along with the set of files used by each plugin. + +##### Uninstalling Managed Plugins + +Plugins managed by the Version Handler, those that ship with manifest files, can +be removed using the `Assets > External Dependency Manager > Version Handler > +Uninstall Managed Packages` menu option. This operation will display a window +that allows a developer to select a set of plugins to remove which will remove +all files owned by each plugin excluding those that are in use by other +installed plugins. + +Files managed by the Version Handler, those labeled with the `gvh` asset label, +can be checked to see whether anything needs to be upgraded, disabled or removed +using the `Assets > External Dependency Manager > Version Handler > Update` menu +option. + +##### Restore Install Paths + +Some developers move assets around in their project which can make it harder for +plugin maintainers to debug issues if this breaks Unity's +[special folders](https://docs.unity3d.com/Manual/SpecialFolders.html) rules. If +assets are labeled with their original install/export path (see +`gvhp_exportpath` below), Version Handler can restore assets to their original +locations when using the `Assets > External Dependency Manager > Version +Handler > Move Files To Install Locations` menu option. + +##### Settings + +Some behavior of the Version Handler can be configured via the `Assets > +External Dependency Manager > Version Handler > Settings` menu option. + +* `Enable version management` controls whether the plugin should automatically + check asset versions and apply changes. If this is disabled the process + should be run manually when installing or upgrading managed plugins using + `Assets > External Dependency Manager > Version Handler > Update`. + +* `Rename to canonical filenames` is a legacy option that will rename files to + remove version numbers and other labels from filenames. + +* `Prompt for obsolete file deletion` enables the display of a window when + obsolete files are deleted allowing the developer to select which files to + delete and those to keep. + +* `Allow disabling files via renaming` controls whether obsolete or disabled + files should be disabled by renaming them to `myfilename_DISABLED`. Renaming + to disable files is required in some scenarios where Unity doesn't support + removing files from the build via the PluginImporter. + +* `Enable Analytics Reporting` enables/disables usage reporting to plugin + developers to improve the product. + +* `Verbose logging` enables *very* noisy log output that is useful for + debugging while filing a bug report or building a new managed plugin. + +* `Use project settings` saves settings for the plugin in the project rather + than system-wide. + +#### Redistributing a Managed Plugin + +The Version Handler employs a couple of methods for managing version selection, +upgrade and removal of plugins. + +* Each plugin can ship with a manifest file that lists the files it includes. + This makes it possible for Version Handler to calculate the difference in + assets between the most recent release of a plugin and the previous release + installed in a project. If a files are removed the Version Handler will + prompt the user to clean up obsolete files. + +* Plugins can ship using assets with unique names, unique GUIDs and version + number labels. Version numbers can be attached to assets using labels or + added to the filename (e.g `myfile.txt` would be `myfile_version-x.y.z.txt). + This allows the Version Handler to determine which set of files are the same + file at different versions, select the most recent version and prompt the + developer to clean up old versions. + +Unity plugins can be managed by the Version Handler using the following steps: + +1. Add the `gvh` asset label to each asset (file) you want Version Handler to + manage. + +1. Add the `gvh_version-VERSION` label to each asset where `VERSION` is the + version of the plugin you're releasing (e.g 1.2.3). + +1. Add the `gvhp_exportpath-PATH` label to each asset where `PATH` is the + export path of the file when the `.unitypackage` is created. This is used to + track files if they're moved around in a project by developers. + +1. Optional: Add `gvh_targets-editor` label to each editor DLL in your plugin + and disable `editor` as a target platform for the DLL. The Version Handler + will enable the most recent version of this DLL when the plugin is imported. + +1. Optional: If your plugin is included in other Unity plugins, you should add + the version number to each filename and change the GUID of each asset. This + allows multiple versions of your plugin to be imported into a Unity project, + with the Version Handler component activating only the most recent version. + +1. Create a manifest text file named `MY_UNIQUE_PLUGIN_NAME_VERSION.txt` that + lists all the files in your plugin relative to the project root. Then add + the `gvh_manifest` label to the asset to indicate this file is a plugin + manifest. + +1. Optional: Add a `gvhp_manifestname-NAME` label to your manifest file to + provide a human readable name for your package. If this isn't provided the + name of the manifest file will be used as the package name. NAME can match + the pattern `[0-9]+[a-zA-Z -]` where a leading integer will set the priority + of the name where `0` is the highest priority and preferably used as the + display name. The lowest value (i.e highest priority name) will be used as + the display name and all other specified names will be aliases of the + display name. Aliases can refer to previous names of the package allowing + renaming across published versions. + +1. Redistribute EDM4U Unity plugin with your plugin. See the + [Plugin Redistribution](#plugin-redistribution) section for details. + +If you follow these steps: + +* When users import a newer version of your plugin, files referenced by the + older version's manifest are cleaned up. + +* The latest version of the plugin will be selected when users import multiple + packages that include your plugin, assuming the steps in + [Plugin Redistribution](#plugin-redistribution) are followed. + +## Background + +Many Unity plugins have dependencies upon Android specific libraries, iOS +CocoaPods, and sometimes have transitive dependencies upon other Unity plugins. +This causes the following problems: + +* Integrating platform specific (e.g Android and iOS) libraries within a Unity + project can be complex and a burden on a Unity plugin maintainer. +* The process of resolving conflicting dependencies on platform specific + libraries is pushed to the developer attempting to use a Unity plugin. The + developer trying to use your plugin is very likely to give up when faced + with Android or iOS specific build errors. +* The process of resolving conflicting Unity plugins (due to shared Unity + plugin components) is pushed to the developer attempting to use your Unity + plugin. In an effort to resolve conflicts, the developer will very likely + attempt to resolve problems by deleting random files in your plugin, report + bugs when that doesn't work and finally give up. + +EDM4U provides solutions for each of these problems. + +### Android Dependency Management + +The *Android Resolver* component of this plugin will download and integrate +Android library dependencies and handle any conflicts between plugins that share +the same dependencies. + +Without the Android Resolver, typically Unity plugins bundle their AAR and JAR +dependencies, e.g. a Unity plugin `SomePlugin` that requires the Google Play +Games Android library would redistribute the library and its transitive +dependencies in the folder `SomePlugin/Android/`. When a user imports +`SomeOtherPlugin` that includes the same libraries (potentially at different +versions) in `SomeOtherPlugin/Android/`, the developer using `SomePlugin` and +`SomeOtherPlugin` will see an error when building for Android that can be hard +to interpret. + +Using the Android Resolver to manage Android library dependencies: + +* Solves Android library conflicts between plugins. +* Handles all of the various processing steps required to use Android + libraries (AARs, JARs) in Unity 4.x and above projects. Almost all versions + of Unity have - at best - partial support for AARs. +* (Experimental) Supports minification of included Java components without + exporting a project. + +### iOS Dependency Management + +The *iOS Resolver* component of this plugin integrates with +[CocoaPods](https://cocoapods.org/) to download and integrate iOS libraries and +frameworks into the Xcode project Unity generates when building for iOS. Using +CocoaPods allows multiple plugins to utilize shared components without forcing +developers to fix either duplicate or incompatible versions of libraries +included through multiple Unity plugins in their project. + +### Package Manager Registry Setup + +The [Package Manager](https://docs.unity3d.com/Manual/Packages.html) (PM) makes +use of [NPM](https://www.npmjs.com/) registry servers for package hosting and +provides ways to discover, install, upgrade and uninstall packages. This makes +it easier for developers to manage plugins within their projects. + +However, installing additional package registries requires a few manual steps +that can potentially be error prone. The *Package Manager Resolver* component of +this plugin integrates with [PM](https://docs.unity3d.com/Manual/Packages.html) +to provide a way to auto-install PM package registries when a `.unitypackage` is +installed which allows plugin maintainers to ship a `.unitypackage` that can +provide access to their own PM registry server to make it easier for developers +to manage their plugins. + +### Unity Plugin Version Management + +Finally, the *Version Handler* component of this plugin simplifies the process +of managing transitive dependencies of Unity plugins and each plugin's upgrade +process. + +For example, without the Version Handler plugin, if: + +* Unity plugin `SomePlugin` includes `EDM4U` plugin at version 1.1. +* Unity plugin `SomeOtherPlugin` includes `EDM4U` plugin at version 1.2. + +The version of `EDM4U` included in the developer's project depends upon the +order the developer imports `SomePlugin` or `SomeOtherPlugin`. + +This results in: + +* `EDM4U` at version 1.2, if `SomePlugin` is imported then `SomeOtherPlugin` + is imported. +* `EDM4U` at version 1.1, if `SomeOtherPlugin` is imported then `SomePlugin` + is imported. + +The Version Handler solves the problem of managing transitive dependencies by: + +* Specifying a set of packaging requirements that enable a plugin at different + versions to be imported into a Unity project. +* Providing activation logic that selects the latest version of a plugin + within a project. + +When using the Version Handler to manage `EDM4U` included in `SomePlugin` and +`SomeOtherPlugin`, from the prior example, version 1.2 will always be the +version activated in a developer's Unity project. + +Plugin creators are encouraged to adopt this library to ease integration for +their customers. For more information about integrating EDM4U into your own +plugin, see the [Plugin Redistribution](#plugin-redistribution) section of this +document. + +## Analytics + +The External Dependency Manager for Unity plugin by default logs usage to Google +Analytics. The purpose of the logging is to quantitatively measure the usage of +functionality, to gather reports on integration failures and to inform future +improvements to the developer experience of the External Dependency Manager +plugin. Note that the analytics collected are limited to the scope of the EDM4U +plugin’s usage. + +For details of what is logged, please refer to the usage of +`EditorMeasurement.Report()` in the source code. + +## Plugin Redistribution + +If you are a package maintainer and your package depends on EDM4U, it is highly +recommended to use the UPM format and add EDM4U as a dependency. If you must +include it in your `.unitypackage`, redistributing `EDM4U` inside your own +plugin might ease the integration process for your users. + +If you wish to redistribute `EDM4U` inside your plugin, you **must** follow +these steps when importing the `external-dependency-manager-*.unitypackage`, and +when exporting your own plugin package: + +1. Import the `external-dependency-manager-*.unitypackage` into your plugin + project by + [running Unity from the command line](https://docs.unity3d.com/Manual/CommandLineArguments.html), + ensuring that you add the `-gvh_disable` option. +1. Export your plugin by + [running Unity from the command line](https://docs.unity3d.com/Manual/CommandLineArguments.html), + ensuring that you: + - Include the contents of the `Assets/PlayServicesResolver` and + `Assets/ExternalDependencyManager` directory. + - Add the `-gvh_disable` option. + +You **must** specify the `-gvh_disable` option in order for the Version Handler +to work correctly! + +For example, the following command will import the +`external-dependency-manager-1.2.46.0.unitypackage` into the project +`MyPluginProject` and export the entire Assets folder to +`MyPlugin.unitypackage`: + +```shell +Unity -gvh_disable \ + -batchmode \ + -importPackage external-dependency-manager-1.2.46.0.unitypackage \ + -projectPath MyPluginProject \ + -exportPackage Assets MyPlugin.unitypackage \ + -quit +``` + +### Background + +The *Version Handler* component relies upon deferring the load of editor DLLs so +that it can run first and determine the latest version of a plugin component to +activate. The build of `EDM4U` plugin has Unity asset metadata that is +configured so that the editor components are not initially enabled when it's +imported into a Unity project. To maintain this configuration when importing the +`external-dependency-manager.unitypackage` into a Unity plugin project, you +*must* specify the command line option `-gvh_disable` which will prevent the +Version Handler component from running and changing the Unity asset metadata. + +## Building from Source + +To build this plugin from source you need the following tools installed: * Unity +2021 and below (with iOS and Android modules installed) * Java 11 + +You can build the plugin by running the following from your shell (Linux / OSX): + +```shell +./gradlew build + +``` + +or Windows: + +```shell +./gradlew.bat build +``` + +If Java 11 is not your default Java command, add +`-Dorg.gradle.java.home=` to the command above. + +## Testing + +You can run the tests by running the following from your shell (Linux / OSX): + +```shell +./gradlew test +``` + +or Windows: + +```shell +./gradlew.bat test +``` + +The following properties can be set to narrow down the tests to run or change +the test run behavior. + +* `INTERACTIVE_MODE_TESTS_ENABLED` - Default to `1`. Set to `1` to enable + interactive mode tests, which requires GPU on the machine. Otherwise, only + run tests in the batch mode. +* `INCLUDE_TEST_TYPES` - Default to empty string, which means to include every + type of the test. To narrow down the types of test to run, set this + properties with a list of case-insensitive type strings separated by comma. + For instance, `-PINCLUDE_TEST_TYPES="Python,NUnit"` means to include only + Python tests and NUnit tests. See `TestTypeEnum` in `build.gradle` for + available options. +* `EXCLUDE_TEST_TYPES` - Default to empty string, which means to exclude none. + To add types of tests to exclude, set this properties with a list of + case-insensitive type strings separated by comma. For instance, + `-PEXCLUDE_TEST_TYPES="Python,NUnit"` means to exclude Python tests and + NUnit tests. See `TestTypeEnum` in `build.gradle` for available options. +* `INCLUDE_TEST_MODULES` - Default to empty string, which means to include the + tests for every modules. To narrow down modules to test, set this properties + with a list of case-insensitive module strings separated by comma. For + instance, `-PINCLUDE_TEST_MODULES="Tool,AndroidResolver"` means to run tests + for tools and Android Resolver only. See `TestModuleEnum` in `build.gradle` + for available options. +* `EXCLUDE_TEST_MODULES` - Default to empty string, which means to exclude + none. To add modules to exclude, set this properties with a list of + case-insensitive module strings separated by comma. For instance, + `-PEXCLUDE_TEST_MODULES="Tool,AndroidResolver"` means to run tests for any + modules other than tools and Android Resolver. See `TestModuleEnum` in + `build.gradle` for available options. +* `EXCLUDE_TESTS` - Default to empty string, which means to exclude none. To + add tests to exclude, set this properties with a list of case-insensitive + test names separated by comma. For instance, + `-PEXCLUDE_TESTS="testGenGuids,testDownloadArtifacts"` means to run tests + except the tests with name of `testGenGuids` and `testDownloadArtifacts`. +* `CONTINUE_ON_FAIL_FOR_TESTS_ENABLED` - Default to `1`. Set to `1` to + continue running the next test when the current one fails. Otherwise, the + build script stops whenever any test fails. + +For instance, by running the following command, it only runs the Unity +integration tests that does not requires GPU, but exclude tests for Android +Resolver module and iOS Resolver module. + +```shell +./gradlew test \ + -PINTERACTIVE_MODE_TESTS_ENABLED=0 \ + -PINCLUDE_TEST_TYPES="Integration" \ + -PEXCLUDE_TEST_MODULES="AndroidResolver,iOSResolver" +``` + +## Releasing + +Each time a new build of this plugin is checked into the source tree you need to +do the following: + +* Bump the plugin version variable `pluginVersion` in `build.gradle` +* Update `CHANGELOG.md` with the new version number and changes included in + the release. +* Build the release using `./gradlew release` which performs the following: + * Updates `external-dependency-manager-*.unitypackage` + * Copies the unpacked plugin to the `exploded` directory. + * Updates template metadata files in the `plugin` directory. The GUIDs of + all asset metadata is modified due to the version number change. Each + file within the plugin is versioned to allow multiple versions of the + plugin to be imported into a Unity project which allows the most recent + version to be activated by the Version Handler component. +* Create release commit using `./gradlew gitCreateReleaseCommit` which + performs `git commit -a -m "description from CHANGELOG.md"` +* Once the release commit is merge, tag the release using `./gradlew + gitTagRelease` which performs the following: + * `git tag -a pluginVersion -m "version RELEASE"` to tag the release. +* Update tags on remote branch using `git push --tag REMOTE HEAD:master` diff --git a/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/README.md.meta b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/README.md.meta new file mode 100644 index 00000000..770682d0 --- /dev/null +++ b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/README.md.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 48c105d983344236ba7fd1e7d7208fca +labels: +- gvh +- gvh_version-1.2.183 +- gvhp_exportpath-ExternalDependencyManager/Editor/README.md +timeCreated: 1584567712 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.183_manifest.txt b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.183_manifest.txt new file mode 100644 index 00000000..d2b057ed --- /dev/null +++ b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.183_manifest.txt @@ -0,0 +1,13 @@ +Assets/ExternalDependencyManager/Editor/1.2.183/Google.IOSResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.183/Google.IOSResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.183/Google.JarResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.183/Google.JarResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.183/Google.PackageManagerResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.183/Google.PackageManagerResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.183/Google.VersionHandlerImpl.dll +Assets/ExternalDependencyManager/Editor/1.2.183/Google.VersionHandlerImpl.pdb +Assets/ExternalDependencyManager/Editor/CHANGELOG.md +Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll +Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb +Assets/ExternalDependencyManager/Editor/LICENSE +Assets/ExternalDependencyManager/Editor/README.md diff --git a/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.183_manifest.txt.meta b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.183_manifest.txt.meta new file mode 100644 index 00000000..ff7d1507 --- /dev/null +++ b/EintooAR/Assets/Editor/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.183_manifest.txt.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 98518d47e8b1473f8055106d5eb931c7 +labels: +- gvh +- gvh_manifest +- gvh_version-1.2.183 +- gvhp_exportpath-ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.183_manifest.txt +- gvhp_manifestname-0External Dependency Manager +- gvhp_manifestname-play-services-resolver +timeCreated: 1474401009 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/GameScripts/HotFix/GameLogic/GameLogic.asmdef b/EintooAR/Assets/GameScripts/HotFix/GameLogic/GameLogic.asmdef index 98820ad8..443db87e 100644 --- a/EintooAR/Assets/GameScripts/HotFix/GameLogic/GameLogic.asmdef +++ b/EintooAR/Assets/GameScripts/HotFix/GameLogic/GameLogic.asmdef @@ -31,7 +31,8 @@ "GUID:dc960734dc080426fa6612f1c5fe95f3", "GUID:66c2eb417c67ad849907d0769db96dbf", "GUID:2289059ddf1745b4d80a0f184af99d6b", - "GUID:448b0b55421917e4784a8f2f7449081f" + "GUID:448b0b55421917e4784a8f2f7449081f", + "GUID:bfb3a80268dac420ab25cd26e09e4475" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/EintooAR/Assets/Plugins/VoxelBusters.meta b/EintooAR/Assets/Plugins/VoxelBusters.meta new file mode 100644 index 00000000..83fbe258 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d715a94341ea2409e8dc90d116c23ded +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary.meta new file mode 100644 index 00000000..a0d394b1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5317c4912d76a48828be99991f62fe81 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor.meta new file mode 100644 index 00000000..9ab0992f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2815bd3aec8ef4cdda0dd09e8ad737d2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary.meta new file mode 100644 index 00000000..c4297233 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b00880799a9f24f7b8a4c2e44c84138e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers.meta new file mode 100644 index 00000000..ce0fe896 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 36aa8feca9d884ed09e68d46a2a8a7b0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/DomainReloadManager.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/DomainReloadManager.cs new file mode 100644 index 00000000..b536855f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/DomainReloadManager.cs @@ -0,0 +1,136 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEngine; + +// Credits: https://github.com/joshcamas/unity-domain-reload-helper +namespace VoxelBusters.CoreLibrary.Editor +{ + public static class DomainReloadManager + { + #region Static fields + + private const BindingFlags kDefaultBindingAttr = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; + + #endregion + + #region Static methods + + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + private static void OnRuntimeLoad() + { + TypeCache.Rebuild(); + + SendReloadMessageToMembers(); + SendReloadMessageToMethods(); + } + + private static void SendReloadMessageToMembers() + { + var members = TypeCache.GetMembersWithAttribute( + memberTypes: MemberTypes.Field | MemberTypes.Property | MemberTypes.Event, + bindingAttr: kDefaultBindingAttr); + + foreach (var item in members) + { + var member = item.Key; + var attribute = item.Value; + if (member is FieldInfo) + { + ClearField(member as FieldInfo, attribute); + } + else if (member is PropertyInfo) + { + ClearProperty(member as PropertyInfo, attribute); + } + else if (member is EventInfo) + { + ClearEvent(member as EventInfo, attribute); + } + } + } + + private static void SendReloadMessageToMethods() + { + foreach (var item in TypeCache.GetMethodsWithAttribute(kDefaultBindingAttr)) + { + var methodInfo = item.Key; + if (methodInfo.IsGenericMethod) continue; + + DebugLogger.Log(CoreLibraryDomain.Default, $"Invoking reload method: {methodInfo.Name}."); + methodInfo.Invoke(null, new object[] { }); + } + } + + private static void ClearField(FieldInfo fieldInfo, ClearOnReloadAttribute clearAttribute) + { + var fieldType = fieldInfo.FieldType; + if (fieldType.IsGenericParameter || fieldInfo.DeclaringType.ContainsGenericParameters) + { + return; + } + + // Access attribute parameters + object resetValue = FindMemberResetValue(fieldType, clearAttribute); + + try + { + DebugLogger.Log(CoreLibraryDomain.Default, $"Clearing field {fieldInfo.Name} to value {resetValue} for type {fieldType}."); + fieldInfo.SetValue(null, resetValue); + } + catch(Exception e) + { + DebugLogger.LogWarning(CoreLibraryDomain.Default, $"Unable to clear field {fieldInfo.Name}." + e); + } + } + + private static void ClearProperty(PropertyInfo propertyInfo, ClearOnReloadAttribute clearAttribute) + { + if (!propertyInfo.CanWrite) return; + + // Access attribute parameters + var propertyType = propertyInfo.PropertyType; + object resetValue = FindMemberResetValue(propertyType, clearAttribute); + + try + { + DebugLogger.Log(CoreLibraryDomain.Default, $"Clearing property {propertyInfo.Name} to value {resetValue}."); + propertyInfo.SetValue(null, resetValue); + } + catch + { + DebugLogger.LogWarning(CoreLibraryDomain.Default, $"Unable to clear property {propertyInfo.Name}."); + } + } + + private static void ClearEvent(EventInfo eventInfo, ClearOnReloadAttribute clearAttribute) + { + var fieldInfo = eventInfo.DeclaringType.GetField(eventInfo.Name, kDefaultBindingAttr); + if ((fieldInfo == null) || fieldInfo.FieldType.IsGenericParameter) return; + + DebugLogger.Log(CoreLibraryDomain.Default, $"Clearing event {eventInfo.Name}."); + fieldInfo.SetValue(null, null); + } + + private static object FindMemberResetValue(Type target, ClearOnReloadAttribute clearAttribute) + { + object finalValue = null; + if (ClearOnReloadOption.Custom == clearAttribute.Option) + { + finalValue = Convert.ChangeType(clearAttribute.CustomValue, target); + if (finalValue == null) + { + Debug.LogWarning("Unable to assign value of type {valueToAssign.GetType()} to field {field.Name} of type {fieldType}."); + } + } + else if (target.IsValueType || (ClearOnReloadOption.Default == clearAttribute.Option)) + { + finalValue = Activator.CreateInstance(target); + } + return finalValue; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/DomainReloadManager.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/DomainReloadManager.cs.meta new file mode 100644 index 00000000..aee50c4f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/DomainReloadManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec2658a60321e44fe81b86a95e54bd8f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/SettingsObjectEditorManager.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/SettingsObjectEditorManager.cs new file mode 100644 index 00000000..aa118cd0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/SettingsObjectEditorManager.cs @@ -0,0 +1,23 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public class SettingsObjectEditorManager + { + [InitializeOnLoadMethod] + private static void OnEditorReload() + { + var settingsObjects = AssetDatabaseUtility.FindAssetObjects(); + foreach (var obj in settingsObjects) + { + if(obj != null) + { + obj.OnEditorReload(); + } + } + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/SettingsObjectEditorManager.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/SettingsObjectEditorManager.cs.meta new file mode 100644 index 00000000..4e55afeb --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Controllers/SettingsObjectEditorManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 668d41341e45a44ed8ea4d6145939d4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors.meta new file mode 100644 index 00000000..98241d09 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1207f43c46f3944158e30563ec0a499c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomEditorStyles.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomEditorStyles.cs new file mode 100644 index 00000000..69568465 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomEditorStyles.cs @@ -0,0 +1,228 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public static class CustomEditorStyles + { + #region Properties + + public static Color BorderColor => new Color(0.15f, 0.15f, 0.15f, 1f); + + #endregion + + #region Label styles + + public static GUIStyle Heading1Label() + { + return CreateLabel(baseStyle: EditorStyles.boldLabel, + fontSize: 18, + wordWrap: true, + richText: true, + alignment: TextAnchor.MiddleLeft); + } + + public static GUIStyle Heading2Label() + { + return CreateLabel(baseStyle: EditorStyles.boldLabel, + fontSize: 16, + wordWrap: true, + richText: true, + alignment: TextAnchor.MiddleLeft); + } + + public static GUIStyle Heading3Label() + { + return CreateLabel(baseStyle: EditorStyles.boldLabel, + fontSize: 14, + wordWrap: true, + richText: true, + alignment: TextAnchor.MiddleLeft); + } + + public static GUIStyle NormalLabel() + { + return CreateLabel(baseStyle: EditorStyles.label, + fontSize: 14, + wordWrap: true, + richText: true); + } + + public static GUIStyle OptionsLabel(bool wordWrap = true) + { + return CreateLabel(baseStyle: EditorStyles.label, + fontSize: 12, + wordWrap: wordWrap, + richText: true, + textClipping: TextClipping.Clip); + } + + public static GUIStyle LinkLabel() + { + return CreateLabel(baseStyle: "LinkLabel", + fontSize: 12, + wordWrap: true, + richText: true); + } + + public static GUIStyle MiniLabel(bool wordWrap = true) + { + return CreateLabel(baseStyle: EditorStyles.miniLabel, + fontSize: 12, + wordWrap: wordWrap, + richText: true); + } + + + public static GUIStyle SelectableLabel(FontStyle? fontStyle = null, + int? fontSize = null, + Color? textColor = null) + { + var normal = EditorStyles.label; + var baseStyle = new GUIStyle() + { + border = new RectOffset(0, 0, 0, 0), + font = normal.font, + alignment = normal.alignment, + active = normal.active, + onActive = normal.onActive, + focused = normal.focused, + onFocused = normal.onFocused, + normal = normal.normal, + onNormal = normal.onNormal, + hover = normal.hover, + onHover = normal.onHover, + }; + return CreateLabel(baseStyle, + fontStyle: fontStyle, + fontSize: fontSize ?? 14, + textColor: textColor); + } + + #endregion + + #region Button styles + + public static GUIStyle Button() + { + return CreateButton(baseStyle: "Button", + fontSize: 14); + } + + public static GUIStyle InvisibleButton() + { + return CreateButton(baseStyle: "InvisibleButton"); + } + + #endregion + + #region Background styles + + public static GUIStyle ItemBackground() + { + return CreateBackground(baseStyle: "AnimItemBackground"); + } + + public static GUIStyle GroupBackground() + { + GUIStyle baseStyle = "FrameBox"; + var baseMargin = baseStyle.margin; + return CreateBackground(baseStyle: baseStyle, + border: new RectOffset(0, 0, 0, 0), + margin: new RectOffset(baseMargin.left, baseMargin.right, baseMargin.top, 5)); + } + + #endregion + + #region Static methods + + public static GUIStyle CreateLabel(GUIStyle baseStyle, + FontStyle? fontStyle = null, + int? fontSize = null, + Color? textColor = null, + bool? wordWrap = null, + bool? richText = null, + TextAnchor? alignment = null, + TextClipping? textClipping = null) + { + var newStyle = new GUIStyle(baseStyle); + if (fontSize != null) + { + newStyle.fontSize = fontSize.Value; + } + if (fontStyle != null) + { + newStyle.fontStyle = fontStyle.Value; + } + if (textColor != null) + { + newStyle.normal.textColor = textColor.Value; + newStyle.onNormal.textColor = textColor.Value; + newStyle.active.textColor = textColor.Value; + newStyle.onActive.textColor = textColor.Value; + newStyle.focused.textColor = textColor.Value; + newStyle.onFocused.textColor = textColor.Value; + newStyle.hover.textColor = textColor.Value; + newStyle.onHover.textColor = textColor.Value; + } + if (wordWrap != null) + { + newStyle.wordWrap = wordWrap.Value; + } + if (richText != null) + { + newStyle.richText = richText.Value; + } + if (alignment != null) + { + newStyle.alignment = alignment.Value; + } + if (textClipping != null) + { + newStyle.clipping = textClipping.Value; + } + return newStyle; + } + + public static GUIStyle CreateButton(GUIStyle baseStyle, + int? fontSize = null, + int? fixedHeight = null, + TextAnchor? alignment = null) + { + var newStyle = new GUIStyle(baseStyle); + if (fontSize != null) + { + newStyle.fontSize = fontSize.Value; + } + if (fixedHeight != null) + { + newStyle.fixedHeight = fixedHeight.Value; + } + if (alignment != null) + { + newStyle.alignment = alignment.Value; + } + return newStyle; + } + + public static GUIStyle CreateBackground(GUIStyle baseStyle, + RectOffset border = null, + RectOffset margin = null) + { + var newStyle = new GUIStyle(baseStyle); + if (border != null) + { + newStyle.border = border; + } + if (margin != null) + { + newStyle.margin = margin; + } + return newStyle; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomEditorStyles.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomEditorStyles.cs.meta new file mode 100644 index 00000000..9a668488 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomEditorStyles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e146cad3338c4e56a70c8554ed2901c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomInspector.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomInspector.cs new file mode 100644 index 00000000..8ac2d82b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomInspector.cs @@ -0,0 +1,52 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public class CustomInspector : UnityEditor.Editor + { + #region Unity methods + + protected virtual void OnEnable() + { } + + protected virtual void OnDisable() + { } + + public override void OnInspectorGUI() + { + EditorGUI.BeginChangeCheck(); + + DrawCustomInspector(); + + bool isDirty = EditorGUI.EndChangeCheck(); + if (isDirty || UnityEditorUtility.GetIsEditorDirty()) + { + serializedObject.ApplyModifiedProperties(); + UnityEditorUtility.SetIsEditorDirty(false); + } + } + + protected virtual void DrawCustomInspector() + { + var property = serializedObject.GetIterator(); + if (property.NextVisible(true)) + { + if (property.name == "m_Script") + { + GUI.enabled = false; + EditorGUILayout.PropertyField(property, true); + GUI.enabled = true; + } + while (property.NextVisible(false)) + { + EditorGUILayout.PropertyField(property, true); + } + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomInspector.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomInspector.cs.meta new file mode 100644 index 00000000..77eae4d7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/CustomInspector.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 71ff8e366aef840198f173c1b05160fc +timeCreated: 1579541126 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutBuilder.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutBuilder.cs new file mode 100644 index 00000000..e06de468 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutBuilder.cs @@ -0,0 +1,527 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public class EditorLayoutBuilder + { + #region Fields + + private SerializedObject m_serializedObject; + + private string[] m_tabs; + + private GetSectionsCallback m_getSectionsCallback; + + private DrawCallback m_drawTopBarCallback; + + private DrawTabViewCallback m_drawTabViewCallback; + + private DrawCallback m_drawFooterCallback; + + private string m_selectedTab; + + private EditorSectionInfo[] m_selectedTabSections; + + private EditorSectionInfo m_focusSection; + + private Vector2 m_tabBarScrollPosition; + + private Texture2D m_toggleOnIcon; + + private Texture2D m_toggleOffIcon; + + private GUIStyle m_backgroundStyle; + + private GUIStyle m_titleLabelStyle; + + private GUIStyle m_subtitleLabelStyle; + + private GUIStyle m_tabBarLabelNormalStyle; + + private GUIStyle m_tabBarLabelSelectedStyle; + + private GUIStyle m_selectableLabelStyle; + + private GUIStyle m_invisibleButtonStyle; + + #endregion + + #region Delegates + + public delegate EditorSectionInfo[] GetSectionsCallback(string tab); + + public delegate void DrawCallback(string tab); + + public delegate bool DrawTabViewCallback(string tab); + + #endregion + + #region Events + + public event Callback OnSectionStatusChange; + + public event Callback OnFocusSectionValueChange; + + #endregion + + #region Constructors + + public EditorLayoutBuilder(SerializedObject serializedObject, + string[] tabs, + GetSectionsCallback getSectionsCallback, + DrawCallback drawTopBarCallback, + DrawTabViewCallback drawTabViewCallback, + DrawCallback drawFooterCallback, + Texture2D toggleOnIcon, + Texture2D toggleOffIcon) + { + // Set properties + m_serializedObject = serializedObject; + m_tabs = tabs; + m_getSectionsCallback = getSectionsCallback; + m_drawTopBarCallback = drawTopBarCallback; + m_drawTabViewCallback = drawTabViewCallback; + m_drawFooterCallback = drawFooterCallback; + m_toggleOnIcon = toggleOnIcon; + m_toggleOffIcon = toggleOffIcon; + + LoadStyles(); + SetSelectedTab(m_tabs[0]); + } + + #endregion + + #region Static methods + + public static void DrawChildProperties(SerializedProperty property, + string prefix = null, + bool indent = true, + params string[] ignoreProperties) + { + EditorGUILayout.BeginVertical(CustomEditorStyles.GroupBackground()); + try + { + float maxWidth = 0; + //Calculate max label width first + IterateThroughValidChildren(property, ignoreProperties, (eachChildProperty) => + { + var currentDisplayName = (prefix != null) ? $"{prefix} {eachChildProperty.displayName}" : eachChildProperty.displayName; + float currentLabelWidth = GUI.skin.label.CalcSize(new GUIContent(currentDisplayName)).x; + + if(maxWidth < currentLabelWidth) + { + maxWidth = currentLabelWidth; + } + + }); + + + if (indent) + { + EditorGUI.indentLevel++; + } + + var oldLabelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = ((maxWidth / 128) + 1) * 128; //Adding some extra 128 pixels buffer. + IterateThroughValidChildren(property, ignoreProperties, (eachChildProperty) => + { + // Display the property + if (prefix != null) + { + EditorGUILayout.PropertyField(eachChildProperty, new GUIContent($"{prefix} {eachChildProperty.displayName}", eachChildProperty.tooltip), true); + } + else + { + EditorGUILayout.PropertyField(eachChildProperty, true); + } + }); + EditorGUIUtility.labelWidth = oldLabelWidth; + } + finally + { + if (indent) + { + EditorGUI.indentLevel--; + } + } + EditorGUILayout.EndVertical(); + } + + private static void IterateThroughValidChildren(SerializedProperty property, string[] ignoreProperties, Action callbackOnEachChild) + { + // Move pointer to first element + var currentProperty = property.Copy(); + var endProperty = default(SerializedProperty); + + // Start iterating through the properties + bool firstTime = true; + while (currentProperty.NextVisible(enterChildren: firstTime)) + { + if (firstTime) + { + endProperty = property.GetEndProperty(); + firstTime = false; + } + if (SerializedProperty.EqualContents(currentProperty, endProperty)) + { + break; + } + + // Exclude specified properties + if ((ignoreProperties != null) && System.Array.Exists(ignoreProperties, (item) => string.Equals(item, currentProperty.name))) + { + continue; + } + + callbackOnEachChild(currentProperty); + } + } + + #endregion + + #region Public methods + + public void DoLayout() + { + if (CanShowFocusSection()) + { + DrawFocusSection(); + } + else + { + m_drawTopBarCallback?.Invoke(m_selectedTab); + DrawTabBar(); + DrawTabView(); + m_drawFooterCallback?.Invoke(m_selectedTab); + } + m_serializedObject.ApplyModifiedProperties(); + m_serializedObject.Update(); + } + + public void DrawSection(EditorSectionInfo section, + bool showDetails = true, + bool selectable = true) + { + EditorGUILayout.BeginVertical(m_backgroundStyle); + bool expanded = DrawSectionHeader(section, + selectable); + bool endGroup = true; + if (showDetails || expanded) + { + if (section.DrawStyle == EditorSectionDrawStyle.Default) + { + endGroup = false; + EditorGUILayout.EndVertical(); + } + + if (section.DrawDetailsCallback != null) + { + section.DrawDetailsCallback(section); + } + else + { + if (section.DrawStyle == EditorSectionDrawStyle.Default) + { + endGroup = true; + EditorGUILayout.BeginVertical(m_backgroundStyle); + } + DrawSectionDetails(section); + } + } + if (endGroup) + { + EditorGUILayout.EndVertical(); + } + } + + public void DrawSectionDetails(EditorSectionInfo section) + { + bool originalGUIState = GUI.enabled; + try + { + // Update edit capability + GUI.enabled = section.IsEnabled; + + // Draw section properties + DrawChildProperties(property: section.Property, + ignoreProperties: section.IgnoreProperties); + } + finally + { + // Reset gui state + GUI.enabled = originalGUIState; + } + } + + public void BeginVertical() + { + EditorGUILayout.BeginVertical(m_backgroundStyle); + } + + public void EndVertical() + { + EditorGUILayout.EndVertical(); + } + + #endregion + + #region Private methods + + private void LoadStyles() + { + m_backgroundStyle = CustomEditorStyles.GroupBackground(); + m_titleLabelStyle = CustomEditorStyles.Heading2Label(); + m_subtitleLabelStyle = CustomEditorStyles.OptionsLabel(wordWrap: false); + m_tabBarLabelNormalStyle = CustomEditorStyles.SelectableLabel(fontSize: 16, textColor: Color.gray); + m_tabBarLabelSelectedStyle = CustomEditorStyles.SelectableLabel(fontSize: 16, fontStyle: FontStyle.Bold); + m_selectableLabelStyle = CustomEditorStyles.SelectableLabel(); + m_invisibleButtonStyle = CustomEditorStyles.InvisibleButton(); + } + + private bool CanShowFocusSection() + { + return (m_focusSection != null) && (m_focusSection.DrawStyle == EditorSectionDrawStyle.Default); + } + + private void DrawTabBar() + { + if (m_tabs.Length > 1) + { + m_tabBarScrollPosition = GUILayout.BeginScrollView(m_tabBarScrollPosition, m_backgroundStyle, GUILayout.Height(30f)); + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + for (int iter = 0; iter < m_tabs.Length; iter++) + { + var current = m_tabs[iter]; + var labelStyle = (current == m_selectedTab) ? m_tabBarLabelSelectedStyle : m_tabBarLabelNormalStyle; + if (GUILayout.Button(current, labelStyle, GUILayout.Width(80f))) + { + SetSelectedTab(current); + } + } + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + GUILayout.EndScrollView(); + } + } + + private void DrawTabView() + { + if ((m_drawTabViewCallback == null) || !m_drawTabViewCallback(m_selectedTab)) + { + for (int iter = 0; iter < m_selectedTabSections.Length; iter++) + { + var current = m_selectedTabSections[iter]; + DrawSection(section: current, + showDetails: (current.DrawStyle == EditorSectionDrawStyle.Expand) && (current == m_focusSection)); + } + } + } + + private bool DrawSectionHeader(EditorSectionInfo section, + bool selectable = true) + { + bool isSelected = (section == m_focusSection); + bool hasSubtitle = (section.Description != null); + float headerHeight = hasSubtitle ? 52f : 30f; + + // Draw rect + var rect = EditorGUILayout.GetControlRect(false, headerHeight); + //GUI.Box(rect, GUIContent.none, HeaderButtonStyle); + + /* + // Draw expand control + if (drawStyle == PropertyGroupDrawStyle.Expand) + { + var foldOutRect = new Rect(rect.x + 5f, rect.y, 50f, rect.height); + EditorGUI.LabelField(foldOutRect, isSelected ? "-" : "+", CustomEditorStyles.Heading3); + } + */ + + // Draw text + var titleRect = new Rect(rect.x + 5f, + rect.y + 4f, + rect.width * 0.8f, + 22f); + EditorGUI.LabelField(titleRect, section.DisplayName, m_titleLabelStyle); + if (hasSubtitle) + { + var subtitleRect = new Rect(rect.x + 5f, + rect.y + 25f, + rect.width * 0.8f, + 18f); + EditorGUI.LabelField(subtitleRect, section.Description, m_subtitleLabelStyle); + } + + // Draw selectable rect + var selectableRect = new Rect(rect.x, + rect.y, + rect.width * 0.8f, + rect.height); + if (selectable && EditorLayoutUtility.TransparentButton(selectableRect)) + { + isSelected = SetFocusSection(section); + } + + // Draw toggle button + var enabledProperty = section.EnabledProperty; + if (enabledProperty != null) + { + var toggleIcon = enabledProperty.boolValue ? m_toggleOnIcon : m_toggleOffIcon; + var iconSize = new Vector2(64f, 32f); + var toggleRect = new Rect(rect.xMax - (iconSize.x * 1.2f), + titleRect.yMin + ((titleRect.height - iconSize.y/2)), + iconSize.x, + iconSize.y); + if (GUI.Button(toggleRect, toggleIcon, m_invisibleButtonStyle)) + { + enabledProperty.boolValue = !enabledProperty.boolValue; + + // Raise an event to notify others, delay is added to ensure that modified properties are serialized + EditorApplication.delayCall += () => { OnSectionStatusChange?.Invoke(section); }; + } + } + return isSelected; + } + + private void DrawFocusSection() + { + var property = m_focusSection.Property; + EditorGUILayout.BeginHorizontal(m_backgroundStyle); + if (GUILayout.Button($"{'\u2190'} Back To Main Menu", m_titleLabelStyle)) + { + SetFocusSection(null); + return; + } + GUILayout.FlexibleSpace(); + EditorGUILayout.EndHorizontal(); + + property.isExpanded = true; + DrawSection(section: m_focusSection, + selectable: false); + } + + #endregion + + #region Getter methods + + private EditorSectionInfo[] GetSections(string tab) + { + return m_getSectionsCallback(tab) ?? new EditorSectionInfo[0]; + } + + #endregion + + #region Setter methods + + private void SetSelectedTab(string tab) + { + // Update cached data + m_selectedTab = tab; + m_selectedTabSections = GetSections(tab); + } + + private bool SetFocusSection(EditorSectionInfo section) + { + var oldFocusSection = m_focusSection; + + // Set new value + m_focusSection = section; + + // Update selection state + if ((section != null) && (section == oldFocusSection)) + { + section.Property.isExpanded = !section.Property.isExpanded; + m_focusSection = null; + } + else + { + if (oldFocusSection != null) + { + oldFocusSection.Property.isExpanded = false; + } + if (section != null) + { + section.Property.isExpanded = true; + } + } + bool hasChanged = (oldFocusSection != m_focusSection); + if (hasChanged) + { + OnFocusSectionValueChange?.Invoke(m_focusSection); + } + return hasChanged; + } + + #endregion + } + + public class EditorSectionInfo + { + #region Properties + + public string DisplayName { get; private set; } + + public string Description { get; private set; } + + public bool IsEnabled => (EnabledProperty == null) || EnabledProperty.boolValue; + + public SerializedProperty Property { get; private set; } + + public SerializedProperty EnabledProperty { get; private set; } + + public EditorSectionDrawStyle DrawStyle { get; private set; } + + public DrawCallback DrawDetailsCallback { get; private set; } + + public string[] IgnoreProperties { get; private set; } + + public object Tag { get; private set; } + + #endregion + + #region Delegates + + public delegate void DrawCallback(EditorSectionInfo section); + + #endregion + + #region Constructors + + public EditorSectionInfo(string displayName, + SerializedProperty property, + SerializedProperty enabledProperty = null, + string description = null, + EditorSectionDrawStyle drawStyle = EditorSectionDrawStyle.Default, + DrawCallback drawDetailsCallback = null, + object tag = null, + params string[] ignoreProperties) + { + Assert.IsArgNotNull(displayName, nameof(displayName)); + Assert.IsArgNotNull(property, nameof(property)); + + // set properties + DisplayName = displayName; + Description = description; + Property = property; + EnabledProperty = enabledProperty ?? property.FindPropertyRelative("m_isEnabled"); + DrawStyle = drawStyle; + DrawDetailsCallback = drawDetailsCallback; + IgnoreProperties = ignoreProperties ?? new string[] { "m_isEnabled" }; + Tag = tag; + } + + #endregion + } + + public enum EditorSectionDrawStyle + { + Default, + + Expand, + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutBuilder.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutBuilder.cs.meta new file mode 100644 index 00000000..4eb0c05c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4019dad4610704cb38751061068b7fa8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutUtility.cs new file mode 100644 index 00000000..465ae756 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutUtility.cs @@ -0,0 +1,117 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public static class EditorLayoutUtility + { + #region Static methods + + public static void DisableGUI() + { + GUI.enabled = false; + } + + public static void EnableGUI() + { + GUI.enabled = true; + } + + public static bool TransparentButton(Rect rect, + string label = "") + { + var originalColor = GUI.color; + try + { + GUI.color = Color.clear; + return GUI.Button(rect, label); + } + finally + { + GUI.color = originalColor; + } + } + + public static void StringPopup(int selectedIndex, + string[] options, + Callback onValueChange, + params GUILayoutOption[] layoutOptions) + { + int newValue = EditorGUILayout.Popup(selectedIndex, options, layoutOptions); + if (newValue != selectedIndex) + { + onValueChange?.Invoke(newValue); + } + } + + public static void StringPopup(SerializedProperty stringProperty, + ref int selectedIndex, + string[] displayedOptions, + Callback onValueChange = null, + params GUILayoutOption[] layoutOptions) + { + int newValue = EditorGUILayout.Popup(new GUIContent(stringProperty.displayName, stringProperty.tooltip), + selectedIndex, + displayedOptions, + layoutOptions); + if (newValue != selectedIndex) + { + selectedIndex = newValue; + stringProperty.stringValue = displayedOptions[newValue]; + + onValueChange?.Invoke(newValue); + } + } + + public static void Helpbox(string title, + string description, + System.Action drawFunc, + GUIStyle style) + { + GUILayout.BeginVertical(style); + GUILayout.Label(title, EditorStyles.boldLabel); + GUILayout.Label(description, EditorStyles.wordWrappedLabel); + drawFunc(); + GUILayout.EndVertical(); + } + + public static void Helpbox(string title, + string description, + string actionLabel, + System.Action onClick, + GUIStyle style) + { + Helpbox( + title: title, + description: description, + drawFunc: () => + { + if (GUILayout.Button(actionLabel)) + { + onClick?.Invoke(); + } + }, + style: style); + } + + public static void BeginBottomBar(Color? borderColor = null, + params GUILayoutOption[] options) + { + var bottomBarRect = EditorGUILayout.BeginHorizontal(options); + bottomBarRect.height = 1f; + if (borderColor != null) + { + EditorGUI.DrawRect(bottomBarRect, borderColor.Value); + } + } + + public static void EndBottomBar() + { + EditorGUILayout.EndHorizontal(); + } + + #endregion + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutUtility.cs.meta new file mode 100644 index 00000000..a1ff8982 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorLayoutUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c40767cd6fb464f3b83f7e68d5e47449 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorSplitView.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorSplitView.cs new file mode 100644 index 00000000..d7be1510 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorSplitView.cs @@ -0,0 +1,185 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public class EditorSplitView + { + #region Fields + + private SplitDirection m_direction; + + private float m_splitRatio; + + private bool m_resize; + + private Vector2 m_firstContainerScrollPos; + + private Rect m_availableRect; + + #endregion + + #region Constructors + + private EditorSplitView(SplitDirection direction, float splitRatio) + { + m_splitRatio = splitRatio; + m_direction = direction; + } + + #endregion + + #region Static methods + + public static EditorSplitView CreateHorizontalSplitView(float splitRatio = 0.3f) + { + return new EditorSplitView(SplitDirection.Horizontal, splitRatio); + } + + public static EditorSplitView CreateVerticalSplitView(float splitRatio = 0.3f) + { + return new EditorSplitView(SplitDirection.Vertical, splitRatio); + } + + #endregion + + #region Private methods + + public void BeginArea() + { + Rect tempRect = Rect.zero; + if (m_direction == SplitDirection.Horizontal) + { + tempRect = EditorGUILayout.BeginHorizontal(); + } + else if (m_direction == SplitDirection.Vertical) + { + tempRect = EditorGUILayout.BeginVertical(); + } + if (tempRect.width > 0.0f) + { + m_availableRect = tempRect; + } + + BeginContainer(); + if (m_direction == SplitDirection.Horizontal) + { + m_firstContainerScrollPos = EditorGUILayout.BeginScrollView(m_firstContainerScrollPos, GUILayout.Width(m_availableRect.width * m_splitRatio)); + } + else if (m_direction == SplitDirection.Vertical) + { + m_firstContainerScrollPos = EditorGUILayout.BeginScrollView(m_firstContainerScrollPos, GUILayout.Height(m_availableRect.height * m_splitRatio)); + } + } + + public void Split() + { + // firstly mark that first container has ended + EditorGUILayout.EndScrollView(); + EndContainer(); + ResizeFirstContainer(); + + // initiate rendering second container + BeginContainer(); + } + + public void EndArea() + { + EndContainer(); + + if (m_direction == SplitDirection.Horizontal) + { + EditorGUILayout.EndHorizontal(); + } + else if (m_direction == SplitDirection.Vertical) + { + EditorGUILayout.EndVertical(); + } + } + + private Rect BeginContainer() + { + if (m_direction == SplitDirection.Horizontal) + { + return EditorGUILayout.BeginVertical(); + } + else if (m_direction == SplitDirection.Vertical) + { + return EditorGUILayout.BeginHorizontal(); + } + else + { + return Rect.zero; + } + } + + private void EndContainer() + { + if (m_direction == SplitDirection.Horizontal) + { + EditorGUILayout.EndVertical(); + } + else if (m_direction == SplitDirection.Vertical) + { + EditorGUILayout.EndHorizontal(); + } + } + + private void ResizeFirstContainer() + { + Rect resizeHandleRect; + if (m_direction == SplitDirection.Horizontal) + { + resizeHandleRect = new Rect(m_availableRect.width * m_splitRatio, m_availableRect.y, 1f, m_availableRect.height); + } + else + { + resizeHandleRect = new Rect(m_availableRect.x, m_availableRect.height * m_splitRatio, m_availableRect.width, 1f); + } + EditorGUI.DrawRect(resizeHandleRect, CustomEditorStyles.BorderColor); + if (m_direction == SplitDirection.Horizontal) + { + EditorGUIUtility.AddCursorRect(resizeHandleRect, MouseCursor.ResizeHorizontal); + } + else + { + EditorGUIUtility.AddCursorRect(resizeHandleRect, MouseCursor.ResizeVertical); + } + + if (Event.current.type == EventType.MouseDown && resizeHandleRect.Contains(Event.current.mousePosition)) + { + m_resize = true; + } + if (m_resize) + { + if (m_direction == SplitDirection.Horizontal) + { + m_splitRatio = Event.current.mousePosition.x / m_availableRect.width; + } + else + { + m_splitRatio = Event.current.mousePosition.y / m_availableRect.height; + } + } + if (Event.current.type == EventType.MouseUp) + { + m_resize = false; + } + } + + #endregion + + #region Nested types + + private enum SplitDirection + { + Horizontal, + + Vertical + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorSplitView.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorSplitView.cs.meta new file mode 100644 index 00000000..634a071b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorSplitView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a20197bdbee5a44b196d137503bca990 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorWindowZ.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorWindowZ.cs new file mode 100644 index 00000000..12f8516b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorWindowZ.cs @@ -0,0 +1,41 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public class EditorWindowZ : EditorWindow + { + #region Fields + + [System.NonSerialized] + private bool m_isInitialized; + + #endregion + + #region Unity methods + + protected virtual void OnGUI() + { + EnsureInitialized(); + } + + #endregion + + #region Private methods + + protected virtual void Init() + { } + + protected void EnsureInitialized() + { + if (m_isInitialized) return; + + m_isInitialized = true; + Init(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorWindowZ.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorWindowZ.cs.meta new file mode 100644 index 00000000..f96959db --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EditorWindowZ.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0757cac8d21f499e80db0e955801000 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EnumMaskFieldDrawer.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EnumMaskFieldDrawer.cs new file mode 100644 index 00000000..efe41550 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EnumMaskFieldDrawer.cs @@ -0,0 +1,49 @@ +using System; +using UnityEngine; +using UnityEditor; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.Editor +{ + [CustomPropertyDrawer(typeof(EnumMaskFieldAttribute))] + public class EnumMaskFieldDrawer : PropertyDrawer + { + #region Drawer Methods + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + label = EditorGUI.BeginProperty(position, label, property); + if (IsEnum()) + { + UnityEditorUtility.EnumFlagsField(position, label, property, GetEnumType()); + } + else + { + base.OnGUI(position, property, label); + } + + EditorGUI.EndProperty(); + } + + #endregion + + #region Private methods + + private Type GetEnumType() + { + return ((EnumMaskFieldAttribute)attribute).EnumType; + } + + private bool IsEnum() + { + Type type = GetEnumType(); + #if NETFX_CORE + return type.GetTypeInfo().IsEnum; + #else + return type.IsEnum; + #endif + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EnumMaskFieldDrawer.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EnumMaskFieldDrawer.cs.meta new file mode 100644 index 00000000..373cfe58 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/EnumMaskFieldDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 11e33d767c33a4a10bc1e378ed17ef72 +timeCreated: 1579074419 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FileBrowserAttributeDrawer.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FileBrowserAttributeDrawer.cs new file mode 100644 index 00000000..0e6d620a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FileBrowserAttributeDrawer.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEngine; +using UnityEditor; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.Editor +{ + [CustomPropertyDrawer(typeof(FileBrowserAttribute))] + public class FileBrowserAttributeDrawer : PropertyDrawer + { + #region Base class methods + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(position, label, property); + + // draw property + var valueRect = new Rect(position.x, position.y, position.width - 50, position.height); + var buttonRect = new Rect(position.xMax - 45, position.y, 45, position.height); + + EditorGUI.PropertyField(valueRect, property, label); + if (GUI.Button(buttonRect, new GUIContent("Select"))) + { + EditorApplication.delayCall += () => + { + OpenFileBrowser(property); + }; + } + + EditorGUI.EndProperty(); + } + + #endregion + + #region Private methods + + private void OpenFileBrowser(SerializedProperty property) + { + var value = EditorUtility.OpenFilePanel("Select file", IOServices.GetAbsolutePath(property.stringValue), ((FileBrowserAttribute)attribute).Extension); + if (!string.IsNullOrEmpty(value)) + { + property.stringValue = ((FileBrowserAttribute)attribute).UsesRelativePath ? IOServices.GetRelativePath(IOServices.GetAbsolutePath(""), value) : value; + UnityEditorUtility.SetIsEditorDirty(true); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FileBrowserAttributeDrawer.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FileBrowserAttributeDrawer.cs.meta new file mode 100644 index 00000000..7192b224 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FileBrowserAttributeDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f924f934566204936b517248f5f8f4bd +timeCreated: 1576323713 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FolderBrowserAttributeDrawer.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FolderBrowserAttributeDrawer.cs new file mode 100644 index 00000000..0310cb91 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FolderBrowserAttributeDrawer.cs @@ -0,0 +1,51 @@ +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEngine; +using UnityEditor; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.Editor +{ + [CustomPropertyDrawer(typeof(FolderBrowserAttribute))] + public class FolderBrowserAttributeDrawer : PropertyDrawer + { + #region Base class methods + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(position, label, property); + + // draw property + var valueRect = new Rect(position.x, position.y, position.width - 50, position.height); + var buttonRect = new Rect(position.xMax - 45, position.y, 45, position.height); + + EditorGUI.PropertyField(valueRect, property, label); + if (GUI.Button(buttonRect, new GUIContent("Select"))) + { + EditorApplication.delayCall += () => + { + OpenFolderBrowser(property); + }; + } + + EditorGUI.EndProperty(); + } + + #endregion + + #region Private methods + + private void OpenFolderBrowser(SerializedProperty property) + { + var value = EditorUtility.OpenFolderPanel("Select folder", IOServices.GetAbsolutePath(property.stringValue), string.Empty); + if (!string.IsNullOrEmpty(value)) + { + property.stringValue = ((FolderBrowserAttribute)attribute).UsesRelativePath ? IOServices.GetRelativePath(IOServices.GetAbsolutePath(""), value) : value; + UnityEditorUtility.SetIsEditorDirty(true); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FolderBrowserAttributeDrawer.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FolderBrowserAttributeDrawer.cs.meta new file mode 100644 index 00000000..897f7224 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/FolderBrowserAttributeDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cafbc9653f53348559d4e088e2014b44 +timeCreated: 1576323712 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/InterfaceFieldAttributeDrawer.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/InterfaceFieldAttributeDrawer.cs new file mode 100644 index 00000000..fb222def --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/InterfaceFieldAttributeDrawer.cs @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEngine; +using UnityEditor; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.Editor +{ + [CustomPropertyDrawer(typeof(InterfaceFieldAttribute))] + public class InterfaceFieldAttributeDrawer : PropertyDrawer + { + #region Base class methods + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(position, label, property); + + // draw property + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(position, property, label); + if (EditorGUI.EndChangeCheck()) + { + var reference = property.objectReferenceValue; + var interfaceType = ((InterfaceFieldAttribute)attribute).InterfaceType; + if (reference && !interfaceType.IsAssignableFrom(reference.GetType())) + { + DebugLogger.LogError(CoreLibraryDomain.Default, $"Object does not implement interface of type: {interfaceType}."); + property.objectReferenceValue = null; + } + } + + EditorGUI.EndProperty(); + } + } + + #endregion +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/InterfaceFieldAttributeDrawer.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/InterfaceFieldAttributeDrawer.cs.meta new file mode 100644 index 00000000..e90015f7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/InterfaceFieldAttributeDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9c5bbe7cdfcd444908de802817480fbf +timeCreated: 1577514657 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/ReadOnlyAttributeDrawer.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/ReadOnlyAttributeDrawer.cs new file mode 100644 index 00000000..1e846a8d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/ReadOnlyAttributeDrawer.cs @@ -0,0 +1,66 @@ +using UnityEngine; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor +{ + [CustomPropertyDrawer(typeof(ReadOnlyAttribute), true)] + public class ReadOnlyAttributeDrawer : PropertyDrawer + { + private const float m_padding = 10f; + + #region Base class methods + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + var offset = GetMessageHeight(); + var fieldHeight = EditorGUI.GetPropertyHeight(property, label, true); + var fieldRect = new Rect(position.x, position.y + m_padding, position.width, fieldHeight); + var messageRect = new Rect(position.x, position.y + fieldHeight + m_padding + 2f, position.width, offset); + + GUI.enabled = false; + EditorGUI.PropertyField(fieldRect, property, label, true); + if (HasMessage()) + { + EditorGUI.LabelField(messageRect, GetMessage(), GetMessageStyle()); + } + GUI.enabled = true; + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUI.GetPropertyHeight(property, label, true) + GetMessageHeight() + m_padding * 2f; + } + + #endregion + + #region Utility methods + + private GUIStyle GetMessageStyle() + { + return CustomEditorStyles.MiniLabel(wordWrap: false); //TODO: Using false as calcSize is not working properly with wordwrap on. + } + + private bool HasMessage() + { + return !string.IsNullOrEmpty(GetMessage()); + } + + private string GetMessage() + { + var message = ((ReadOnlyAttribute)attribute).Message; + return message; + } + + private float GetMessageHeight() + { + var message = GetMessage(); + + if (string.IsNullOrEmpty(message)) + return 0f; + + return GetMessageStyle().CalcSize(new GUIContent(message)).y; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/ReadOnlyAttributeDrawer.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/ReadOnlyAttributeDrawer.cs.meta new file mode 100644 index 00000000..c44132ca --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/ReadOnlyAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb5b59ba618cd4d3a97f3f6a1f7ec0c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/RuntimePlatformConstantDrawer.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/RuntimePlatformConstantDrawer.cs new file mode 100644 index 00000000..8dafedd9 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/RuntimePlatformConstantDrawer.cs @@ -0,0 +1,38 @@ +using UnityEngine; +using UnityEditor; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.Editor +{ + [CustomPropertyDrawer(typeof(RuntimePlatformConstant))] + public class RuntimePlatformConstantDrawer : PropertyDrawer + { + #region Unity methods + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUIUtility.singleLineHeight; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + // show property name label + label = EditorGUI.BeginProperty(position, label, property); + position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label); + + // show property attributes + Rect platformRect = new Rect(position.x, position.y, 60f, position.height); + Rect idRect = new Rect(position.x + 65f, position.y, position.width - 65f, position.height); + int indentLevel = EditorGUI.indentLevel; + + EditorGUI.indentLevel = 0; + EditorGUI.PropertyField(platformRect, property.FindPropertyRelative("m_platform"), GUIContent.none); + EditorGUI.PropertyField(idRect, property.FindPropertyRelative("m_value"), GUIContent.none); + EditorGUI.indentLevel = indentLevel; + + EditorGUI.EndProperty(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/RuntimePlatformConstantDrawer.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/RuntimePlatformConstantDrawer.cs.meta new file mode 100644 index 00000000..c09abc82 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/RuntimePlatformConstantDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f8345dac92c6c4d8e813c3a6cc3bd585 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsObjectInspector.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsObjectInspector.cs new file mode 100644 index 00000000..dbf05ac7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsObjectInspector.cs @@ -0,0 +1,244 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public abstract class SettingsObjectInspector : UnityEditor.Editor + { + #region Constants + + private static readonly ButtonMeta[] s_emptyButtonArray = new ButtonMeta[0]; + + private static readonly string[] s_ignoredProperties = new string[] { "m_Script" }; + + #endregion + + #region Fields + + private string m_productName; + + private string m_productVersion; + + // Assets + private Texture2D m_logoIcon; + + #endregion + + #region Properties + + public EditorLayoutBuilder LayoutBuilder { get; private set; } + + protected GUIStyle CustomMarginStyle { get; private set; } + + protected GUIStyle GroupBackgroundStyle { get; private set; } + + protected GUIStyle ProductNameStyle { get; private set; } + + protected GUIStyle NormalLabelStyle { get; private set; } + + protected GUIStyle OptionsLabelStyle { get; private set; } + + #endregion + + #region Abstract methods + + protected abstract UnityPackageDefinition GetOwner(); + + protected abstract string[] GetTabNames(); + + protected abstract EditorSectionInfo[] GetSectionsForTab(string tab); + + #endregion + + #region Unity methods + + protected virtual void OnEnable() + { } + + public override void OnInspectorGUI() + { + EnsurePropertiesAreSet(); + + EditorGUILayout.BeginVertical(CustomMarginStyle); + LayoutBuilder.DoLayout(); + EditorGUILayout.EndVertical(); + } + + public override bool UseDefaultMargins() + { + return false; + } + + #endregion + + #region Draw methods + + protected virtual void DrawTopBar(string tab) + { + GUILayout.BeginHorizontal(GroupBackgroundStyle); + + // logo section + GUILayout.BeginVertical(); + GUILayout.Space(2f); + GUILayout.Label(m_logoIcon, GUILayout.Height(64f), GUILayout.Width(64f)); + GUILayout.Space(2f); + GUILayout.EndVertical(); + + // product info + GUILayout.BeginVertical(); + GUILayout.Label(m_productName, ProductNameStyle); + GUILayout.Label(m_productVersion, NormalLabelStyle); + GUILayout.Label("Copyright © 2024 Voxel Busters Interactive LLP.", OptionsLabelStyle); + GUILayout.EndVertical(); + + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + } + + protected virtual bool DrawTabView(string tab) + { + return false; + } + + protected virtual void DrawFooter(string tab) + { } + + protected virtual void DrawButtonList(ButtonMeta[] buttons) + { + GUILayout.BeginVertical(); + foreach (var item in buttons) + { + if (GUILayout.Button(item.Label, GUILayout.MinHeight(80f))) + { + item?.OnClick(); + } + } + GUILayout.EndVertical(); + } + + #endregion + + #region Private methods + + private void EnsurePropertiesAreSet() + { + if (LayoutBuilder != null) return; + + LoadCustomStyles(); + LoadAssets(); + + // Set properties + var commonResourcePath = CoreLibrarySettings.Package.GetEditorResourcesPath(); + var ownerPackage = GetOwner(); + m_productName = ownerPackage.DisplayName; + m_productVersion = $"v{ownerPackage.Version}"; + LayoutBuilder = new EditorLayoutBuilder(serializedObject: serializedObject, + tabs: GetTabNames(), + getSectionsCallback: GetSectionsForTab, + drawTopBarCallback: DrawTopBar, + drawTabViewCallback: DrawTabView, + drawFooterCallback: DrawFooter, + toggleOnIcon: AssetDatabase.LoadAssetAtPath(commonResourcePath + "/Textures/toggle-on.png"), + toggleOffIcon: AssetDatabase.LoadAssetAtPath(commonResourcePath + "/Textures/toggle-off.png")); + LayoutBuilder.OnSectionStatusChange += OnSectionStatusChange; + LayoutBuilder.OnFocusSectionValueChange += OnFocusSectionValueChange; + } + + private void LoadCustomStyles() + { + CustomMarginStyle = new GUIStyle(EditorStyles.inspectorFullWidthMargins) + { + margin = new RectOffset(2, 2, 0, 0), + }; + GroupBackgroundStyle = CustomEditorStyles.GroupBackground(); + ProductNameStyle = CustomEditorStyles.Heading1Label(); + NormalLabelStyle = CustomEditorStyles.NormalLabel(); + OptionsLabelStyle = CustomEditorStyles.OptionsLabel(); + } + + private void LoadAssets() + { + // load custom assets + var ownerResourcePath = GetOwner().GetEditorResourcesPath(); + m_logoIcon = AssetDatabase.LoadAssetAtPath(ownerResourcePath + "/Textures/logo.png"); + } + + protected void EnsureChangesAreSerialized() + { + EditorUtility.SetDirty(target); + serializedObject.ApplyModifiedProperties(); + serializedObject.Update(); + } + + protected void TryApplyModifiedProperties() + { + if (EditorGUI.EndChangeCheck()) + { + serializedObject.ApplyModifiedProperties(); + serializedObject.Update(); + } + } + + #endregion + + #region Misc methods +#if NATIVE_PLUGINS_SHOW_UPM_MIGRATION + protected void ShowMigrateToUpmOption() + { + EditorLayoutUtility.Helpbox(title: "UPM Support", + description: "You can install the package on UPM.", + actionLabel: "Migrate To UPM", + onClick: GetOwner().MigrateToUpm, + style: GroupBackgroundStyle); + } +#endif + #endregion + + #region Event handler methods + + protected virtual void OnSectionStatusChange(EditorSectionInfo section) + { } + + protected virtual void OnFocusSectionValueChange(EditorSectionInfo section) + { } + + #endregion + + #region Nested types + + protected class ButtonMeta + { + #region Properties + + public string Label { get; private set; } + + public System.Action OnClick { get; private set; } + + #endregion + + #region Constructors + + public ButtonMeta(string label, System.Action onClick) + { + // set properties + Label = label; + OnClick = onClick; + } + + #endregion + } + + protected class DefaultTabs + { + public const string kGeneral = "General"; + + public const string kServices = "Services"; + + public const string kMisc = "Help"; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsObjectInspector.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsObjectInspector.cs.meta new file mode 100644 index 00000000..0521c330 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsObjectInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b40748a9ae9854787b64a0c8ccc993a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsProviderZ.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsProviderZ.cs new file mode 100644 index 00000000..c0e0d841 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsProviderZ.cs @@ -0,0 +1,89 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +#endif + +namespace VoxelBusters.CoreLibrary.Editor +{ + public class SettingsProviderZ : SettingsProvider + { + #region Fields + + private SettingsObject m_settingsObject; + + private SettingsObjectInspector m_settingsObjectInspector; + + #endregion + + #region Constructors + + private SettingsProviderZ(SettingsObject settingsObject, string path, SettingsScope scopes) + : base(path, scopes) + { + // set properties + keywords = GetSearchKeywordsFromSerializedObject(new SerializedObject(settingsObject)); + m_settingsObject = settingsObject; + m_settingsObjectInspector = null; + } + + #endregion + + #region Create methods + + public static SettingsProviderZ Create(SettingsObject settingsObject, string path, SettingsScope scopes) + { + return new SettingsProviderZ(settingsObject, path, scopes); + } + + #endregion + + #region Base class methods + + public override void OnActivate(string searchContext, VisualElement rootElement) + { + base.OnActivate(searchContext, rootElement); + + m_settingsObjectInspector = UnityEditor.Editor.CreateEditor(m_settingsObject) as SettingsObjectInspector; + } + + public override void OnTitleBarGUI() + { + EditorGUILayout.InspectorTitlebar(false, m_settingsObject); + } + + public override void OnGUI(string searchContext) + { + if (m_settingsObjectInspector == null) + { + return; + } + + EditorGUILayout.BeginHorizontal(); + GUILayout.Space(10f); + EditorGUILayout.BeginVertical(); + m_settingsObjectInspector.OnInspectorGUI(); + EditorGUILayout.EndVertical(); + GUILayout.Space(10f); + EditorGUILayout.EndHorizontal(); + } + + public override void OnDeactivate() + { + base.OnDeactivate(); + + if (m_settingsObjectInspector) + { + Object.DestroyImmediate(m_settingsObjectInspector); + m_settingsObjectInspector = null; + } + } + + #endregion + + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsProviderZ.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsProviderZ.cs.meta new file mode 100644 index 00000000..dead65fc --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/SettingsProviderZ.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 82c92451806c941888c94130f02c1a18 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/StringPopupAttributeDrawer.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/StringPopupAttributeDrawer.cs new file mode 100644 index 00000000..7d82f5f2 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/StringPopupAttributeDrawer.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.Editor +{ + [CustomPropertyDrawer(typeof(StringPopupAttribute), true)] + public class StringPopupAttributeDrawer : PropertyDrawer + { + #region Base class methods + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + label = EditorGUI.BeginProperty(position, label, property); + + // determine whether popup is required + bool canShowPopup = true; + var popupAttribute = (StringPopupAttribute)attribute; + if (popupAttribute.PreferencePropertyName != null) + { + var preferencePropertyPath = property.propertyPath.Replace(property.name, popupAttribute.PreferencePropertyName); + var preferenceProperty = property.serializedObject.FindProperty(preferencePropertyPath); + canShowPopup = (preferenceProperty != null) && (preferenceProperty.boolValue == popupAttribute.PreferencePropertyValue); + } + + // draw property as per preference + if (canShowPopup) + { + var options = popupAttribute.Options; + int selectedIndex = Array.FindIndex(options, (item) => string.Equals(item, property.stringValue)); + selectedIndex = EditorGUI.Popup(position, label.text, selectedIndex, options); + + // assign value + property.stringValue = (selectedIndex == -1) ? string.Empty : options[selectedIndex]; + } + else + { + EditorGUI.PropertyField(position, property); + } + + EditorGUI.EndProperty(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/StringPopupAttributeDrawer.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/StringPopupAttributeDrawer.cs.meta new file mode 100644 index 00000000..bc2a5e09 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/StringPopupAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a787cc0f93bc1438c845ec658e1ce1d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/UnityEditorUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/UnityEditorUtility.cs new file mode 100644 index 00000000..67d67133 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/UnityEditorUtility.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public static class UnityEditorUtility + { + #region Static methods + + public static bool ShowFoldableHeader(string prefKeyName, string content, string tooltip = null) + { + bool isExpanded = EditorGUILayout.Foldout(EditorPrefs.GetBool(prefKeyName, false), new GUIContent(content, tooltip)); + EditorPrefs.SetBool(prefKeyName, isExpanded); + + return isExpanded; + } + + public static bool ShowFoldableHeader(SerializedProperty property, string displayName = null) + { + bool isExpanded = EditorGUILayout.Foldout(property.isExpanded, new GUIContent(displayName ?? property.displayName, property.tooltip)); + property.isExpanded = isExpanded; + + return isExpanded; + } + + public static void SetIsEditorDirty(bool value) + { + EditorPrefs.SetBool("editor-is-dirty", value); + } + + public static bool GetIsEditorDirty() + { + return EditorPrefs.GetBool("editor-is-dirty", false); + } + + #endregion + + #region Mask field methods + + public static void EnumFlagsField(Rect position, GUIContent label, SerializedProperty property, Type type) + { + property.intValue = EnumFlagsField(position, label, property.intValue, type); + } + + public static int EnumFlagsField(Rect position, GUIContent label, int value, Type type) + { + EditorGUI.BeginChangeCheck(); +#if UNITY_2017_3_OR_NEWER + Enum newValue = EditorGUI.EnumFlagsField(position, label, GetValueAsEnum(value, type)); +#else + Enum newValue = EditorGUI.EnumMaskField(position, label, GetValueAsEnum(value, type)); +#endif + if (EditorGUI.EndChangeCheck()) + { + return GetEnumAsInt(newValue, type); + } + return value; + } + + public static T EnumFlagsField(Rect position, string label, T value) + { + return (T)(object)EnumFlagsField(position, new GUIContent(label), (int)(object)value, typeof(T)); + } + + #endregion + + #region Private static methods + + private static Array GetEnumValues(Type type) + { + return Enum.GetValues(type); + } + + private static Enum GetValueAsEnum(int value, Type type) + { + return (Enum)Enum.ToObject(type, value); + } + + private static int GetEnumAsInt(Enum value, Type type) + { + int newValueInt = Convert.ToInt32(value); + + // if "Everything" is set, force Unity to unset the extra bits by iterating through them + if (newValueInt < 0) + { + int bits = 0; + foreach (var enumValue in GetEnumValues(type)) + { + int checkBit = newValueInt & (int)enumValue; + if (checkBit != 0) + { + bits |= (int)enumValue; + } + } + newValueInt = bits; + } + return newValueInt; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/UnityEditorUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/UnityEditorUtility.cs.meta new file mode 100644 index 00000000..666315dc --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Inspectors/UnityEditorUtility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8a74bb08ae57c4ca79d5d452cffa4c63 +timeCreated: 1576323712 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc.meta new file mode 100644 index 00000000..0a386d8b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f1aed5f1786094c25bd1a7e0d9ebaffb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/AddUnityPackageOperation.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/AddUnityPackageOperation.cs new file mode 100644 index 00000000..e7235364 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/AddUnityPackageOperation.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using UnityEditor.PackageManager; +using UnityEditor.PackageManager.Requests; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public class AddUnityPackageOperation + { + #region Fields + + private string m_package; + + private Action m_callback; + + private AddRequest m_addPackageRequest; + + private ListRequest m_getPackagesRequest; + + #endregion + + #region Constructors + + public AddUnityPackageOperation(string package, System.Action callback) + { + // set properties + m_package = package; + m_callback = callback; + m_getPackagesRequest = null; + m_addPackageRequest = null; + } + + #endregion + + #region Public methods + + public void Start() + { + m_getPackagesRequest = Client.List(); + + // register for routine callbacks + EditorApplication.update += EditorUpdate; + } + + #endregion + + #region Private methods + + private void EditorUpdate() + { + // check whether dependency packages are already installed + if (m_getPackagesRequest != null) + { + if (m_getPackagesRequest.IsCompleted) + { + bool packageInstalled = false; + foreach (var item in m_getPackagesRequest.Result) + { + if (string.Equals(item.name, m_package)) + { + packageInstalled = true; + break; + } + } + + // reset state + m_getPackagesRequest = null; + + // create add request, incase if package is not installed + if (!packageInstalled) + { + Debug.LogFormat("[VoxelBusters] Creating request to add package {0}", m_package); + m_addPackageRequest = Client.Add(m_package); + } + else + { + SendCompletionCallback(); + } + } + return; + } + + // import resources after required packages are installed + if (m_addPackageRequest != null) + { + if (m_addPackageRequest.IsCompleted) + { + SendCompletionCallback(); + } + } + } + + private void SendCompletionCallback() + { + try + { + m_callback(); + } + finally + { + // reset state + m_package = null; + m_callback = null; + m_addPackageRequest = null; + m_getPackagesRequest = null; + EditorApplication.update -= EditorUpdate; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/AddUnityPackageOperation.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/AddUnityPackageOperation.cs.meta new file mode 100644 index 00000000..44d9582e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/AddUnityPackageOperation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a35410a8a14c41b3ae3d22ba17a44fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/ScriptingDefinesManager.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/ScriptingDefinesManager.cs new file mode 100644 index 00000000..feab53c2 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/ScriptingDefinesManager.cs @@ -0,0 +1,152 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEditor.Build; +using UnityEngine; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public static class ScriptingDefinesManager + { + #region Static fields + + private static Dictionary> s_addDefinesCollection; + + private static Dictionary> s_removeDefinesCollection; + + private static BuildTargetGroup[] s_supportedTargetGroups; + + + #endregion + + #region Static methods + + public static void AddDefine(string define, params BuildTargetGroup[] targetGroups) + { + EnsureInitialized(); + + AddDefineToCollection( + definesCollection: s_addDefinesCollection, + define: define, + targetGroups: GetBuildTargetGroupsOrDefault(targetGroups)); + UpdateDefineSymbolsDelayed(); + } + + public static void RemoveDefine(string define, params BuildTargetGroup[] targetGroups) + { + EnsureInitialized(); + + AddDefineToCollection( + definesCollection: s_removeDefinesCollection, + define: define, + targetGroups: GetBuildTargetGroupsOrDefault(targetGroups)); + UpdateDefineSymbolsDelayed(); + } + + private static void EnsureInitialized() + { + if (s_addDefinesCollection != null) return; + + // set properties + s_addDefinesCollection = new Dictionary>(); + s_removeDefinesCollection = new Dictionary>(); + s_supportedTargetGroups = GetSupportedBuildTargetGroups(); + } + + private static BuildTargetGroup[] GetSupportedBuildTargetGroups() + { + var newList = new List(); + foreach (BuildTarget buildTarget in System.Enum.GetValues(typeof(BuildTarget))) + { + var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(buildTarget); + if (BuildPipeline.IsBuildTargetSupported(buildTargetGroup, buildTarget)) + { + newList.AddUnique(buildTargetGroup); + } + } + return newList.ToArray(); + } + + private static BuildTargetGroup[] GetBuildTargetGroupsOrDefault(BuildTargetGroup[] targetGroups) + { + return ((targetGroups == null) || (targetGroups.Length == 0)) + ? s_supportedTargetGroups + : targetGroups; + } + + private static void AddDefineToCollection(Dictionary> definesCollection, string define, BuildTargetGroup[] targetGroups) + { + // add define symbol for all the specified target groups + foreach (var group in targetGroups) + { + if (!System.Array.Exists(s_supportedTargetGroups, (item) => (item == group))) + { + continue; + } + + if (!definesCollection.TryGetValue(group, out List groupDefines)) + { + var newDefines = new List(); + definesCollection.Add(group, newDefines); + + groupDefines = newDefines; + } + + groupDefines.AddUnique(define); + } + } + + private static void UpdateDefineSymbolsDelayed() + { + EditorApplication.delayCall -= UpdateDefineSymbols; + EditorApplication.delayCall += UpdateDefineSymbols; + } + + private static void UpdateDefineSymbols() + { + try + { + EnsureInitialized(); + AssetDatabase.StartAssetEditing(); + + foreach (var targetGroup in s_supportedTargetGroups) + { + var existingDefines = PlayerSettings.GetScriptingDefineSymbols(NamedBuildTarget.FromBuildTargetGroup(targetGroup)).Split(';'); + var updatedDefines = new List(existingDefines); + bool isModified = false; + if (s_addDefinesCollection.TryGetValue(targetGroup, out List addDefines)) + { + foreach (var define in addDefines) + { + isModified |= updatedDefines.AddUnique(define); + } + } + if (s_removeDefinesCollection.TryGetValue(targetGroup, out List removeDefines)) + { + foreach (var define in removeDefines) + { + isModified |= updatedDefines.Remove(define); + } + } + + // set values if there are modifications + if (isModified) + { + PlayerSettings.SetScriptingDefineSymbols(NamedBuildTarget.FromBuildTargetGroup(targetGroup), string.Join(";", updatedDefines.ToArray())); + } + } + } + finally + { + AssetDatabase.StopAssetEditing(); + + // reset properties + s_addDefinesCollection.Clear(); + s_removeDefinesCollection.Clear(); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/ScriptingDefinesManager.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/ScriptingDefinesManager.cs.meta new file mode 100644 index 00000000..ac6b90ca --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Misc/ScriptingDefinesManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef477a8c89c614881ab6594601f54f4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities.meta new file mode 100644 index 00000000..755a2aea --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3046d47b6921d4f5e8210ffad4508e17 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AddUpmPackageRequest.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AddUpmPackageRequest.cs new file mode 100644 index 00000000..787009cd --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AddUpmPackageRequest.cs @@ -0,0 +1,60 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEditor.PackageManager; +using UnityEditor.PackageManager.Requests; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public class AddUpmPackageRequest : AsyncOperation + { + #region Fields + + private AddRequest m_request; + + #endregion + + #region Properties + + public string Identifier { get; set; } + + #endregion + + #region Constructors + + public AddUpmPackageRequest(string identifier) + { + // Set properties + Identifier = identifier; + } + + #endregion + + #region Base class methods + + protected override void OnStart() + { + m_request = Client.Add(Identifier); + } + + protected override void OnUpdate() + { + if (!m_request.IsCompleted) return; + + // Process response + if (m_request.Status == StatusCode.Success) + { + Debug.Log($"Installed package: {m_request.Result.packageId} successfully."); + SetIsCompleted(StatusCode.Success); + } + else if (m_request.Status == StatusCode.Failure) + { + Debug.Log($"Failed to install package: {m_request.Result.packageId}. Error {m_request.Error.message}."); + SetIsCompleted(error: new Error(m_request.Error.message)); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AddUpmPackageRequest.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AddUpmPackageRequest.cs.meta new file mode 100644 index 00000000..13a25911 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AddUpmPackageRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a87b7bce048e1424984e245b62107603 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionData.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionData.cs new file mode 100644 index 00000000..e8b0e7a6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionData.cs @@ -0,0 +1,61 @@ +using Newtonsoft.Json; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor +{ + + public partial class AssemblyDefinitionProxy + { + private struct AssemblyDefinitionData + { + #region Properties + + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("references")] + public string[] References { get; set; } + + [JsonProperty("optionalUnityReferences")] + public string[] OptionalUnityReferences { get; set; } + + [JsonProperty("includePlatforms")] + public string[] IncludePlatforms { get; set; } + + [JsonProperty("excludePlatforms")] + public string[] ExcludePlatforms { get; set; } + + [JsonProperty("allowUnsafeCode")] + public bool AllowUnsafeCode { get; set; } + + [JsonProperty("overrideReferences")] + public bool OverrideReferences { get; set; } + + [JsonProperty("precompiledReferences")] + public string[] PrecompiledReferences { get; set; } + + [JsonProperty("autoReferenced")] + public bool AutoReferenced { get; set; } + + [JsonProperty("defineConstraints")] + public string[] DefineConstraints { get; set; } + + #endregion + + #region Public methods + + public static AssemblyDefinitionData Load(string dataString) + { + return JsonConvert.DeserializeObject(dataString); + } + + public string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + #endregion + } + + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionData.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionData.cs.meta new file mode 100644 index 00000000..b03acc20 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6f335c720b36b4411b4d54550b2e94d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionProxy.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionProxy.cs new file mode 100644 index 00000000..c4c46748 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionProxy.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor +{ + + public partial class AssemblyDefinitionProxy + { + + private AssemblyDefinitionData m_data; + private string m_directoryPath; + + public AssemblyDefinitionProxy(string assemblyDirectoryPath) + { + string asmdefFile = Directory.GetFiles(assemblyDirectoryPath, "*.asmdef").FirstOrDefault(); + + if (string.IsNullOrEmpty(asmdefFile)) + { + throw new VBException($"No .asmdef file found in {assemblyDirectoryPath} directory."); + } + + m_directoryPath = assemblyDirectoryPath; + string contents = IOServices.ReadFile(asmdefFile); + m_data = AssemblyDefinitionData.Load(contents); + } + + public void IncludeAllPlatforms() + { + m_data.ExcludePlatforms = new string[0]; + m_data.IncludePlatforms = new string[0]; + } + + public void ExcludeAllPlatforms() + { + AssemblyDefinitionPlatform[] platforms = CompilationPipeline.GetAssemblyDefinitionPlatforms(); + m_data.ExcludePlatforms = platforms.Select(platform => platform.Name).ToArray(); + m_data.IncludePlatforms = new string[0]; + } + + + public void Save() + { + IOServices.CreateFile(IOServices.CombinePath(m_directoryPath, $"{m_data.Name}.asmdef"), m_data.ToJson()); + } + + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionProxy.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionProxy.cs.meta new file mode 100644 index 00000000..c3c90e25 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b5c04f18545af4d43bfe1034aa18a54e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionServices.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionServices.cs new file mode 100644 index 00000000..6a40f2f9 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionServices.cs @@ -0,0 +1,39 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public static class AssemblyDefinitionServices + { + #region Static methods + + public static void CreateDefinition(string path, + string name, + string[] includePlatforms = null, + string[] references = null) + { + string json = $"{{" + + $"\n\t\"name\":\"{name}\"," + + $"\n\t\"includePlatforms\":{Jsonify(includePlatforms)}," + + $"\n\t\"references\":{Jsonify(references)}" + + $"\n}}"; + + if (!IOServices.DirectoryExists(path)) + { + IOServices.CreateDirectory(path); + } + + IOServices.CreateFile(IOServices.CombinePath(path, $"{name}.asmdef"), json); + } + + private static string Jsonify(string[] array) + { + if (array == null) return "[]"; + + return $"[{string.Join(",", System.Array.ConvertAll(array, (item) => $"\"{item}\""))}]"; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionServices.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionServices.cs.meta new file mode 100644 index 00000000..c9bead51 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssemblyDefinitionServices.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f85adcf2acaf49838d6c77837b24ca1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssetDatabaseUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssetDatabaseUtility.cs new file mode 100644 index 00000000..708a8ec6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssetDatabaseUtility.cs @@ -0,0 +1,90 @@ +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public static class AssetDatabaseUtility + { + #region Resources methods + + public static void CreateFolder(string folder) + { + var pathComponents = folder.Split('/'); + + string currentPath = string.Empty; + for (int iter = 0; iter < pathComponents.Length; iter++) + { + string component = pathComponents[iter]; + string newPath = Path.Combine(currentPath, component); + if (!AssetDatabase.IsValidFolder(newPath)) + { + AssetDatabase.CreateFolder(currentPath, component); + } + + // update path + currentPath = newPath; + } + } + + public static void CreateAssetAtPath(Object asset, + string assetPath) + { + // create container folder + string parentFolder = assetPath.Substring(0, assetPath.LastIndexOf('/')); + CreateFolder(parentFolder); + + // create asset + AssetDatabase.CreateAsset(asset, assetPath); + } + + public static T CreateScriptableObject(string assetPath, + System.Func createFunc = null, + System.Action onInit = null) where T : ScriptableObject + { + var instance = (createFunc != null) + ? createFunc() + : ScriptableObject.CreateInstance(); + onInit?.Invoke(instance); + + // create file + CreateAssetAtPath(instance, assetPath); + AssetDatabase.Refresh(); + + return instance; + } + + public static T LoadScriptableObject(string assetPath, + System.Action onLoad = null, + System.Func throwErrorFunc = null) where T : ScriptableObject + { + var instance = AssetDatabase.LoadAssetAtPath(assetPath); + if (instance) + { + onLoad?.Invoke(instance); + return instance; + } + + if (throwErrorFunc != null) + { + throw throwErrorFunc(); + } + + return null; + } + + public static T[] FindAssetObjects() where T : ScriptableObject + { + var guids = AssetDatabase.FindAssets($"t:{typeof(T).Name}"); + return System.Array.ConvertAll(guids, (item) => + { + string path = AssetDatabase.GUIDToAssetPath(item); + return AssetDatabase.LoadAssetAtPath(path); + }); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssetDatabaseUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssetDatabaseUtility.cs.meta new file mode 100644 index 00000000..870fd8dc --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/AssetDatabaseUtility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ab0d5c5a093844a80ae39b5d66ab9164 +timeCreated: 1576669974 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/DeleteAssetRequest.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/DeleteAssetRequest.cs new file mode 100644 index 00000000..5b6ce3d0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/DeleteAssetRequest.cs @@ -0,0 +1,39 @@ +using UnityEngine; +using System.Collections; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public class DeleteAssetRequest : AsyncOperation + { + #region Properties + + public string Path { get; private set; } + + #endregion + + #region Constructors + + public DeleteAssetRequest(string path) + { + Path = path; + } + + #endregion + + #region Base class methods + + protected override void OnStart() + { + if (!AssetDatabase.DeleteAsset(Path)) + { + SetIsCompleted(new Error("File not found.")); + return; + } + SetIsCompleted(true); + } + + #endregion + + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/DeleteAssetRequest.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/DeleteAssetRequest.cs.meta new file mode 100644 index 00000000..285677f6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/DeleteAssetRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2204697bc932f4f28b4dad14e5c29724 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/EditorApplicationUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/EditorApplicationUtility.cs new file mode 100644 index 00000000..8d77c0e0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/EditorApplicationUtility.cs @@ -0,0 +1,31 @@ +using UnityEditor; +using UnityEngine; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public static class EditorApplicationUtility + { + #region Platform methods + + public static RuntimePlatform ConvertBuildTargetToRuntimePlatform(BuildTarget buildTarget) + { + switch (buildTarget) + { + case BuildTarget.iOS: + return RuntimePlatform.IPhonePlayer; + + case BuildTarget.tvOS: + return RuntimePlatform.tvOS; + + case BuildTarget.Android: + return RuntimePlatform.Android; + + default: + return (RuntimePlatform)(-1); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/EditorApplicationUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/EditorApplicationUtility.cs.meta new file mode 100644 index 00000000..9db91778 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/EditorApplicationUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f0eb0657c7f942c6a847903ed852752 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/ImportPackageRequest.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/ImportPackageRequest.cs new file mode 100644 index 00000000..7314867e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/ImportPackageRequest.cs @@ -0,0 +1,40 @@ +using UnityEngine; +using System.Collections; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public class ImportPackageRequest : VoxelBusters.CoreLibrary.AsyncOperation + { + #region Properties + + public string Path { get; private set; } + + #endregion + + #region Constructors + + public ImportPackageRequest(string path) + { + Path = path; + } + + #endregion + + #region Base class methods + + protected override void OnStart() + { + if (!IOServices.FileExists(Path)) + { + SetIsCompleted(new Error("File not found.")); + return; + } + + AssetDatabase.ImportPackage(Path, interactive: false); + SetIsCompleted(true); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/ImportPackageRequest.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/ImportPackageRequest.cs.meta new file mode 100644 index 00000000..05a2946d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/ImportPackageRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a33d068e4b51149e08021407780741d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/RemoveUpmPackageRequest.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/RemoveUpmPackageRequest.cs new file mode 100644 index 00000000..d36aa11e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/RemoveUpmPackageRequest.cs @@ -0,0 +1,60 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEditor.PackageManager; +using UnityEditor.PackageManager.Requests; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public class RemoveUpmPackageRequest : AsyncOperation + { + #region Fields + + private RemoveRequest m_request; + + #endregion + + #region Properties + + public string Identifier { get; set; } + + #endregion + + #region Constructors + + public RemoveUpmPackageRequest(string identifier) + { + // Set properties + Identifier = identifier; + } + + #endregion + + #region Base class methods + + protected override void OnStart() + { + m_request = Client.Remove(Identifier); + } + + protected override void OnUpdate() + { + if (!m_request.IsCompleted) return; + + // Process response + if (m_request.Status == StatusCode.Success) + { + Debug.Log($"Installed package: {m_request.PackageIdOrName} successfully."); + SetIsCompleted(m_request.Status); + } + else if (m_request.Status >= StatusCode.Failure) + { + Debug.Log($"Failed to install package: {m_request.PackageIdOrName}. Error {m_request.Error.message}."); + SetIsCompleted(error: new Error(m_request.Error.message)); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/RemoveUpmPackageRequest.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/RemoveUpmPackageRequest.cs.meta new file mode 100644 index 00000000..87a6e7f3 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/RemoveUpmPackageRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b5ea45e566aa3452aa8db2aa084333c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/TypeCache.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/TypeCache.cs new file mode 100644 index 00000000..5f7ece94 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/TypeCache.cs @@ -0,0 +1,122 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public class TypeCache + { + #region Static fields + + private static Dictionary s_typeMap; + + private static bool s_isDirty; + + #endregion + + #region Static methods + + public static void Rebuild() + { + // Reset properties + s_isDirty = true; + s_typeMap?.Clear(); + + EnsureCacheIsUpdated(); + } + + public static Dictionary GetMembersWithAttribute(MemberTypes memberTypes, BindingFlags bindingAttr) + where TAttribute : Attribute + { + return GetMembersWithAttribute(memberTypes, bindingAttr); + } + + public static Dictionary GetFieldsWithAttribute(BindingFlags bindingAttr) where TAttribute : Attribute + { + return GetMembersWithAttribute(MemberTypes.Field, bindingAttr); + } + + public static Dictionary GetPropertiesWithAttribute(BindingFlags bindingAttr) where TAttribute : Attribute + { + return GetMembersWithAttribute(MemberTypes.Property, bindingAttr); + } + + public static Dictionary GetEventsWithAttribute(BindingFlags bindingAttr) where TAttribute : Attribute + { + return GetMembersWithAttribute(MemberTypes.Event, bindingAttr); + } + + public static Dictionary GetMethodsWithAttribute(BindingFlags bindingAttr) where TAttribute : Attribute + { + return GetMembersWithAttribute(MemberTypes.Method, bindingAttr); + } + + #endregion + + #region Private methods + + private static void EnsureCacheIsUpdated() + { + if (!s_isDirty) return; + + // Initialize object + s_isDirty = false; + if (s_typeMap == null) + { + s_typeMap = new Dictionary(capacity: 1024); + } + + // Add types to the cache + foreach (var type in ReflectionUtility.FindAllTypes()) + { + s_typeMap.Add(type, type.FullName); + } + } + + private static Dictionary GetMembersWithAttribute(MemberTypes memberTypes, BindingFlags bindingAttr) + where TMemberInfo : MemberInfo + where TAttribute : Attribute + { + EnsureCacheIsUpdated(); + + // Find all the methods with specified attribute + var attributeType = typeof(TAttribute); + var collection = new Dictionary(); + foreach (var mapItem in s_typeMap) + { + var currentType = mapItem.Key; + + AddMembersWithRequiredAttributes(currentType); + + //When we create a "concrete" class derived from a generic class, it will internally constructs a new class (replacing generic parameters with actual types). We need to query this type for required attributes as well. + if (IsConstructedClosedGenericType(currentType.BaseType)) + { + AddMembersWithRequiredAttributes(currentType.BaseType); + } + } + return collection; + + void AddMembersWithRequiredAttributes(Type type) + { + var members = type.FindMembers(memberTypes, bindingAttr, null, null); + foreach (var memberInfo in members) + { + var attributes = memberInfo.GetCustomAttributes(attributeType, false); + if (attributes.IsNullOrEmpty()) continue; + + collection.Add(memberInfo as TMemberInfo, attributes[0] as TAttribute); + } + } + + } + + private static bool IsConstructedClosedGenericType(Type type) + { + return type != null && type.IsConstructedGenericType && !type.ContainsGenericParameters; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/TypeCache.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/TypeCache.cs.meta new file mode 100644 index 00000000..42e4a00c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/TypeCache.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d14cdf5aeeb847f0ac54ffd5c03ae1d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/UnityPackageServices.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/UnityPackageServices.cs new file mode 100644 index 00000000..200f716f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/UnityPackageServices.cs @@ -0,0 +1,89 @@ +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public static class UnityPackageServices + { + #region Constants + + private static readonly string[] s_staticFolders = + { + "Essentials", + "Examples", + "Extras", + "Plugins", + "Scripts" + }; + + #endregion + + #region Static methods + + [System.Obsolete("This method is deprecated. Use MigrateToUpm instead.")] + public static void MigrateToUPM(this UnityPackageDefinition package) + { + MovePackageToUpmRecursively(package, refreshOnFinish: true); + } + + public static void MigrateToUpm(this UnityPackageDefinition package) + { + MovePackageToUpmRecursively(package, refreshOnFinish: true); + } + + private static void MovePackageToUpmRecursively(this UnityPackageDefinition package, bool refreshOnFinish) + { + try + { + // Move dependencies + foreach (var dependency in package.Dependencies) + { + MovePackageToUpmRecursively(dependency, refreshOnFinish: false); + } + + // Move main package + MovePackageToUpm(package); + } + finally + { + if (refreshOnFinish) + { + AssetDatabase.Refresh(); + } + } + } + + private static void MovePackageToUpm(UnityPackageDefinition package) + { + // Confirm that package exists in default install path + if (!package.IsInstalledWithinAssets()) return; + + // Move files and folders to new path + var sourceDirectory = new DirectoryInfo(package.DefaultInstallPath); + IOServices.CreateDirectory(package.UpmInstallPath); + foreach (var file in sourceDirectory.GetFiles()) + { + var fileName = file.Name; + if (System.Array.Exists(s_staticFolders, (item) => string.Equals(fileName, $"{item}.meta"))) + { + continue; + } + IOServices.MoveFile(file.FullName, $"{package.UpmInstallPath}/{fileName}"); + } + foreach (var subDirectory in sourceDirectory.GetDirectories()) + { + var subDirectoryName = subDirectory.Name; + if (System.Array.Exists(s_staticFolders, (item) => string.Equals(subDirectoryName, item))) + { + continue; + } + IOServices.MoveDirectory(subDirectory.FullName, $"{package.UpmInstallPath}/{subDirectoryName}"); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/UnityPackageServices.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/UnityPackageServices.cs.meta new file mode 100644 index 00000000..5ae39ed1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/Utilities/UnityPackageServices.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4667b4f0e71ec4791afd9f9d887a0c96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/VoxelBusters.CoreLibrary.Editor.asmdef b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/VoxelBusters.CoreLibrary.Editor.asmdef new file mode 100644 index 00000000..11593388 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/VoxelBusters.CoreLibrary.Editor.asmdef @@ -0,0 +1,16 @@ +{ + "name": "VoxelBusters.CoreLibrary.Editor", + "references": [ + "VoxelBusters.CoreLibrary" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/VoxelBusters.CoreLibrary.Editor.asmdef.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/VoxelBusters.CoreLibrary.Editor.asmdef.meta new file mode 100644 index 00000000..3984fd02 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/CoreLibrary/VoxelBusters.CoreLibrary.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2e305d2a5092a465db2a72838d17a500 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental.meta new file mode 100644 index 00000000..6859c8c1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e4381b029b7441f28679a1978aee2bf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors.meta new file mode 100644 index 00000000..1f19ec2a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d402a199f95044159bdc2107cdcd3334 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/InstallPath.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/InstallPath.cs new file mode 100644 index 00000000..f3780112 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/InstallPath.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.Experimental +{ + public static class InstallPath + { + #region Static properties + + public static string EssentialKit { get; private set; } = "https://link.voxelbusters.com/essential-kit"; + + public static string ScreenRecorderKit { get; private set; } = "https://link.voxelbusters.com/screen-recorder-kit"; + + public static string SocialKit { get; private set; } = "https://link.voxelbusters.com/social-kit"; + + public static string MLKit { get; private set; } = "https://link.voxelbusters.com/easy-ml-kit"; + + public static string ReportingKit { get; private set; } = "https://link.voxelbusters.com/reporting-kit"; + + public static string AdsKit { get; private set; } = "https://link.voxelbusters.com/ads-kit"; + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/InstallPath.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/InstallPath.cs.meta new file mode 100644 index 00000000..2b07a2db --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/InstallPath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ccdff37e3ee3d41f794ef3d1b107b01d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxyMenuManager.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxyMenuManager.cs new file mode 100644 index 00000000..e84fe793 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxyMenuManager.cs @@ -0,0 +1,65 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor.Experimental +{ + public static class ProxyMenuManager + { + #region Constants + + private const string kMenuItemPath = "Window/Voxel Busters"; + + #endregion + + #region Static methods + +#if !ENABLE_VOXELBUSTERS_ESSENTIAL_KIT + [MenuItem(kMenuItemPath + "/Essential Kit/Learn More", priority = 0)] + public static void InstallEssentialKit() + { + OpenInstallPath(InstallPath.EssentialKit); + } +#endif + +#if !ENABLE_VOXELBUSTERS_SCREEN_RECORDER_KIT + [MenuItem(kMenuItemPath + "/Screen Recorder Kit/Learn More", priority = 0)] + public static void InstallScreenRecorderKit() + { + OpenInstallPath(InstallPath.ScreenRecorderKit); + } +#endif + +#if !ENABLE_VOXELBUSTERS_SOCIAL_KIT + [MenuItem(kMenuItemPath + "/Social Kit/Learn More", priority = 0)] + public static void InstallSocialKit() + { + OpenInstallPath(InstallPath.SocialKit); + } +#endif + +#if !ENABLE_VOXELBUSTERS_ML_KIT + [MenuItem(kMenuItemPath + "/ML Kit/Learn More", priority = 0)] + public static void InstallMLKit() + { + OpenInstallPath(InstallPath.MLKit); + } +#endif + +#if !ENABLE_VOXELBUSTERS_REPORTING_KIT + [MenuItem(kMenuItemPath + "/Reporting Kit/Learn More", priority = 0)] + public static void InstallReportingKit() + { + OpenInstallPath(InstallPath.ReportingKit); + } +#endif + + private static void OpenInstallPath(string path) + { + Application.OpenURL(path); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxyMenuManager.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxyMenuManager.cs.meta new file mode 100644 index 00000000..2bce9a42 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxyMenuManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d5313a9f9e1b4bcdb89c991f700da78 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxySettingsProvider.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxySettingsProvider.cs new file mode 100644 index 00000000..026eb27b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxySettingsProvider.cs @@ -0,0 +1,115 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.Experimental +{ + public class ProxySettingsProvider : SettingsProvider + { + #region Constants + + private const string kDefaultInstallMessageFormat = "In order to use {0} system you need to install the {0} package. Clicking the button below will install {0} package and allow you to configure."; + + private const string kDefaultProjectSettingsPathFormat = "Project/Voxel Busters/{0}"; + + #endregion + + #region Fields + + private string m_installMessage; + + private string m_installButtonLabel; + + private string m_installUrl; + + #endregion + + #region Constructors + + public ProxySettingsProvider(string name, + string installUrl, + string path = null, + SettingsScope scopes = SettingsScope.Project) + : base(path ?? string.Format(kDefaultProjectSettingsPathFormat, name), scopes) + { + // set properties + m_installMessage = string.Format(kDefaultInstallMessageFormat, name); + m_installButtonLabel = $"Install {name}"; + m_installUrl = installUrl; + } + + #endregion + + #region Create methods + +#if !ENABLE_VOXELBUSTERS_ESSENTIAL_KIT + [SettingsProvider] + private static SettingsProvider CreateEssentialKitSettingsProvider() + { + return new ProxySettingsProvider(name: "Essential Kit", + installUrl: InstallPath.EssentialKit); + } +#endif + +#if !ENABLE_VOXELBUSTERS_SCREEN_RECORDER_KIT + [SettingsProvider] + private static SettingsProvider CreateScreenRecorderKitSettingsProvider() + { + return new ProxySettingsProvider(name: "Screen Recorder Kit", + installUrl: InstallPath.ScreenRecorderKit); + } +#endif + +#if !ENABLE_VOXELBUSTERS_SOCIAL_KIT + [SettingsProvider] + private static SettingsProvider CreateSocialKitSettingsProvider() + { + return new ProxySettingsProvider(name: "Social Kit", + installUrl: InstallPath.SocialKit); + } +#endif + +#if !ENABLE_VOXELBUSTERS_ML_KIT + [SettingsProvider] + private static SettingsProvider CreateMLKitSettingsProvider() + { + return new ProxySettingsProvider(name: "ML Kit", + installUrl: InstallPath.MLKit); + } +#endif + +#if !ENABLE_VOXELBUSTERS_REPORTING_KIT + [SettingsProvider] + private static SettingsProvider CreateReportingKitSettingsProvider() + { + return new ProxySettingsProvider(name: "Reporting Kit", + installUrl: InstallPath.ReportingKit); + } +#endif + +#if !ENABLE_VOXELBUSTERS_ADS_KIT + [SettingsProvider] + private static SettingsProvider CreateAdsKitSettingsProvider() + { + return new ProxySettingsProvider(name: "Ads Kit", + installUrl: InstallPath.AdsKit); + } +#endif + + #endregion + + #region Base class methods + + public override void OnGUI(string searchContext) + { + EditorGUILayout.HelpBox(m_installMessage, MessageType.Info); + if (GUILayout.Button(m_installButtonLabel)) + { + Application.OpenURL(m_installUrl); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxySettingsProvider.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxySettingsProvider.cs.meta new file mode 100644 index 00000000..d3cd2abc --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/Inspectors/ProxySettingsProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3cf9ccd372c74ed1a07c9da30675268 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/PackageServices.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/PackageServices.meta new file mode 100644 index 00000000..eafb076e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/PackageServices.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eb5fe327595d0453e96752fdceb6dced +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/PackageServices/AssetPackageDependencyResolver.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/PackageServices/AssetPackageDependencyResolver.cs new file mode 100644 index 00000000..c2c9604c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/PackageServices/AssetPackageDependencyResolver.cs @@ -0,0 +1,163 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using UnityEditor.Compilation; +using System.IO; +using System; + +using JsonUtility = VoxelBusters.CoreLibrary.Parser.JsonUtility; + +namespace VoxelBusters.CoreLibrary.Editor.Experimental +{ + /* + public class UnityPackageManifestKey + { + public const string kDependencies = "dependencies"; + } + + public class AssetPackageDependencyResolver : AssetPostprocessor + { + #region Constants + + private const string kMainManifestPath = "Packages/manifest.json"; + + #endregion + + #region Fields + + private static Dictionary s_mainManifestDict; + + #endregion + + #region Static methods + + [MenuItem("Window/Voxel Busters/Asset Packages/Resolve Dependency")] + public static void Resolve() + { + var assetManifestFiles = Array.FindAll( + Array.ConvertAll(AssetDatabase.FindAssets("package"), (guid) => AssetDatabase.GUIDToAssetPath(guid)), + (assetPath) => IsPackageManifest(assetPath)); + if (assetManifestFiles.Length > 0) + { + AddMissingDependencies(assetManifestFiles); + } + } + + #endregion + + #region Private static methods + + private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) + { + var assetManifestFiles = Array.FindAll( + importedAssets, + (assetPath) => IsPackageManifest(assetPath)); + AddMissingDependencies(assetManifestFiles); + } + + private static bool IsPackageManifest(string assetPath) + { + return assetPath.StartsWith("Assets") && string.Equals(Path.GetFileName(assetPath), "package.json"); + } + + private static void AddMissingDependencies(string[] assetManifestFiles) + { + // Gather all the dependencies from the packages installed in Assets + // Manually add them to project manifest file + var registeredDependencies = GetOrCreateMainManifestObject()[UnityPackageManifestKey.kDependencies] as Dictionary; + var newDependencies = new List>(); + foreach (var file in assetManifestFiles) + { + var assetManifestDict = OpenManifestAsObject(file); + if (assetManifestDict.TryGetValue(UnityPackageManifestKey.kDependencies, out object assetDependencies)) + { + var assetDependenciesDict = assetDependencies as Dictionary; + foreach (var dependency in assetDependenciesDict) + { + if (registeredDependencies.ContainsKey(dependency.Key)) continue; + + AddDependencyToList(ref newDependencies, dependency.Key, (string)dependency.Value); + } + } + } + + // Check whether we have any unregisted dependecies + if (newDependencies.Count > 0) + { + EditorApplication.delayCall += () => + { + PromptUserToMergeDependency(newDependencies); + }; + } + } + + private static void AddDependencyToList(ref List> list, string name, string versionOrPath) + { + int existingItemIndex; + if ((existingItemIndex = list.FindIndex((item) => string.Equals(item.Key, name))) == -1) + { + list.Add(new KeyValuePair(name, versionOrPath)); + } + else if (string.Compare(list[existingItemIndex].Value, versionOrPath) >= 0) + { + list[existingItemIndex] = new KeyValuePair(name, versionOrPath); + } + } + + private static Dictionary OpenManifestAsObject(string path) + { + var contents = File.ReadAllText(path); + return JsonUtility.FromJson(contents) as Dictionary; + } + + private static Dictionary GetOrCreateMainManifestObject() + { + if (s_mainManifestDict == null) + { + s_mainManifestDict = OpenManifestAsObject(kMainManifestPath); + } + return s_mainManifestDict; + } + + private static void PromptUserToMergeDependency(List> dependencies) + { + if (EditorUtility.DisplayDialog( + title: "Resolve Dependencies", + message: "System has detected that there are one or more dependecies used by the Asset-Packages that are missing from the Package-Manifest file. Do you approve adding it to the Package-Manifest file?", + ok: "Ok", + cancel: "Cancel")) + { + PerformMergeDependency(dependencies); + return; + } + } + + private static void PerformMergeDependency(List> values) + { + // Update dependency collection + var contentDict = GetOrCreateMainManifestObject(); + var dependenciesDict = contentDict[UnityPackageManifestKey.kDependencies]as Dictionary; + bool isDirty = false; + foreach (var newValue in values) + { + if (!dependenciesDict.ContainsKey(newValue.Key)) + { + dependenciesDict.Add(newValue.Key, newValue.Value); + isDirty = true; + } + } + + // Save changes + if (isDirty) + { + string jsonStr = JsonUtility.ToJson(contentDict); + File.WriteAllText(kMainManifestPath, jsonStr); + + CompilationPipeline.RequestScriptCompilation(); + } + } + + #endregion + }*/ +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/PackageServices/AssetPackageDependencyResolver.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/PackageServices/AssetPackageDependencyResolver.cs.meta new file mode 100644 index 00000000..c3ff42e3 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/PackageServices/AssetPackageDependencyResolver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5aafeb5c45eb14356b966fa280363556 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/VoxelBusters.CoreLibrary.Editor.Experimental.asmdef b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/VoxelBusters.CoreLibrary.Editor.Experimental.asmdef new file mode 100644 index 00000000..8372c53e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/VoxelBusters.CoreLibrary.Editor.Experimental.asmdef @@ -0,0 +1,17 @@ +{ + "name": "VoxelBusters.CoreLibrary.Editor.Experimental", + "references": [ + "VoxelBusters.CoreLibrary.Parser" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/VoxelBusters.CoreLibrary.Editor.Experimental.asmdef.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/VoxelBusters.CoreLibrary.Editor.Experimental.asmdef.meta new file mode 100644 index 00000000..82be3ee1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/Experimental/VoxelBusters.CoreLibrary.Editor.Experimental.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 894a53a1f4f2e4ecd8784477b7c79b98 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins.meta new file mode 100644 index 00000000..2a4c0caa --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 522fe906ebbf249b7839e750de41a135 +folderAsset: yes +timeCreated: 1550135695 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline.meta new file mode 100644 index 00000000..4af5cc9b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 243da3205fe4a48788f0e8b05b4c2c2a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android.meta new file mode 100644 index 00000000..ddd56d99 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7d0f996992d7a46309a6a9d544415fe9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsManager.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsManager.cs new file mode 100644 index 00000000..df7afebd --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsManager.cs @@ -0,0 +1,48 @@ +#if UNITY_EDITOR && UNITY_ANDROID +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor.Build; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public abstract class AndroidNativePluginsManager : NativePluginsManager + { + +#region Fields + + private AndroidNativePluginsProcessor[] m_pluginsProcessors; + +#endregion + +#region Properties + + private AndroidNativePluginsProcessor[] PluginsProcessors => m_pluginsProcessors ?? (m_pluginsProcessors = FindPluginsProcessors(this)); + +#endregion + + protected override void OnPreprocessNativePlugins() + { + // Send message to complete preprocess actions to all the NativeProcessors + var linkerFileWriter = CreateDefaultLinkXmlWriter(); + + PluginsProcessors.ForEach( + (item) => + { + item.OnCheckConfiguration(); + item.OnUpdateLinkXml(linkerFileWriter); + item.OnAddFiles(); + item.OnAddFolders(); + item.OnAddResources(); + item.OnUpdateConfiguration(); + }); + + linkerFileWriter.WriteToFile(); + } + + protected override void OnPostprocessNativePlugins() + { } + } +} +#endif diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsManager.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsManager.cs.meta new file mode 100644 index 00000000..d56b3d4f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 25c43b475a8384fe88b39fb2a239f6ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsProcessor.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsProcessor.cs new file mode 100644 index 00000000..48a215da --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsProcessor.cs @@ -0,0 +1,10 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public abstract class AndroidNativePluginsProcessor : NativePluginsProcessor + { + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsProcessor.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsProcessor.cs.meta new file mode 100644 index 00000000..0e554b47 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/AndroidNativePluginsProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f1793926f202745898b816170c7fd142 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base.meta new file mode 100644 index 00000000..6d9ad7a0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8ded32878099642168dddc3f67e3c65c +folderAsset: yes +timeCreated: 1548444482 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Attribute.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Attribute.cs new file mode 100644 index 00000000..02da07a1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Attribute.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Attribute + { + public string Key + { + get; + private set; + } + + public string Value + { + get; + private set; + } + + public Attribute(string key, string value) + { + Key = key; + Value = value; + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Attribute.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Attribute.cs.meta new file mode 100644 index 00000000..5344afa2 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Attribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 17400e3226cc646cdb12ab1c73a123f1 +timeCreated: 1548444608 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Element.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Element.cs new file mode 100644 index 00000000..dd6fb762 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Element.cs @@ -0,0 +1,83 @@ +using System.Collections; +using System.Collections.Generic; +using System.Xml; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public abstract class Element + { + private readonly string DefaultNamespace = "http://schemas.android.com/apk/res/android"; + private readonly string ToolsNamespace = "http://schemas.android.com/tools"; + + private List m_attributes; + private List m_children; + + public void AddAttribute(string key, string value) + { + if (m_attributes == null) + m_attributes = new List(); + + m_attributes.Add(new Attribute(key, value)); + } + + protected virtual XmlElement ToXml(XmlDocument xmlDocument) + { + XmlElement element = xmlDocument.CreateElement(GetName()); + if(m_attributes != null) + { + foreach(Attribute attribute in m_attributes) + { + string[] components = attribute.Key.Split(':'); + + if (attribute.Key.Contains("xmlns") || components.Length == 1) + { + element.SetAttribute(attribute.Key, attribute.Value); + } + else + { + XmlAttribute newAttribute = xmlDocument.CreateAttribute(components[0], components[1], GetNamespace(components[0])); + newAttribute.Value = attribute.Value; + element.Attributes.Append(newAttribute); + } + } + } + + if (m_children != null) + { + foreach(Element eachChild in m_children) + { + XmlElement xmlElement = eachChild.ToXml(xmlDocument); + element.AppendChild(xmlElement); + } + } + + return element; + } + + protected virtual void Add(Element element) + { + if(m_children == null) + m_children = new List(); + + m_children.Add(element); + } + + protected abstract string GetName(); + + private string GetNamespace(string key) + { + switch(key) + { + case "android": + return DefaultNamespace; + + case "tools": + return ToolsNamespace; + + default: + return DefaultNamespace; + } + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Element.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Element.cs.meta new file mode 100644 index 00000000..ef29ef6d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Base/Element.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2078df9b0a3fc451697d7360ff3f57ed +timeCreated: 1548444689 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest.meta new file mode 100644 index 00000000..019461c4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0ee003c1d097842c1983476206d2e716 +folderAsset: yes +timeCreated: 1548444490 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application.meta new file mode 100644 index 00000000..1048e33f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 99c9f2098af0f486f8e0356dc1a8e12b +folderAsset: yes +timeCreated: 1548444499 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity.meta new file mode 100644 index 00000000..0463b325 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4622b6efb31304bff974d474f3e5b985 +folderAsset: yes +timeCreated: 1548483399 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Activity.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Activity.cs new file mode 100644 index 00000000..c59f1651 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Activity.cs @@ -0,0 +1,21 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Activity : AppComponent + { + public Layout Layout + { + get; + set; + } + + protected override string GetName() + { + return "activity"; + } + } +} + diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Activity.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Activity.cs.meta new file mode 100644 index 00000000..e2ad26ee --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Activity.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4adb85b5365824c30bebce1f978bd6e8 +timeCreated: 1548483092 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Layout.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Layout.cs new file mode 100644 index 00000000..51848ad5 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Layout.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Layout : Element + { + protected override string GetName() + { + return "layout"; + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Layout.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Layout.cs.meta new file mode 100644 index 00000000..4117259a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Activity/Layout.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e6cbd4f6aa11042f88eaacbaec383b24 +timeCreated: 1548483310 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/ActivityAlias.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/ActivityAlias.cs new file mode 100644 index 00000000..a915c5f1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/ActivityAlias.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class ActivityAlias : Element + { + protected override string GetName() + { + return "activity-alias"; + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/ActivityAlias.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/ActivityAlias.cs.meta new file mode 100644 index 00000000..a56437df --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/ActivityAlias.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5e9bdef9d449e4a5587b9a29db7174b2 +timeCreated: 1548483134 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/AppComponent.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/AppComponent.cs new file mode 100644 index 00000000..8b4a331d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/AppComponent.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public abstract class AppComponent : Element + { + public void Add(IntentFilter element) + { + base.Add(element); + } + + public void Add(MetaData element) + { + base.Add(element); + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/AppComponent.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/AppComponent.cs.meta new file mode 100644 index 00000000..38d647d1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/AppComponent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cc0bee06d83824f4c8c52bc0e7f898dc +timeCreated: 1548491334 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Application.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Application.cs new file mode 100644 index 00000000..79547f10 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Application.cs @@ -0,0 +1,47 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Application : Element + { + public void Add(Activity element) + { + base.Add(element); + } + + public void Add(ActivityAlias element) + { + base.Add(element); + } + + public void Add(MetaData element) + { + base.Add(element); + } + public void Add(Service element) + { + base.Add(element); + } + public void Add(Receiver element) + { + base.Add(element); + } + + public void Add(Provider element) + { + base.Add(element); + } + + public void Add(Library element) + { + base.Add(element); + } + + protected override string GetName() + { + return "application"; + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Application.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Application.cs.meta new file mode 100644 index 00000000..6ee5ffc5 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Application.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2236ad04de1314d18b9cffdc19d6bf15 +timeCreated: 1548483051 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common.meta new file mode 100644 index 00000000..1c4923bf --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d86431439e58e4516b6f22c3bd435770 +folderAsset: yes +timeCreated: 1548483291 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters.meta new file mode 100644 index 00000000..eeee247b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c6bd51876a05b485bbf0cf6fdf3cb497 +folderAsset: yes +timeCreated: 1548444591 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Action.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Action.cs new file mode 100644 index 00000000..34338a60 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Action.cs @@ -0,0 +1,15 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Action : Element + { + protected override string GetName() + { + return "action"; + } + } +} + diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Action.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Action.cs.meta new file mode 100644 index 00000000..9fa2f634 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Action.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b980d757d95044a1aa597f284c415618 +timeCreated: 1548483534 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Category.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Category.cs new file mode 100644 index 00000000..6fc88fcb --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Category.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Category : Element + { + protected override string GetName() + { + return "category"; + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Category.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Category.cs.meta new file mode 100644 index 00000000..25a068c4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Category.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: baa14fb8a8b82420e813d1731048c4a3 +timeCreated: 1548483540 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Data.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Data.cs new file mode 100644 index 00000000..6a9c1fd0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Data.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Data : Element + { + protected override string GetName() + { + return "data"; + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Data.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Data.cs.meta new file mode 100644 index 00000000..afbcbe59 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/Data.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cb063e23bc367448f8102dd5dab301ee +timeCreated: 1548483545 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/IntentFilter.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/IntentFilter.cs new file mode 100644 index 00000000..a3460e95 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/IntentFilter.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class IntentFilter : Element + { + public void Add(Action action) + { + base.Add(action); + } + + public void Add(Category category) + { + base.Add(category); + } + + public void Add(Data data) + { + base.Add(data); + } + + protected override string GetName() + { + return "intent-filter"; + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/IntentFilter.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/IntentFilter.cs.meta new file mode 100644 index 00000000..ec610a5f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/IntentFilters/IntentFilter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d9272bed66e404926959c512c79b713e +timeCreated: 1548483478 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/MetaData.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/MetaData.cs new file mode 100644 index 00000000..8a22583d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/MetaData.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class MetaData : Element + { + protected override string GetName() + { + return "meta-data"; + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/MetaData.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/MetaData.cs.meta new file mode 100644 index 00000000..e1909980 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Common/MetaData.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: af6a72eb2058445a4a233250af8b0a84 +timeCreated: 1548483301 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Library.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Library.cs new file mode 100644 index 00000000..a75e4eba --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Library.cs @@ -0,0 +1,15 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Library : Element + { + protected override string GetName() + { + return "uses-library"; + } + } +} + diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Library.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Library.cs.meta new file mode 100644 index 00000000..699cfcf3 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Library.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b7deaaef3d971425a8a32b8650f21568 +timeCreated: 1548483114 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider.meta new file mode 100644 index 00000000..81ed3c10 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4741445c118a840e2b5e972866f5d3df +folderAsset: yes +timeCreated: 1548504615 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/GrantURIPermission.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/GrantURIPermission.cs new file mode 100644 index 00000000..c1e7d601 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/GrantURIPermission.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class GrantUriPermission : Element + { + protected override string GetName() + { + return "grant-uri-permission"; + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/GrantURIPermission.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/GrantURIPermission.cs.meta new file mode 100644 index 00000000..27dcc7f8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/GrantURIPermission.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7b07cd910e6be4553a135272f91d9f07 +timeCreated: 1548504627 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/PathPermission.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/PathPermission.cs new file mode 100644 index 00000000..be70b369 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/PathPermission.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class PathPermission : Element + { + protected override string GetName() + { + return "path-permission"; + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/PathPermission.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/PathPermission.cs.meta new file mode 100644 index 00000000..991c560e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/PathPermission.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b6bcf71e231bf480fadab94f9ab54eb0 +timeCreated: 1548504643 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/Provider.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/Provider.cs new file mode 100644 index 00000000..24d22313 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/Provider.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Provider : Element + { + public void Add(MetaData element) + { + base.Add(element); + } + + protected override string GetName() + { + return "provider"; + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/Provider.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/Provider.cs.meta new file mode 100644 index 00000000..1b8fc0cd --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Provider/Provider.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e78bc9d4fdf754e07a32907facc984aa +timeCreated: 1548483109 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Receiver.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Receiver.cs new file mode 100644 index 00000000..65ad789a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Receiver.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Receiver : AppComponent + { + protected override string GetName() + { + return "receiver"; + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Receiver.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Receiver.cs.meta new file mode 100644 index 00000000..11633006 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Receiver.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 504b08d54874f469a9d64a4e11a612ab +timeCreated: 1548483103 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Service.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Service.cs new file mode 100644 index 00000000..2a9c82be --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Service.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Service : AppComponent + { + protected override string GetName() + { + return "service"; + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Service.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Service.cs.meta new file mode 100644 index 00000000..34ac66b0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Application/Service.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7417a612ca54045af8a5cc32e2e90883 +timeCreated: 1548483098 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/CompatibleScreens.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/CompatibleScreens.cs new file mode 100644 index 00000000..f36407db --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/CompatibleScreens.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class CompatibleScreens : Element + { + public void Add(Screen element) + { + base.Add(element); + } + protected override string GetName() + { + return "compatible-screens"; + } + + public class Screen : Element + { + protected override string GetName() + { + return "screen"; + } + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/CompatibleScreens.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/CompatibleScreens.cs.meta new file mode 100644 index 00000000..69249aee --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/CompatibleScreens.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: aff57dee9ad4e4bd1abe823cedafe291 +timeCreated: 1548505477 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Configuration.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Configuration.cs new file mode 100644 index 00000000..a3f42264 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Configuration.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Configuration : Element + { + protected override string GetName() + { + return "configuration"; + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Configuration.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Configuration.cs.meta new file mode 100644 index 00000000..d8939106 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Configuration.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e5af08ca249f147e0b318aff8ba412c5 +timeCreated: 1548481286 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Feature.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Feature.cs new file mode 100644 index 00000000..9ae69fee --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Feature.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Feature : Element + { + protected override string GetName() + { + return "uses-feature"; + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Feature.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Feature.cs.meta new file mode 100644 index 00000000..31c6a070 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Feature.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2bdb9e995965349f48ccd6dd8bcf4409 +timeCreated: 1548481308 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Instrumentation.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Instrumentation.cs new file mode 100644 index 00000000..81b633c1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Instrumentation.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Instrumentation : Element + { + protected override string GetName() + { + return "instrumentation"; + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Instrumentation.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Instrumentation.cs.meta new file mode 100644 index 00000000..3296c086 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Instrumentation.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f2933ec077ea14403aa9fefa241e6f2d +timeCreated: 1548481247 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Manifest.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Manifest.cs new file mode 100644 index 00000000..1ac4551e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Manifest.cs @@ -0,0 +1,79 @@ +using System.Collections; +using System.Collections.Generic; +using System.Xml; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Manifest : Element + { + public void Add(Application element) + { + base.Add(element); + } + + public void Add(Permission element) + { + base.Add(element); + } + + public void Add(Feature element) + { + base.Add(element); + } + + public void Add(Configuration element) + { + base.Add(element); + } + + public void Add(SupportedGLTexture element) + { + base.Add(element); + } + + public void Add(PermissionGroup element) + { + base.Add(element); + } + + public void Add(PermissionTree element) + { + base.Add(element); + } + + public void Add(Instrumentation element) + { + base.Add(element); + } + + public void Add(CompatibleScreens element) + { + base.Add(element); + } + + public void Add(SupportedScreens element) + { + base.Add(element); + } + + public void Add(SDK element) + { + base.Add(element); + } + + public void Add(Queries queries) + { + base.Add(queries); + } + + public XmlElement GenerateXml(XmlDocument xmlDocument) + { + return base.ToXml(xmlDocument); + } + + protected override string GetName() + { + return "manifest"; + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Manifest.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Manifest.cs.meta new file mode 100644 index 00000000..6368625a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Manifest.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8c08fc6d6e87349f99270844bbb2b4a2 +timeCreated: 1548481173 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Permission.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Permission.cs new file mode 100644 index 00000000..6866387d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Permission.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Permission : Element + { + protected override string GetName() + { + return "uses-permission"; + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Permission.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Permission.cs.meta new file mode 100644 index 00000000..c6335b89 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Permission.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ba24f4210505a493182a49b82df92984 +timeCreated: 1548481300 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionGroup.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionGroup.cs new file mode 100644 index 00000000..abed2047 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionGroup.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class PermissionGroup : Element + { + protected override string GetName() + { + return "permission-group"; + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionGroup.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionGroup.cs.meta new file mode 100644 index 00000000..d1be1140 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionGroup.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 48014ab84c2404f3e8fae4ea391bbc4d +timeCreated: 1548481261 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionTree.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionTree.cs new file mode 100644 index 00000000..e978e419 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionTree.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class PermissionTree : Element + { + protected override string GetName() + { + return "permission-tree"; + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionTree.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionTree.cs.meta new file mode 100644 index 00000000..f12029f4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/PermissionTree.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 140fa82570b9346b1878c520bec9117f +timeCreated: 1548481254 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries.meta new file mode 100644 index 00000000..09117885 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1635fc395ba504464bca2fd9a1ae1c0e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Intent.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Intent.cs new file mode 100644 index 00000000..5968e28a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Intent.cs @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Intent : Element + { + public void Add(Action action) + { + base.Add(action); + } + + public void Add(Category category) + { + base.Add(category); + } + + public void Add(Data data) + { + base.Add(data); + } + + protected override string GetName() + { + return "intent"; + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Intent.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Intent.cs.meta new file mode 100644 index 00000000..b921f115 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Intent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eecfdba1970a94aac831832949224a96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Package.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Package.cs new file mode 100644 index 00000000..ab0a6750 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Package.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Package : Element + { + protected override string GetName() + { + return "package"; + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Package.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Package.cs.meta new file mode 100644 index 00000000..7a199e68 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Package.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ccb7e399fc57c4fdc8f372485ccb2c60 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Queries.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Queries.cs new file mode 100644 index 00000000..0bbacedf --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Queries.cs @@ -0,0 +1,24 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class Queries : Element + { + public void Add(Intent element) + { + base.Add(element); + } + + public void Add(Package element) + { + base.Add(element); + } + + protected override string GetName() + { + return "queries"; + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Queries.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Queries.cs.meta new file mode 100644 index 00000000..6699de01 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/Queries/Queries.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ce5a75f8155149eb94f53f59ba0cfed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SDK.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SDK.cs new file mode 100644 index 00000000..5b6a0b65 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SDK.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class SDK : Element + { + protected override string GetName() + { + return "uses-sdk"; + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SDK.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SDK.cs.meta new file mode 100644 index 00000000..5667fc3a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SDK.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 66cd7a768a80b4bb0b35b9d9d0b761cd +timeCreated: 1548481292 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedGLTexture.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedGLTexture.cs new file mode 100644 index 00000000..33a7a2a6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedGLTexture.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class SupportedGLTexture : Element + { + protected override string GetName() + { + return "supports-gl-texture"; + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedGLTexture.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedGLTexture.cs.meta new file mode 100644 index 00000000..e99e119e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedGLTexture.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a95f31e815d6946d58d3729c2051ddc5 +timeCreated: 1548481272 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedScreens.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedScreens.cs new file mode 100644 index 00000000..56f6e3df --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedScreens.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Android +{ + public class SupportedScreens : Element + { + protected override string GetName() + { + return "compatible-screens"; + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedScreens.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedScreens.cs.meta new file mode 100644 index 00000000..67aa5122 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Android/Manifest/SupportedScreens.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 22f762cc3a0ee484a93f94d396546604 +timeCreated: 1548481239 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/INativeBindingsWriter.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/INativeBindingsWriter.cs new file mode 100644 index 00000000..8f8ba9c6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/INativeBindingsWriter.cs @@ -0,0 +1,24 @@ +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + public interface INativeBindingsWriter + { + #region Methods + + void WriteStart(string product = null, + string author = null, + string copyrights = null); + + void WriteCustomTypeDeclarations(System.Type[] customTypes); + + void WriteMethod(MethodInfo method); + + void WriteEnd(out string[] files); + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/INativeBindingsWriter.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/INativeBindingsWriter.cs.meta new file mode 100644 index 00000000..70246a82 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/INativeBindingsWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74ea67f343f5841afa6d04d2e9cc190b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.AssemblyDefinition.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.AssemblyDefinition.cs new file mode 100644 index 00000000..387d729e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.AssemblyDefinition.cs @@ -0,0 +1,88 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + public partial class LinkXmlWriter + { + private class AssemblyDefinition + { + #region Fields + + private List m_requiredNamespaces; + + private List m_ignoreNamespaces; + + private List m_requiredTypes; + + private List m_ignoreTypes; + + #endregion + + #region Properties + + public string AssemblyName { get; private set; } + + public string[] RequiredNamespaces { get { return m_requiredNamespaces.ToArray(); } } + + public string[] IgnoreNamespaces { get { return m_ignoreNamespaces.ToArray(); } } + + public string[] RequiredTypes { get { return m_requiredTypes.ToArray(); } } + + public string[] IgnoredTypes { get { return m_ignoreTypes.ToArray(); } } + + #endregion + + #region Constructors + + public AssemblyDefinition(string assembly) + { + // set default properties + AssemblyName = assembly; + m_requiredNamespaces = new List(); + m_ignoreNamespaces = new List(); + m_requiredTypes = new List(); + m_ignoreTypes = new List(); + } + + #endregion + + #region Public methods + + public void AddRequiredNamespace(string name) + { + AddValueIfNotFound(m_requiredNamespaces, name); + } + + public void AddIgnoreNamespace(string name) + { + AddValueIfNotFound(m_ignoreNamespaces, name); + } + + public void AddRequiredType(string name) + { + AddValueIfNotFound(m_requiredTypes, name); + } + + public void AddIgnoreType(string name) + { + AddValueIfNotFound(m_ignoreTypes, name); + } + + #endregion + + #region Private methods + + private void AddValueIfNotFound(List list, string value) + { + if (!list.Contains(value)) + { + list.Add(value); + } + } + + #endregion + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.AssemblyDefinition.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.AssemblyDefinition.cs.meta new file mode 100644 index 00000000..53b46a59 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.AssemblyDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5c70580980a9457aa8221741f447079 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.cs new file mode 100644 index 00000000..ed707bb9 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.cs @@ -0,0 +1,183 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Xml; +using UnityEngine; +using VoxelBusters.CoreLibrary; +using VoxelBusters.CoreLibrary.NativePlugins; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + public partial class LinkXmlWriter + { + #region Fields + + private List m_assemblies; + + private string m_savePath; + + #endregion + + #region Constructors + + public LinkXmlWriter(string path) + { + // set properties + m_savePath = path; + m_assemblies = new List(); + } + + #endregion + + #region Private static methods + + private static void WriteNamespace(XmlWriter writer, string name, bool preserve) + { + writer.WriteStartElement("namespace"); + writer.WriteAttributeString("fullname", name); + writer.WriteAttributeString("preserve", preserve ? "all" : "nothing"); + writer.WriteEndElement(); + } + + private static void WriteType(XmlWriter writer, string name, bool preserve) + { + writer.WriteStartElement("type"); + writer.WriteAttributeString("fullname", name); + writer.WriteAttributeString("preserve", preserve ? "all" : "nothing"); + writer.WriteEndElement(); + } + + #endregion + + #region Public methods + + private AssemblyDefinition GetOrCreateAssemblyDefinition(string assembly) + { + var targetDefinition = m_assemblies.Find((item) => string.Equals(assembly, item.AssemblyName)); + if (targetDefinition == null) + { + var newDefinition = new AssemblyDefinition(assembly); + m_assemblies.Add(newDefinition); + + return newDefinition; + } + return targetDefinition; + } + + public void AddConfiguration(string name, NativeFeatureRuntimeConfiguration runtimeConfiguration, RuntimePlatform platform, bool useFallbackPackage) + { + var packageConfiguration = runtimeConfiguration.GetPackageForPlatform(platform); + var fallbackConfiguration = runtimeConfiguration.FallbackPackage; + + if (useFallbackPackage && fallbackConfiguration != null) + { + DebugLogger.LogWarning(CoreLibraryDomain.Default, $"Using fallback configuration for : {name}."); + + AddRequiredType(fallbackConfiguration.Assembly, fallbackConfiguration.NativeInterfaceType); + if(packageConfiguration != null) + { + AddIgnoreType(packageConfiguration.Assembly, packageConfiguration.NativeInterfaceType); + } + + return; + } + + if(packageConfiguration != null) + { + AddRequiredNamespace(packageConfiguration.Assembly, packageConfiguration.Namespace); + } + } + + public void AddConfiguration(NativeFeatureRuntimeConfiguration runtimeConfiguration) + { + + var packages = runtimeConfiguration.Packages; + + foreach(var eachPackage in packages) + { + AddRequiredType(eachPackage.Assembly, eachPackage.NativeInterfaceType); + } + + var fallbackPackage = runtimeConfiguration.FallbackPackage; + + if(fallbackPackage != null) + { + AddRequiredType(fallbackPackage.Assembly, fallbackPackage.NativeInterfaceType); + } + } + + public void AddRequiredNamespace(string assembly, string ns) + { + GetOrCreateAssemblyDefinition(assembly) + .AddRequiredNamespace(ns); + } + + public void AddIgnoreNamespace(string assembly, string ns) + { + GetOrCreateAssemblyDefinition(assembly) + .AddIgnoreNamespace(ns); + } + + public void AddRequiredType(string assembly, string type) + { + GetOrCreateAssemblyDefinition(assembly) + .AddRequiredType(type); + } + + public void AddIgnoreType(string assembly, string type) + { + GetOrCreateAssemblyDefinition(assembly) + .AddIgnoreType(type); + } + + public void WriteToFile() + { + // remove existing file + if (IOServices.FileExists(m_savePath)) + { + IOServices.DeleteFile(m_savePath); + } + + // create new + var settings = new XmlWriterSettings(); + settings.Encoding = new System.Text.UTF8Encoding(true); + settings.ConformanceLevel = ConformanceLevel.Document; + settings.OmitXmlDeclaration = true; + settings.Indent = true; + using (var writer = XmlWriter.Create(m_savePath, settings)) + { + writer.WriteStartDocument(); + + writer.WriteStartElement("linker"); + foreach (var item in m_assemblies) + { + // write ignored namespace + writer.WriteStartElement("assembly"); + writer.WriteAttributeString("fullname", item.AssemblyName); + foreach (string namespaceValue in item.RequiredNamespaces) + { + WriteNamespace(writer, namespaceValue, true); + } + foreach (string namespaceValue in item.IgnoreNamespaces) + { + WriteNamespace(writer, namespaceValue, false); + } + foreach (string type in item.RequiredTypes) + { + WriteType(writer, type, true); + } + foreach (string type in item.IgnoredTypes) + { + WriteType(writer, type, false); + } + writer.WriteEndElement(); + } + writer.WriteEndElement(); + + writer.WriteEndDocument(); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.cs.meta new file mode 100644 index 00000000..016896eb --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/LinkXmlWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c15509cba6a7c484a81ba9e9502ed2fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativeBindingsGenerator.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativeBindingsGenerator.cs new file mode 100644 index 00000000..f18d7da0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativeBindingsGenerator.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using UnityEditor; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + public enum NativeBindingsGeneratorOptions + { + Header = 1 << 0, + + Source = 1 << 1, + } + + public class NativeBindingsGenerator + { + #region Properties + + private string m_output; + + private NativeBindingsGeneratorOptions m_options; + + private string m_product; + + private string m_author; + + private string m_copyrights; + + #endregion + + #region Constructors + + public NativeBindingsGenerator(string outputPath, + NativeBindingsGeneratorOptions options) + { + // Set properties + m_output = IOServices.GetAbsolutePath(outputPath); + m_options = options; + } + + #endregion + + #region Static methods + + public static INativeBindingsWriter CreateBindingsWriter(string path, + string fileName, + NativeBindingsGeneratorOptions options, + BuildTarget buildTarget) + { + switch (buildTarget) + { + case BuildTarget.iOS: + return new ObjectiveCBindingsWriter(path, fileName, options); + + default: + throw new NotSupportedException(); + } + } + + #endregion + + #region Public methods + + public NativeBindingsGenerator SetProduct(string value) + { + // Set value + m_product = value; + + return this; + } + + public NativeBindingsGenerator SetAuthor(string value) + { + // Set value + m_author = value; + + return this; + } + + public NativeBindingsGenerator SetCopyrights(string value) + { + // Set value + m_copyrights = value; + + return this; + } + + public void Generate(Type cScriptType, + string fileName, + BuildTarget buildTarget, + Type[] customTypes, + out string[] files) + { + // Create output folder + IOServices.CreateDirectory(m_output, false); + + // Create native files + var bindingsWriter = CreateBindingsWriter(m_output, + fileName, + m_options, + buildTarget); + try + { + var externMethods = Array.FindAll(cScriptType.GetMethods(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public), + (method) => (method.GetMethodBody() == null) && method.IsStatic); + bindingsWriter.WriteStart(m_product, + m_author, + m_copyrights); + if (!customTypes.IsNullOrEmpty()) + { + bindingsWriter.WriteCustomTypeDeclarations(customTypes); + } + foreach (var method in externMethods) + { + bindingsWriter.WriteMethod(method); + } + } + finally + { + bindingsWriter.WriteEnd(out files); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativeBindingsGenerator.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativeBindingsGenerator.cs.meta new file mode 100644 index 00000000..9c878ed8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativeBindingsGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f46f80088620f499c821d1d293724797 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObject.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObject.cs new file mode 100644 index 00000000..d7634d01 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObject.cs @@ -0,0 +1,92 @@ +using System; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEditor; +using System.Collections.Generic; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + [Serializable] + public partial class NativePluginsExporterObject : ScriptableObject + { + #region Constants + + private const string kBaseExporterName = "Base"; + + #endregion + + #region Fields + + [SerializeField] + private NativePluginsExporterObjectGroup m_group; + + [SerializeField] + private bool m_isEnabled = true; + + #endregion + + #region Properties + + public NativePluginsExporterObjectGroup Group + { + get { return m_group; } + set { m_group = value; } + } + + public bool IsEnabled + { + get { return m_isEnabled; } + set + { + m_isEnabled = value; + UpdateInternalState(value); + } + } + + #endregion + + #region Static methods + + public static T[] FindObjects(bool includeInactive = false) where T : NativePluginsExporterObject + { + var availableObjects = AssetDatabaseUtility.FindAssetObjects(); + + // Filter assets to required type objects + bool hasActiveObjects = false; + var baseExporterObject = default(T); + var finalObjectList = new List(availableObjects.Length); + foreach (var exporterObject in availableObjects) + { + bool isBaseObject = string.Equals(exporterObject.name, kBaseExporterName); + if (includeInactive || exporterObject.IsEnabled) + { + finalObjectList.Add(exporterObject); + } + // Track object status + if (isBaseObject) + { + baseExporterObject = exporterObject; + } + hasActiveObjects |= !isBaseObject && exporterObject.IsEnabled; + } + + // Ensure base type is included + if (!includeInactive) + { + baseExporterObject.IsEnabled = true; + finalObjectList.AddUnique(baseExporterObject); + } + + return finalObjectList.ToArray(); + } + + #endregion + + #region Private methods + + protected virtual void UpdateInternalState(bool active) + { } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObject.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObject.cs.meta new file mode 100644 index 00000000..96021869 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObject.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f4eeec00769cc43f2a21921915f8fa89 +timeCreated: 1549459341 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectEditor.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectEditor.cs new file mode 100644 index 00000000..154b7c61 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectEditor.cs @@ -0,0 +1,12 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using VoxelBusters.CoreLibrary.Editor; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + [CustomEditor(typeof(NativePluginsExporterObject))] + public class NativePluginsExporterObjectEditor : CustomInspector + { } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectEditor.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectEditor.cs.meta new file mode 100644 index 00000000..19cf364b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bad85a568bb154ae285eb827aa08ce10 +timeCreated: 1579541166 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectGroup.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectGroup.cs new file mode 100644 index 00000000..155deae2 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectGroup.cs @@ -0,0 +1,28 @@ +using System; +using UnityEngine; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + [CreateAssetMenu(fileName = "NativePluginsExporterObjectGroup", menuName = "Native Plugins/Exporter Object Group", order = 0)] + public class NativePluginsExporterObjectGroup : ScriptableObject + { + #region Fields + + [SerializeField] + private string m_name; + + [SerializeField] + private bool m_usesNestedHeierarchy = true; + + #endregion + + #region Properties + + public string Name => m_name; + + public bool UsesNestedHeierarchy => m_usesNestedHeierarchy; + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectGroup.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectGroup.cs.meta new file mode 100644 index 00000000..7bb17467 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsExporterObjectGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8494aa9edfa214a818449f2dea39a05a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsManager.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsManager.cs new file mode 100644 index 00000000..0cd9a0f2 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsManager.cs @@ -0,0 +1,112 @@ +using System; +using UnityEditor; +using UnityEditor.Build; +using UnityEditor.Build.Reporting; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + public abstract class NativePluginsManager : IPreprocessBuildWithReport, IPostprocessBuildWithReport + { + #region Proprerties + + public BuildReport Report { get; private set; } + + public BuildTarget BuildTarget => Report.summary.platform; + + public string OutputPath => Report.summary.outputPath; + + public bool IsPreprocessing { get; set; } + + public bool IsPostprocessing { get; set; } + + #endregion + + #region Static methods + + protected static T[] FindPluginsProcessors(NativePluginsManager manager) where T : NativePluginsProcessor + { + var baseClassType = typeof(T); + var targetTypes = ReflectionUtility.FindAllTypes((type) => !type.IsAbstract && type.IsSubclassOf(baseClassType)); + return Array.ConvertAll( + targetTypes, + (type) => + { + var processor = ReflectionUtility.CreateInstance(type) as T; + processor.SetPropertyValue("Manager", manager); + return processor; + }); + } + + protected static LinkXmlWriter CreateDefaultLinkXmlWriter() + { + var defaultPath = IOServices.GetAbsolutePath("Assets/Plugins/VoxelBusters/link.xml"); + return new LinkXmlWriter(defaultPath); + } + + #endregion + + #region Base class methods + + protected virtual bool IsSupported(BuildTarget target) => true; + + protected abstract void OnPreprocessNativePlugins(); + + protected abstract void OnPostprocessNativePlugins(); + + #endregion + + #region IPreprocessBuildWithReport implementation + + int IOrderedCallback.callbackOrder => int.MaxValue; + + void IPreprocessBuildWithReport.OnPreprocessBuild(BuildReport report) + { + if (!IsSupported(target: report.summary.platform)) return; + + try + { + // Set properties + Report = report; + IsPreprocessing = true; + + // Send appropriate message + OnPreprocessNativePlugins(); + } + catch(Exception e) + { + throw new BuildFailedException(e); + } + finally + { + // Reset properties + IsPreprocessing = false; + } + } + + #endregion + + #region IPostprocessBuildWithReport implementation + + void IPostprocessBuildWithReport.OnPostprocessBuild(BuildReport report) + { + if (!IsSupported(target: report.summary.platform)) return; + + try + { + // Set properties + Report = report; + IsPostprocessing = true; + + // Send appropriate messages + OnPostprocessNativePlugins(); + } + finally + { + // Reset properties + IsPostprocessing = false; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsManager.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsManager.cs.meta new file mode 100644 index 00000000..6610a837 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b1f94ff40b114a6d9b20a8d49bb3cf4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsProcessor.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsProcessor.cs new file mode 100644 index 00000000..61790403 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsProcessor.cs @@ -0,0 +1,53 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEditor.Build.Reporting; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + public class NativePluginsProcessor + { + #region Properties + + public NativePluginsManager Manager { get; private set; } + + public BuildReport BuildReport => Manager.Report; + + public BuildTarget BuildTarget => BuildReport.summary.platform; + + public string OutputPath => BuildReport.summary.outputPath; + + #endregion + + #region Preprocess message methods + + + public virtual void OnCheckConfiguration() + { } + + public virtual void OnUpdateExporterObjects() + { } + + public virtual void OnUpdateLinkXml(LinkXmlWriter writer) + { } + + #endregion + + #region Postprocess message methods + + public virtual void OnAddFiles() + { } + + public virtual void OnAddFolders() + { } + + public virtual void OnAddResources() + { } + + public virtual void OnUpdateConfiguration() + { } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsProcessor.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsProcessor.cs.meta new file mode 100644 index 00000000..46bd98ca --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/NativePluginsProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17f208e59b9fa42469d21728809e5556 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/TargetBuilder.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/TargetBuilder.cs new file mode 100644 index 00000000..dd690f60 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/TargetBuilder.cs @@ -0,0 +1,182 @@ +using System; +using System.Collections.Generic; +using UnityEditor; +using UnityEditor.Build; +using UnityEditor.Build.Reporting; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + public class TargetBuilder + { +#if NATIVE_PLUGINS_DEBUG + [MenuItem("Tools/Make Build")] +#endif + public static void Build() + { +#if UNITY_IOS + BuildIos(); +#elif UNITY_ANDROID + BuildAndroid(); +#elif UNITY_STANDALONE_WIN + BuildWindows(); +#elif UNITY_STANDALONE_OSX + BuildOsx(); +#elif UNITY_STANDALONE_LINUX + BuildLinux(); +#elif UNITY_WEBGL + BuildLinux(); +#else + Debug.LogError("No platform target defined!"); +#endif + } + + private static void BuildIos() + { + Build(BuildTargetGroup.iOS, BuildTarget.iOS, null); + } + + private static void BuildAndroid() + { + EditorUserBuildSettings.exportAsGoogleAndroidProject = true; + PlayerSettings.SetScriptingBackend(NamedBuildTarget.Android, ScriptingImplementation.IL2CPP); + PlayerSettings.Android.targetArchitectures = AndroidArchitecture.ARMv7 | AndroidArchitecture.ARM64; + if (EditorUserBuildSettings.development) + { +#if !UNITY_2019_1_OR_NEWER + PlayerSettings.Android.targetArchitectures |= AndroidArchitecture.X86; +#endif + } + + Build(BuildTargetGroup.Android, BuildTarget.Android, null, /*BuildOptions.AcceptExternalModificationsToPlayer |*/ BuildOptions.AllowDebugging); + } + + private static void BuildWindows() + { + Build(BuildTargetGroup.Standalone, BuildTarget.StandaloneWindows64, "exe"); + } + + private static void BuildOsx() + { + Build(BuildTargetGroup.Standalone, BuildTarget.StandaloneOSX, "app"); + } + + private static void BuildLinux() + { + Build(BuildTargetGroup.Standalone, BuildTarget.StandaloneLinux64, null); + } + + private static void BuildWebGl() + { + Build(BuildTargetGroup.WebGL, BuildTarget.WebGL, null); + } + + private static void BuildAllPlatforms() + { + BuildMobilePlatforms(); + BuildNonMobilePlatforms(); + } + + private static void BuildMobilePlatforms() + { + BuildIos(); + BuildAndroid(); + } + + private static void BuildNonMobilePlatforms() + { + BuildOsx(); + BuildWindows(); + BuildLinux(); + BuildWebGl(); + } + + private static void Build(BuildTargetGroup targetGroup, BuildTarget target, string extension, BuildOptions options = BuildOptions.None) + { + string platform = GetPlatformName(target); + + //Set values from environment variables + LoadEnvironmentVariables(target); + + //Switch to active target + bool isSwitchSuccess = EditorUserBuildSettings.SwitchActiveBuildTarget(targetGroup, target); + + if (!isSwitchSuccess) + Debug.LogError(string.Format("Failed switching to platform : {0}", platform)); + + //Build +#if UNITY_2019_3_OR_NEWER + string targetPath = (extension != null) ? string.Format("../builds/{0}.{1}", platform, extension) : string.Format("../builds/{0}/{1}", platform, PlayerSettings.productName); +#else + string targetPath = (extension != null) ? string.Format("../builds/{0}.{1}", platform, extension) : string.Format("../builds/{0}", platform); +#endif + BuildReport report = UnityEditor.BuildPipeline.BuildPlayer(EditorBuildSettings.scenes, targetPath, target, options); + BuildSummary summary = report.summary; + + if (summary.result == BuildResult.Succeeded) + { + Debug.Log(string.Format("Finished building for {0} : {1}", platform, targetPath)); + } + else if (summary.result == BuildResult.Failed) + { + Debug.LogError(string.Format("Failed building for {0} : {1}", platform, targetPath)); + } + else if (summary.result == BuildResult.Cancelled) + { + Debug.LogError(string.Format("Cancelled building for {0} : {1}", platform, targetPath)); + } + else + { + Debug.LogError(string.Format("Failed building for {0} : {1}", platform, targetPath)); + } + } + + private static string GetPlatformName(BuildTarget target) + { + switch (target) + { + case BuildTarget.iOS: + return "ios"; + case BuildTarget.Android: + return "android"; + case BuildTarget.StandaloneLinux64: + return "linux"; + case BuildTarget.StandaloneWindows64: + return "windows"; + case BuildTarget.StandaloneOSX: + return "osx"; + case BuildTarget.WebGL: + return "webgl"; + default: + throw new System.Exception("Platform name not set!"); + } + } + + private static void LoadEnvironmentVariables(BuildTarget target) + { + PlayerSettings.productName = GetEnvironmentVariable("PRODUCT_NAME", PlayerSettings.productName); + PlayerSettings.bundleVersion = GetEnvironmentVariable("PRODUCT_VERSION", PlayerSettings.bundleVersion); + PlayerSettings.companyName = GetEnvironmentVariable("PRODUCT_COMPANY_NAME", PlayerSettings.companyName); + + switch (target) + { + case BuildTarget.Android: + PlayerSettings.applicationIdentifier = GetEnvironmentVariable("ANDROID_PACKAGE_NAME", PlayerSettings.applicationIdentifier); + break; + case BuildTarget.iOS: + PlayerSettings.applicationIdentifier = GetEnvironmentVariable("IOS_BUNDLE_IDENTIFIER", PlayerSettings.applicationIdentifier); + break; + } + + } + + private static T GetEnvironmentVariable(string key, T defaultValue) where T : IConvertible + { + object value = System.Environment.GetEnvironmentVariable(key); + if (value != null) + return (T)Convert.ChangeType(value, typeof(T)); + else + return defaultValue; + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/TargetBuilder.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/TargetBuilder.cs.meta new file mode 100644 index 00000000..8e45b98e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/TargetBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 789382482b4a044b1a1415d340cd8a83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsManager.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsManager.cs new file mode 100644 index 00000000..b6af1078 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsManager.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + public class UnsupportedPlatformNativePluginsManager : NativePluginsManager + { + #region Base class methods + + protected override bool IsSupported(BuildTarget target) + { + return !((target == BuildTarget.iOS) || + (target == BuildTarget.tvOS) || + (target == BuildTarget.Android)); + } + + protected override void OnPreprocessNativePlugins() + { + var pluginsProcessors = FindPluginsProcessors(this); + var linkerFileWriter = CreateDefaultLinkXmlWriter(); + pluginsProcessors.ForEach( + (item) => + { + item.OnUpdateLinkXml(linkerFileWriter); + }); + linkerFileWriter.WriteToFile(); + } + + protected override void OnPostprocessNativePlugins() + { } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsManager.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsManager.cs.meta new file mode 100644 index 00000000..a50f8df6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d319604252a9a46c2ba87927ae8aa64b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsProcessor.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsProcessor.cs new file mode 100644 index 00000000..dd6848d8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsProcessor.cs @@ -0,0 +1,9 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + public class UnsupportedPlatformNativePluginsProcessor : NativePluginsProcessor + { } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsProcessor.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsProcessor.cs.meta new file mode 100644 index 00000000..b86e449e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/UnsupportedPlatformNativePluginsProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a538b642cf6b46f08de15578c2be800 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode.meta new file mode 100644 index 00000000..6cf3a002 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b9bf66a06f5534f7282e87258614cd70 +folderAsset: yes +timeCreated: 1579785814 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/BuildConfigurationKey.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/BuildConfigurationKey.cs new file mode 100644 index 00000000..e57b94b7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/BuildConfigurationKey.cs @@ -0,0 +1,25 @@ +#if UNITY_IOS || UNITY_TVOS +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Xcode +{ + public static class BuildConfigurationKey + { + public const string kBuildSettings = "buildSettings"; + + public const string kHeaderSearchPaths = "HEADER_SEARCH_PATHS"; + + public const string kLibrarySearchPaths = "LIBRARY_SEARCH_PATHS"; + + public const string kFrameworkSearchPaths = "FRAMEWORK_SEARCH_PATHS"; + + public const string kOtherCFlags = "OTHER_CFLAGS"; + + public const string kOtherLDFlags = "OTHER_LDFLAGS"; + + public const string kCodeSignEntitlements = "CODE_SIGN_ENTITLEMENTS"; + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/BuildConfigurationKey.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/BuildConfigurationKey.cs.meta new file mode 100644 index 00000000..1d490eb7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/BuildConfigurationKey.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: acb0fb6205f0e487a8196435917cf8b6 +timeCreated: 1578831698 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/InfoPlistKey.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/InfoPlistKey.cs new file mode 100644 index 00000000..2379c6f8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/InfoPlistKey.cs @@ -0,0 +1,43 @@ +#if UNITY_IOS || UNITY_TVOS +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Xcode +{ + public static class InfoPlistKey + { + #region Constants + + public const string kNSContactsUsage = "NSContactsUsageDescription"; + + public const string kNSCameraUsage = "NSCameraUsageDescription"; + + public const string kNSPhotoLibraryUsage = "NSPhotoLibraryUsageDescription"; + + public const string kNSPhotoLibraryAdd = "NSPhotoLibraryAddUsageDescription"; + + public const string kNSMicrophoneUsage = "NSMicrophoneUsageDescription"; + + public const string kNSLocationWhenInUse = "NSLocationWhenInUseUsageDescription"; + + public const string kNSAppTransportSecurity = "NSAppTransportSecurity"; + + public const string kNSAllowsArbitraryLoads = "NSAllowsArbitraryLoads"; + + public const string kNSQuerySchemes = "LSApplicationQueriesSchemes"; + + public const string kNSDeviceCapablities = "UIRequiredDeviceCapabilities"; + + public const string kCFBundleURLTypes = "CFBundleURLTypes"; + + public const string kCFBundleURLName = "CFBundleURLName"; + + public const string kCFBundleURLSchemes = "CFBundleURLSchemes"; + + public const string kNSGKFriendListUsage = "NSGKFriendListUsageDescription"; + + #endregion + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/InfoPlistKey.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/InfoPlistKey.cs.meta new file mode 100644 index 00000000..cea05470 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/InfoPlistKey.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4f2e3899f884c419a9bac4f482c312e2 +timeCreated: 1563179772 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/MacroDefinitionsManager.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/MacroDefinitionsManager.cs new file mode 100644 index 00000000..cb8e0375 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/MacroDefinitionsManager.cs @@ -0,0 +1,65 @@ +#if UNITY_IOS || UNITY_TVOS +using System; +using System.Collections; +using System.Collections.Generic; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Xcode +{ + public class MacroDefinitionsManager + { + #region Fields + + private string m_savePath; + + private string m_headerComments; + + private List m_requiredMacros; + + #endregion + + #region Constructors + + public MacroDefinitionsManager(string path, string headerComments) + { + // Set properties + m_savePath = path; + m_headerComments = headerComments; + m_requiredMacros = new List(); + } + + #endregion + + #region Public methods + + public void AddMacro(params string[] values) + { + foreach (var value in values) + { + m_requiredMacros.AddUnique(value); + } + } + + public void WriteToFile() + { + // Build content + var stringBuilder = new System.Text.StringBuilder(256); + if (m_headerComments != null) + { + stringBuilder.AppendLine(m_headerComments) + .AppendLine(); + } + stringBuilder.AppendLine("#pragma once") + .AppendLine(); + foreach (var definition in m_requiredMacros) + { + stringBuilder.AppendLine($"#define {definition}"); + } + + // Serialize changes + IOServices.CreateFile(m_savePath, stringBuilder.ToString()); + } + + #endregion + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/MacroDefinitionsManager.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/MacroDefinitionsManager.cs.meta new file mode 100644 index 00000000..5e9d9953 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/MacroDefinitionsManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 72d1def92e47d4fc08fff42c01b0b8f7 +timeCreated: 1596395226 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXAssociatedDomainsEntitlement.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXAssociatedDomainsEntitlement.cs new file mode 100644 index 00000000..6ed4003d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXAssociatedDomainsEntitlement.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + [Serializable] + public class PBXAssociatedDomainsEntitlement + { + #region Fields + + [SerializeField] + private string[] m_domains; + + #endregion + + #region Properties + + public string[] Domains => m_domains; + + #endregion + + #region Constructors + + public PBXAssociatedDomainsEntitlement(string[] domains) + { + // set properties + m_domains = domains; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXAssociatedDomainsEntitlement.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXAssociatedDomainsEntitlement.cs.meta new file mode 100644 index 00000000..f24d7e3c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXAssociatedDomainsEntitlement.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ef89706a136bb48fab2345a3dc3acf34 +timeCreated: 1586429981 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapability.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapability.cs new file mode 100644 index 00000000..f9d43081 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapability.cs @@ -0,0 +1,72 @@ +using System; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + [Serializable] + public class PBXCapability + { + #region Fields + + [SerializeField] + private PBXCapabilityType m_type; + + [SerializeField] + private PBXAssociatedDomainsEntitlement m_associatedDomainsEntitlement; + + #endregion + + #region Properties + + public PBXCapabilityType Type => m_type; + + public PBXAssociatedDomainsEntitlement AssociatedDomainsEntitlement => m_associatedDomainsEntitlement; + + #endregion + + #region Create methods + + public static PBXCapability iCloud() + { + return new PBXCapability() + { + m_type = PBXCapabilityType.iCloud, + }; + } + + public static PBXCapability InAppPurchase() + { + return new PBXCapability() + { + m_type = PBXCapabilityType.InAppPurchase, + }; + } + + public static PBXCapability GameCenter() + { + return new PBXCapability() + { + m_type = PBXCapabilityType.GameCenter, + }; + } + + public static PBXCapability PushNotifications() + { + return new PBXCapability() + { + m_type = PBXCapabilityType.PushNotifications, + }; + } + + public static PBXCapability AssociatedDomains(string[] domains) + { + return new PBXCapability() + { + m_type = PBXCapabilityType.AssociatedDomains, + m_associatedDomainsEntitlement = new PBXAssociatedDomainsEntitlement(domains), + }; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapability.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapability.cs.meta new file mode 100644 index 00000000..3ac61f8f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapability.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3a0c3b4ae180f4694bf5fec6c8e3c2d2 +timeCreated: 1578832973 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapabilityType.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapabilityType.cs new file mode 100644 index 00000000..6f61047a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapabilityType.cs @@ -0,0 +1,15 @@ +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + public enum PBXCapabilityType + { + GameCenter = 1, + + InAppPurchase, + + iCloud, + + PushNotifications, + + AssociatedDomains, + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapabilityType.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapabilityType.cs.meta new file mode 100644 index 00000000..50c15282 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXCapabilityType.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c9db54d699ec9461187c77cf6639c105 +timeCreated: 1578832973 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFIle.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFIle.cs new file mode 100644 index 00000000..8f7ef22d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFIle.cs @@ -0,0 +1,40 @@ +using System.IO; +using UnityEngine; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + [System.Serializable] + public class PBXFile + { + #region Fields + + [SerializeField] + private Object m_reference; + + [SerializeField] + private string m_compileFlags; + + #endregion + + #region Properties + + public string RelativePath => AssetDatabase.GetAssetPath(m_reference); + + public string AbsoultePath => Path.GetFullPath(RelativePath); + + public string[] CompileFlags + { + get + { + return m_compileFlags.Split(','); + } + set + { + m_compileFlags = string.Join(",", value); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFIle.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFIle.cs.meta new file mode 100644 index 00000000..1b86506c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFIle.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 987a0da92031341349193308b63a379d +timeCreated: 1578832973 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFileDrawer.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFileDrawer.cs new file mode 100644 index 00000000..d74573db --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFileDrawer.cs @@ -0,0 +1,37 @@ +using UnityEngine; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + [CustomPropertyDrawer(typeof(PBXFile))] + public class PBXFileDrawer : PropertyDrawer + { + #region Unity methods + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUIUtility.singleLineHeight; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + // show property name label + label = EditorGUI.BeginProperty(position, label, property); + position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), GUIContent.none); + + // show property attributes + Rect refRect = new Rect(position.x, position.y, position.width * 0.6f, position.height); + Rect flagsRect = new Rect(refRect.xMax + 5f, position.y, position.width - refRect.width - 5f, position.height); + int indentLevel = EditorGUI.indentLevel; + + EditorGUI.indentLevel = 0; + EditorGUI.PropertyField(refRect, property.FindPropertyRelative("m_reference"), GUIContent.none); + EditorGUI.PropertyField(flagsRect, property.FindPropertyRelative("m_compileFlags"), GUIContent.none); + EditorGUI.indentLevel = indentLevel; + + EditorGUI.EndProperty(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFileDrawer.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFileDrawer.cs.meta new file mode 100644 index 00000000..da88a83c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFileDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 182fe8e658a3e4deaba3ffd7dc799ad8 +timeCreated: 1578832973 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFramework.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFramework.cs new file mode 100644 index 00000000..92b9cbce --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFramework.cs @@ -0,0 +1,77 @@ +using System; +using UnityEngine; +using UnityEngine.Serialization; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + [Serializable] + public class PBXFramework + { + #region Fields + + [SerializeField, PBXFrameworkName] + private string m_name; + + [SerializeField, EnumMaskField(typeof(PBXTargetMembership))] + private PBXTargetMembership m_target; + + [SerializeField, FormerlySerializedAs("m_isWeak")] + private bool m_isOptional; + + #endregion + + #region Properties + + public string Name + { + get => m_name; + private set => m_name = value; + } + + public PBXTargetMembership Target + { + get => m_target; + private set => m_target = value; + } + + public bool IsOptional + { + get => m_isOptional; + private set => m_isOptional = value; + } + + #endregion + + #region Constructors + + public PBXFramework(string name, PBXTargetMembership target = (PBXTargetMembership)0, + bool isOptional = false) + { + // Set properties + Name = name; + Target = target; + IsOptional = isOptional; + } + + #endregion + + #region Base class methods + + public override bool Equals(object obj) + { + if (obj is PBXFramework) + { + return string.Equals(m_name, ((PBXFramework)obj).m_name); + } + + return base.Equals(obj); + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFramework.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFramework.cs.meta new file mode 100644 index 00000000..22bfe8ef --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFramework.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5fb405b9534404452b2e471c3b9acccb +timeCreated: 1578832973 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkDrawer.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkDrawer.cs new file mode 100644 index 00000000..d96b30eb --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkDrawer.cs @@ -0,0 +1,41 @@ +using UnityEngine; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + [CustomPropertyDrawer(typeof(PBXFramework))] + public class PBXFrameworkDrawer : PropertyDrawer + { + #region Unity methods + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUIUtility.singleLineHeight; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + // show property name label + label = EditorGUI.BeginProperty(position, label, property); + position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), GUIContent.none); + + // show property attributes + float maxWidth = position.width * .3f; + float offset = position.width * .01f; + Rect nameRect = new Rect(position.x, position.y, maxWidth, position.height); + Rect targetRect = new Rect(nameRect.xMax + offset, position.y, maxWidth, position.height); + Rect optionalRect = new Rect(targetRect.xMax + offset, position.y, maxWidth, position.height); + int indentLevel = EditorGUI.indentLevel; + + EditorGUI.indentLevel = 0; + EditorGUI.PropertyField(nameRect, property.FindPropertyRelative("m_name"), GUIContent.none); + EditorGUI.PropertyField(targetRect, property.FindPropertyRelative("m_target"), GUIContent.none); + EditorGUI.PropertyField(optionalRect, property.FindPropertyRelative("m_isOptional"), GUIContent.none); + EditorGUI.indentLevel = indentLevel; + + EditorGUI.EndProperty(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkDrawer.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkDrawer.cs.meta new file mode 100644 index 00000000..dc09cd4c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cdab6c6b4610e43ec88fb480aed37db6 +timeCreated: 1578832973 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttribute.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttribute.cs new file mode 100644 index 00000000..80fef1af --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttribute.cs @@ -0,0 +1,40 @@ +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + public class PBXFrameworkNameAttribute : PropertyAttribute + { + #region Static fields + + private static readonly string[] s_frameworkNames = new string[] + { + "Accounts.framework", + "AVFoundation.framework", + "Contacts.framework", + "CloudKit.framework", + "GameKit.framework", + "MessageUI.framework", + "MobileCoreServices.framework", + "Photos.framework", + "Social.framework", + "StoreKit.framework", + "SystemConfiguration.framework", + "UserNotifications.framework", + "WebKit.framework", + "ReplayKit.framework", + "PhotosUI.framework", + "UniformTypeIdentifiers.framework" + }; + + #endregion + + #region Public Methods + + public string[] GetFrameworkNames() + { + return s_frameworkNames; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttribute.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttribute.cs.meta new file mode 100644 index 00000000..60ffae45 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 23bdd93a72b5d49aa9d5ab80767468db +timeCreated: 1578832973 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttributeDrawer.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttributeDrawer.cs new file mode 100644 index 00000000..b47126ab --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttributeDrawer.cs @@ -0,0 +1,31 @@ +using System.Collections; +using System.Collections.Generic; +using System; +using UnityEngine; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + [CustomPropertyDrawer(typeof(PBXFrameworkNameAttribute))] + public class PBXFrameworkNameAttributeDrawer : PropertyDrawer + { + #region Unity methods + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + label = EditorGUI.BeginProperty(position, label, property); + + // show popup + string[] options = ((PBXFrameworkNameAttribute)attribute).GetFrameworkNames(); + int selectedIndex = Array.FindIndex(options, (item) => string.Equals(item, property.stringValue)); + selectedIndex = EditorGUI.Popup(position, label.text, selectedIndex, options); + + // assign value + property.stringValue = (selectedIndex == -1) ? options[0] : options[selectedIndex]; + + EditorGUI.EndProperty(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttributeDrawer.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttributeDrawer.cs.meta new file mode 100644 index 00000000..679d7249 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXFrameworkNameAttributeDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3d275d2e014054d1d9a26557b5cbd7b6 +timeCreated: 1578832973 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsExporterObject.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsExporterObject.cs new file mode 100644 index 00000000..38dd6cd1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsExporterObject.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + [Serializable, CreateAssetMenu(fileName = "PBXNativePluginsExporterObject", menuName = "Native Plugins/PBX Exporter Object", order = 0)] + public class PBXNativePluginsExporterObject : NativePluginsExporterObject + { + #region Fields + + [SerializeField] + private string[] m_compileFlags; + + [SerializeField] + private List m_headerPaths = new List(); + + [SerializeField] + private List m_frameworks = new List(); + + [SerializeField] + private List m_capabilities = new List(); + + [SerializeField] + private List m_macros = new List(); + + [SerializeField] + private List m_buildProperties = new List(); + + #endregion + + #region Properties + + public string[] CompileFlags => m_compileFlags; + + public PBXFile[] HeaderPaths => m_headerPaths.ToArray(); + + public PBXFramework[] Frameworks => m_frameworks.ToArray(); + + public PBXCapability[] Capabilities => m_capabilities.ToArray(); + + public StringKeyValuePair[] Macros => m_macros.ToArray(); + + public StringKeyValuePair[] BuildProperties => m_buildProperties.ToArray(); + + #endregion + + #region Public methods + + public void SetCompilerFlags(params string[] flags) + { + m_compileFlags = flags; + } + + public void AddCapability(PBXCapability value) + { + m_capabilities.Add(value); + } + + public void RemoveCapability(PBXCapability value) + { + m_capabilities.Remove(value); + } + + public void ClearCapabilities() + { + m_capabilities.Clear(); + } + + public void AddMacro(string name, string value) + { + var keyValuePair = new StringKeyValuePair(name, value); + m_macros.AddOrReplace( + keyValuePair, + (item) => string.Equals(item.Key, name)); + } + + public void RemoveMacro(string name) + { + m_macros.Remove((item) => string.Equals(item.Key, name)); + } + + public void ClearMacros() + { + m_macros.Clear(); + } + + public void AddFramework(PBXFramework value) + { + m_frameworks.Add(value); + } + + public void RemoveFramework(PBXFramework value) + { + m_frameworks.Remove(value); + } + + public void ClearFrameworks() + { + m_frameworks.Clear(); + } + + public void AddBuildProperty(string name, string value) + { + var keyValuePair = new StringKeyValuePair(name, value); + m_buildProperties.AddOrReplace( + keyValuePair, + (item) => string.Equals(item.Key, name)); + } + + public void RemoveBuildProperty(string name) + { + m_buildProperties.Remove((item) => string.Equals(item.Key, name)); + } + + public void ClearBuildProperties() + { + m_buildProperties.Clear(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsExporterObject.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsExporterObject.cs.meta new file mode 100644 index 00000000..6435887d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsExporterObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d4ef977ceb472480b934e1aee1b94354 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsManager.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsManager.cs new file mode 100644 index 00000000..171820f2 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsManager.cs @@ -0,0 +1,585 @@ +#if UNITY_IOS || UNITY_TVOS +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEditor; +using UnityEditor.Build; +using UnityEditor.Build.Reporting; +using UnityEditor.iOS.Xcode; +using UnityEditor.iOS.Xcode.Extensions; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Xcode +{ + public class PBXNativePluginsManager : NativePluginsManager, IPostprocessBuildWithReport + { + +#region Constants + + private const string kPluginRelativePath = "VoxelBusters/"; + + private static readonly string kPreprocessorFilePath = NativePluginsPackageLayout.IosPluginPath + "/NPConfig.h"; + + private static readonly string[] kIgnoreFileExtensions = new string[] + { + ".meta", + ".pdf", + ".DS_Store", + ".mdown", + ".asset", + ".cs" + }; + +#endregion + +#region Fields + + private PBXProject m_project; + + private List m_librarySearchPaths; + + private List m_frameworkSearchPaths; + + private PBXNativePluginsProcessor[] m_pluginsProcessors; + +#endregion + +#region Properties + + public PBXProject Project => ObjectHelper.CreateInstanceIfNull( + ref m_project, + () => + { + PBXProject project = null; + if (IsPostprocessing) + { + project = new PBXProject(); + project.ReadFromFile(ProjectFilePath); + } + return project; + }); + + private PBXNativePluginsProcessor[] PluginsProcessors => ObjectHelper.CreateInstanceIfNull( + ref m_pluginsProcessors, + () => FindPluginsProcessors(this)); + + private PBXNativePluginsExporterObject[] ActiveExporterObjects { get; set; } + + private string ProjectFilePath => PBXProject.GetPBXProjectPath(OutputPath); + +#endregion + +#region Base class methods + + protected override bool IsSupported(BuildTarget target) + { + return (BuildTarget.iOS == target) || (BuildTarget.tvOS == target); + } + + protected override void OnPreprocessNativePlugins() + { + // Send message to complete preprocess actions to all the NativeProcessors + var linkerFileWriter = CreateDefaultLinkXmlWriter(); + PluginsProcessors.ForEach( + (item) => + { + item.OnCheckConfiguration(); + item.OnUpdateExporterObjects(); + item.OnUpdateLinkXml(linkerFileWriter); + }); + linkerFileWriter.WriteToFile(); + } + + protected override void OnPostprocessNativePlugins() + { + // Set properties + m_librarySearchPaths = new List(); + m_frameworkSearchPaths = new List(); + ActiveExporterObjects = NativePluginsExporterObject.FindObjects(); + + ClearPluginsData(); + UpdateProjectConfiguation(); + } + +#endregion + +#region Public methods + + public void AddFile(string sourceFilePath, string parentGroup, string[] compileFlags) + { + AddFileToProject( + Project, + sourceFilePath, + Project.GetFrameworkGuid(), + parentGroup, + compileFlags); + } + +#endregion + +#region Private methods + + private void UpdateProjectConfiguation() + { + LinkNativeAssets(); + UpdateInfoPlistDocument(); + UpdateProjectCapabilities(); + UpdateMacroDefinitions(); + UpdateEntitlementsPlistDocument(); + + // Apply changes + File.WriteAllText(ProjectFilePath, Project.WriteToString()); + } + + private void LinkNativeAssets() + { + DebugLogger.Log(CoreLibraryDomain.Default, "Linking native files."); + + // Open project file for editing + string projectFilePath = ProjectFilePath; + var project = Project; + string mainTargetGuid = project.GetMainTargetGuid(); + string frameworkTargetGuid = project.GetFrameworkGuid(); + DebugLogger.Log(CoreLibraryDomain.NativePlugins, $"Project File Path: {projectFilePath} targetGuid: {frameworkTargetGuid} ProjectPath: {OutputPath}"); + + //@@ fix for "does not refer to a file in a known build section" + project.AddSourcesBuildPhase(frameworkTargetGuid); + project.AddHeadersBuildPhase(frameworkTargetGuid); + + // Read exporter settings for adding native files + foreach (var exporterObject in ActiveExporterObjects) + { + DebugLogger.Log(CoreLibraryDomain.Default, $"Is feature: {exporterObject.name} enabled:{exporterObject.IsEnabled}."); + string exporterFilePath = Path.GetFullPath(AssetDatabase.GetAssetPath(exporterObject)); + string exporterFolder = Path.GetDirectoryName(exporterFilePath); + string exporterGroup = GetExportGroupPath(exporterObject: exporterObject, prefixPath: kPluginRelativePath); + string parentFolder = IOServices.GetDirectoryName(AssetDatabase.GetAssetPath(exporterObject)); + + // Add files + AddFolderToProject(project, parentFolder, frameworkTargetGuid, exporterGroup, exporterObject.CompileFlags); + + // Add headerpaths + foreach (var pathInfo in exporterObject.HeaderPaths) + { + string destinationPath = GetFilePathInProject(pathInfo.AbsoultePath, exporterFolder, exporterGroup); + string formattedPath = FormatFilePathInProject(destinationPath); + project.AddHeaderSearchPath(frameworkTargetGuid, formattedPath); + } + + // Add frameworks + foreach (var framework in exporterObject.Frameworks) + { + if (framework.Target.HasFlag(PBXTargetMembership.UnityIphone)) + { + project.AddFrameworkToProject(mainTargetGuid, framework.Name, framework.IsOptional); + } + if (framework.Target.HasFlag(PBXTargetMembership.UnityFramework)) + { + project.AddFrameworkToProject(frameworkTargetGuid, framework.Name, framework.IsOptional); + } + } + + // Add build properties + foreach (var property in exporterObject.BuildProperties) + { + project.AddBuildProperty(frameworkTargetGuid, property.Key, property.Value); + } + } + + // Add header search paths + foreach (string path in m_librarySearchPaths) + { + project.AddLibrarySearchPath(frameworkTargetGuid, FormatFilePathInProject(path)); + } + + // Add framework search paths + foreach (string path in m_frameworkSearchPaths) + { + project.AddFrameworkSearchPath(frameworkTargetGuid, FormatFilePathInProject(path)); + } + + // Add resources + CopyAssetsFromStreamingAssets(); + + // Send message to all the NativeProcessors + PluginsProcessors.ForEach( + (item) => + { + item.OnAddFiles(); + item.OnAddFolders(); + item.OnAddResources(); + item.OnUpdateConfiguration(); + }); + } + + private string GetExportGroupPath(NativePluginsExporterObject exporterObject, string prefixPath) + { + string groupPath = prefixPath; + bool usesNestedHierarchy = true; + if (exporterObject.Group != null) + { + groupPath += exporterObject.Group.Name + "/"; + usesNestedHierarchy = exporterObject.Group.UsesNestedHeierarchy; + } + if (usesNestedHierarchy) + { + groupPath += exporterObject.name + "/"; + } + return groupPath; + } + + private void AddFileToProject(PBXProject project, string sourceFilePath, string targetGuid, string parentGroup, string[] compileFlags) + { + // Convert relative path to absolute path + if (!Path.IsPathRooted(sourceFilePath)) + { + sourceFilePath = Path.GetFullPath(sourceFilePath); + } + + // Copy the file to the project directory + string fileName = Path.GetFileName(sourceFilePath); + string destinationFilePath = sourceFilePath; + if (!IOServices.IsSubDirectory(OutputPath, destinationFilePath)) + { + string destinationFolder = IOServices.CombinePath(OutputPath, parentGroup); + destinationFilePath = CopyFileToProject(sourceFilePath, destinationFolder); + DebugLogger.Log(CoreLibraryDomain.Default, $"Adding file {fileName} to project."); + } + + // Add copied file to the project + string fileGuid = project.AddFile(FormatFilePathInProject(destinationFilePath, rooted: false), parentGroup + fileName); + project.AddFileToBuildWithFlags( + targetGuid, + fileGuid, + compileFlags.IsNullOrEmpty() ? string.Empty : string.Join(" ", compileFlags)); + + // Add search path project + string fileExtension = Path.GetExtension(destinationFilePath); + if (string.Equals(fileExtension, ".a", StringComparison.InvariantCultureIgnoreCase)) + { + CacheLibrarySearchPath(destinationFilePath); + } + else if (string.Equals(fileExtension, ".framework", StringComparison.InvariantCultureIgnoreCase)) + { + CacheFrameworkSearchPath(destinationFilePath); + project.AddFileToEmbedFrameworks(Project.GetMainTargetGuid(), fileGuid); + //@@project.AddFileToBuildSection(targetGuid, project.GetFrameworksBuildPhaseByTarget(targetGuid), fileGuid); + } + } + + private void AddFolderToProject(PBXProject project, string sourceFolder, string targetGuid, string parentGroup, string[] compileFlags) + { + // Check whether given folder is valid + var sourceFolderInfo = new DirectoryInfo(sourceFolder); + if (!sourceFolderInfo.Exists) return; + + // Add files placed within this folder + foreach (var fileInfo in FindFiles(sourceFolderInfo)) + { + AddFileToProject( + project, + fileInfo.FullName, + targetGuid, + parentGroup, + compileFlags); + } + + // add folders placed within this folder + foreach (var subFolderInfo in sourceFolderInfo.GetDirectories()) + { + if(subFolderInfo.Name.EndsWith(".framework")) + { + AddFileToProject( + project, + subFolderInfo.FullName, + targetGuid, + parentGroup, + compileFlags); + } + else + { + string folderGroup = parentGroup + subFolderInfo.Name + "/"; + + AddFolderToProject( + project, + subFolderInfo.FullName, + targetGuid, + folderGroup, + compileFlags); + } + } + } + + private string CopyFileToProject(string filePath, string targetFolder) + { +#if NATIVE_PLUGINS_DEBUG + return filePath; +#else + // create target folder directory, incase if it doesn't exist + if (!IOServices.DirectoryExists(targetFolder)) + { + IOServices.CreateDirectory(targetFolder); + } + + // copy specified file + string fileName = Path.GetFileName(filePath); + string destPath = Path.Combine(targetFolder, fileName); + + DebugLogger.Log(CoreLibraryDomain.NativePlugins, $"Copying file {filePath} to {destPath}."); + FileUtil.CopyFileOrDirectory(filePath, destPath); + + return destPath; +#endif + } + + private string GetFilePathInProject(string sourcePath, string parentFolder, string parentGroup) + { +#if NATIVE_PLUGINS_DEBUG + return sourcePath; +#else + string relativePath = IOServices.GetRelativePath(parentFolder, sourcePath); + string destinationFolder = IOServices.CombinePath(OutputPath, parentGroup); + return IOServices.CombinePath(destinationFolder, relativePath); +#endif + } + + private string FormatFilePathInProject(string path, bool rooted = true) + { +#if NATIVE_PLUGINS_DEBUG + return path; +#else + if (path.Contains("$(inherited)")) + { + return path; + } + + string relativePathToProject = IOServices.GetRelativePath(OutputPath, path); + return rooted ? Path.Combine("$(SRCROOT)", relativePathToProject) : relativePathToProject; +#endif + } + + private void CacheLibrarySearchPath(string path) + { + string directoryPath = Path.GetDirectoryName(path); + m_librarySearchPaths.AddUnique(directoryPath); + } + + private void CacheFrameworkSearchPath(string path) + { + string directoryPath = Path.GetDirectoryName(path); + m_frameworkSearchPaths.AddUnique(directoryPath); + } + + private FileInfo[] FindFiles(DirectoryInfo folder) + { + return folder.GetFiles().Where((fileInfo) => + { + string fileExtension = fileInfo.Extension; + return !Array.Exists(kIgnoreFileExtensions, (ignoreExt) => string.Equals(fileExtension, ignoreExt, StringComparison.InvariantCultureIgnoreCase)); + }).ToArray(); + } + + // Added for supporting notification services custom sound files + private void CopyAssetsFromStreamingAssets() + { + string mainTargetGuid = Project.GetMainTargetGuid(); + + // Copy audio files from streaming assets if any to Raw folder + string path = UnityEngine.Application.streamingAssetsPath; + if (IOServices.DirectoryExists(path)) + { + var files = System.IO.Directory.GetFiles(path); + string destinationFolder = OutputPath; + + var formats = new string[] + { + ".mp3", + ".wav", + ".ogg", + ".aiff" + }; + for (int i=0; i< files.Length; i++) + { + string extension = IOServices.GetExtension(files[i]); + if (formats.Contains(extension.ToLower())) + { + string destinationRelativePath = files[i].Replace(path, "."); + IOServices.CopyFile(files[i], IOServices.CombinePath(destinationFolder, IOServices.GetFileName(files[i]))); + DebugLogger.Log(CoreLibraryDomain.NativePlugins, $"Coping asset with relativePath: {destinationRelativePath}."); + Project.AddFileToBuild(mainTargetGuid, Project.AddFile(destinationRelativePath, destinationRelativePath)); + } + } + } + } + +#endregion + +#region Misc methods + + private void UpdateInfoPlistDocument() + { + DebugLogger.Log(CoreLibraryDomain.Default, "Updating plist configuration."); + + // Open the file + string plistPath = $"{OutputPath}/Info.plist"; + var plistDoc = new PlistDocument(); + plistDoc.ReadFromString(File.ReadAllText(plistPath)); + + // Send message to all the NativeProcessors + PluginsProcessors.ForEach( + (item) => + { + item.OnUpdateInfoPlist(plistDoc); + }); + + // Save changes + plistDoc.WriteToFile(plistPath); + } + + private void UpdateEntitlementsPlistDocument() + { + DebugLogger.Log(CoreLibraryDomain.Default, "Updating entitlements plist configuration."); + + // Open the file + string plistPath = Path.Combine(OutputPath, GetEntitlementsPath()); + var plistDoc = new PlistDocument(); + plistDoc.ReadFromString(File.ReadAllText(plistPath)); + + // Send message to all the NativeProcessors + PluginsProcessors.ForEach( + (item) => + { + item.OnUpdateEntitlementsPlist(plistDoc); + }); + + // Save changes + plistDoc.WriteToFile(plistPath); + } + + + private void UpdateProjectCapabilities() + { + var capabilityManager = new ProjectCapabilityManager( + ProjectFilePath, + GetEntitlementsPath(), + Project.GetMainTargetName(), + Project.GetMainTargetGuid()); + + // Add the capabilities specified in the Exporters + foreach (var exporterObject in ActiveExporterObjects) + { + if (!exporterObject.IsEnabled) continue; + + foreach (var capability in exporterObject.Capabilities) + { + switch (capability.Type) + { + case PBXCapabilityType.GameCenter: + capabilityManager.AddGameCenter(); + break; + + case PBXCapabilityType.iCloud: + capabilityManager.AddiCloud(enableKeyValueStorage: true, enableiCloudDocument: false, enablecloudKit: false, addDefaultContainers: false, customContainers: null); + break; + + case PBXCapabilityType.InAppPurchase: + capabilityManager.AddInAppPurchase(); + break; + + case PBXCapabilityType.PushNotifications: + capabilityManager.AddPushNotifications(Debug.isDebugBuild); + capabilityManager.AddBackgroundModes(BackgroundModesOptions.RemoteNotifications); + break; + + case PBXCapabilityType.AssociatedDomains: + var associatedDomainsEntitlement = capability.AssociatedDomainsEntitlement; + capabilityManager.AddAssociatedDomains(domains: associatedDomainsEntitlement.Domains); + break; + + default: + throw VBException.SwitchCaseNotImplemented(capability.Type); + } + } + } + + // Send message to all the NativeProcessors + PluginsProcessors.ForEach( + (item) => + { + item.OnUpdateCapabilities(capabilityManager); + }); + + // Save changes + capabilityManager.WriteToFile(); + } + + private void UpdateMacroDefinitions() + { + var preprocessorDirectivesManager = new MacroDefinitionsManager( + path: kPreprocessorFilePath, + headerComments: "// NPConfig.h" + + "// Native Plugins" + + "//" + + "// Created by Ashwin kumar" + + "// Copyright (c) 2024 Voxel Busters Interactive LLP. All rights reserved." + + "//"); + + // Add macros from Settings file + foreach (var exporterObject in ActiveExporterObjects) + { + var macros = exporterObject.Macros; + foreach (var entry in macros) + { + preprocessorDirectivesManager.AddMacro($"{entry.Key} {entry.Value}"); + } + } + + // Send message to add macros to all the Processor instances + PluginsProcessors.ForEach((item) => item.OnUpdateMacroDefinitions(preprocessorDirectivesManager)); + + // Serialize + preprocessorDirectivesManager.WriteToFile(); + } + + private string GetEntitlementsPath() + { + var mainTargetGuid = Project.GetMainTargetGuid(); + var mainTargetName = Project.GetMainTargetName(); + + var relativePath = Project.GetBuildPropertyForAnyConfig(mainTargetGuid, BuildConfigurationKey.kCodeSignEntitlements); + if (relativePath != null) + { + var fullPath = Path.Combine(OutputPath, relativePath); + if (IOServices.FileExists(fullPath)) + { + return relativePath;//This should be relative path (if we pass full path it behaves differently on windows as internally PBXPath.Combine only checks for starting / but not windows style) + } + } + + // Make new file + var entitlementsPath = Path.Combine(OutputPath, mainTargetName, $"{mainTargetName}.entitlements"); + var entitlementsPlist = new PlistDocument(); + entitlementsPlist.WriteToFile(entitlementsPath); + + // Copy the entitlement file to the xcode project + var entitlementFileName = Path.GetFileName(entitlementsPath); + var relativeDestination = $"{mainTargetName}/{entitlementFileName}"; + + // Add the pbx configs to include the entitlements files on the project + Project.AddFile(relativeDestination, entitlementFileName); + Project.SetBuildProperty(mainTargetGuid, BuildConfigurationKey.kCodeSignEntitlements, relativeDestination); + + return relativeDestination; + } + + private void ClearPluginsData() + { + string pluginExportPath = Path.Combine(OutputPath, kPluginRelativePath); + IOServices.DeleteDirectory(pluginExportPath); + } + +#endregion + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsManager.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsManager.cs.meta new file mode 100644 index 00000000..8aa3fc48 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a56154e6bd4cf4a30b3d500cab5bf553 +timeCreated: 1596392066 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsProcessor.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsProcessor.cs new file mode 100644 index 00000000..ce784717 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsProcessor.cs @@ -0,0 +1,31 @@ +#if UNITY_IOS || UNITY_TVOS +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using UnityEditor.Build; +using UnityEditor.Build.Reporting; +using UnityEditor.iOS.Xcode; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Xcode +{ + public abstract class PBXNativePluginsProcessor : NativePluginsProcessor + { +#region Postprocess message methods + + public virtual void OnUpdateInfoPlist(PlistDocument doc) + { } + + public virtual void OnUpdateEntitlementsPlist(PlistDocument doc) + { } + + public virtual void OnUpdateCapabilities(ProjectCapabilityManager capabilityManager) + { } + + public virtual void OnUpdateMacroDefinitions(MacroDefinitionsManager manager) + { } + +#endregion + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsProcessor.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsProcessor.cs.meta new file mode 100644 index 00000000..76b1069f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXNativePluginsProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cdde9fcb9dc7547eeb61c6fafbee3906 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXProjectExtensions.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXProjectExtensions.cs new file mode 100644 index 00000000..7d785a69 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXProjectExtensions.cs @@ -0,0 +1,87 @@ +#if UNITY_IOS || UNITY_TVOS +using System.IO; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor.iOS.Xcode; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Xcode +{ + public static class PBXProjectExtensions + { + #region Search paths + + public static void AddHeaderSearchPath(this PBXProject project, string targetGuid, string headerSearchPath) + { + AddBuildProperty(project, targetGuid, BuildConfigurationKey.kHeaderSearchPaths, GetPlatformCompatiblePath(headerSearchPath)); + } + + public static void AddLibrarySearchPath(this PBXProject project, string targetGuid, string librarySearchPath) + { + AddBuildProperty(project, targetGuid, BuildConfigurationKey.kLibrarySearchPaths, GetPlatformCompatiblePath(librarySearchPath), false, false); + } + + public static void AddFrameworkSearchPath(this PBXProject project, string targetGuid, string frameworkSearchPath) + { + AddBuildProperty(project, targetGuid, BuildConfigurationKey.kFrameworkSearchPaths, GetPlatformCompatiblePath(frameworkSearchPath), false, false); + } + + private static void AddBuildProperty(PBXProject project, string targetGuid, string key, string value, bool recursive = true, bool quoted = true) + { + // add recursive symbol for folder paths + if (recursive) + { + value = value.TrimEnd('/') + "/**"; + } + + // xcode uses space as the delimiter here, so if there's a space in the filename, we must add quote + if (quoted) + { + if (value.EndsWith("/**")) + { + value = "\"" + value.Replace("/**", "/\"/**"); + } + else + { + value = "\"" + value + "\""; + } + } + + project.AddBuildProperty(targetGuid, key, value); + } + + private static string GetPlatformCompatiblePath(string path) + { + path = path.Replace("\\", "/"); + return path; + } + + #endregion + + #region Target methods + + public static string GetMainTargetName(this PBXProject project) +#if UNITY_2019_3_OR_NEWER + => "Unity-iPhone"; +#else + => PBXProject.GetUnityTargetName(); +#endif + + + public static string GetMainTargetGuid(this PBXProject project) +#if UNITY_2019_3_OR_NEWER + => project.GetUnityMainTargetGuid(); +#else + => project.TargetGuidByName(PBXProject.GetUnityTargetName()); +#endif + + public static string GetFrameworkGuid(this PBXProject project) +#if UNITY_2019_3_OR_NEWER + => project.GetUnityFrameworkTargetGuid(); +#else + => project.TargetGuidByName(PBXProject.GetUnityTargetName()); +#endif + + #endregion + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXProjectExtensions.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXProjectExtensions.cs.meta new file mode 100644 index 00000000..39a3a33a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXProjectExtensions.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8b30711eaf30a4280a3aa9769c8dc2bf +timeCreated: 1578831715 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXTargetMembership.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXTargetMembership.cs new file mode 100644 index 00000000..46913de3 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXTargetMembership.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + [System.Flags] + public enum PBXTargetMembership + { + UnityIphone = 1 << 0, + + UnityIphoneTests = 1 << 1, + + UnityFramework = 1 << 2, + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXTargetMembership.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXTargetMembership.cs.meta new file mode 100644 index 00000000..80832766 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PBXTargetMembership.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7dcbdc94d28c5497cb93ba60167f4c8a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PlistUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PlistUtility.cs new file mode 100644 index 00000000..a2562cca --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PlistUtility.cs @@ -0,0 +1,76 @@ +#if UNITY_IOS || UNITY_TVOS +using System.Collections.Generic; +using UnityEngine; +using UnityEditor.iOS.Xcode; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Xcode +{ + public static class PlistUtility + { + #region Plist extensions + + public static bool TryGetElement(this PlistElementDict dict, string key, out T element) where T : PlistElement + { + IDictionary dictionary = dict.values; + PlistElement value; + if (dictionary.TryGetValue(key, out value)) + { + element = (T)value; + return true; + } + + element = default(T); + return false; + } + + public static bool Contains(this PlistElementArray array, string value) + { + List valueList = array.values; + for (int iter = 0; iter < valueList.Count; iter++) + { + if (valueList[iter].AsString() == value) + { + return true; + } + } + + return false; + } + + public static void AddUniqueString(this PlistElementArray array, string value) + { + foreach (PlistElement each in array.values) + { + if (each is PlistElementString) + { + string existingValue = each.AsString(); + if (!string.IsNullOrEmpty(existingValue) && existingValue.Equals(value)) + { + return; + } + } + } + + // We reached here as value doesn't exist + array.AddString(value); + } + + // This add new array if the key doesn't exist. If exists, returns it. + public static PlistElementArray GetArray(this PlistElementDict source, string key) + { + PlistElementArray array = null; + if (source.values.ContainsKey(key)) + { + array = source.values[key] as PlistElementArray; + } + if (array == null) + { + array = source.CreateArray(key); + } + return array; + } + + #endregion + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PlistUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PlistUtility.cs.meta new file mode 100644 index 00000000..dc11eace --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/PlistUtility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2db1aba3287b94a7cad66d73f74f5c29 +timeCreated: 1576070995 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/ProjectCapabilityManagerExtensions.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/ProjectCapabilityManagerExtensions.cs new file mode 100644 index 00000000..1aee4712 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/ProjectCapabilityManagerExtensions.cs @@ -0,0 +1,48 @@ +#if UNITY_IOS || UNITY_TVOS +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using UnityEditor.iOS.Xcode; +using UnityEngine; + +using CapabilityType = UnityEditor.iOS.Xcode.PBXCapabilityType; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build.Xcode +{ + public static class ProjectCapabilityManagerExtensions + { + private const BindingFlags NonPublicInstanceBinding = BindingFlags.NonPublic | BindingFlags.Instance; + + public static void ForceAddInAppPurchase(this ProjectCapabilityManager manager) + { + AddCapability(manager, "com.apple.InAppPurchase", true, "StoreKit.framework", false); + } + + public static void ForceAddGameCenter(this ProjectCapabilityManager manager) + { + AddCapability(manager, "com.apple.GameCenter.iOS", true, "GameKit.framework", false); + } + + private static void AddCapability(this ProjectCapabilityManager manager, string id, bool requiresEntitlements, string framework = "", bool optionalFramework = false) + { + var managerType = typeof(ProjectCapabilityManager); + var projectField = managerType.GetField("project", NonPublicInstanceBinding); + var targetGuidField = managerType.GetField("m_TargetGuid", NonPublicInstanceBinding); + + if (projectField == null || targetGuidField == null) return; + + var project = projectField.GetValue(manager) as PBXProject; + if (project != null) + { + var mainTargetGuid = targetGuidField.GetValue(manager) as string; + var type = typeof(CapabilityType); + var types = new [] { typeof(string), typeof(bool), typeof(string), typeof (bool) }; + var parameters = new object[] { id, requiresEntitlements, framework, optionalFramework }; + var pbxCapabilityType = (CapabilityType)type.GetConstructor(NonPublicInstanceBinding, null, types, null).Invoke(parameters); + project.AddCapability(mainTargetGuid, pbxCapabilityType); + } + + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/ProjectCapabilityManagerExtensions.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/ProjectCapabilityManagerExtensions.cs.meta new file mode 100644 index 00000000..182b5f32 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/BuildPipeline/Xcode/ProjectCapabilityManagerExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb1eb60d5919f46368453bcd159b6680 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/DemoKit.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/DemoKit.meta new file mode 100644 index 00000000..c37dbc91 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/DemoKit.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e8e8e5516925c4111b4eb085e5f79844 +folderAsset: yes +timeCreated: 1577520307 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/DemoKit/EditorDemoManager.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/DemoKit/EditorDemoManager.cs new file mode 100644 index 00000000..0cb81a04 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/DemoKit/EditorDemoManager.cs @@ -0,0 +1,24 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using VoxelBusters.CoreLibrary.NativePlugins.DemoKit; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.DemoKit +{ + public class EditorDemoManager : MonoBehaviour + { + [UnityEditor.Callbacks.DidReloadScripts] + private static void OnScriptsReloaded() + { + if (EditorApplication.isPlaying) + { + DemoPanel panel = FindFirstObjectByType(); + if (panel != null) + { + panel.Invoke(nameof(DemoPanel.Rebuild), 5f); + } + } + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/DemoKit/EditorDemoManager.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/DemoKit/EditorDemoManager.cs.meta new file mode 100644 index 00000000..af852dce --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/DemoKit/EditorDemoManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 595bcac18d85a4e45b8ea5ddf0c887ba +timeCreated: 1577520359 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/NativePluginsPackageLayout.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/NativePluginsPackageLayout.cs new file mode 100644 index 00000000..57513cf8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/NativePluginsPackageLayout.cs @@ -0,0 +1,13 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins +{ + public static class NativePluginsPackageLayout + { + public static string ExtrasPath { get { return "Assets/Plugins/VoxelBusters/CoreLibrary"; } } + + public static string IosPluginPath { get { return ExtrasPath + "/Plugins/iOS"; } } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/NativePluginsPackageLayout.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/NativePluginsPackageLayout.cs.meta new file mode 100644 index 00000000..0f5458e0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/NativePluginsPackageLayout.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd2cbbb02770345a08fd2cb055bf6717 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/ObjectiveCBindingsGenerator.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/ObjectiveCBindingsGenerator.cs new file mode 100644 index 00000000..7762316c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/ObjectiveCBindingsGenerator.cs @@ -0,0 +1,340 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using UnityEngine; +using VoxelBusters.CoreLibrary.NativePlugins; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.Build +{ + public class ObjectiveCBindingsWriter : INativeBindingsWriter + { + #region Static fields + + private static Dictionary s_dataTypeMap = new Dictionary() + { + { typeof(void), "void" }, + { typeof(bool), "bool" }, + { typeof(int), "int" }, + { typeof(long), "long" }, + { typeof(float), "float" }, + { typeof(double), "double" }, + { typeof(string), "const char*" }, + { typeof(IntPtr), "NPIntPtr" }, + { typeof(Delegate), "void*" }, + }; + + private static Dictionary s_defaultMethodImplMap = new Dictionary() + { + { typeof(void), "" }, + { typeof(bool), "return false;" }, + { typeof(int), "return 0;" }, + { typeof(long), "return 0;" }, + { typeof(float), "return 0;" }, + { typeof(double), "return 0;" }, + { typeof(string), "return nil;" }, + { typeof(IntPtr), "return nil;" }, + { typeof(Delegate), "return nil;" }, + }; + + #endregion + + #region Fields + + private string m_headerFilePath; + + private StreamWriter m_headerFileWriter; + + private string m_implementationFilePath; + + private StreamWriter m_implementationFileWriter; + + private NativeBindingsGeneratorOptions m_options; + + #endregion + + #region Constructors + + public ObjectiveCBindingsWriter(string path, + string fileName, + NativeBindingsGeneratorOptions options) + { + // Set properties + m_options = options; + if (NeedsHeaderFile()) + { + m_headerFilePath = IOServices.CombinePath(path, $"{fileName}.h"); + m_headerFileWriter = new StreamWriter(m_headerFilePath, append: false); + } + if (NeedsSourceFile()) + { + m_implementationFilePath = IOServices.CombinePath(path, $"{fileName}.mm"); + m_implementationFileWriter = new StreamWriter(m_implementationFilePath, append: false); + } + } + + #endregion + + #region Static methods + + private static bool IsStructType(Type type) => type.IsValueType && !type.IsPrimitive && !type.IsEnum; + + #endregion + + #region Private methods + + private bool NeedsHeaderFile() => m_options.HasFlag(NativeBindingsGeneratorOptions.Header); + + private bool NeedsSourceFile() => m_options.HasFlag(NativeBindingsGeneratorOptions.Source); + + #endregion + + #region INativeBindingsGenerator implementation + + public void WriteStart(string product = null, + string author = null, + string copyrights = null) + { + // Header file + string headerName = null; + if (NeedsHeaderFile()) + { + headerName = IOServices.GetFileName(m_headerFilePath); + WriteHeaderComments(m_headerFileWriter, + headerName, + product, + author, + copyrights); + m_headerFileWriter.WriteLine(); + + WriteHeaderImports(m_headerFileWriter, + "#import ", + "#import \"NPDefines.h\"", + "#import \"NPUnityDataTypes.h\""); + m_headerFileWriter.WriteLine(); + } + + // Implementation file + if (NeedsSourceFile()) + { + var implementationName = IOServices.GetFileName(m_implementationFilePath); + WriteHeaderComments(m_implementationFileWriter, + implementationName, + product, + author, + copyrights); + m_implementationFileWriter.WriteLine(); + + if (headerName != null) + { + WriteHeaderImports(m_implementationFileWriter, + $"#import \"{headerName}\""); + } + WriteHeaderImports(m_implementationFileWriter, + "#import \"NPDefines.h\"", + "#import \"NPUnityDataTypes.h\""); + m_implementationFileWriter.WriteLine(); + } + } + + public void WriteCustomTypeDeclarations(Type[] customTypes) + { + var writer = m_headerFileWriter ?? m_implementationFileWriter; + if (writer == null) return; + + for (int iter = 0; iter < customTypes.Length; iter++) + { + var item = customTypes[iter]; + if (iter != 0) + { + writer.WriteLine(); + } + + if (IsStructType(item)) + { + WriteStructTypeDeclaration(writer, item); + } + } + writer.WriteLine(); + } + + public void WriteMethod(MethodInfo method) + { + var returnTypeName = GetTypeDefinition(method.ReturnType); + string methodName = method.Name; + var parameters = Array.ConvertAll(method.GetParameters(), + (pItem) => GetParameterDefinition(pItem)); + var methodBody = GetDefaultMethodBodyDefinition(method.ReturnType); + var methodSignature = $"{returnTypeName} {methodName}({string.Join(", ", parameters)})"; + + // Header section + if (NeedsHeaderFile()) + { + m_headerFileWriter.WriteLine($"{methodSignature};"); + } + + // Implementation section + if (NeedsSourceFile()) + { + m_implementationFileWriter.WriteLine($"NPBINDING DONTSTRIP {methodSignature}\n{methodBody}"); + m_implementationFileWriter.WriteLine(); + } + } + + public void WriteEnd(out string[] files) + { + var fileList = new List(); + if (NeedsHeaderFile()) + { + fileList.Add(m_headerFilePath); + m_headerFileWriter.Close(); + } + if (NeedsSourceFile()) + { + fileList.Add(m_implementationFilePath); + m_implementationFileWriter.Close(); + } + + // Set reference values + files = fileList.ToArray(); + } + + #endregion + + #region Write methods + + private void WriteHeaderComments(StreamWriter writer, + string fileName, + string product, + string author, + string copyrights) + { + writer.WriteLine("//"); + writer.WriteLine($"// {fileName}"); + writer.WriteLine($"// {product}"); + writer.WriteLine("//"); + if (author != null) + { + writer.WriteLine($"// Created by {author} on {DateTime.Now.ToString("d")}."); + } + if (copyrights != null) + { + writer.WriteLine($"// {copyrights}"); + } + writer.WriteLine("//"); + } + + private void WriteHeaderImports(StreamWriter writer, + params string[] files) + { + foreach (var item in files) + { + writer.WriteLine($"{item}"); + } + } + + private void WriteStructTypeDeclaration(StreamWriter writer, + Type structType) + { + if(!TryGetBuiltinTypeName(structType, out string nativeTypeName)) + { + nativeTypeName = structType.Name; + } + + writer.WriteLine($"struct {nativeTypeName}"); + writer.WriteLine("{"); + writer.WriteLine("};"); + writer.WriteLine($"typedef struct {nativeTypeName} {nativeTypeName};"); + } + + #endregion + + #region Private methods + + private string GetTypeDefinition(Type type) + { + // Resolve the type to the suitable representation + if (typeof(Delegate).IsAssignableFrom(type)) + { + type = typeof(Delegate); + } + + // Match type to its representation in objective c + if (type.IsArray || type.IsByRef) + { + return GetTypeDefinition(type.GetElementType()) + "*"; + } + if (type.IsEnum) + { + return "int"; + } + + if (s_dataTypeMap.TryGetValue(type, out string typeName)) + { + return typeName; + } + if (TryGetBuiltinTypeName(type, out string nativeTypeName)) + { + return nativeTypeName; + } + return type.Name; + } + + private string GetParameterDefinition(ParameterInfo param) + { + var paramType = GetTypeDefinition(param.ParameterType); + var paramName = param.Name; + return $"{paramType} {paramName}"; + } + + public string GetDefaultMethodBodyDefinition(Type returnType) + { + string methodBody = null; + if (returnType.IsEnum) + { + returnType = typeof(int); + } + + if (!s_defaultMethodImplMap.TryGetValue(returnType, out methodBody)) + { + if (TryGetBuiltinTypeName(returnType, out string nativeType)) + { + if (returnType.IsValueType) + { + methodBody = $"return {nativeType}();"; + } + } + } + return string.IsNullOrEmpty(methodBody) + ? "{ }" + : $"{{\n\t{methodBody}\n}}"; + } + + private bool TryGetBuiltinTypeName(Type type, out string nativeType) + { + nativeType = null; + + if (type.FullName.StartsWith("VoxelBusters")) + { + if (IsStructType(type)) + { + string typeName = type.Name; + if (typeName.StartsWith("Unity")) + { + nativeType = $"NP{typeName}"; + return true; + } + if (typeName.StartsWith("Native")) + { + nativeType = typeName.Replace("Native", "NP"); + return true; + } + } + } + return false; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/ObjectiveCBindingsGenerator.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/ObjectiveCBindingsGenerator.cs.meta new file mode 100644 index 00000000..1b96d70b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/ObjectiveCBindingsGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49cf1f2da22e64129b00da78026ab7a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/PluginFeatureObject.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/PluginFeatureObject.cs new file mode 100644 index 00000000..455995e6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/PluginFeatureObject.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEngine; +using VoxelBusters.CoreLibrary.Editor.NativePlugins.Build; + +namespace VoxelBusters.CoreLibrary.Editor +{ + public abstract class PluginFeatureObject : ScriptableObject + { + #region + + [SerializeField] + protected bool m_isEnabled = true; + + #endregion + + #region Public methods + + public void EnableFeature(BuildTarget[] allowedImplementationTargets = null) + { + /* allowedImplementationTargets + * We will look into the Implementations/iOS or Android or Windows and enable those libraries alone and disable rest. + * + */ + m_isEnabled = true; + UpdateAsmdef((AssemblyDefinitionProxy proxy) => proxy.IncludeAllPlatforms()); + GenerateLinkXml(); + } + + public void DisableFeature() + { + m_isEnabled = false; + UpdateAsmdef((AssemblyDefinitionProxy proxy) => proxy.ExcludeAllPlatforms()); + } + + #endregion + + + #region Protected methods + + protected virtual void UpdateLinkXmlWriter(LinkXmlWriter xml) { } + + #endregion + + #region Private methods + + private AssemblyDefinitionProxy GetAsmdefProxy() + { + string directory = GetFeatureDirectory(); + var proxy = new AssemblyDefinitionProxy(directory); + return proxy; + } + + private string GetFeatureDirectory() + { + var path = AssetDatabase.GetAssetPath(this); + return IOServices.GetDirectoryName(path); + } + + private void UpdateAsmdef(Action action) + { + var proxy = GetAsmdefProxy(); + action.Invoke(proxy); + proxy.Save(); + } + + private void GenerateLinkXml() + { + string directory = GetFeatureDirectory(); + var linkXml = new LinkXmlWriter(IOServices.CombinePath(directory, "link.xml")); + UpdateLinkXmlWriter(linkXml); + linkXml.WriteToFile(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/PluginFeatureObject.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/PluginFeatureObject.cs.meta new file mode 100644 index 00000000..b40e28d7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/PluginFeatureObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f8c6efc950e3e4442b19e7bc63fe685a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.Database.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.Database.cs new file mode 100644 index 00000000..5b67c20c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.Database.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins +{ + public partial class SimulatorServices + { + [Serializable] + public class Database + { + #region Fields + + [SerializeField] + private List m_dataItems = new List(); + + #endregion + + #region Data methods + + public void SetObject(string key, object obj) + { + // convert object to serialized form + string serializedData = JsonUtility.ToJson(obj); + var newItem = new StringKeyValuePair() { Key = key, Value = serializedData }; + + // check whether key exists + int keyIndex = FindItemIndex(key); + if (keyIndex == -1) + { + m_dataItems.Add(newItem); + } + else + { + m_dataItems[keyIndex] = newItem; + } + } + + public T GetObject(string key) + { + int keyIndex = FindItemIndex(key); + if (keyIndex != -1) + { + string serializedData = m_dataItems[keyIndex].Value; + return JsonUtility.FromJson(serializedData); + } + + return default(T); + } + + public void RemoveObject(string key) + { + int keyIndex = FindItemIndex(key); + if (keyIndex != -1) + { + m_dataItems.RemoveAt(keyIndex); + } + } + + public void RemoveAllObjects() + { + // remove existing data + m_dataItems.Clear(); + } + + #endregion + + #region Private methods + + private int FindItemIndex(string key) + { + return m_dataItems.FindIndex((item) => string.Equals(item.Key, key)); + } + + #endregion + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.Database.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.Database.cs.meta new file mode 100644 index 00000000..419e9886 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.Database.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4f2bd32a288dd4c8b8fb30e1d32f0eed +timeCreated: 1576668119 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.cs new file mode 100644 index 00000000..08d0b2f8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.cs @@ -0,0 +1,102 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using VoxelBusters.CoreLibrary; +using VoxelBusters.CoreLibrary.Editor; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins +{ + public partial class SimulatorServices + { + #region Constants + + private const string kSimulatorDataFilePath = "Library/VoxelBusters/NativePlugins/SimulatorData.json"; + + #endregion + + #region Static + + private static Database s_database; + + #endregion + + #region Public methods + + public static Texture2D GetRandomImage() + { + // select a random image file + var textureGuids = AssetDatabase.FindAssets("t:texture"); + int randomIndex = Random.Range(0, textureGuids.Length); + var imagePath = AssetDatabase.GUIDToAssetPath(textureGuids[randomIndex]); + + // create file from texture data + var fileData = IOServices.ReadFileData(imagePath); + var texture = new Texture2D(2, 2); + texture.LoadImage(fileData, false); + + return texture; + } + + #endregion + + #region Data management methods + + public static void SetObject(string key, object obj) + { + InitIfRequired(); + + s_database.SetObject(key, obj); + SetDirty(); + } + + public static T GetObject(string key) + { + InitIfRequired(); + + return s_database.GetObject(key); + } + + public static void RemoveObject(string key) + { + InitIfRequired(); + + s_database.RemoveObject(key); + SetDirty(); + } + + public static void RemoveAllObjects() + { + InitIfRequired(); + + s_database.RemoveAllObjects(); + SetDirty(); + } + + #endregion + + #region Private methods + + private static void InitIfRequired() + { + if (s_database != null) return; + + // check whether serialized data exists + s_database = IOServices.FileExists(kSimulatorDataFilePath) + ? JsonUtility.FromJson(IOServices.ReadFile(kSimulatorDataFilePath)) + : new Database(); + } + + private static void SetDirty() + { + var parentFolder = IOServices.GetDirectoryName(kSimulatorDataFilePath); + IOServices.CreateDirectory(parentFolder, overwrite: false); + + // serializes the data + var fileData = JsonUtility.ToJson(s_database); + IOServices.CreateFile(kSimulatorDataFilePath, fileData); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.cs.meta new file mode 100644 index 00000000..14946fd1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/SimulatorServices.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 35ce05fae80b848a68c14b6ccc305276 +timeCreated: 1576668119 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/UnityUI.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/UnityUI.meta new file mode 100644 index 00000000..c4cd6837 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/UnityUI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eb314720b73d244a59985796625485ea +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/UnityUI/UnityUIEditorUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/UnityUI/UnityUIEditorUtility.cs new file mode 100644 index 00000000..a303c5b9 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/UnityUI/UnityUIEditorUtility.cs @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using VoxelBusters.CoreLibrary.Editor; +using VoxelBusters.CoreLibrary.NativePlugins; +using VoxelBusters.CoreLibrary.NativePlugins.UnityUI; + +namespace VoxelBusters.CoreLibrary.Editor.NativePlugins.UnityUI +{ + public static class UnityUIEditorUtility + { + #region Static methods + + public static UnityUIRenderer LoadRendererPrefab() + { + return LoadPrefab("UnityUIRenderer.prefab"); + } + + public static UnityUIAlertDialog LoadAlertDialogPrefab() + { + return LoadPrefab("UnityUIAlertDialog.prefab"); + } + + private static T LoadPrefab(string name) where T : Object + { + string prefabPath = CoreLibrarySettings.Package.GetFullPath($"Prefabs/{name}"); + return AssetDatabase.LoadAssetAtPath(prefabPath); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/UnityUI/UnityUIEditorUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/UnityUI/UnityUIEditorUtility.cs.meta new file mode 100644 index 00000000..a4f0db23 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/UnityUI/UnityUIEditorUtility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a0e4454dec3164cec87995fda698d0be +timeCreated: 1578296765 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/VoxelBusters.CoreLibrary.Editor.NativePlugins.asmdef b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/VoxelBusters.CoreLibrary.Editor.NativePlugins.asmdef new file mode 100644 index 00000000..59e6bd24 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/VoxelBusters.CoreLibrary.Editor.NativePlugins.asmdef @@ -0,0 +1,18 @@ +{ + "name": "VoxelBusters.CoreLibrary.Editor.NativePlugins", + "references": [ + "VoxelBusters.CoreLibrary", + "VoxelBusters.CoreLibrary.Editor", + "VoxelBusters.CoreLibrary.NativePlugins" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/VoxelBusters.CoreLibrary.Editor.NativePlugins.asmdef.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/VoxelBusters.CoreLibrary.Editor.NativePlugins.asmdef.meta new file mode 100644 index 00000000..d846a775 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Editor/NativePlugins/VoxelBusters.CoreLibrary.Editor.NativePlugins.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b26b55e8c8c3048eebf8103d71fd130c +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources.meta new file mode 100644 index 00000000..f1b8f128 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d113a24f748704384af00b11520c8d62 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures.meta new file mode 100644 index 00000000..d63bc906 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 86bb6eec12d0f4d908b44114e42e7848 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures/toggle-off.png b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures/toggle-off.png new file mode 100644 index 0000000000000000000000000000000000000000..2ef3f78ce62211175df74baf0da8daa35e08ae38 GIT binary patch literal 3929 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 literal 0 HcmV?d00001 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures/toggle-off.png.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures/toggle-off.png.meta new file mode 100644 index 00000000..cd308837 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures/toggle-off.png.meta @@ -0,0 +1,159 @@ +fileFormatVersion: 2 +guid: 83c76dd713f944d49b6658d19511efca +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: tvOS + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures/toggle-on.png b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures/toggle-on.png new file mode 100644 index 0000000000000000000000000000000000000000..9177bfd4ca3c1977dfaa2ae1357e75925e7f7c87 GIT binary patch literal 3421 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 literal 0 HcmV?d00001 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures/toggle-on.png.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures/toggle-on.png.meta new file mode 100644 index 00000000..a8df2d86 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/EditorResources/Textures/toggle-on.png.meta @@ -0,0 +1,159 @@ +fileFormatVersion: 2 +guid: ba3d6a006944a449789813ea5f087c3b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: tvOS + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras.meta new file mode 100644 index 00000000..ce818d8e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a3654df5d282e405ab04e2a50e0e2e23 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers.meta new file mode 100644 index 00000000..6d3ce7a4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a32f58ee149ab423abc73d74d4ae7e5e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultJsonServiceProvider.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultJsonServiceProvider.cs new file mode 100644 index 00000000..b565949f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultJsonServiceProvider.cs @@ -0,0 +1,44 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using JsonUtility = VoxelBusters.CoreLibrary.Parser.JsonUtility; + +namespace VoxelBusters.CoreLibrary.Helpers +{ + public class DefaultJsonServiceProvider : IJsonServiceProvider + { + #region Static methods + +#if UNITY_EDITOR + [UnityEditor.InitializeOnLoadMethod] +#endif + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] + private static void OnLoad() + { + if (ExternalServiceProvider.JsonServiceProvider != null) + { + return; + } + + // set default service provider + ExternalServiceProvider.JsonServiceProvider = new DefaultJsonServiceProvider(); + } + + #endregion + + #region IJsonServiceProvider implementation + + public string ToJson(object obj) + { + return JsonUtility.ToJson(obj); + } + + public object FromJson(string jsonString) + { + return JsonUtility.FromJson(jsonString); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultJsonServiceProvider.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultJsonServiceProvider.cs.meta new file mode 100644 index 00000000..ea1a9b16 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultJsonServiceProvider.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1f5c1b36bdb714b7dafa07c41c9932c2 +timeCreated: 1579703881 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultLocalisationServiceProvider.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultLocalisationServiceProvider.cs new file mode 100644 index 00000000..a29e1e35 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultLocalisationServiceProvider.cs @@ -0,0 +1,34 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Helpers +{ + public class DefaultLocalisationServiceProvider : ILocalisationServiceProvider + { + #region Static methods + + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] + private static void OnLoad() + { + if (ExternalServiceProvider.LocalisationServiceProvider != null) + { + return; + } + + // set default service provider + ExternalServiceProvider.LocalisationServiceProvider = new DefaultLocalisationServiceProvider(); + } + + #endregion + + #region ILocalisationServiceProvider implementation + + public string GetLocalisedString(string key, string defaultValue) + { + return defaultValue; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultLocalisationServiceProvider.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultLocalisationServiceProvider.cs.meta new file mode 100644 index 00000000..f9deca9c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultLocalisationServiceProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 844b91e0406484dfeab3f65932a1aac4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultSaveServiceProvider.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultSaveServiceProvider.cs new file mode 100644 index 00000000..8d929789 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultSaveServiceProvider.cs @@ -0,0 +1,94 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.Helpers +{ + public class DefaultSaveServiceProvider : ISaveServiceProvider + { + #region Static methods + + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] + private static void OnLoad() + { + if (ExternalServiceProvider.SaveServiceProvider != null) + { + return; + } + + // set default service provider + ExternalServiceProvider.SaveServiceProvider = new DefaultSaveServiceProvider(); + } + + #endregion + + #region ISaveServiceProvider implementation + + public int GetInt(string key, int defaultValue = 0) + { + return PlayerPrefs.GetInt(key, defaultValue); + } + + public float GetFloat(string key, float defaultValue = 0f) + { + return PlayerPrefs.GetFloat(key, defaultValue); + } + + public string GetString(string key, string defaultValue = null) + { + return PlayerPrefs.GetString(key, defaultValue); + } + + public string[] GetStringArray(string key, string[] defaultValue = null) + { + string arrayStr = PlayerPrefs.GetString(key, null); + if (!string.IsNullOrEmpty(arrayStr)) + { + IList jsonList = (IList)ExternalServiceProvider.JsonServiceProvider.FromJson(arrayStr); + + // convert to string array + string[] array = new string[jsonList.Count]; + for (int iter = 0; iter < jsonList.Count; iter++) + { + array[iter] = (string)jsonList[iter]; + } + return array; + } + + return null; + } + + public void SetInt(string key, int value) + { + PlayerPrefs.SetInt(key, value); + } + + public void SetFloat(string key, float value) + { + PlayerPrefs.SetFloat(key, value); + } + + public void SetString(string key, string value) + { + PlayerPrefs.SetString(key, value); + } + + public void SetStringArray(string key, string[] value) + { + string arrayStr = (null == value) ? null : ExternalServiceProvider.JsonServiceProvider.ToJson(value); + PlayerPrefs.SetString(key, arrayStr); + } + + public void RemoveKey(string key) + { + PlayerPrefs.DeleteKey(key); + } + + public void Save() + { + PlayerPrefs.Save(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultSaveServiceProvider.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultSaveServiceProvider.cs.meta new file mode 100644 index 00000000..84500dc4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Extras/Helpers/DefaultSaveServiceProvider.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b4f01a076e9304e249847cfa914a928e +timeCreated: 1579703881 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Fonts.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Fonts.meta new file mode 100644 index 00000000..55fa7a62 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Fonts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e19966c47dd847799984055c12681e1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Fonts/Lato-Regular.ttf b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Fonts/Lato-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..33eba8b192384487f04951539f13bf1f8dd9f9cb GIT binary patch literal 75136 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 ojk(g9PAtLVP?*9aY%s*7) +# include +#endif + +#pragma clang diagnostic ignored "-Wauto-import" +#if defined(__OBJC__) +#include +#endif +#if defined(__cplusplus) +#include +#include +#include +#include +#include +#include +#include +#else +#include +#include +#include +#include +#endif +#if defined(__cplusplus) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wnon-modular-include-in-framework-module" +#if defined(__arm64e__) && __has_include() +# include +#else +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreserved-macro-identifier" +# ifndef __ptrauth_swift_value_witness_function_pointer +# define __ptrauth_swift_value_witness_function_pointer(x) +# endif +# ifndef __ptrauth_swift_class_method_pointer +# define __ptrauth_swift_class_method_pointer(x) +# endif +#pragma clang diagnostic pop +#endif +#pragma clang diagnostic pop +#endif + +#if !defined(SWIFT_TYPEDEFS) +# define SWIFT_TYPEDEFS 1 +# if __has_include() +# include +# elif !defined(__cplusplus) +typedef uint_least16_t char16_t; +typedef uint_least32_t char32_t; +# endif +typedef float swift_float2 __attribute__((__ext_vector_type__(2))); +typedef float swift_float3 __attribute__((__ext_vector_type__(3))); +typedef float swift_float4 __attribute__((__ext_vector_type__(4))); +typedef double swift_double2 __attribute__((__ext_vector_type__(2))); +typedef double swift_double3 __attribute__((__ext_vector_type__(3))); +typedef double swift_double4 __attribute__((__ext_vector_type__(4))); +typedef int swift_int2 __attribute__((__ext_vector_type__(2))); +typedef int swift_int3 __attribute__((__ext_vector_type__(3))); +typedef int swift_int4 __attribute__((__ext_vector_type__(4))); +typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); +typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); +typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); +#endif + +#if !defined(SWIFT_PASTE) +# define SWIFT_PASTE_HELPER(x, y) x##y +# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) +#endif +#if !defined(SWIFT_METATYPE) +# define SWIFT_METATYPE(X) Class +#endif +#if !defined(SWIFT_CLASS_PROPERTY) +# if __has_feature(objc_class_property) +# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ +# else +# define SWIFT_CLASS_PROPERTY(...) +# endif +#endif +#if !defined(SWIFT_RUNTIME_NAME) +# if __has_attribute(objc_runtime_name) +# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) +# else +# define SWIFT_RUNTIME_NAME(X) +# endif +#endif +#if !defined(SWIFT_COMPILE_NAME) +# if __has_attribute(swift_name) +# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) +# else +# define SWIFT_COMPILE_NAME(X) +# endif +#endif +#if !defined(SWIFT_METHOD_FAMILY) +# if __has_attribute(objc_method_family) +# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) +# else +# define SWIFT_METHOD_FAMILY(X) +# endif +#endif +#if !defined(SWIFT_NOESCAPE) +# if __has_attribute(noescape) +# define SWIFT_NOESCAPE __attribute__((noescape)) +# else +# define SWIFT_NOESCAPE +# endif +#endif +#if !defined(SWIFT_RELEASES_ARGUMENT) +# if __has_attribute(ns_consumed) +# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed)) +# else +# define SWIFT_RELEASES_ARGUMENT +# endif +#endif +#if !defined(SWIFT_WARN_UNUSED_RESULT) +# if __has_attribute(warn_unused_result) +# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +# else +# define SWIFT_WARN_UNUSED_RESULT +# endif +#endif +#if !defined(SWIFT_NORETURN) +# if __has_attribute(noreturn) +# define SWIFT_NORETURN __attribute__((noreturn)) +# else +# define SWIFT_NORETURN +# endif +#endif +#if !defined(SWIFT_CLASS_EXTRA) +# define SWIFT_CLASS_EXTRA +#endif +#if !defined(SWIFT_PROTOCOL_EXTRA) +# define SWIFT_PROTOCOL_EXTRA +#endif +#if !defined(SWIFT_ENUM_EXTRA) +# define SWIFT_ENUM_EXTRA +#endif +#if !defined(SWIFT_CLASS) +# if __has_attribute(objc_subclassing_restricted) +# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA +# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA +# else +# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA +# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA +# endif +#endif +#if !defined(SWIFT_RESILIENT_CLASS) +# if __has_attribute(objc_class_stub) +# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub)) +# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME) +# else +# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) +# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME) +# endif +#endif +#if !defined(SWIFT_PROTOCOL) +# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA +# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA +#endif +#if !defined(SWIFT_EXTENSION) +# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) +#endif +#if !defined(OBJC_DESIGNATED_INITIALIZER) +# if __has_attribute(objc_designated_initializer) +# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) +# else +# define OBJC_DESIGNATED_INITIALIZER +# endif +#endif +#if !defined(SWIFT_ENUM_ATTR) +# if __has_attribute(enum_extensibility) +# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) +# else +# define SWIFT_ENUM_ATTR(_extensibility) +# endif +#endif +#if !defined(SWIFT_ENUM) +# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type +# if __has_feature(generalized_swift_name) +# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type +# else +# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) +# endif +#endif +#if !defined(SWIFT_UNAVAILABLE) +# define SWIFT_UNAVAILABLE __attribute__((unavailable)) +#endif +#if !defined(SWIFT_UNAVAILABLE_MSG) +# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) +#endif +#if !defined(SWIFT_AVAILABILITY) +# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) +#endif +#if !defined(SWIFT_WEAK_IMPORT) +# define SWIFT_WEAK_IMPORT __attribute__((weak_import)) +#endif +#if !defined(SWIFT_DEPRECATED) +# define SWIFT_DEPRECATED __attribute__((deprecated)) +#endif +#if !defined(SWIFT_DEPRECATED_MSG) +# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) +#endif +#if !defined(SWIFT_DEPRECATED_OBJC) +# if __has_feature(attribute_diagnose_if_objc) +# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) +# else +# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) +# endif +#endif +#if defined(__OBJC__) +#if !defined(IBSegueAction) +# define IBSegueAction +#endif +#endif +#if !defined(SWIFT_EXTERN) +# if defined(__cplusplus) +# define SWIFT_EXTERN extern "C" +# else +# define SWIFT_EXTERN extern +# endif +#endif +#if !defined(SWIFT_CALL) +# define SWIFT_CALL __attribute__((swiftcall)) +#endif +#if !defined(SWIFT_INDIRECT_RESULT) +# define SWIFT_INDIRECT_RESULT __attribute__((swift_indirect_result)) +#endif +#if !defined(SWIFT_CONTEXT) +# define SWIFT_CONTEXT __attribute__((swift_context)) +#endif +#if !defined(SWIFT_ERROR_RESULT) +# define SWIFT_ERROR_RESULT __attribute__((swift_error_result)) +#endif +#if defined(__cplusplus) +# define SWIFT_NOEXCEPT noexcept +#else +# define SWIFT_NOEXCEPT +#endif +#if !defined(SWIFT_C_INLINE_THUNK) +# if __has_attribute(always_inline) +# if __has_attribute(nodebug) +# define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline)) __attribute__((nodebug)) +# else +# define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline)) +# endif +# else +# define SWIFT_C_INLINE_THUNK inline +# endif +#endif +#if defined(_WIN32) +#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL) +# define SWIFT_IMPORT_STDLIB_SYMBOL __declspec(dllimport) +#endif +#else +#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL) +# define SWIFT_IMPORT_STDLIB_SYMBOL +#endif +#endif +#if defined(__OBJC__) +#if __has_feature(objc_modules) +#if __has_warning("-Watimport-in-framework-header") +#pragma clang diagnostic ignored "-Watimport-in-framework-header" +#endif +#endif + +#endif +#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" +#pragma clang diagnostic ignored "-Wduplicate-method-arg" +#if __has_warning("-Wpragma-clang-attribute") +# pragma clang diagnostic ignored "-Wpragma-clang-attribute" +#endif +#pragma clang diagnostic ignored "-Wunknown-pragmas" +#pragma clang diagnostic ignored "-Wnullability" +#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension" +#pragma clang diagnostic ignored "-Wunsafe-buffer-usage" + +#if __has_attribute(external_source_symbol) +# pragma push_macro("any") +# undef any +# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="VBCoreLibrary",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) +# pragma pop_macro("any") +#endif + +#if defined(__OBJC__) +#endif +#if __has_attribute(external_source_symbol) +# pragma clang attribute pop +#endif +#if defined(__cplusplus) +#endif +#pragma clang diagnostic pop +#endif + +#else +#error unsupported Swift architecture +#endif diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Headers/VBCoreLibrary.h b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Headers/VBCoreLibrary.h new file mode 100644 index 00000000..dca8ca76 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Headers/VBCoreLibrary.h @@ -0,0 +1,11 @@ +// +// VBCoreLibrary.h +// VBCoreLibrary +// +// Created by Ayyappa on 28/03/24. +// + +#pragma once + +#define NPBINDING extern "C" __attribute__((visibility ("default"))) +#define DONTSTRIP __attribute__((used)) diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Info.plist b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..827e2b7d4871e09ebce49c88899c2fe7b7d48ebb GIT binary patch literal 762 zcmY*W%Wl&^6rC9;lmgAPq0saJZFy6$?2v|TkdR{{MQKQgohG1AGjS%#sN+Zdh!O-6 zYj%79i?U|J5AXvlL2TLZ1N;F_Vk>1f_nv#s8QnS4ayavRQT&aUAUbt==FHjIb93h} zT%1qfg~jBhrOQ{AQ!C4>YwOoGHn*;C-ne<|_ML4VC*^?gc8M50X3?@bMmkRA@^WCc zIaO$%a@#Sfs>qm0GX%<(%!(J=Su= z!8h;|{Dt#y18&2|a1XwQhcJNe;0O2#eu3ZN5BLlIK@iQLIW&(j kN}*Ns1m#f~X^5Z>;^+wZsE-Ed4HzE;Clx%1YE;nsf90s?asU7T literal 0 HcmV?d00001 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Modules/VBCoreLibrary.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Modules/VBCoreLibrary.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo new file mode 100644 index 0000000000000000000000000000000000000000..dfbcea2000bfcb52c767053146a972be962ceb6e GIT binary patch literal 3392 zcmd5;U2GIp6rOHdircEC$d3_|rGVM({>}dn=>y$%YqSEDX}}tjdS~WN8JO;rnJKbp zqLiXO6fIg4G%ASjq9{M&8;N9$hKFiMB{CL@s?X zmzW(*j^&b*!Pm@N^FfKeOjKDsnBkxPsNK_q!Kh))IC*Tcs7ptEl(NZuSxjT6tr z*$8-MFXq~&BI)*RN8)2a>TD37jU*-mm^d5GoobJl`!|Es^#J;{>B&guMv$Gz#bMI+ zR9yllnH^1yjV9mEC8i><-kOG$)PuDYwWW!o+MwT3-?#6TYcaaHwTtO(dZ_lB(=82G z0KZonq0=!uY~z^vf@S)#gV^;frw|h}bcT&#)5N-O9mHuN!_cv~N5*cdpZM@l%%OBDV&`eFk0$SI` zPuw3`D2kJLT`*~#6?mEBbV1`p1{*AG$Sf~oQ{zPgX@)NF0*?&SG?Ah!BB#+Z*aTA& ze{0)j{rO4L`Y&td2tRA$hoc*rv-1#5E)jKk-;-G%}6>tC50AE-84jv*-&~D?#U7cCBHxjb_uv!z*@fmp(uipdLVKdlyFyyyBc;3a=LyA zzcTl)fRlPAwCkOXa&7cBD$a%iO1cd#QZCSHddA z{c@Fjle#8y4Ron|SHspoPS%2Ni3VD8LULK=z5^x_SEV|cE@748UJcx90I!s9a(0Lm zK$psQHEdIre3!Z30`8^qeY}KKihE;~e6!K!rhV5V^a}7N0z)5u)Z7RyZ>!qHa0|ZA zdC_;C^qhjKs)NOD7z)Ez-M+l1D;$ouf=l0G7a4iQg1#LM7gba|UDsu!QMX4s4u4UguLrI?!fRaZ@{(ljNpzGRG7nc3eJdU z7Zqn1yU2&XQ}Iv{c=Z9l`&qI*HIzR6;~(4RsU2m9+J$v%2-)zdU$|7kbw&yX!<#OG zKbuqNvIZ^R>&U4V(A9-(^|u~7Imh z^RJgn3jU{We~B_7Pq@zq7UfG-cX@|lGdRoJF=E?0-Tct7UsSbXH(atH^F3!i?oQ8z z@y}iF3th(>wL4qpXRcn9Fpg>lC1;TA5(jz=bQ+XM2CDWY&>u+k-Xo+y-YK2ovbptv z-;a}Ta(1_4j|^ciyT@_&XM0^|A6#}k(lACyqr>yCuljJ0$#%Mq=f!$$zUy!8RI>|eZc#6P$j1e8$?~$Dj%||*mQ$EFX2MI>G6=2@dHa`P kSfzu#3?ozVfe~EL@p25!cdf$U-vWa>cT2qdiwKX$U(wVdCjbBd literal 0 HcmV?d00001 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Modules/VBCoreLibrary.swiftmodule/arm64-apple-ios.abi.json b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Modules/VBCoreLibrary.swiftmodule/arm64-apple-ios.abi.json new file mode 100644 index 00000000..d2f988e4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Modules/VBCoreLibrary.swiftmodule/arm64-apple-ios.abi.json @@ -0,0 +1,9 @@ +{ + "ABIRoot": { + "kind": "Root", + "name": "NO_MODULE", + "printedName": "NO_MODULE", + "json_format_version": 8 + }, + "ConstValues": [] +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Modules/VBCoreLibrary.swiftmodule/arm64-apple-ios.swiftdoc b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Modules/VBCoreLibrary.swiftmodule/arm64-apple-ios.swiftdoc new file mode 100644 index 0000000000000000000000000000000000000000..6086727934b4c670d78f78be238ef89580553e94 GIT binary patch literal 412 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 T`m&mtPI#q~X>~{&!ts9r$XR{} literal 0 HcmV?d00001 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Modules/module.modulemap b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Modules/module.modulemap new file mode 100644 index 00000000..cc175f22 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/Modules/module.modulemap @@ -0,0 +1,11 @@ +framework module VBCoreLibrary { + umbrella header "VBCoreLibrary.h" + export * + + module * { export * } +} + +module VBCoreLibrary.Swift { + header "VBCoreLibrary-Swift.h" + requires objc +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/VBCoreLibrary b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/Frameworks/VBCoreLibrary.framework/VBCoreLibrary new file mode 100644 index 0000000000000000000000000000000000000000..2c6619a6817c0a5b360abaab5b01ca687f0b871d GIT binary patch literal 216992 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 + + + + files + + Headers/VBCoreLibrary-Swift.h + + Hjdqx8WxHOvG9hzlOg7nZRtw+Vo= + + Headers/VBCoreLibrary.h + + xQM6IhfaOY9SnPpTxFUD1eAKXiw= + + Info.plist + + pxo5gtPQWRFPCoOE8Gl4uo9iwvg= + + Modules/VBCoreLibrary.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo + + esth/aIvb7qQZYwjTaReVCL3fPs= + + Modules/VBCoreLibrary.swiftmodule/arm64-apple-ios.abi.json + + gcwBsH4BgyFY4sVtNt+/xOKS3vY= + + Modules/VBCoreLibrary.swiftmodule/arm64-apple-ios.swiftdoc + + JOvwORQkDM+/MNGPMdJUBUkPgqs= + + Modules/VBCoreLibrary.swiftmodule/arm64-apple-ios.swiftmodule + + h+4O81uw4s9EyQeIipgYg5onn40= + + Modules/module.modulemap + + Nq5Mevxbr/FCDD/KqYaLsJL4AXo= + + + files2 + + Headers/VBCoreLibrary-Swift.h + + hash2 + + tVGO+jGwI7HIKW4WEQ4l605l4nUpQcp9iVLqnJmUjeg= + + + Headers/VBCoreLibrary.h + + hash2 + + GP1JBTjVGnbdNnPsojUytDxFPn/gEPPwVFMtUMZdXc0= + + + Modules/VBCoreLibrary.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo + + hash2 + + /GDWOviRaSlDIr+e85UjwA9i0wr4UwKQLvY7oWCg37c= + + + Modules/VBCoreLibrary.swiftmodule/arm64-apple-ios.abi.json + + hash2 + + Qnesa0n4URGWAopawg9bGx36dUwkYV00BoCJ8LFzlyg= + + + Modules/VBCoreLibrary.swiftmodule/arm64-apple-ios.swiftdoc + + hash2 + + EZV99gTgcNlcE/M3FBcb9E/8eoctajeSCkFoFONBZHg= + + + Modules/VBCoreLibrary.swiftmodule/arm64-apple-ios.swiftmodule + + hash2 + + zzOdzP8tXFR13Twnwa0CSsvJ7G5ZXrZiXRtVzmBUQZY= + + + Modules/module.modulemap + + hash2 + + 1rYakAp5I9b0pp9Kp7XBAbf6FZQ0H9spG1LQDnCFerk= + + + + rules + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Base\.lproj/ + + weight + 1010 + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.h b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.h new file mode 100644 index 00000000..c7be586b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.h @@ -0,0 +1,70 @@ +// +// NPBindingHelper.h +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#import +#import +#import +#import "NPDefines.h" +#import "NPUnityDataTypes.h" + +// common functions +char* NPCreateCStringFromNSString(NSString* nsString); +char* NPCreateCStringCopyFromNSString(NSString* nsString); +char* NPCreateCStringFromNSError(NSError* error); +char* NPCreateCStringCopyFromNSError(NSError* error); +NSArray* NPCreateArrayOfNSString(const char** array, int length); +NSString* NPCreateNSStringFromCString(const char* cString); +NSURL* NPCreateNSURLFromCString(const char* cString); +NPArray* NPCreateArrayOfCString(NSArray* array); +NSString* NPExtractTokenFromNSData(id token); +NPError NPCreateError(int code, NSString* description); +NPError NPCreateError(NSError* error); +NPError NPNullError(); + +// array opearations +NPArray* NPCreateNativeArrayFromNSArray(NSArray* array); + +// image operations +NSData* NPEncodeImageAsData(UIImage* image, UIImageEncodeType encodeType); +UIImage* NPCaptureScreenshotAsImage(); +NSData* NPCaptureScreenshotAsData(UIImageEncodeType encodeType); +UIImage* NPCreateImage(void* dataArrayPtr, int dataLength); +UIImage* LoadImageFromResources(NSString* name, NSString* extension); + +// convertor operations +NSString* NPConvertMimeTypeToUTType(NSString* mimeType); + +// JSON methods +NSString* NPToJson(id object, NSError** error); +id NPFromJson(NSString* jsonString, NSError** error); + +// formatter +NSNumberFormatter* NPGetBillingPriceFormatter(NSLocale* locale); +NSString* NPCreateNSStringFromNSDate(NSDate* date); +NSDate* NPCreateNSDateFromNSString(NSString* dateStr); + +// rect +CGPoint GetLastTouchPosition(); +void SetLastTouchPosition(CGPoint position); +CGRect NPConvertScreenSpaceRectToNormalisedRect(CGRect frame); +CGRect NPConvertNormalisedRectToScreenSpaceRect(CGRect normalisedRect); +NPUnityRect NPRectMake(CGRect rect); +CGPoint NPConverToNativePosition(float posX, float posY); + +// color methods +NPUnityColor NPColorMake(float r, float g, float b, float a); +NPUnityColor NPColorCreateFromUIColor(UIColor* color); + +// converter +NSString* NPGetTextEncodingName(NPUnityTextEncodingFormat format); +NPSize NPCreateSizeFromCGSize(CGSize size); + +// briding methods +void* NPRetainWithOwnershipTransfer(id object); +void* NPRetain(void* objectPtr); +void NPRelease(void* objectPtr); diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.h.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.h.meta new file mode 100644 index 00000000..8b89b8b7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.h.meta @@ -0,0 +1,42 @@ +fileFormatVersion: 2 +guid: 92d95ca87268841a3b4846d01cd619bc +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.mm b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.mm new file mode 100644 index 00000000..af3b74eb --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.mm @@ -0,0 +1,606 @@ +// +// NPBindingHelper.mm +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#import "NPBindingHelper.h" +#import "NPDefines.h" +#import "UnityView.h" + +#if !defined(MAKE_UNITY_VERSION) +#define MAKE_UNITY_VERSION(ver, maj, min) ((ver)*10000 + (maj)*100 + (min)) +#endif + +static NSMutableDictionary* _referenceHistory = nil; +static CGPoint _lastTouchPosition = CGPointMake(0, 0); + +UIImage* NPFixOrientation(UIImage* image, BOOL isOpaque); + +#pragma mark - String operations + +char* NPCreateCStringFromNSString(NSString* nsString) +{ + if (nsString) + { + return (char*)[nsString UTF8String]; + } + + return nil; +} + +char* NPCreateCStringCopyFromNSString(NSString* nsString) +{ + if (nsString) + { + // create copy + const char* cString = [nsString UTF8String]; + char* copy = (char*)malloc(strlen(cString) + 1); + strcpy(copy, cString); + return copy; + } + + return nil; +} + +char* NPCreateCStringFromNSError(NSError* error) +{ + if (error) + { + return (char*)[[error localizedDescription] UTF8String]; + } + + return nil; +} + +NPError NPCreateError(int code, NSString* description) +{ + NPError error; + error.code = code; + error.description = (void*)[description UTF8String]; + return error; +} + +NPError NPCreateError(NSError* error) +{ + if (error) + { + return NPCreateError((int) error.code, error.localizedDescription); + } + else + { + return NPNullError(); + } +} + +NPError NPNullError() +{ + NPError error = {-1, NULL}; + return error; +} + + +char* NPCreateCStringCopyFromNSError(NSError* error) +{ + if (error) + { + return NPCreateCStringCopyFromNSString([error localizedDescription]); + } + + return nil; +} + +NSArray* NPCreateArrayOfNSString(const char** array, int length) +{ + if (array) + { + NSMutableArray* nativeArray = [NSMutableArray arrayWithCapacity:length]; + for (int iter = 0; iter < length; iter++) + { + const char* cValue = array[iter]; + [nativeArray addObject:[NSString stringWithUTF8String:cValue]]; + } + + return nativeArray; + } + + return nil; +} + +NSString* NPCreateNSStringFromCString(const char* cString) +{ + if (cString) + { + return [NSString stringWithUTF8String:cString]; + } + + return nil; +} + +NSURL* NPCreateNSURLFromCString(const char* cString) +{ + if (cString) + { + NSString* urlString = [NSString stringWithUTF8String:cString]; + return [NSURL URLWithString:urlString]; + } + + return nil; +} + +NPArray* NPCreateArrayOfCString(NSArray* array) +{ + if (array) + { + int length = (int)[array count]; + NPArray* nativeArray = new NPArray(length); + for (int iter = 0; iter < length; iter++) + { + const char* item = [[array objectAtIndex:iter] UTF8String]; + nativeArray->setObjectAtIndex(iter, (void*)item); + } + + return nativeArray; + } + else + { + return new NPArray(-1); + } +} + +NSString* NPConvertDataToHexString(NSData* data) +{ + NSUInteger len = data.length; + if (len == 0) + { + return nil; + } + + const unsigned char* buffer = (const unsigned char*)[data bytes]; + NSMutableString* hexString = [NSMutableString stringWithCapacity:(len * 2)]; + for (int i = 0; i < len; ++i) + { + [hexString appendFormat:@"%02x", buffer[i]]; + } + return [hexString copy]; +} + +NSString* NPExtractTokenFromNSData(id token) +{ + if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"13")) + { + return NPConvertDataToHexString(token); + } + else + { + NSString* tokenStr = [token description]; + tokenStr = [tokenStr stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; + tokenStr = [tokenStr stringByReplacingOccurrencesOfString:@" " withString:@""]; + return tokenStr; + } +} + +#pragma mark - Array operations + +NPArray* NPCreateNativeArrayFromNSArray(NSArray* array) +{ + //It's not possible to create an empty array (with no elements) with calloc/malloc and in that place need to use null. But it beats the purpose as there can be empty arrays. So better to use NPArrayWrapper which is not a dynamic struct in those cases. + //Note on managed side, Length with zero is different from Length with -1. Length with zero means empty collection, where as length with -1 means no array exists. + if (array)// && [array count] > 0 + { + int length = (int)[array count]; + NPArray* nativeArray = new NPArray(length); + + for (int iter = 0; iter < length; iter++) + { + if([array[iter] isKindOfClass:[NSValue class]]) + { + NSValue *value = (NSValue*)array[iter]; + nativeArray->setObjectAtIndex(iter, value.pointerValue); + } + else + { + nativeArray->setObjectAtIndex(iter, (__bridge void*)array[iter]); + } + } + + return nativeArray; + } + else + { + return new NPArray(-1); + } +} + +#pragma mark - Image operations + +NSData* NPEncodeImageAsData(UIImage* image, UIImageEncodeType encodeType) +{ + switch (encodeType) + { + case UIImageEncodeTypePNG: + return UIImagePNGRepresentation(NPFixOrientation(image, false)); + + case UIImageEncodeTypeJPEG: + return UIImageJPEGRepresentation(NPFixOrientation(image, true), 1); + + default: + return nil; + } +} + +UIImage* NPFixOrientation(UIImage* image, bool isOpaque) //This is used as unity fails to consider exif flags for jpegs and also UIImageRepresentation fails to save orientation info when saved in png format. One shot - Two birds :D +{ + if (image.imageOrientation == UIImageOrientationUp) return image; + CGSize size = image.size; + float scale = image.scale; + + UIGraphicsBeginImageContextWithOptions(size, isOpaque, scale); + [image drawInRect:(CGRect){0, 0, size}]; + UIImage *orientedImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return orientedImage; +} + +UIImage* NPCaptureScreenshotAsImage() +{ + UIView* glView = UnityGetGLView(); + CGRect bounds = glView.bounds; + + // write contents of view to context and create image using it + UIGraphicsBeginImageContextWithOptions(bounds.size, YES, 0.0); + [glView drawViewHierarchyInRect:bounds afterScreenUpdates:YES]; + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return image; +} + +NSData* NPCaptureScreenshotAsData(UIImageEncodeType encodeType) +{ + switch (encodeType) + { + case UIImageEncodeTypePNG: + return UIImagePNGRepresentation(NPCaptureScreenshotAsImage()); + + case UIImageEncodeTypeJPEG: + return UIImageJPEGRepresentation(NPCaptureScreenshotAsImage(), 1); + + default: + return nil; + } +} + +UIImage* NPCreateImage(void* dataArrayPtr, int dataLength) +{ + NSData* data = [NSData dataWithBytes:dataArrayPtr length:dataLength]; + return [UIImage imageWithData:data]; +} + +UIImage* LoadImageFromResources(NSString* name, NSString* extension) +{ +#if UNITY_VERSION < MAKE_UNITY_VERSION(2019,3,0) + return [UIImage imageNamed:[NSString stringWithFormat:@"%@.%@", name, extension]]; +#else + NSBundle* bundle = [NSBundle bundleForClass:[UnityView class]]; + NSString* resourcePath = [bundle pathForResource:name ofType:extension]; + return [UIImage imageWithContentsOfFile:resourcePath]; +#endif +} + +#pragma mark - Converter operations + +NSString* NPConvertMimeTypeToUTType(NSString* mimeType) +{ + if ([mimeType isEqualToString:kMimeTypePNG]) + { + return (NSString*)kUTTypePNG; + } + if ([mimeType isEqualToString:kMimeTypeJPG]) + { + return (NSString*)kUTTypeJPEG; + } + + return NULL; +} + +#pragma mark - JSON utility methods + +NSString* NPToJson(id object, NSError** error) +{ + if (object) + { + NSData* jsonData = [NSJSONSerialization dataWithJSONObject:object + options:0 + error:error]; + + if (*error == nil) + { + return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + } + } + + return nil; +} + +id NPFromJson(NSString* jsonString, NSError** error) +{ + if (jsonString) + { + NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; + if (jsonData) + { + id object = [NSJSONSerialization JSONObjectWithData:jsonData + options:0 + error:error]; + if (*error == nil) + { + return object; + } + } + } + + return nil; +} + +#pragma mark - Formatters + +static NSNumberFormatter* _billingPriceFormatter = nil; +NSNumberFormatter* NPGetBillingPriceFormatter(NSLocale* locale) +{ + static dispatch_once_t sharedBlock; + dispatch_once(&sharedBlock, ^{ + NSNumberFormatter* priceFormatter = [[NSNumberFormatter alloc] init]; + [priceFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; + [priceFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; + [priceFormatter setLocale:locale]; + + // store reference + _billingPriceFormatter = priceFormatter; + }); + + return _billingPriceFormatter; +} + +static NSDateFormatter* _dateFormatter = nil; +NSDateFormatter* GetDateFormatter() +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; + [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; + [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"]; + + // save reference + _dateFormatter = dateFormatter; + }); + + return _dateFormatter; +} + +NSString* NPCreateNSStringFromNSDate(NSDate* date) +{ + if (date) + { + __weak NSDateFormatter* dateFormatter = GetDateFormatter(); + return [dateFormatter stringFromDate:date]; + } + + return nil; +} + +NSDate* NPCreateNSDateFromNSString(NSString* dateStr) +{ + if (dateStr) + { + __weak NSDateFormatter* dateFormatter = GetDateFormatter(); + return [dateFormatter dateFromString:dateStr]; + } + + return nil; +} + +#pragma mark - Rect functions + +CGFloat GetStatusBarHeight() +{ + UIApplication* sharedApplication = [UIApplication sharedApplication]; + if (![sharedApplication isStatusBarHidden]) + { + CGRect statusBarFrame = [sharedApplication statusBarFrame]; + return statusBarFrame.size.height; + } + + return 0; +} + +CGPoint GetLastTouchPosition() +{ + return _lastTouchPosition; +} + +void SetLastTouchPosition(CGPoint position) +{ + _lastTouchPosition = position; +} + +CGRect NPConvertScreenSpaceRectToNormalisedRect(CGRect frame) +{ + CGRect screenBounds = [[UIScreen mainScreen] bounds]; + // convert frame to normalised rect + CGRect normalisedRect; + normalisedRect.origin.x = (CGRectGetMinX(frame) - CGRectGetMinX(screenBounds)) / CGRectGetWidth(screenBounds); + normalisedRect.origin.y = (CGRectGetMinY(frame) - CGRectGetMinY(screenBounds)) / CGRectGetHeight(screenBounds); + normalisedRect.size.width = CGRectGetWidth(frame) / CGRectGetWidth(screenBounds); + normalisedRect.size.height = CGRectGetHeight(frame) / CGRectGetHeight(screenBounds); + + return normalisedRect; +} + +CGRect NPConvertNormalisedRectToScreenSpaceRect(CGRect normalisedRect) +{ + CGRect screenBounds = [[UIScreen mainScreen] bounds]; + // calculate frame + CGRect newFrame; + newFrame.origin.x = (CGRectGetMinX(normalisedRect) * CGRectGetWidth(screenBounds)) + CGRectGetMinX(screenBounds); + newFrame.origin.y = (CGRectGetMinY(normalisedRect) * CGRectGetHeight(screenBounds)) + CGRectGetMinY(screenBounds); + newFrame.size.width = CGRectGetWidth(normalisedRect) * CGRectGetWidth(screenBounds); + newFrame.size.height = CGRectGetHeight(normalisedRect) * CGRectGetHeight(screenBounds); + + return newFrame; +} + +NPUnityRect NPRectMake(CGRect rect) +{ + NPUnityRect npRect; + npRect.x = rect.origin.x; + npRect.y = rect.origin.y; + npRect.width = rect.size.width; + npRect.height = rect.size.height; + + return npRect; +} + +CGPoint NPConverToNativePosition(float posX, float posY) +{ + float contentScale = [[UIScreen mainScreen] scale]; + return CGPointMake(posX / contentScale, posY / contentScale); +} + +#pragma mark - Color methods + +NPUnityColor NPColorMake(float r, float g, float b, float a) +{ + NPUnityColor npColor; + npColor.r = r; + npColor.g = g; + npColor.b = b; + npColor.a = a; + return npColor; +} + +NPUnityColor NPColorCreateFromUIColor(UIColor* color) +{ + CGFloat r, g, b, a; + [color getRed:&r green:&g blue:&b alpha:&a]; + return NPColorMake((float)r, (float)g , (float)b, (float)a); +} + +#pragma mark - Converter methods + +NSString* NPGetTextEncodingName(NPUnityTextEncodingFormat format) +{ + if ([format isEqualToString:NPUnityTextEncodingFormatUTF8]) + { + return @"utf-8"; + } + if ([format isEqualToString:NPUnityTextEncodingFormatUTF16]) + { + return @"utf-16"; + } + if ([format isEqualToString:NPUnityTextEncodingFormatUTF32]) + { + return @"utf-32"; + } + + return nil; +} + +NPSize NPCreateSizeFromCGSize(CGSize size) +{ + NPSize npSize; + npSize.width = size.width; + npSize.height = size.height; + + return npSize; +} + +#pragma mark - Reference management methods + +void AddObjectReference(void* object, bool* isNew) +{ + // ensure that collection object is valid + if (_referenceHistory == nil) + { + _referenceHistory = [NSMutableDictionary dictionary]; + } + + // add object to collection + id key = [NSValue valueWithPointer:(const void*)object]; + NSNumber* value = [_referenceHistory objectForKey:key]; + if (value == nil) + { + [_referenceHistory setObject:[NSNumber numberWithInt:1] forKey:key]; + *isNew = true; + } + else + { + [_referenceHistory setObject:[NSNumber numberWithInt:[value intValue] + 1] forKey:key]; + *isNew = false; + } +} + +void* NPRetainWithOwnershipTransfer(id object) +{ + void* objectPtr; + bool isNew; + AddObjectReference((__bridge void*)object, &isNew); + if (isNew) + { + objectPtr = (void*)CFBridgingRetain(object); + } + else + { + objectPtr = (void*)CFRetain((__bridge CFTypeRef)object); + } + +#if NATIVE_PLUGINS_DEBUG_ENABLED + NSLog(@"[NativePlugins] Retaining ownership for pointer %@.", objectPtr); +#endif + + return objectPtr; +} + +void* NPRetain(void* objectPtr) +{ + return NPRetainWithOwnershipTransfer((__bridge id)objectPtr); +} + +void NPRelease(void* objectPtr) +{ + if (_referenceHistory == nil) + { +#if NATIVE_PLUGINS_DEBUG_ENABLED + NSLog(@"[NativePlugins] Fatal error! Collection object is not initialised. It seems like Release is called, before retain."); +#endif + return; + } + + id key = [NSValue valueWithPointer:(const void*)objectPtr]; + NSNumber* value = [_referenceHistory objectForKey:key]; + if (value == nil) + { +#if NATIVE_PLUGINS_DEBUG_ENABLED + NSLog(@"[NativePlugins] Fatal error! Object not found. It seems like Release is called, before retain."); +#endif + return; + } + + // check value + if ([value intValue] == 1) + { +#if NATIVE_PLUGINS_DEBUG_ENABLED + NSLog(@"[NativePlugins] Release object ownership for pointer %@.", objectPtr); +#endif + CFBridgingRelease(objectPtr); + [_referenceHistory removeObjectForKey:key]; + return; + } + + // update reference table + CFRelease(objectPtr); + [_referenceHistory setObject:[NSNumber numberWithInt:[value intValue] - 1] forKey:key]; +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.mm.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.mm.meta new file mode 100644 index 00000000..c38ca32a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPBindingHelper.mm.meta @@ -0,0 +1,50 @@ +fileFormatVersion: 2 +guid: a7e81a6e20d054aeb8d3da56a68291ec +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPConfig.h b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPConfig.h new file mode 100644 index 00000000..172fd677 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPConfig.h @@ -0,0 +1,7 @@ +// NPConfig.h// Native Plugins//// Created by Ashwin kumar// Copyright (c) 2024 Voxel Busters Interactive LLP. All rights reserved.// + +#pragma once + +#define NATIVE_PLUGINS_USES_DEEP_LINK 1 +#define NATIVE_PLUGINS_USES_NOTIFICATION 1 +#define NATIVE_PLUGINS_USES_PUSH_NOTIFICATION 1 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPConfig.h.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPConfig.h.meta new file mode 100644 index 00000000..952ce297 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPConfig.h.meta @@ -0,0 +1,50 @@ +fileFormatVersion: 2 +guid: 111af326d79b34f52a5199aa000f56e5 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPDefines.h b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPDefines.h new file mode 100644 index 00000000..807b0b1f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPDefines.h @@ -0,0 +1,31 @@ +// +// NPDefines.h +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#pragma once + +#define NPBINDING extern "C" __attribute__((visibility ("default"))) +#define DONTSTRIP __attribute__((used)) +#define NPIntPtr void* +#define NPString char* + +#ifdef DEBUG + #define NPLog(fmt, ...) NSLog((fmt), ##__VA_ARGS__) +#else + #define NPLog(fmt, ...) +#endif + +#define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) +#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) +#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) +#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) +#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) + +#define IsIpadInterface (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) + +static NSString* const kMimeTypeJPG = @"image/jpeg"; +static NSString* const kMimeTypePNG = @"image/png"; diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPDefines.h.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPDefines.h.meta new file mode 100644 index 00000000..70087607 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPDefines.h.meta @@ -0,0 +1,50 @@ +fileFormatVersion: 2 +guid: b55094604645d46369df45927a004790 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPKit.h b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPKit.h new file mode 100644 index 00000000..71652aa1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPKit.h @@ -0,0 +1,14 @@ +// +// NPKit.h +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#pragma once + +#import "NPDefines.h" +#import "NPUnityDataTypes.h" +#import "NPBindingHelper.h" +#import "NPConfig.h" diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPKit.h.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPKit.h.meta new file mode 100644 index 00000000..ef0e2d72 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPKit.h.meta @@ -0,0 +1,50 @@ +fileFormatVersion: 2 +guid: 8409ff84ada1e44f1b6788a198a41df9 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.h b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.h new file mode 100644 index 00000000..68753c6f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.h @@ -0,0 +1,17 @@ +// +// ListenerWrapperBase.h +// Unity-iPhone +// +// Created by Ayyappa J on 06/10/22. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NPListenerWrapperBase : NSObject +@property (nonatomic, assign) void* tag; +-(id) initWithTag:(void*) tag; +@end + +NS_ASSUME_NONNULL_END diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.h.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.h.meta new file mode 100644 index 00000000..186c6048 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.h.meta @@ -0,0 +1,42 @@ +fileFormatVersion: 2 +guid: c7966ae9023d34fcb9980b8ea50cc136 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.mm b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.mm new file mode 100644 index 00000000..c8ec1bf8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.mm @@ -0,0 +1,20 @@ +// +// ListenerWrapperBase.m +// Unity-iPhone +// +// Created by Ayyappa J on 06/10/22. +// + +#import "NPListenerWrapperBase.h" + +@implementation NPListenerWrapperBase +@synthesize tag; + +-(id) initWithTag:(void*) tag +{ + self = [super init]; + self.tag = tag; + + return self; +} +@end diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.mm.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.mm.meta new file mode 100644 index 00000000..4354886a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPListenerWrapperBase.mm.meta @@ -0,0 +1,52 @@ +fileFormatVersion: 2 +guid: 84af00a4bcd9e4023a5c0a7befd8f55a +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 0 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.h b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.h new file mode 100644 index 00000000..97c2c03a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.h @@ -0,0 +1,19 @@ +// +// NPManagedPointerCache.h +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#import + +@interface NPManagedPointerCache : NSObject + ++ (NPManagedPointerCache*)sharedInstance; + +- (void)addPointer:(void*)pointer forKey:(id)object; +- (void*)pointerForKey:(id)object; +- (void)removePointerForKey:(id)object; + +@end diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.h.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.h.meta new file mode 100644 index 00000000..c0eb986c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.h.meta @@ -0,0 +1,45 @@ +fileFormatVersion: 2 +guid: c6bd0f922b07841d0aa8c938322f23a1 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.mm b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.mm new file mode 100644 index 00000000..cb073814 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.mm @@ -0,0 +1,62 @@ +// +// NPManagedPointerCache.mm +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#import "NPManagedPointerCache.h" + +// static fields +static NPManagedPointerCache* _sharedInstance = nil; + +@interface NPManagedPointerCache () + +@property(nonatomic, strong) NSMutableDictionary* tagCollection; + +@end + +@implementation NPManagedPointerCache + +@synthesize tagCollection = _tagCollection; + ++ (NPManagedPointerCache*)sharedInstance +{ + if (nil == _sharedInstance) + { + _sharedInstance = [[NPManagedPointerCache alloc] init]; + } + + return _sharedInstance; +} + +- (id)init +{ + self = [super init]; + if (self) + { + // initialise + self.tagCollection = [[NSMutableDictionary alloc] init]; + } + + return self; +} + +- (void)addPointer:(void*)pointer forKey:(id)object +{ + [self.tagCollection setObject:[NSValue valueWithPointer:pointer] forKey:[NSValue valueWithNonretainedObject:object]]; +} + +- (void*)pointerForKey:(id)object +{ + NSValue* value = [self.tagCollection objectForKey:[NSValue valueWithNonretainedObject:object]]; + return [value pointerValue]; +} + +- (void)removePointerForKey:(id)object +{ + [self.tagCollection removeObjectForKey:[NSValue valueWithNonretainedObject:object]]; +} + +@end diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.mm.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.mm.meta new file mode 100644 index 00000000..b0493451 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPManagedPointerCache.mm.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 4bb0042cbd61f4e139d3c15785897351 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 0 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.h b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.h new file mode 100644 index 00000000..63e292de --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.h @@ -0,0 +1,29 @@ +// +// NPUnityAppController.h +// Unity-iPhone +// +// Created by Ashwin Kumar on 09/04/20. +// + +#import +#import "AppDelegateListener.h" +#import "UnityAppController.h" +#include "NPConfig.h" + +#if NATIVE_PLUGINS_USES_DEEP_LINK +// callback signatures +typedef bool (*HandleUrlSchemeCallback)(const char* url); +typedef bool (*HandleUniversalLinkCallback)(const char* url); +#endif + +@interface NPUnityAppController : UnityAppController + +#if NATIVE_PLUGINS_USES_DEEP_LINK +// set handlers methods ++ (void)registerUrlSchemeHandler:(HandleUrlSchemeCallback)callback; ++ (void)registerUniversalLinkHandler:(HandleUniversalLinkCallback)callback; + +- (void)initDeepLinkServices; +#endif + +@end diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.h.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.h.meta new file mode 100644 index 00000000..be6a1964 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.h.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: dbaa49345a0bb4952aa88a1ff50f3929 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: LinuxUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXIntel + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXIntel64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + - first: + tvOS: tvOS + second: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.mm b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.mm new file mode 100644 index 00000000..386483b0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.mm @@ -0,0 +1,145 @@ +// +// NPUnityAppController.mm +// Unity-iPhone +// +// Created by Ashwin Kumar on 09/04/20. +// + +#import "NPUnityAppController.h" +#import "NPKit.h" + +#if NATIVE_PLUGINS_USES_DEEP_LINK +static HandleUrlSchemeCallback _handleUrlSchemeCallback = nil; +static HandleUniversalLinkCallback _handleUniversalLinkCallback = nil; +#endif + +@interface NPUnityAppController () + +#if NATIVE_PLUGINS_USES_DEEP_LINK +@property(nonatomic) bool isDeepLinkServiceInitialised; +@property(nonatomic, copy) NSURL* cachedUrlScheme; +@property(nonatomic, copy) NSURL* cachedUniversalLink; +#endif + +@end + +@implementation NPUnityAppController + +#if NATIVE_PLUGINS_USES_DEEP_LINK +@synthesize isDeepLinkServiceInitialised = _isDeepLinkServiceInitialised; +@synthesize cachedUrlScheme = _cachedUrlScheme; +@synthesize cachedUniversalLink = _cachedUniversalLink; +#endif + +#pragma mark - Static methods + +#if NATIVE_PLUGINS_USES_DEEP_LINK ++ (void)registerUrlSchemeHandler:(HandleUrlSchemeCallback)callback; +{ + _handleUrlSchemeCallback = callback; +} + ++ (void)registerUniversalLinkHandler:(HandleUniversalLinkCallback)callback +{ + _handleUniversalLinkCallback = callback; +} + +- (void)initDeepLinkServices +{ + // update status + self.isDeepLinkServiceInitialised = true; + + // dispatch events + if (self.cachedUrlScheme) + { + [self handleUrlScheme:self.cachedUrlScheme]; + self.cachedUrlScheme = nil; + } + if (self.cachedUniversalLink) + { + [self handleUniversalLink:self.cachedUniversalLink]; + self.cachedUniversalLink = nil; + } +} + +- (bool)handleUrlScheme:(NSURL*)url +{ + if (_handleUrlSchemeCallback != nil) + { + return _handleUrlSchemeCallback(NPCreateCStringFromNSString([url absoluteString])); + } + + return false; +} + +- (bool)handleUniversalLink:(NSURL*)url +{ + if (_handleUniversalLinkCallback != nil) + { + return _handleUniversalLinkCallback(NPCreateCStringFromNSString([url absoluteString])); + } + + return false; +} + +- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url options:(NSDictionary *)options +{ + // forward callback to parent class + bool originalResult = false; + if ([super respondsToSelector:@selector(application:openURL:options:)]) + { + originalResult = [super application:application openURL:url options:options]; + } + else if ([super respondsToSelector:@selector(application:openURL:sourceApplication:annotation:)]) + { + NSString* sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey]; + originalResult = [super application:application openURL:url sourceApplication:sourceApplication annotation:[NSDictionary dictionary]]; + } + + // check the availability of the service and process the incoming request + // store the event information for later usage incase if the service is not active + if (self.isDeepLinkServiceInitialised) + { + return [self handleUrlScheme:url]; + } + self.cachedUrlScheme = url; + + return originalResult; +} + +- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray> * __nullable restorableObjects))restorationHandler +{ + // forward callback to parent class + bool originalResult = false; + if ([super respondsToSelector:@selector(application:continueUserActivity:restorationHandler:)]) + { + originalResult = [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler]; + } + + // check whether this event is concerned with web activity + if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) + { + NSURL* url = userActivity.webpageURL; + if (url) + { + // check whether the embedded link can be handled by our application + // store the event information for later usage incase if the service is not active + if (self.isDeepLinkServiceInitialised) + { + return [self handleUniversalLink:url]; + } + + self.cachedUniversalLink = url; + } + } + + return originalResult; +} +#endif + +@end + +#if NATIVE_PLUGINS_USES_DEEP_LINK +// inform Unity to use UnityDeeplinksAppController as the main app controller: +IMPL_APP_CONTROLLER_SUBCLASS(NPUnityAppController) +#endif diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.mm.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.mm.meta new file mode 100644 index 00000000..d7c4374a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityAppController.mm.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 8b43456b3fd58411da7aef01d9b2c028 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 0 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.h b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.h new file mode 100644 index 00000000..525ca99b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.h @@ -0,0 +1,108 @@ +// +// NPUnityDataTypes.h +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#include "NPDefines.h" +#include "NPUnityDateComponents.h" + +typedef enum : NSInteger +{ + UIImageEncodeTypePNG, + UIImageEncodeTypeJPEG, +} UIImageEncodeType; + +struct NPUnityCircularRegion +{ + double latitude; + double longitude; + float radius; + NPIntPtr regionIdPtr; +}; +typedef struct NPUnityCircularRegion NPUnityCircularRegion; + +struct NPUnityAttachment +{ + int dataArrayLength; + NPIntPtr dataArrayPtr; + NPIntPtr mimeTypePtr; + NPIntPtr fileNamePtr; +}; +typedef struct NPUnityAttachment NPUnityAttachment; + +struct NPUnityRect +{ + float x; + float y; + float width; + float height; +}; +typedef struct NPUnityRect NPUnityRect; + +struct NPUnityColor +{ + float r; + float g; + float b; + float a; +}; +typedef struct NPUnityColor NPUnityColor; + +struct NPArray +{ + NPIntPtr* ptr; + int length; + + // constructors + NPArray(int length); + ~NPArray(); + + // methods + void setObjectAtIndex(int index, void* obj); +}; +typedef struct NPArray NPArray; + +// For multi dimentional array +struct NPArrayProxy +{ + NPIntPtr* ptr; + int length; +}; +typedef struct NPArrayProxy NPArrayProxy; + +// If allocation is continous use this. +struct NPArrayWrapper +{ + NPIntPtr ptr; + int length; +}; +typedef struct NPArrayWrapper NPArrayWrapper; + + +struct NPError +{ + int code; + NPIntPtr description; +}; +typedef struct NPError NPError; + +struct NPSize +{ + float width; + float height; +}; +typedef struct NPSize NPSize; + +typedef NSString* NPUnityTextEncodingFormat NS_EXTENSIBLE_STRING_ENUM; + +///

Encodes characters using the UTF-8 encoding. (Readonly) +FOUNDATION_EXPORT NPUnityTextEncodingFormat const NPUnityTextEncodingFormatUTF8; + +/// Encodes characters using the UTF-16 encoding. (Readonly) +FOUNDATION_EXPORT NPUnityTextEncodingFormat const NPUnityTextEncodingFormatUTF16; + +/// Encodes characters using the UTF-32 encoding. (Readonly) +FOUNDATION_EXPORT NPUnityTextEncodingFormat const NPUnityTextEncodingFormatUTF32; diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.h.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.h.meta new file mode 100644 index 00000000..b2f7f3ee --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.h.meta @@ -0,0 +1,50 @@ +fileFormatVersion: 2 +guid: c31d4b2bdd80c401ebe8fc9523ea61a1 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.mm b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.mm new file mode 100644 index 00000000..3091f08c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.mm @@ -0,0 +1,34 @@ +// +// NPUnityDataTypes.mm +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#import "NPUnityDataTypes.h" + +NPUnityTextEncodingFormat const NPUnityTextEncodingFormatUTF8 = @"utf8"; + +/// Encodes characters using the UTF-16 encoding. (Readonly) +NPUnityTextEncodingFormat const NPUnityTextEncodingFormatUTF16 = @"utf16"; + +/// Encodes characters using the UTF-32 encoding. (Readonly) +NPUnityTextEncodingFormat const NPUnityTextEncodingFormatUTF32 = @"utf32"; + + +NPArray::NPArray(int length) +{ + this->length = length; + this->ptr = length > 0 ? (void**)calloc(length, sizeof(void*)) : nil; +} + +NPArray::~NPArray() +{ + free(ptr); +} + +void NPArray::setObjectAtIndex(int index, void* obj) +{ + this->ptr[index] = obj; +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.mm.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.mm.meta new file mode 100644 index 00000000..a7d156d0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDataTypes.mm.meta @@ -0,0 +1,50 @@ +fileFormatVersion: 2 +guid: 4acef6bf79cc04dc7a3bba82caeb1850 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.h b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.h new file mode 100644 index 00000000..e62343da --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.h @@ -0,0 +1,53 @@ +// +// NPUnityDateComponents.h +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +// custom types +typedef enum : int +{ + CalendarGregorian, + CalendarBuddhist = 1, + CalendarChinese, + CalendarCoptic, + CalendarEthiopicAmeteMihret, + CalendarEthiopicAmeteAlem, + CalendarIso8601, + CalendarHebrew, + CalendarIndian, + CalendarIslamic, + CalendarIslamicCivil, + CalendarJapanese, + CalendarPersian, + CalendarRepublicOfChina, + CalendarIslamicTabular, + CalendarIslamicUmmAlQura, +} Calendar; + +// methods +NSCalendarIdentifier NPGetCalendarIdentifier(Calendar calendar); +Calendar NPGetCalendarEnum(NSCalendarIdentifier identifier); + +struct NPUnityDateComponents +{ + // fields + Calendar calendar; + long year; + long month; + long day; + long hour; + long minute; + long second; + long nanosecond; + long weekday; + long weekOfMonth; + long weekOfYear; + + // methods + void CopyProperties(NSDateComponents* dateComponents); + NSDateComponents* ToNSDateComponents(); +}; +typedef struct NPUnityDateComponents NPUnityDateComponents; diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.h.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.h.meta new file mode 100644 index 00000000..1d16ec29 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.h.meta @@ -0,0 +1,50 @@ +fileFormatVersion: 2 +guid: 219d6b45352964a8ea2056d454a085cd +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.mm b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.mm new file mode 100644 index 00000000..5bda7732 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.mm @@ -0,0 +1,202 @@ +// +// NPUnityDateComponents.mm +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#import "NPUnityDateComponents.h" + +NSCalendarIdentifier NPGetCalendarIdentifier(Calendar calendar) +{ + switch (calendar) { + case CalendarBuddhist: + return NSCalendarIdentifierBuddhist; + + case CalendarChinese: + return NSCalendarIdentifierChinese; + + case CalendarCoptic: + return NSCalendarIdentifierCoptic; + + case CalendarEthiopicAmeteAlem: + return NSCalendarIdentifierEthiopicAmeteAlem; + + case CalendarEthiopicAmeteMihret: + return NSCalendarIdentifierEthiopicAmeteMihret; + + case CalendarGregorian: + return NSCalendarIdentifierGregorian; + + case CalendarHebrew: + return NSCalendarIdentifierHebrew; + + case CalendarIndian: + return NSCalendarIdentifierIndian; + + case CalendarIslamic: + return NSCalendarIdentifierIslamic; + + case CalendarIslamicCivil: + return NSCalendarIdentifierIslamicCivil; + + case CalendarIslamicTabular: + return NSCalendarIdentifierIslamicTabular; + + case CalendarIslamicUmmAlQura: + return NSCalendarIdentifierIslamicUmmAlQura; + + case CalendarIso8601: + return NSCalendarIdentifierISO8601; + + case CalendarJapanese: + return NSCalendarIdentifierJapanese; + + case CalendarPersian: + return NSCalendarIdentifierPersian; + + case CalendarRepublicOfChina: + return NSCalendarIdentifierRepublicOfChina; + + default: + break; + } +} + +Calendar NPGetCalendarEnum(NSCalendarIdentifier identifier) +{ + if ([identifier isEqualToString:NSCalendarIdentifierBuddhist]) + { + return CalendarBuddhist; + } + if ([identifier isEqualToString:NSCalendarIdentifierChinese]) + { + return CalendarChinese; + } + if ([identifier isEqualToString:NSCalendarIdentifierCoptic]) + { + return CalendarCoptic; + } + if ([identifier isEqualToString:NSCalendarIdentifierEthiopicAmeteAlem]) + { + return CalendarEthiopicAmeteAlem; + } + if ([identifier isEqualToString:NSCalendarIdentifierEthiopicAmeteMihret]) + { + return CalendarEthiopicAmeteMihret; + } + if ([identifier isEqualToString:NSCalendarIdentifierGregorian]) + { + return CalendarGregorian; + } + if ([identifier isEqualToString:NSCalendarIdentifierHebrew]) + { + return CalendarHebrew; + } + if ([identifier isEqualToString:NSCalendarIdentifierIndian]) + { + return CalendarIndian; + } + if ([identifier isEqualToString:NSCalendarIdentifierIslamic]) + { + return CalendarIslamic; + } + if ([identifier isEqualToString:NSCalendarIdentifierIslamicCivil]) + { + return CalendarIslamicCivil; + } + if ([identifier isEqualToString:NSCalendarIdentifierIslamicTabular]) + { + return CalendarIslamicTabular; + } + if ([identifier isEqualToString:NSCalendarIdentifierIslamicUmmAlQura]) + { + return CalendarIslamicUmmAlQura; + } + if ([identifier isEqualToString:NSCalendarIdentifierISO8601]) + { + return CalendarIso8601; + } + if ([identifier isEqualToString:NSCalendarIdentifierJapanese]) + { + return CalendarJapanese; + } + if ([identifier isEqualToString:NSCalendarIdentifierPersian]) + { + return CalendarPersian; + } + if ([identifier isEqualToString:NSCalendarIdentifierRepublicOfChina]) + { + return CalendarRepublicOfChina; + } + + return (Calendar)0; +} + +void NPUnityDateComponents::CopyProperties(NSDateComponents* dateComponents) +{ + this->calendar = NPGetCalendarEnum([[dateComponents calendar] calendarIdentifier]); + this->year = [dateComponents year]; + this->month = [dateComponents month]; + this->day = [dateComponents day]; + this->hour = [dateComponents hour]; + this->minute = [dateComponents minute]; + this->second = [dateComponents second]; + this->nanosecond = [dateComponents nanosecond]; + this->weekday = [dateComponents weekday] == 1 ? 7 : [dateComponents weekday] - 1; //Converting from 1(SUNDAY) to 7(SATURDAY) => 1(MONDAY) to 7(SUNDAY) + this->weekOfMonth = [dateComponents weekOfMonth]; + this->weekOfYear = [dateComponents weekOfYear]; +} + +NSDateComponents* NPUnityDateComponents::ToNSDateComponents() +{ + NSDateComponents* dateComponents = [[NSDateComponents alloc] init]; + if ((int)calendar != 0) + { + NSCalendar* nsCalendar = [NSCalendar calendarWithIdentifier:NPGetCalendarIdentifier(this->calendar)]; + [dateComponents setCalendar:nsCalendar]; + } + if (this->year != -1) + { + [dateComponents setYear:this->year]; + } + if (this->month != -1) + { + [dateComponents setMonth:this->month]; + } + if (this->day != -1) + { + [dateComponents setDay:this->day]; + } + if (this->hour != -1) + { + [dateComponents setHour:this->hour]; + } + if (this->minute != -1) + { + [dateComponents setMinute:this->minute]; + } + if (this->second != -1) + { + [dateComponents setSecond:this->second]; + } + if (this->nanosecond != -1) + { + [dateComponents setNanosecond:this->nanosecond]; + } + if (this->weekday != -1) + { + [dateComponents setWeekday: (this->weekday == 7) ? 1 : this->weekday + 1]; //Input will be from 1(MONDAY) to 7(SUNDAY) => 1(SUNDAY) to 7(SATURDAY) + } + if (this->weekOfMonth != -1) + { + [dateComponents setWeekOfMonth:this->weekOfMonth]; + } + if (this->weekOfYear != -1) + { + [dateComponents setWeekOfYear:this->weekOfYear]; + } + + return dateComponents; +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.mm.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.mm.meta new file mode 100644 index 00000000..64633353 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUnityDateComponents.mm.meta @@ -0,0 +1,50 @@ +fileFormatVersion: 2 +guid: f5c5940323677482483e2cb8491a103c +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.h b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.h new file mode 100644 index 00000000..df0bdfd7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.h @@ -0,0 +1,13 @@ +// +// NPUtilityBinding.h +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#import +#import + +// callback signatures +typedef void (*LoadImageNativeCallback)(void* dataArrayPtr, int dataLength, void* tagPtr); diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.h.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.h.meta new file mode 100644 index 00000000..e91a9e2a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.h.meta @@ -0,0 +1,42 @@ +fileFormatVersion: 2 +guid: 3db404738ff284021b9dbdad3253c02c +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.mm b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.mm new file mode 100644 index 00000000..f0722974 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.mm @@ -0,0 +1,78 @@ +// +// NPUtilityBinding.mm +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#import "NPUtilityBinding.h" +#import "NPKit.h" + +// static fields +static LoadImageNativeCallback _loadImageCallback = nil; + +#pragma mark - Utility methods + +void LoadTextureData(NSData* imageData, void* tagPtr) +{ + if (imageData) + { + _loadImageCallback((void *)[imageData bytes], (int)[imageData length], tagPtr); + } + else + { + _loadImageCallback(nil, 0, tagPtr); + } +} + +#pragma mark - Native binding methods + +NPBINDING DONTSTRIP void NPUtilityRegisterCallbacks(LoadImageNativeCallback loadImageCallback) +{ + // cache + _loadImageCallback = loadImageCallback; +} + +NPBINDING DONTSTRIP void NPUtilityLoadImage(void* nativeDataPtr, void* tagPtr) +{ + NSData* imageData = (__bridge NSData*)nativeDataPtr; + LoadTextureData(imageData, tagPtr); +} + +NPBINDING DONTSTRIP void NPUtilityTakeScreenshot(void* tagPtr) +{ + NSData* imageData = NPCaptureScreenshotAsData(UIImageEncodeTypePNG); + LoadTextureData(imageData, tagPtr); +} + +NPBINDING DONTSTRIP void NPUtilityRetainObject(void* nativePtr) +{ + NPRetain(nativePtr); +} + +NPBINDING DONTSTRIP void NPUtilityReleaseObject(void* nativePtr) +{ + NPRelease(nativePtr); +} + +NPBINDING DONTSTRIP void NPUtilityOpenSettings() +{ + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] + options:@{} + completionHandler:^(BOOL success) { + // done + }]; +} + +NPBINDING DONTSTRIP void NPUtilityFreeCPointerObject(NPIntPtr nativePtr) +{ + free(nativePtr); +} + +NPBINDING DONTSTRIP void NPUtilitySetLastTouchPosition(float posX, float posY) +{ + SetLastTouchPosition(NPConverToNativePosition(posX, posY)); +} + + diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.mm.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.mm.meta new file mode 100644 index 00000000..e3989c9e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NPUtilityBinding.mm.meta @@ -0,0 +1,52 @@ +fileFormatVersion: 2 +guid: a93f083e6713d4ee598fe76e08d113ef +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 0 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.h b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.h new file mode 100644 index 00000000..9d0bd9a0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.h @@ -0,0 +1,25 @@ +// +// UIViewController+Presentation.h +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#import + + +#define ErrorWithDomain(domain, code, description) [NSError createWithDomain: domain withCode: code withDescription: description] +#define CreateFromError(error, domain, code) [NSError createFromError: error withDomain: domain withCode: code] + +@interface NSError (Utility) + ++ (NSError*)createWithDomain:(NSString*) domain + withCode:(int) code + withDescription:(NSString*) description; + ++ (NSError*)createFromError:(NSError*) error + withDomain:(NSString*) domain + withCode:(int) code; + +@end diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.h.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.h.meta new file mode 100644 index 00000000..f15798c0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.h.meta @@ -0,0 +1,80 @@ +fileFormatVersion: 2 +guid: 233102e263301407dade7bf90c4afd9f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + iPhone: iOS + second: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.mm b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.mm new file mode 100644 index 00000000..d9d27001 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.mm @@ -0,0 +1,36 @@ +// +// UIViewController+Presentation.mm +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#import "NSError+Utility.h" + +@implementation NSError (Utility) + ++ (NSError*)createWithDomain:(NSString*) domain + withCode:(int) code + withDescription:(NSString*) description +{ + NSError* error = [NSError errorWithDomain:domain + code:code + userInfo: @{NSLocalizedDescriptionKey: description}]; + return error; +} + + ++ (id)createFromError:(NSError*) error + withDomain:(NSString*) domain + withCode:(int) code +{ + if(error == nil) + return nil; + + return [self errorWithDomain:domain + code:code + userInfo: @{NSLocalizedDescriptionKey: error.description}]; +} + +@end diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.mm.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.mm.meta new file mode 100644 index 00000000..e4dc6487 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NSError+Utility.mm.meta @@ -0,0 +1,85 @@ +fileFormatVersion: 2 +guid: 0ce7faeacf6f44568914f19f8e007dcc +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NativePluginsBaseGroup.asset b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NativePluginsBaseGroup.asset new file mode 100644 index 00000000..0428c24b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NativePluginsBaseGroup.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8494aa9edfa214a818449f2dea39a05a, type: 3} + m_Name: NativePluginsBaseGroup + m_EditorClassIdentifier: + m_name: NativePluginsBase + m_usesNestedHeierarchy: 0 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NativePluginsBaseGroup.asset.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NativePluginsBaseGroup.asset.meta new file mode 100644 index 00000000..93923ed7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/NativePluginsBaseGroup.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4702987cd52d14b4c8c5530706e3c833 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.h b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.h new file mode 100644 index 00000000..7af37ee7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.h @@ -0,0 +1,16 @@ +// +// UIView+LayoutConstraints.h +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#import + +@interface UIView (LayoutConstraints) + +- (void)removeExistingConstraints; + +@end + diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.h.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.h.meta new file mode 100644 index 00000000..e2ab5d29 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.h.meta @@ -0,0 +1,42 @@ +fileFormatVersion: 2 +guid: 397567c4cc95840b3a5eb33acd7a49be +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.mm b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.mm new file mode 100644 index 00000000..30f17762 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.mm @@ -0,0 +1,27 @@ +// +// UIView+LayoutConstraints.mm +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#import "UIView+LayoutConstraints.h" + +@implementation UIView (LayoutConstraints) + +- (void)removeExistingConstraints +{ + __weak UIView* parentView = self.superview; + __weak UIView* view = self; + for (NSLayoutConstraint* constraint in parentView.constraints) + { + if (constraint.firstItem == view) + { + constraint.active = false; + [parentView removeConstraint:constraint]; + } + } +} + +@end diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.mm.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.mm.meta new file mode 100644 index 00000000..3a343bf7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIView+LayoutConstraints.mm.meta @@ -0,0 +1,115 @@ +fileFormatVersion: 2 +guid: 0760a008559634d1b98d2c80c2351f2b +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXIntel + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXIntel64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + - first: + tvOS: tvOS + second: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.h b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.h new file mode 100644 index 00000000..6169486a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.h @@ -0,0 +1,29 @@ +// +// UIViewController+Presentation.h +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#import + +@interface UIViewController (Presentation) + +- (void)presentViewControllerInPopoverStyleIfRequired:(UIViewController*)viewControllerToPresent + withDelegate:(id)delegate + fromPosition:(CGPoint)position + animated:(BOOL)flag + completion:(void (^)())completion; + +- (void)presentViewControllerInPopoverStyleIfRequired:(UIViewController*)viewControllerToPresent + withDelegate:(id)delegate + fromPosition:(CGPoint)position + permittedArrowDirections:(UIPopoverArrowDirection)direction + animated:(BOOL)flag + completion:(void (^)())completion; + +- (void)presentViewControllerInFullScreen: (UIViewController*)viewControllerToPresent + animated: (BOOL)flag + completion: (void (^)())completion; +@end diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.h.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.h.meta new file mode 100644 index 00000000..f4f10a7b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.h.meta @@ -0,0 +1,50 @@ +fileFormatVersion: 2 +guid: 4d321181095c844b48ca4573ce35aad1 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.mm b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.mm new file mode 100644 index 00000000..e4473733 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.mm @@ -0,0 +1,78 @@ +// +// UIViewController+Presentation.mm +// Native Plugins +// +// Created by Ashwin kumar on 22/01/19. +// Copyright (c) 2019 Voxel Busters Interactive LLP. All rights reserved. +// + +#import "UIViewController+Presentation.h" + +@implementation UIViewController (Presentation) + +- (void)presentViewControllerInPopoverStyleIfRequired:(UIViewController*)viewControllerToPresent + withDelegate:(id)delegate + fromPosition:(CGPoint)position + animated:(BOOL)flag + completion:(void (^)())completion +{ + [self presentViewControllerInPopoverStyleIfRequired:viewControllerToPresent + withDelegate:delegate + fromPosition:position + permittedArrowDirections:0 + animated:flag + completion:completion]; +} + +- (void)presentViewControllerInPopoverStyleIfRequired:(UIViewController*)viewControllerToPresent + withDelegate:(id)delegate + fromPosition:(CGPoint)position + permittedArrowDirections:(UIPopoverArrowDirection)direction + animated:(BOOL)flag + completion:(void (^)())completion +{ + // change presentation style to popover for iPad device + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) + { + viewControllerToPresent.modalPresentationStyle = UIModalPresentationPopover; + + UIPopoverPresentationController* popoverPresentationController = viewControllerToPresent.popoverPresentationController; + popoverPresentationController.delegate = delegate; + popoverPresentationController.sourceView = self.view; + popoverPresentationController.sourceRect = CGRectMake(position.x, position.y, 1, 1); + popoverPresentationController.permittedArrowDirections = direction; + } + else + { + [viewControllerToPresent setPresentationSettings]; + } + + if(![viewControllerToPresent isKindOfClass:[UIAlertController class]]) + { + viewControllerToPresent.presentationController.delegate = delegate; + } + + // present specified object + [self presentViewController:viewControllerToPresent animated:flag completion:completion]; +} + +- (void)setPresentationSettings +{ + if (@available(iOS 13.0, *)) { + self.modalPresentationStyle = UIModalPresentationAutomatic; + } else { + // Fallback on earlier versions + self.modalPresentationStyle = UIModalPresentationFullScreen; + } +} + +- (void)presentViewControllerInFullScreen: (UIViewController*)viewControllerToPresent + animated: (BOOL)flag + completion: (void (^)())completion +{ + self.modalPresentationStyle = UIModalPresentationFullScreen; + + // present specified object + [self presentViewController:viewControllerToPresent animated:flag completion:completion]; +} +@end diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.mm.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.mm.meta new file mode 100644 index 00000000..5d0fd535 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Plugins/iOS/UIViewController+Presentation.mm.meta @@ -0,0 +1,50 @@ +fileFormatVersion: 2 +guid: e90d4d6f4fc974ebd86ce76cb9eeb047 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs.meta new file mode 100644 index 00000000..a7926619 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 88728744e6e5543ea80e4b69bd594444 +folderAsset: yes +timeCreated: 1578145851 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples.meta new file mode 100644 index 00000000..3e6c2748 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 10b7809ee425c4fb68a29d7b7d54c662 +folderAsset: yes +timeCreated: 1547647481 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ActionPanel.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ActionPanel.prefab new file mode 100644 index 00000000..d831c145 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ActionPanel.prefab @@ -0,0 +1,294 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1383244600673324 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224754109732942086} + - component: {fileID: 114458823125844134} + - component: {fileID: 222301520386526820} + - component: {fileID: 114044915492134002} + - component: {fileID: 114483481525253056} + m_Layer: 5 + m_Name: ActionPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224754109732942086 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383244600673324} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224291371103355398} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -200, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114458823125844134 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383244600673324} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224464102030571442} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 224291371103355398} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 0} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!222 &222301520386526820 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383244600673324} + m_CullTransparentMesh: 0 +--- !u!114 &114044915492134002 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383244600673324} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9245283, g: 0.9201673, b: 0.9201673, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &114483481525253056 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383244600673324} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 0.8 + m_FlexibleHeight: 1 + m_LayoutPriority: 1 +--- !u!1 &1654873636067368 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224291371103355398} + - component: {fileID: 114671148024326956} + - component: {fileID: 222696952570705116} + - component: {fileID: 114270695033652748} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224291371103355398 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1654873636067368} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224464102030571442} + m_Father: {fileID: 224754109732942086} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &114671148024326956 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1654873636067368} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!222 &222696952570705116 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1654873636067368} + m_CullTransparentMesh: 0 +--- !u!114 &114270695033652748 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1654873636067368} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!1 &1843181782701574 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224464102030571442} + - component: {fileID: 114983446567434222} + - component: {fileID: 114060847495336644} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224464102030571442 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843181782701574} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224291371103355398} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &114983446567434222 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843181782701574} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 50 + m_Right: 50 + m_Top: 30 + m_Bottom: 30 + m_ChildAlignment: 1 + m_Spacing: 15 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!114 &114060847495336644 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843181782701574} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ActionPanel.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ActionPanel.prefab.meta new file mode 100644 index 00000000..3113357e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ActionPanel.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2e0ca81b3691d4221b2204056b220040 +timeCreated: 1562303402 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/BackButton.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/BackButton.prefab new file mode 100644 index 00000000..52ccb2ef --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/BackButton.prefab @@ -0,0 +1,233 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1225259909145202 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224035219049407068} + - component: {fileID: 222450307957982428} + - component: {fileID: 114385090189785120} + - component: {fileID: 114872307879632310} + - component: {fileID: 114772039989283150} + - component: {fileID: 114284364595003524} + m_Layer: 5 + m_Name: BackButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224035219049407068 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225259909145202} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224573545078175188} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222450307957982428 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225259909145202} + m_CullTransparentMesh: 0 +--- !u!114 &114385090189785120 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225259909145202} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.990566, g: 0.990566, b: 0.990566, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &114872307879632310 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225259909145202} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114385090189785120} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114772039989283150 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225259909145202} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 40 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &114284364595003524 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225259909145202} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: acfc8ba4fff24474a9995469ae741b3c, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1410395622577962 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224573545078175188} + - component: {fileID: 222941698648888652} + - component: {fileID: 114766746790446206} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224573545078175188 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410395622577962} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224035219049407068} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222941698648888652 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410395622577962} + m_CullTransparentMesh: 0 +--- !u!114 &114766746790446206 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410395622577962} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11320752, g: 0.11320752, b: 0.11320752, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e418537621d284969acce413dd1c8c27, type: 3} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 25 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Back diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/BackButton.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/BackButton.prefab.meta new file mode 100644 index 00000000..f49786fd --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/BackButton.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 976e185699ff140fdb61f269f556fe93 +timeCreated: 1562303594 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Button.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Button.prefab new file mode 100644 index 00000000..930987bd --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Button.prefab @@ -0,0 +1,220 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1430593560333864 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224952746328586062} + - component: {fileID: 222390527291107986} + - component: {fileID: 114860196457914472} + - component: {fileID: 114567474638298420} + - component: {fileID: 114464621491982878} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224952746328586062 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1430593560333864} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224801287003026676} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -200, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222390527291107986 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1430593560333864} + m_CullTransparentMesh: 0 +--- !u!114 &114860196457914472 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1430593560333864} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &114567474638298420 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1430593560333864} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114860196457914472} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114464621491982878 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1430593560333864} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 40 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &1831795015738404 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224801287003026676} + - component: {fileID: 222102832875962158} + - component: {fileID: 114822244254790652} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224801287003026676 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831795015738404} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224952746328586062} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222102832875962158 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831795015738404} + m_CullTransparentMesh: 0 +--- !u!114 &114822244254790652 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1831795015738404} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11320752, g: 0.11320752, b: 0.11320752, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e418537621d284969acce413dd1c8c27, type: 3} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 16 + m_MaxSize: 24 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Button diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Button.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Button.prefab.meta new file mode 100644 index 00000000..cdb4eae8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Button.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0ae52c31935f040969ff0c680344702b +timeCreated: 1547647503 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ConsolePanel.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ConsolePanel.prefab new file mode 100644 index 00000000..b3f025f9 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ConsolePanel.prefab @@ -0,0 +1,464 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1043365091775690 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224230393480343426} + - component: {fileID: 222635698714245778} + - component: {fileID: 114087859162682762} + - component: {fileID: 114761511105016240} + - component: {fileID: 114395380185171680} + m_Layer: 5 + m_Name: ConsolePanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224230393480343426 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043365091775690} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224217292865860958} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &222635698714245778 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043365091775690} + m_CullTransparentMesh: 0 +--- !u!114 &114087859162682762 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043365091775690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.990566, g: 0.990566, b: 0.990566, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &114761511105016240 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043365091775690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 030d6e213de734b1ab4bfb8f6a416dc9, type: 3} + m_Name: + m_EditorClassIdentifier: + m_text: {fileID: 114082688468709384} + m_textScroller: {fileID: 114305235823970096} +--- !u!114 &114395380185171680 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043365091775690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 160 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &1266210483889168 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224217292865860958} + - component: {fileID: 114305235823970096} + - component: {fileID: 222213325961543016} + - component: {fileID: 114092120971635258} + m_Layer: 5 + m_Name: ScrollRect + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224217292865860958 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1266210483889168} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224369000439747256} + m_Father: {fileID: 224230393480343426} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114305235823970096 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1266210483889168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224164935523170058} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 224369000439747256} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 0} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!222 &222213325961543016 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1266210483889168} + m_CullTransparentMesh: 0 +--- !u!114 &114092120971635258 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1266210483889168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!1 &1308015201791370 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224369000439747256} + - component: {fileID: 114346359527998570} + - component: {fileID: 222997546077947360} + - component: {fileID: 114981987312976902} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224369000439747256 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308015201791370} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224164935523170058} + m_Father: {fileID: 224217292865860958} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 12.399902, y: -10} + m_SizeDelta: {x: -24.8, y: -17.2} + m_Pivot: {x: 0, y: 1} +--- !u!114 &114346359527998570 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308015201791370} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!222 &222997546077947360 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308015201791370} + m_CullTransparentMesh: 0 +--- !u!114 &114981987312976902 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308015201791370} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!1 &1620636455641208 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224818425575037616} + - component: {fileID: 222113324207946846} + - component: {fileID: 114082688468709384} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224818425575037616 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1620636455641208} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224164935523170058} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222113324207946846 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1620636455641208} + m_CullTransparentMesh: 0 +--- !u!114 &114082688468709384 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1620636455641208} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11320752, g: 0.11320752, b: 0.11320752, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e418537621d284969acce413dd1c8c27, type: 3} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: Console +--- !u!1 &1739254653831132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224164935523170058} + - component: {fileID: 114107015515134430} + - component: {fileID: 114351036584141900} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224164935523170058 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1739254653831132} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224818425575037616} + m_Father: {fileID: 224369000439747256} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0.09967924} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &114107015515134430 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1739254653831132} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &114351036584141900 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1739254653831132} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ConsolePanel.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ConsolePanel.prefab.meta new file mode 100644 index 00000000..3acd28eb --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/ConsolePanel.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 36fd405962f494477b184f84fbd9a337 +timeCreated: 1562303414 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoPanel.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoPanel.prefab new file mode 100644 index 00000000..a2fc637e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoPanel.prefab @@ -0,0 +1,157 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1090748803265720 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224871454335544214} + - component: {fileID: 114694957018523678} + m_Layer: 5 + m_Name: DemoPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224871454335544214 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1090748803265720} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224353115767227546} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114694957018523678 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1090748803265720} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 1 + m_Spacing: 10 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!1 &1866383764505280 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224353115767227546} + - component: {fileID: 222364469615282034} + - component: {fileID: 114827569583914414} + - component: {fileID: 114137109017026640} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224353115767227546 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1866383764505280} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224871454335544214} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222364469615282034 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1866383764505280} + m_CullTransparentMesh: 0 +--- !u!114 &114827569583914414 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1866383764505280} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &114137109017026640 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1866383764505280} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 1 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoPanel.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoPanel.prefab.meta new file mode 100644 index 00000000..e52b59bd --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoPanel.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9cb60866b172b415da39c73dad3999e8 +timeCreated: 1562303428 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoResources.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoResources.prefab new file mode 100644 index 00000000..35906a59 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoResources.prefab @@ -0,0 +1,60 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1976543427182744} + m_IsPrefabParent: 1 +--- !u!1 &1976543427182744 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4074120279433260} + - component: {fileID: 114540387559500602} + m_Layer: 0 + m_Name: DemoResources + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4074120279433260 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1976543427182744} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &114540387559500602 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1976543427182744} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 940266f63b2ee41128e43647609f80f8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_images: + - {fileID: 2800000, guid: 5adf67eb430f548418876cfedad78a9a, type: 3} + m_urls: + - https://www.google.com + m_texts: + - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor + incididunt ut labore et dolore magna aliqua. diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoResources.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoResources.prefab.meta new file mode 100644 index 00000000..5a5db232 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/DemoResources.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 353a001434f7343b4bd6ea715e28562f +timeCreated: 1563447691 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Dropdown.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Dropdown.prefab new file mode 100644 index 00000000..0f590fe0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Dropdown.prefab @@ -0,0 +1,797 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1023892561578514 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224016064779405710} + - component: {fileID: 222005949596316690} + - component: {fileID: 114046355294249188} + - component: {fileID: 114656726428466140} + m_Layer: 5 + m_Name: Template + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &224016064779405710 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1023892561578514} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 224743043863863404} + m_Father: {fileID: 224158029084090604} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 2} + m_SizeDelta: {x: 0, y: 120} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &222005949596316690 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1023892561578514} + m_CullTransparentMesh: 0 +--- !u!114 &114046355294249188 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1023892561578514} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &114656726428466140 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1023892561578514} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 224318144167479604} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 224743043863863404} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 0} + m_HorizontalScrollbarVisibility: 0 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: 0 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &1045175234636876 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224514434835063082} + - component: {fileID: 222463721787903378} + - component: {fileID: 114776005954242994} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224514434835063082 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045175234636876} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 224158029084090604} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -7.5, y: -0.5} + m_SizeDelta: {x: -35, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222463721787903378 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045175234636876} + m_CullTransparentMesh: 0 +--- !u!114 &114776005954242994 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045175234636876} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e418537621d284969acce413dd1c8c27, type: 3} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Option A +--- !u!1 &1065878302462128 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224743043863863404} + - component: {fileID: 114333908284456814} + - component: {fileID: 222640113378206898} + - component: {fileID: 114089421562210144} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224743043863863404 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1065878302462128} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 224318144167479604} + m_Father: {fileID: 224016064779405710} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &114333908284456814 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1065878302462128} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!222 &222640113378206898 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1065878302462128} + m_CullTransparentMesh: 0 +--- !u!114 &114089421562210144 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1065878302462128} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1094942323768938 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224685884398706474} + - component: {fileID: 114779507134661336} + m_Layer: 5 + m_Name: Item + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224685884398706474 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1094942323768938} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 224767923176248100} + - {fileID: 224132635888509720} + m_Father: {fileID: 224318144167479604} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 40} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &114779507134661336 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1094942323768938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0.9245283, g: 0.9201673, b: 0.9201673, a: 1} + m_HighlightedColor: {r: 0.990566, g: 0.990566, b: 0.990566, a: 1} + m_PressedColor: {r: 0.990566, g: 0.990566, b: 0.990566, a: 1} + m_SelectedColor: {r: 0.990566, g: 0.990566, b: 0.990566, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114327894200692156} + toggleTransition: 1 + graphic: {fileID: 0} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 1 +--- !u!1 &1193824002270256 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224158029084090604} + - component: {fileID: 222997439124120942} + - component: {fileID: 114945614848403610} + - component: {fileID: 114339634453116536} + - component: {fileID: 114435843442480086} + m_Layer: 5 + m_Name: Dropdown + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224158029084090604 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1193824002270256} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 224514434835063082} + - {fileID: 224808553636828290} + - {fileID: 224016064779405710} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 40} + m_Pivot: {x: 1, y: 0.5} +--- !u!222 &222997439124120942 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1193824002270256} + m_CullTransparentMesh: 0 +--- !u!114 &114945614848403610 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1193824002270256} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11320752, g: 0.11320752, b: 0.11320752, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &114339634453116536 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1193824002270256} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d0b652f32a2cc243917e4028fa0f046, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114945614848403610} + m_Template: {fileID: 224016064779405710} + m_CaptionText: {fileID: 114776005954242994} + m_CaptionImage: {fileID: 0} + m_ItemText: {fileID: 114449367318763852} + m_ItemImage: {fileID: 0} + m_Value: 0 + m_Options: + m_Options: + - m_Text: Option A + m_Image: {fileID: 0} + - m_Text: Option B + m_Image: {fileID: 0} + - m_Text: Option C + m_Image: {fileID: 0} + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_AlphaFadeSpeed: 0.15 +--- !u!114 &114435843442480086 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1193824002270256} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 160 + m_PreferredHeight: 40 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &1209149006041006 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224767923176248100} + - component: {fileID: 222355603195166402} + - component: {fileID: 114327894200692156} + m_Layer: 5 + m_Name: Item Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224767923176248100 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1209149006041006} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 224685884398706474} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222355603195166402 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1209149006041006} + m_CullTransparentMesh: 0 +--- !u!114 &114327894200692156 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1209149006041006} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9245283, g: 0.9201673, b: 0.9201673, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1227429266343698 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224132635888509720} + - component: {fileID: 222684907768796092} + - component: {fileID: 114449367318763852} + m_Layer: 5 + m_Name: Item Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224132635888509720 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1227429266343698} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 224685884398706474} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: -0.5} + m_SizeDelta: {x: -30, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222684907768796092 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1227429266343698} + m_CullTransparentMesh: 0 +--- !u!114 &114449367318763852 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1227429266343698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11320752, g: 0.11320752, b: 0.11320752, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e418537621d284969acce413dd1c8c27, type: 3} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Option A +--- !u!1 &1321823248984956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224808553636828290} + - component: {fileID: 222673429768263828} + - component: {fileID: 114784797724014900} + m_Layer: 5 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224808553636828290 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1321823248984956} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 224158029084090604} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -15, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222673429768263828 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1321823248984956} + m_CullTransparentMesh: 0 +--- !u!114 &114784797724014900 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1321823248984956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 8452141070dc84588a81dcd4997c35d1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1577877957623102 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224318144167479604} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224318144167479604 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1577877957623102} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 224685884398706474} + m_Father: {fileID: 224743043863863404} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 40} + m_Pivot: {x: 0.5, y: 1} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Dropdown.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Dropdown.prefab.meta new file mode 100644 index 00000000..39ac7efe --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Dropdown.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f6d2bd773e6664015bcea0a44da91f8d +timeCreated: 1549355756 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Grid.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Grid.prefab new file mode 100644 index 00000000..dd2ffb52 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Grid.prefab @@ -0,0 +1,70 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1729283381912644} + m_IsPrefabParent: 1 +--- !u!1 &1729283381912644 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224913561361295354} + - component: {fileID: 114442734718446736} + m_Layer: 5 + m_Name: Grid + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114442734718446736 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1729283381912644} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2095666955, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 1 + m_StartCorner: 0 + m_StartAxis: 0 + m_CellSize: {x: 320, y: 60} + m_Spacing: {x: 0, y: 0} + m_Constraint: 0 + m_ConstraintCount: 1 +--- !u!224 &224913561361295354 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1729283381912644} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Grid.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Grid.prefab.meta new file mode 100644 index 00000000..442bc287 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Grid.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 49cd706acfe6d466296dddcacc8c1b80 +timeCreated: 1549313181 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Header.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Header.prefab new file mode 100644 index 00000000..42df2dcc --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Header.prefab @@ -0,0 +1,177 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1166363502238262 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224101732043339844} + - component: {fileID: 222703062519739966} + - component: {fileID: 114546785299107946} + - component: {fileID: 114731851738737184} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224101732043339844 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1166363502238262} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224083689230385278} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &222703062519739966 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1166363502238262} + m_CullTransparentMesh: 0 +--- !u!114 &114546785299107946 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1166363502238262} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.990566, g: 0.990566, b: 0.990566, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &114731851738737184 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1166363502238262} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 80 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &1386125318761082 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224083689230385278} + - component: {fileID: 222221176673892098} + - component: {fileID: 114267771407102612} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224083689230385278 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386125318761082} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224101732043339844} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -240, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222221176673892098 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386125318761082} + m_CullTransparentMesh: 0 +--- !u!114 &114267771407102612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386125318761082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11320752, g: 0.11320752, b: 0.11320752, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e418537621d284969acce413dd1c8c27, type: 3} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 1 + m_MinSize: 0 + m_MaxSize: 32 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Title diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Header.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Header.prefab.meta new file mode 100644 index 00000000..8c3584b2 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Header.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 642edd1adfa1d478ebaa2d75fa490d52 +timeCreated: 1562303385 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/InputField.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/InputField.prefab new file mode 100644 index 00000000..bdebfd94 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/InputField.prefab @@ -0,0 +1,322 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1338051371335932 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224955589825798102} + - component: {fileID: 222973406624162998} + - component: {fileID: 114155734850734234} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224955589825798102 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338051371335932} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224540353099770882} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222973406624162998 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338051371335932} + m_CullTransparentMesh: 0 +--- !u!114 &114155734850734234 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338051371335932} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e418537621d284969acce413dd1c8c27, type: 3} + m_FontSize: 20 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter text... +--- !u!1 &1526539212069634 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224440253791260236} + - component: {fileID: 222865832714574392} + - component: {fileID: 114270666603452436} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224440253791260236 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1526539212069634} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224540353099770882} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222865832714574392 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1526539212069634} + m_CullTransparentMesh: 0 +--- !u!114 &114270666603452436 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1526539212069634} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e418537621d284969acce413dd1c8c27, type: 3} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!1 &1537348704010034 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224540353099770882} + - component: {fileID: 222996081364213050} + - component: {fileID: 114205020239875918} + - component: {fileID: 114469949788325500} + - component: {fileID: 114163320315824386} + m_Layer: 5 + m_Name: InputField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224540353099770882 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537348704010034} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224955589825798102} + - {fileID: 224440253791260236} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -85, y: 0} + m_SizeDelta: {x: -170, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222996081364213050 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537348704010034} + m_CullTransparentMesh: 0 +--- !u!114 &114205020239875918 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537348704010034} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &114469949788325500 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537348704010034} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114205020239875918} + m_TextComponent: {fileID: 114270666603452436} + m_Placeholder: {fileID: 114155734850734234} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 +--- !u!114 &114163320315824386 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537348704010034} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 600 + m_PreferredHeight: 40 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/InputField.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/InputField.prefab.meta new file mode 100644 index 00000000..e28f0c59 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/InputField.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0faea64126a0946a2a229dc5c67a892b +timeCreated: 1562303997 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Label.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Label.prefab new file mode 100644 index 00000000..9206e2ac --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Label.prefab @@ -0,0 +1,138 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1743733418358568 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224181412554927584} + - component: {fileID: 222817667157265376} + - component: {fileID: 114304789178456594} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224181412554927584 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1743733418358568} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224880110391763244} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 20, y: 0} + m_SizeDelta: {x: -40, y: -10} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &222817667157265376 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1743733418358568} + m_CullTransparentMesh: 0 +--- !u!114 &114304789178456594 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1743733418358568} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.5647059, g: 0.5647059, b: 0.5647059, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e418537621d284969acce413dd1c8c27, type: 3} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Label +--- !u!1 &1745382843081832 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224880110391763244} + - component: {fileID: 114640770555796246} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224880110391763244 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1745382843081832} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224181412554927584} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!114 &114640770555796246 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1745382843081832} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 40 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Label.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Label.prefab.meta new file mode 100644 index 00000000..1d1ac77e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Label.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0a5f545e2922b4f979c3a40c7ea220ce +timeCreated: 1562229135 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row (Horizontal).prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row (Horizontal).prefab new file mode 100644 index 00000000..f038bce4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row (Horizontal).prefab @@ -0,0 +1,105 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1729283381912644 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224913561361295354} + - component: {fileID: 114484300395288958} + - component: {fileID: -9146562865070377635} + - component: {fileID: -9061008655249065994} + m_Layer: 5 + m_Name: Row (Horizontal) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224913561361295354 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729283381912644} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114484300395288958 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729283381912644} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 1 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!222 &-9146562865070377635 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729283381912644} + m_CullTransparentMesh: 1 +--- !u!114 &-9061008655249065994 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729283381912644} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.09411765} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row (Horizontal).prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row (Horizontal).prefab.meta new file mode 100644 index 00000000..673f7b7c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row (Horizontal).prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c3f90658978844a229ed44d672b70a93 +timeCreated: 1549313181 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row.prefab new file mode 100644 index 00000000..4999fd44 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row.prefab @@ -0,0 +1,46 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1729283381912644} + m_IsPrefabParent: 1 +--- !u!1 &1729283381912644 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224913561361295354} + m_Layer: 5 + m_Name: Row + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224913561361295354 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1729283381912644} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row.prefab.meta new file mode 100644 index 00000000..31a4217e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Row.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 53106115b89de4cc6a667adc369f97b8 +timeCreated: 1549313181 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Section.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Section.prefab new file mode 100644 index 00000000..0e8cdbee --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Section.prefab @@ -0,0 +1,198 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1105364963865442 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224563612419213160} + - component: {fileID: 222647657039145556} + - component: {fileID: 114553031757334108} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224563612419213160 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105364963865442} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224150235456743208} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 20, y: 0} + m_SizeDelta: {x: -40, y: -10} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &222647657039145556 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105364963865442} + m_CullTransparentMesh: 0 +--- !u!114 &114553031757334108 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105364963865442} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.5647059, g: 0.5647059, b: 0.5647059, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e418537621d284969acce413dd1c8c27, type: 3} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Section +--- !u!1 &1370956973664342 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224804570984248434} + - component: {fileID: 114946616376835068} + m_Layer: 5 + m_Name: Section + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224804570984248434 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370956973664342} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224150235456743208} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114946616376835068 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370956973664342} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 1 + m_Spacing: 4 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 +--- !u!1 &1786111478595968 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224150235456743208} + - component: {fileID: 114483417859780178} + m_Layer: 5 + m_Name: SubTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224150235456743208 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1786111478595968} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224563612419213160} + m_Father: {fileID: 224804570984248434} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!114 &114483417859780178 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1786111478595968} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 40 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Section.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Section.prefab.meta new file mode 100644 index 00000000..618f3bd3 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Section.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d7ff5e20ef7484e159eb8894a8465de0 +timeCreated: 1562305585 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SelectableButton.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SelectableButton.prefab new file mode 100644 index 00000000..6f6fdcb3 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SelectableButton.prefab @@ -0,0 +1,299 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1457602808629010 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224468145109842630} + - component: {fileID: 222278369463802492} + - component: {fileID: 114843381117437088} + m_Layer: 5 + m_Name: Checked + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224468145109842630 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457602808629010} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224246396564361528} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222278369463802492 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457602808629010} + m_CullTransparentMesh: 0 +--- !u!114 &114843381117437088 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457602808629010} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.990566, g: 0.990566, b: 0.990566, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!1 &1590734985891500 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224734417071291362} + - component: {fileID: 222698511777421920} + - component: {fileID: 114019987726141092} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224734417071291362 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590734985891500} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224246396564361528} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222698511777421920 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590734985891500} + m_CullTransparentMesh: 0 +--- !u!114 &114019987726141092 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590734985891500} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11320752, g: 0.11320752, b: 0.11320752, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e418537621d284969acce413dd1c8c27, type: 3} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 16 + m_MaxSize: 24 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Button +--- !u!1 &1791280990977722 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224246396564361528} + - component: {fileID: 222731597850991564} + - component: {fileID: 114688525463478710} + - component: {fileID: 114017956030511436} + - component: {fileID: 114280077302381444} + m_Layer: 5 + m_Name: SelectableButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224246396564361528 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1791280990977722} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224468145109842630} + - {fileID: 224734417071291362} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222731597850991564 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1791280990977722} + m_CullTransparentMesh: 0 +--- !u!114 &114688525463478710 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1791280990977722} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9245283, g: 0.9201673, b: 0.9201673, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &114017956030511436 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1791280990977722} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114688525463478710} + toggleTransition: 1 + graphic: {fileID: 114843381117437088} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_IsOn: 0 +--- !u!114 &114280077302381444 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1791280990977722} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 40 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SelectableButton.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SelectableButton.prefab.meta new file mode 100644 index 00000000..22196ee7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SelectableButton.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b705253d9d4224c17a4157333f3226b6 +timeCreated: 1562305190 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubHeader.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubHeader.prefab new file mode 100644 index 00000000..f4a48bb2 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubHeader.prefab @@ -0,0 +1,156 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1616264777658218 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224112343938402096} + - component: {fileID: 222848848218035406} + - component: {fileID: 114236370472595554} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224112343938402096 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616264777658218} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224104657789406318} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222848848218035406 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616264777658218} + m_CullTransparentMesh: 0 +--- !u!114 &114236370472595554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616264777658218} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 0 + m_MaxSize: 20 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Mail Composer +--- !u!1 &1762802492619682 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224104657789406318} + - component: {fileID: 222994696516698790} + - component: {fileID: 114476633020109748} + m_Layer: 5 + m_Name: SubHeader + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224104657789406318 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1762802492619682} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224112343938402096} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222994696516698790 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1762802492619682} + m_CullTransparentMesh: 0 +--- !u!114 &114476633020109748 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1762802492619682} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.672} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubHeader.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubHeader.prefab.meta new file mode 100644 index 00000000..e05334f3 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubHeader.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d436a6bd3c43c4064bb5b0487f71ecda +timeCreated: 1547647566 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubTitle.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubTitle.prefab new file mode 100644 index 00000000..40ab1c61 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubTitle.prefab @@ -0,0 +1,138 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1743733418358568 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224181412554927584} + - component: {fileID: 222817667157265376} + - component: {fileID: 114304789178456594} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224181412554927584 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1743733418358568} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224880110391763244} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 20, y: 0} + m_SizeDelta: {x: -40, y: -10} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &222817667157265376 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1743733418358568} + m_CullTransparentMesh: 0 +--- !u!114 &114304789178456594 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1743733418358568} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.5647059, g: 0.5647059, b: 0.5647059, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: e418537621d284969acce413dd1c8c27, type: 3} + m_FontSize: 24 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Label +--- !u!1 &1745382843081832 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224880110391763244} + - component: {fileID: 114640770555796246} + m_Layer: 5 + m_Name: SubTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224880110391763244 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1745382843081832} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224181412554927584} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!114 &114640770555796246 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1745382843081832} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 60 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubTitle.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubTitle.prefab.meta new file mode 100644 index 00000000..df69bf81 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/SubTitle.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8c0a1d0702e8d4c60b5f7cfd69c54073 +timeCreated: 1562229135 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Toggle.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Toggle.prefab new file mode 100644 index 00000000..f2a8bd2a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Toggle.prefab @@ -0,0 +1,383 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1115347289783676 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224026794194396316} + - component: {fileID: 222428208889105814} + - component: {fileID: 114606141039276814} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224026794194396316 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115347289783676} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 224863752380380678} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222428208889105814 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115347289783676} + m_CullTransparentMesh: 0 +--- !u!114 &114606141039276814 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115347289783676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.990566, g: 0.990566, b: 0.990566, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1436292188102720 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224863752380380678} + - component: {fileID: 222784111643753116} + - component: {fileID: 114012976300579226} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224863752380380678 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1436292188102720} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 224026794194396316} + m_Father: {fileID: 224973839754196500} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -10} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222784111643753116 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1436292188102720} + m_CullTransparentMesh: 0 +--- !u!114 &114012976300579226 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1436292188102720} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1847481865867428 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224973839754196500} + - component: {fileID: 114691862735848880} + - component: {fileID: 114597546877301324} + - component: {fileID: 1056081746664844487} + - component: {fileID: 6641174690089426959} + m_Layer: 5 + m_Name: Toggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224973839754196500 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847481865867428} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 224863752380380678} + - {fileID: 224207624468828976} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &114691862735848880 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847481865867428} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114012976300579226} + toggleTransition: 1 + graphic: {fileID: 114606141039276814} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 1 +--- !u!114 &114597546877301324 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847481865867428} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 120 + m_PreferredHeight: 40 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!222 &1056081746664844487 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847481865867428} + m_CullTransparentMesh: 1 +--- !u!114 &6641174690089426959 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847481865867428} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.09411765} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1967550993301098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224207624468828976} + - component: {fileID: 222843106342474602} + - component: {fileID: 114818449290004172} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224207624468828976 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1967550993301098} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 224973839754196500} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 24} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &222843106342474602 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1967550993301098} + m_CullTransparentMesh: 0 +--- !u!114 &114818449290004172 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1967550993301098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11320752, g: 0.11320752, b: 0.11320752, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: e418537621d284969acce413dd1c8c27, type: 3} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Label diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Toggle.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Toggle.prefab.meta new file mode 100644 index 00000000..b35547c4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/Examples/Toggle.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a71d99f82f5cb4d7e8703e58527ed9bd +timeCreated: 1549313487 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIAlertDialog.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIAlertDialog.prefab new file mode 100644 index 00000000..6435e6f4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIAlertDialog.prefab @@ -0,0 +1,787 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1212668156388774} + m_IsPrefabParent: 1 +--- !u!1 &1134199821205146 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224026503092109950} + - component: {fileID: 222798798132884822} + - component: {fileID: 114264837080710380} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1212668156388774 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224961064885394582} + - component: {fileID: 222855421965438568} + - component: {fileID: 114719650402599042} + m_Layer: 5 + m_Name: UnityUIAlertDialog + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1444912029132066 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224890410505311336} + - component: {fileID: 222871979494986796} + - component: {fileID: 114437939104182950} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1491521136401092 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224993442107416342} + - component: {fileID: 222660402211604342} + - component: {fileID: 114426906830461430} + - component: {fileID: 114633366171141876} + m_Layer: 5 + m_Name: Ok + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1578316838075366 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224427291746790018} + - component: {fileID: 222290285530892906} + - component: {fileID: 114340610768889040} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1795177363468906 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224614295017793080} + - component: {fileID: 222313725694417170} + - component: {fileID: 114283677234356648} + - component: {fileID: 114847601616134896} + m_Layer: 5 + m_Name: Cancel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1858732617179576 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224624371019735436} + - component: {fileID: 114583720595074066} + m_Layer: 5 + m_Name: ButtonGroup + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1888375275847344 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224498473314747022} + - component: {fileID: 222655936121240924} + - component: {fileID: 114508959082617160} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1893706790752728 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224731969598681650} + - component: {fileID: 222079337800444530} + - component: {fileID: 114661597482121632} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1910709274486492 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224478732637988690} + - component: {fileID: 222591068814091094} + - component: {fileID: 114047670138849628} + m_Layer: 5 + m_Name: Message + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114047670138849628 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1910709274486492} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 30 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Message +--- !u!114 &114264837080710380 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1134199821205146} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Button +--- !u!114 &114283677234356648 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1795177363468906} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.5647059} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114340610768889040 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1578316838075366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.566} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114426906830461430 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1491521136401092} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.5647059} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114437939104182950 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1444912029132066} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 30 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Title +--- !u!114 &114508959082617160 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1888375275847344} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Button +--- !u!114 &114583720595074066 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1858732617179576} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 20 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 +--- !u!114 &114633366171141876 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1491521136401092} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + m_PressedColor: {r: 1, g: 1, b: 1, a: 1} + m_DisabledColor: {r: 1, g: 1, b: 1, a: 1} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114426906830461430} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114661597482121632 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1893706790752728} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.17647058, g: 0.17647058, b: 0.17647058, a: 0.478} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114719650402599042 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1212668156388774} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4392aa7fb54714d2786e9582d0601cae, type: 3} + m_Name: + m_EditorClassIdentifier: + m_title: {fileID: 114437939104182950} + m_message: {fileID: 114047670138849628} + m_buttons: + - {fileID: 114633366171141876} + - {fileID: 114847601616134896} +--- !u!114 &114847601616134896 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1795177363468906} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + m_PressedColor: {r: 1, g: 1, b: 1, a: 1} + m_DisabledColor: {r: 1, g: 1, b: 1, a: 1} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114283677234356648} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!222 &222079337800444530 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1893706790752728} +--- !u!222 &222290285530892906 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1578316838075366} +--- !u!222 &222313725694417170 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1795177363468906} +--- !u!222 &222591068814091094 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1910709274486492} +--- !u!222 &222655936121240924 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1888375275847344} +--- !u!222 &222660402211604342 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1491521136401092} +--- !u!222 &222798798132884822 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1134199821205146} +--- !u!222 &222855421965438568 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1212668156388774} +--- !u!222 &222871979494986796 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1444912029132066} +--- !u!224 &224026503092109950 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1134199821205146} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224614295017793080} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224427291746790018 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1578316838075366} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224890410505311336} + - {fileID: 224478732637988690} + - {fileID: 224624371019735436} + m_Father: {fileID: 224961064885394582} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 640, y: 400} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224478732637988690 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1910709274486492} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224427291746790018} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 10} + m_SizeDelta: {x: -80, y: 120} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224498473314747022 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1888375275847344} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224993442107416342} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224614295017793080 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1795177363468906} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224026503092109950} + m_Father: {fileID: 224624371019735436} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 197, y: 58} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224624371019735436 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1858732617179576} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224614295017793080} + - {fileID: 224993442107416342} + m_Father: {fileID: 224427291746790018} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: -110} + m_SizeDelta: {x: 0, y: 58} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224731969598681650 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1893706790752728} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224961064885394582} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224890410505311336 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1444912029132066} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224427291746790018} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 112} + m_SizeDelta: {x: -80, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224961064885394582 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1212668156388774} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224731969598681650} + - {fileID: 224427291746790018} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224993442107416342 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1491521136401092} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224498473314747022} + m_Father: {fileID: 224624371019735436} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 197, y: 58} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIAlertDialog.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIAlertDialog.prefab.meta new file mode 100644 index 00000000..6476f0a0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIAlertDialog.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0bea496bdcd2d41ebb1104db0fd905dc +timeCreated: 1547476928 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIRenderer.prefab b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIRenderer.prefab new file mode 100644 index 00000000..e07d751b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIRenderer.prefab @@ -0,0 +1,114 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1338797265575942 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224957196374820768} + - component: {fileID: 223815083016734448} + - component: {fileID: 114202664212081364} + - component: {fileID: 114813343446744758} + - component: {fileID: 114882653979984282} + m_Layer: 5 + m_Name: UnityUIRenderer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224957196374820768 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338797265575942} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!223 &223815083016734448 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338797265575942} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 1000 + m_TargetDisplay: 0 +--- !u!114 &114202664212081364 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338797265575942} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 640, y: 960} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114813343446744758 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338797265575942} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &114882653979984282 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338797265575942} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: aac1689022e104e26a05af7729a092ea, type: 3} + m_Name: + m_EditorClassIdentifier: + m_displayOrder: 0 diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIRenderer.prefab.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIRenderer.prefab.meta new file mode 100644 index 00000000..cbf6d974 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Prefabs/UnityUIRenderer.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b8b2730da8ec14db686316d122a0939e +timeCreated: 1547474282 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/README.md b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/README.md new file mode 100644 index 00000000..39af52c0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/README.md @@ -0,0 +1,29 @@ +# README # + +This README would normally document whatever steps are necessary to get your application up and running. + +### What is this repository for? ### + +* Quick summary +* Version +* [Learn Markdown](https://bitbucket.org/tutorials/markdowndemo) + +### How do I get set up? ### + +* Summary of set up +* Configuration +* Dependencies +* Database configuration +* How to run tests +* Deployment instructions + +### Contribution guidelines ### + +* Writing tests +* Code review +* Other guidelines + +### Who do I talk to? ### + +* Repo owner or admin +* Other community or team contact \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/README.md.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/README.md.meta new file mode 100644 index 00000000..9524bbe6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6821e77581cba42709aed902773c2d92 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime.meta new file mode 100644 index 00000000..2ce32d83 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2c5f40ac65e5b44a8bb645fccb961a15 +folderAsset: yes +timeCreated: 1576064798 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary.meta new file mode 100644 index 00000000..50b62dca --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ea5576c413096416d93b2ec8c0c7fa2b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AssemblyInfo.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AssemblyInfo.cs new file mode 100644 index 00000000..c3e080cc --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AssemblyInfo.cs @@ -0,0 +1,25 @@ +using System.Runtime.CompilerServices; + +// make it visible for internal modules +[assembly: InternalsVisibleTo("VoxelBusters.CoreLibrary.NativePlugins")] +[assembly: InternalsVisibleTo("VoxelBusters.CoreLibrary.Editor")] +[assembly: InternalsVisibleTo("VoxelBusters.CoreLibrary.Editor.NativePlugins")] + +[assembly: InternalsVisibleTo("VoxelBusters.EssentialKit")] +[assembly: InternalsVisibleTo("VoxelBusters.EssentialKit.Editor")] + +[assembly: InternalsVisibleTo("VoxelBusters.ScreenRecorderKit")] +[assembly: InternalsVisibleTo("VoxelBusters.ScreenRecorderKit.Editor")] + +[assembly: InternalsVisibleTo("VoxelBusters.ReportingKit")] +[assembly: InternalsVisibleTo("VoxelBusters.ReportingKit.Editor")] + +[assembly: InternalsVisibleTo("VoxelBusters.EasyMLKit")] +[assembly: InternalsVisibleTo("VoxelBusters.EasyMLKit.Editor")] + +[assembly: InternalsVisibleTo("VoxelBusters.SocialKit")] +[assembly: InternalsVisibleTo("VoxelBusters.SocialKit.Editor")] + +// AdsKit +[assembly: InternalsVisibleTo("VoxelBusters.AdsKit")] +[assembly: InternalsVisibleTo("VoxelBusters.AdsKit.Editor")] diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AssemblyInfo.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AssemblyInfo.cs.meta new file mode 100644 index 00000000..91700f6b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f5661c7f11324611b509f9f0aada138 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations.meta new file mode 100644 index 00000000..44f98690 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f239ec3dc7484d988ea6c2d5e639796 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperation.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperation.cs new file mode 100644 index 00000000..5d3d8dd1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperation.cs @@ -0,0 +1,217 @@ +using System.Collections; + +namespace VoxelBusters.CoreLibrary +{ + [IncludeInDocs] + public abstract class AsyncOperation : IAsyncOperation, IAsyncOperation, IAsyncOperationUpdateHandler + { + #region Events + + private event Callback OnProgressTypeless; + + private event Callback OnCompleteTypeless; + + #endregion + + #region Constructors + + protected AsyncOperation() + { + // Set initial values + Status = AsyncOperationStatus.NotStarted; + IsDone = false; + Error = null; + OnComplete = null; + } + + #endregion + + #region Public methods + + public void Start() + { + // Check whether operation is already started + if (!IsCurrentStatus(AsyncOperationStatus.NotStarted)) + { + DebugLogger.LogWarning(CoreLibraryDomain.Default, "The requested operation could not be started."); + return; + } + + SetStarted(); + } + + public void Abort() + { + // Check whether operation is already completed + if (!IsCurrentStatus(AsyncOperationStatus.InProgress)) + { + DebugLogger.LogWarning(CoreLibraryDomain.Default, "The requested operation could not be cancelled."); + return; + } + + OnAbort(); + SetIsCompleted(error: new Error("Async operation was cancelled!")); + } + + #endregion + + #region Private methods + + private bool IsCurrentStatus(AsyncOperationStatus status) + { + return (Status == status); + } + + private void SetStarted() + { + // Update instance state + Status = AsyncOperationStatus.InProgress; + + // Register instance to the scheduler + AsyncOperationManager.ScheduleUpdate(this); + + // Send state specific message + OnStart(); + } + + protected virtual void SetIsCompleted(T result = default(T)) + { + SetIsCompletedInternal( + result: result, + error: null, + status: AsyncOperationStatus.Succeeded); + } + + protected virtual void SetIsCompleted(Error error) + { + Assert.IsArgNotNull(error, nameof(error)); + + SetIsCompletedInternal( + result: default(T), + error: error, + status: AsyncOperationStatus.Failed); + } + + private void SetIsCompletedInternal(T result, Error error, AsyncOperationStatus status) + { + // Check whether status can be updated + if (!IsCurrentStatus(AsyncOperationStatus.InProgress)) + { + DebugLogger.LogWarning(CoreLibraryDomain.Default, "The requested operation could not be marked as completed."); + return; + } + + // Unregister object from scheduler + AsyncOperationManager.UnscheduleUpdate(this); + + // Update instance state + IsDone = true; + Result = result; + Error = error; + Status = status; + + // Send state specific message + OnEnd(); + + SendCompleteEvent(); + } + + private void SendProgressEvent() + { + OnProgressTypeless?.Invoke(this); + OnProgress?.Invoke(this); + } + + private void SendCompleteEvent() + { + OnCompleteTypeless?.Invoke(this); + OnComplete?.Invoke(this); + } + + #endregion + + #region State messages + + protected virtual void OnStart() + { } + + protected virtual void OnUpdate() + { } + + protected virtual void OnEnd() + { } + + protected virtual void OnAbort() + { } + + #endregion + + #region IAsyncOperation implementation + + public AsyncOperationStatus Status { get; private set; } + + public bool IsDone { get; private set; } + + object IAsyncOperation.Result => Result; + + public Error Error { get; private set; } + + public float Progress { get; protected set; } + + event Callback IAsyncOperation.OnProgress + { + add { OnProgressTypeless += value; } + remove { OnProgressTypeless -= value; } + } + + event Callback IAsyncOperation.OnComplete + { + add { OnCompleteTypeless += value; } + remove { OnCompleteTypeless -= value; } + } + + public T Result { get; private set; } + + public event Callback> OnProgress; + + public event Callback> OnComplete; + + object IEnumerator.Current => null; + + bool IEnumerator.MoveNext() + { + if (IsCurrentStatus(AsyncOperationStatus.NotStarted)) + { + SetStarted(); + } + + return !IsDone; + } + + public virtual void Reset() + { + // Reset properties + Status = AsyncOperationStatus.NotStarted; + IsDone = false; + Error = null; + Progress = 0f; + } + + #endregion + + #region IAsyncOperationUpdateHandler implemetation + + void IAsyncOperationUpdateHandler.Update() + { + // Execute start method instructions when operation begins + if (IsCurrentStatus(AsyncOperationStatus.InProgress)) + { + OnUpdate(); + SendProgressEvent(); + return; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperation.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperation.cs.meta new file mode 100644 index 00000000..8b652341 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c54782cb90eb43a2a52fb6c1f232928 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationHandle.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationHandle.cs new file mode 100644 index 00000000..c3a8f951 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationHandle.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class AsyncOperationHandle : IAsyncOperationHandle, IEquatable> + { + #region Events + + private event Callback OnProgressTypeless; + + private event Callback OnCompleteTypeless; + + #endregion + + #region IAsyncOperationHandle implementation + + public IAsyncOperation InternalOp { get; private set; } + + public AsyncOperationStatus Status => InternalOp.Status; + + public bool IsDone => InternalOp.IsDone; + + public float Progress => InternalOp.Progress; + + object IAsyncOperationHandle.Result => Result; + + public Error Error => InternalOp.Error; + + public T Result => InternalOp.Result; + + event Callback IAsyncOperationHandle.OnProgress + { + add { OnProgressTypeless += value; } + remove { OnProgressTypeless -= value; } + } + + event Callback IAsyncOperationHandle.OnComplete + { + add { OnCompleteTypeless += value; } + remove { OnCompleteTypeless -= value; } + } + + public event Callback> OnProgress; + + public event Callback> OnComplete; + + #endregion + + #region Constructors + + public AsyncOperationHandle(IAsyncOperation op) + { + Assert.IsArgNotNull(op, nameof(op)); + + // Set properties + InternalOp = op; + OnProgress = null; + OnComplete = null; + RegisterForCallbacks(); + + // Manually invoke the events incase if the operation is already completed + if (op.IsDone) + { + SurrogateCoroutine.WaitForEndOfFrameAndInvoke(action: () => + { + HandleOnProgress(op); + HandleOnComplete(op); + }); + } + } + + #endregion + + #region Private methods + + private void RegisterForCallbacks() + { + if (InternalOp == null) return; + + InternalOp.OnProgress += HandleOnProgress; + InternalOp.OnComplete += HandleOnComplete; + } + + private void UnregisterCallbacks() + { + if (InternalOp == null) return; + + InternalOp.OnProgress -= HandleOnProgress; + InternalOp.OnComplete -= HandleOnComplete; + } + + #endregion + + #region Event handler methods + + private void HandleOnProgress(IAsyncOperation asyncOperation) + { + // Forward event callback + OnProgressTypeless?.Invoke(this); + OnProgress?.Invoke(this); + } + + private void HandleOnComplete(IAsyncOperation asyncOperation) + { + // Forward event callback + OnCompleteTypeless?.Invoke(this); + OnComplete?.Invoke(this); + + UnregisterCallbacks(); + } + + #endregion + + #region IEnumerator implementation + + public object Current => null; + + public bool MoveNext() => !InternalOp.IsDone; + + public void Reset() => InternalOp?.Reset(); + + #endregion + + #region IEquatable implemetation + + public bool Equals(AsyncOperationHandle other) + { + if ((other == null) || (other.InternalOp == null)) return false; + + if (InternalOp == null) return false; + + return (InternalOp == other.InternalOp); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationHandle.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationHandle.cs.meta new file mode 100644 index 00000000..2cdb123b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationHandle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e04d669bab9834f0480f59e447829367 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationManager.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationManager.cs new file mode 100644 index 00000000..b322b5b3 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationManager.cs @@ -0,0 +1,74 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + internal static class AsyncOperationManager + { + #region Properties + + [ClearOnReload] + private static List s_targets; + + #endregion + + #region Static methods + + public static void ScheduleUpdate(IAsyncOperationUpdateHandler target) + { + Assert.IsArgNotNull(target, nameof(target)); + + EnsureInitialised(); + + s_targets.Add(target); + } + + public static void UnscheduleUpdate(IAsyncOperationUpdateHandler target) + { + Assert.IsArgNotNull(target, nameof(target)); + + EnsureInitialised(); + + s_targets.Remove(target); + } + + #endregion + + #region Unity methods + + private static void Update() + { + UpdateTargets(); + } + + #endregion + + #region Private methods + + private static void EnsureInitialised() + { + if (s_targets != null) return; + + // Set properties + s_targets = new List(8); + + // Register for callbacks + Scheduler.Update += Update; + } + + private static void UpdateTargets() + { + for (int iter = 0; iter < s_targets.Count; iter++) + { + var target = s_targets[iter]; + if (target != null) + { + target.Update(); + } + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationManager.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationManager.cs.meta new file mode 100644 index 00000000..59b92005 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56f544199d23646cfb42341c091f51f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationResultContainer.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationResultContainer.cs new file mode 100644 index 00000000..e5d13078 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationResultContainer.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class AsyncOperationResultContainer : IAsyncOperationResultContainer, IAsyncOperationResultContainer where TError : Error + { + #region Fields + + private TData m_data; + + private TError m_error; + + #endregion + + #region Constructors + + public AsyncOperationResultContainer() + { + // set properties + m_data = default(TData); + m_error = default(TError); + } + + #endregion + + #region Setter methods + + protected void SetDataInternal(TData data) + { + // set value + m_data = data; + } + + protected void SetErrorInternal(TError error) + { + // set value + m_error = error; + } + + #endregion + + #region IAsyncOperationResultContainer implementation + + public bool IsError() + { + return (m_error != null); + } + + public string GetErrorDescription() + { + return IsError() ? m_error.Description : null; + } + + Error IAsyncOperationResultContainer.GetError() + { + return GetError(); + } + + object IAsyncOperationResultContainer.GetData() + { + return GetData(); + } + + public string GetDataAsText() + { + throw new NotSupportedException(); + } + + #endregion + + #region Generic IAsyncOperationResultContainer implementation + + public TError GetError() + { + return m_error; + } + + public TData GetData() + { + return m_data; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationResultContainer.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationResultContainer.cs.meta new file mode 100644 index 00000000..7a5c6679 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationResultContainer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b5efd7c0165f481794514c551a99183 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationStatus.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationStatus.cs new file mode 100644 index 00000000..881b2b9c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationStatus.cs @@ -0,0 +1,17 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public enum AsyncOperationStatus + { + NotStarted = 0, + + InProgress, + + Succeeded, + + Failed, + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationStatus.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationStatus.cs.meta new file mode 100644 index 00000000..f0782fe9 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/AsyncOperationStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 787d2e2a95b20456dace21f5c4a6a125 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/ChainedOperation.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/ChainedOperation.cs new file mode 100644 index 00000000..988ef31d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/ChainedOperation.cs @@ -0,0 +1,148 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class ChainedOperation : AsyncOperation + { + #region Fields + + private int m_operationCount; + + private bool m_abortOnError; + + private IAsyncOperation m_activeOperation; + + private int m_activeOperationIndex; + + #endregion + + #region Properties + + public IAsyncOperation[] Operations { get; private set; } + + #endregion + + #region Constructors + + public ChainedOperation(bool abortOnError = false, params IAsyncOperation[] operations) + { + Assert.IsArgNotNull(operations, nameof(operations)); + + int count = operations.Length; + Assert.IsNotZero(count, "Array is empty."); + + // set properties + Operations = operations; + m_operationCount = count; + m_abortOnError = abortOnError; + m_activeOperationIndex = -1; + } + + #endregion + + #region Base class methods + + public override void Reset() + { + base.Reset(); + + // reset properties + for (int iter = 0; iter < m_operationCount; iter++) + { + Operations[iter].Reset(); + } + m_activeOperation = null; + m_activeOperationIndex = -1; + } + + protected override void OnStart() + { + base.OnStart(); + + // start first operation + StartOperation(index: 0); + } + + protected override void OnUpdate() + { + base.OnUpdate(); + + // check whether current operation is completed + if (m_activeOperation == null) + { + SetIsCompleted(error: new Error("Unknown error!")); + return; + } + + if (m_activeOperation.IsDone) + { + if (m_abortOnError && (m_activeOperation.Status == AsyncOperationStatus.Failed)) + { + SetIsCompleted(error: m_activeOperation.Error); + return; + } + // proceed to the next operation + if (!StartOperation(index: (m_activeOperationIndex + 1))) + { + SetIsCompleted(result: null); + return; + } + } + else + { + UpdateProgress(); + } + } + + protected override void SetIsCompleted(object result) + { + // set final progress value + Progress = 1f; + + base.SetIsCompleted(result); + } + + protected override void SetIsCompleted(Error error) + { + // set final progress value + Progress = 0f; + + base.SetIsCompleted(error); + } + + #endregion + + #region Private methods + + private bool StartOperation(int index) + { + if (index < m_operationCount) + { + m_activeOperation = Operations[index]; + m_activeOperationIndex = index; + m_activeOperation.Start(); + + return true; + } + + return false; + } + + private void UpdateProgress() + { + // find cumulative progress + float progress = 0f; + for (int iter = 0; iter < m_operationCount; iter++) + { + progress += Operations[iter].Progress; + } + + // set normalized value + Progress = (progress / m_operationCount); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/ChainedOperation.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/ChainedOperation.cs.meta new file mode 100644 index 00000000..c19295be --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/ChainedOperation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d368eed805b7a4000a07da8f5dc6f061 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/GroupOperation.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/GroupOperation.cs new file mode 100644 index 00000000..65c2b313 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/GroupOperation.cs @@ -0,0 +1,161 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class GroupOperation : AsyncOperation + { + #region Fields + + private int m_operationCount; + + private bool m_abortOnError; + + #endregion + + #region Properties + + public IAsyncOperation[] Operations { get; private set; } + + #endregion + + #region Constructors + + public GroupOperation(bool abortOnError = false, params IAsyncOperation[] operations) + { + Assert.IsArgNotNull(operations, nameof(operations)); + + int count = operations.Length; + Assert.IsNotZero(count, "Array is empty."); + + // set properties + Operations = operations; + m_operationCount = count; + m_abortOnError = abortOnError; + } + + #endregion + + #region Base class methods + + public override void Reset() + { + base.Reset(); + + // reset properties + for (int iter = 0; iter < m_operationCount; iter++) + { + Operations[iter].Reset(); + } + } + + protected override void OnStart() + { + base.OnStart(); + + // start all operations + for (int iter = 0; iter < m_operationCount; iter++) + { + var current = Operations[iter]; + current.Start(); + } + } + + protected override void OnUpdate() + { + base.OnUpdate(); + + // iterate through the list and check current status of participating operations + bool isDone = true; + Error error = null; + for (int iter = 0; iter < m_operationCount; iter++) + { + // check whether operation has completed + var current = Operations[iter]; + if (!current.IsDone) + { + isDone = false; + break; + } + + if (AsyncOperationStatus.Failed == current.Status) + { + if (m_abortOnError) + { + error = current.Error; + break; + } + } + } + + // update state based on operation results + if (isDone) + { + if (error != null) + { + if (m_abortOnError) + { + AbortActiveOperations(); + } + SetIsCompleted(error: error); + } + else + { + SetIsCompleted(result: null); + } + } + else + { + UpdateProgress(); + } + } + + protected override void SetIsCompleted(object result) + { + // set final progress value + Progress = 1f; + + base.SetIsCompleted(result); + } + + protected override void SetIsCompleted(Error error) + { + // set final progress value + Progress = 0f; + + base.SetIsCompleted(error); + } + + #endregion + + #region Private methods + + private void UpdateProgress() + { + // find cumulative progress + float progress = 0f; + for (int iter = 0; iter < m_operationCount; iter++) + { + progress += Operations[iter].Progress; + } + + // set normalized value + Progress = (progress / m_operationCount); + } + + private void AbortActiveOperations() + { + for (int iter = 0; iter < m_operationCount; iter++) + { + var current = Operations[iter]; + if (!current.IsDone) + { + current.Abort(); + } + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/GroupOperation.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/GroupOperation.cs.meta new file mode 100644 index 00000000..5b2fc5a6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/GroupOperation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4281fd4f764e94111b3fc11840f471d1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperation.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperation.cs new file mode 100644 index 00000000..26f592e7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperation.cs @@ -0,0 +1,61 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public interface IAsyncOperation : IEnumerator + { + #region Properties + + AsyncOperationStatus Status { get; } + + bool IsDone { get; } + + object Result { get; } + + Error Error { get; } + + float Progress { get; } + + #endregion + + #region Methods + + void Start(); + + void Abort(); + + #endregion + + #region Events + + event Callback OnProgress; + + event Callback OnComplete; + + #endregion + } + + public interface IAsyncOperation : IAsyncOperation + { + #region Properties + + new T Result { get; } + + #endregion + + #region Events + + new event Callback> OnProgress; + + new event Callback> OnComplete; + + #endregion + } + + public interface IAsyncOperationUpdateHandler + { + void Update(); + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperation.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperation.cs.meta new file mode 100644 index 00000000..4ac86f67 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c8f74c276e800437b8310588926a5b51 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationHandle.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationHandle.cs new file mode 100644 index 00000000..41dbdd1c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationHandle.cs @@ -0,0 +1,48 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public interface IAsyncOperationHandle : IEnumerator + { + #region Properties + + AsyncOperationStatus Status { get; } + + bool IsDone { get; } + + object Result { get; } + + Error Error { get; } + + float Progress { get; } + + #endregion + + #region Events + + event Callback OnProgress; + + event Callback OnComplete; + + #endregion + } + + public interface IAsyncOperationHandle : IAsyncOperationHandle + { + #region Properties + + new T Result { get; } + + #endregion + + #region Events + + new event Callback> OnProgress; + + new event Callback> OnComplete; + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationHandle.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationHandle.cs.meta new file mode 100644 index 00000000..99b97b87 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationHandle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7869d21d008749068884a317745d5bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationResultContainer.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationResultContainer.cs new file mode 100644 index 00000000..5eb3a9b8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationResultContainer.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public interface IAsyncOperationResultContainer + { + #region Methods + + bool IsError(); + + string GetErrorDescription(); + + Error GetError(); + + object GetData(); + + string GetDataAsText(); + + #endregion + } + + public interface IAsyncOperationResultContainer : IAsyncOperationResultContainer where TError : Error + { + #region Methods + + new TError GetError(); + + new TData GetData(); + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationResultContainer.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationResultContainer.cs.meta new file mode 100644 index 00000000..4e91ebf5 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/AsyncOperations/IAsyncOperationResultContainer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11dc72c5107f445179f18a5a78b83d05 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes.meta new file mode 100644 index 00000000..cd79e40e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1030d3800bbfd491ea826259732186c8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ClearOnReloadAttribute.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ClearOnReloadAttribute.cs new file mode 100644 index 00000000..638f09dd --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ClearOnReloadAttribute.cs @@ -0,0 +1,56 @@ +using System; +// Credits: https://github.com/joshcamas/unity-domain-reload-helper + +namespace VoxelBusters.CoreLibrary +{ + public enum ClearOnReloadOption + { + None, + + Default, + + Custom, + } + + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Event)] + public class ClearOnReloadAttribute : Attribute + { + #region Properties + + public ClearOnReloadOption Option { get; private set; } + + public object CustomValue { get; private set; } + + #endregion + + #region Properties + + /// + /// Marks field of property to be cleared and assigned given value on reload. + /// + public ClearOnReloadAttribute() + : this(ClearOnReloadOption.None, null) + { } + + /// + /// Marks field of property to be cleared and assigned given value on reload. + /// + /// Explicit value which will be assigned to field/property on reload. + public ClearOnReloadAttribute(object customValue) + : this(ClearOnReloadOption.Custom, customValue) + { } + + /// + /// Marks field of property to be cleared and assigned given value on reload. + /// + /// Option to be used. + /// Explicit value which will be assigned to field/property on reload. + public ClearOnReloadAttribute(ClearOnReloadOption option, object customValue = null) + { + Option = option; + CustomValue = customValue; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ClearOnReloadAttribute.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ClearOnReloadAttribute.cs.meta new file mode 100644 index 00000000..107fdc35 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ClearOnReloadAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c99f4ee533eb349b09cc34a8fcc1528e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/DefaultAttribute.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/DefaultAttribute.cs new file mode 100644 index 00000000..4dccba6d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/DefaultAttribute.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class DefaultValueAttribute : Attribute + { + #region Fields + + private bool? m_boolValue; + + private int? m_int32Value; + + private float? m_singleValue; + + private string m_stringValue; + + #endregion + + #region Properties + + public bool BoolValue => m_boolValue.GetValueOrDefault(); + + public int Int32Value => m_int32Value.GetValueOrDefault(); + + public float SingleValue => m_singleValue.GetValueOrDefault(); + + public string StringValue => m_stringValue; + + #endregion + + #region Constructors + + public DefaultValueAttribute(bool value) + { + // set properties + m_boolValue = value; + } + + public DefaultValueAttribute(int value) + { + // set properties + m_int32Value = value; + } + + public DefaultValueAttribute(float value) + { + // set properties + m_singleValue = value; + } + + public DefaultValueAttribute(string value) + { + // set properties + m_stringValue = value; + } + + #endregion + + #region Public methods + + public T GetValue() + { + return (T)GetValue(typeof(T)); + } + + public object GetValue(Type type) + { + switch (Type.GetTypeCode(type)) + { + case TypeCode.Boolean: + return BoolValue; + + case TypeCode.Int32: + return Int32Value; + + case TypeCode.Single: + return SingleValue; + + case TypeCode.String: + return StringValue; + + default: + return null; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/DefaultAttribute.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/DefaultAttribute.cs.meta new file mode 100644 index 00000000..84b35853 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/DefaultAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 666901cb9fe5441f198888ba97da19b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/EnumMaskFieldAttribute.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/EnumMaskFieldAttribute.cs new file mode 100644 index 00000000..d0eb1f0a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/EnumMaskFieldAttribute.cs @@ -0,0 +1,30 @@ +using System; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class EnumMaskFieldAttribute : PropertyAttribute + { + #region Properties + + public Type EnumType + { + get; + private set; + } + + #endregion + + #region Constructors + + private EnumMaskFieldAttribute() + {} + + public EnumMaskFieldAttribute(Type type) + { + EnumType = type; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/EnumMaskFieldAttribute.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/EnumMaskFieldAttribute.cs.meta new file mode 100644 index 00000000..2ee20346 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/EnumMaskFieldAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3a6eb93874bc5406ea64339972b667ad +timeCreated: 1579074419 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ExecuteOnReloadAttribute.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ExecuteOnReloadAttribute.cs new file mode 100644 index 00000000..42684174 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ExecuteOnReloadAttribute.cs @@ -0,0 +1,15 @@ +using System; +// Credits: https://github.com/joshcamas/unity-domain-reload-helper + +namespace VoxelBusters.CoreLibrary +{ + [AttributeUsage(AttributeTargets.Method)] + public class ExecuteOnReloadAttribute : Attribute + { + /// + /// Marks method to be executed on reload. + /// + public ExecuteOnReloadAttribute() + { } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ExecuteOnReloadAttribute.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ExecuteOnReloadAttribute.cs.meta new file mode 100644 index 00000000..a6bc1aca --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ExecuteOnReloadAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 558d91a3fc718409abcafe24bed90c1b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FileBrowserAttribute.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FileBrowserAttribute.cs new file mode 100644 index 00000000..e4de7307 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FileBrowserAttribute.cs @@ -0,0 +1,28 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class FileBrowserAttribute : PropertyAttribute + { + #region Properties + + public bool UsesRelativePath { get; private set; } + + public string Extension { get; private set; } + + #endregion + + #region Constructors + + public FileBrowserAttribute(bool usesRelativePath, string extension = null) + { + // set properties + UsesRelativePath = usesRelativePath; + Extension = extension; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FileBrowserAttribute.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FileBrowserAttribute.cs.meta new file mode 100644 index 00000000..a871f9ed --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FileBrowserAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: eb3faba3081ee40a7a091fb6423f3492 +timeCreated: 1576323712 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FolderBrowserAttribute.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FolderBrowserAttribute.cs new file mode 100644 index 00000000..40c0eed9 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FolderBrowserAttribute.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class FolderBrowserAttribute : PropertyAttribute + { + #region Properties + + public bool UsesRelativePath { get; private set; } + + #endregion + + #region Constructors + + public FolderBrowserAttribute(bool usesRelativePath) + { + // set properties + UsesRelativePath = usesRelativePath; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FolderBrowserAttribute.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FolderBrowserAttribute.cs.meta new file mode 100644 index 00000000..df91ce26 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/FolderBrowserAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fd0b85bdf9d0042159e0caacf2196490 +timeCreated: 1576323713 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/IncludeInDocsAttribute.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/IncludeInDocsAttribute.cs new file mode 100644 index 00000000..8e9615d7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/IncludeInDocsAttribute.cs @@ -0,0 +1,9 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class IncludeInDocsAttribute : System.Attribute + { } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/IncludeInDocsAttribute.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/IncludeInDocsAttribute.cs.meta new file mode 100644 index 00000000..310a611d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/IncludeInDocsAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f2c7e1aa6af34f20884dc715ac25bd9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/InterfaceFieldAttribute.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/InterfaceFieldAttribute.cs new file mode 100644 index 00000000..d62a5a17 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/InterfaceFieldAttribute.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class InterfaceFieldAttribute : PropertyAttribute + { + #region Properties + + public Type InterfaceType + { + get; + private set; + } + + #endregion + + #region Constructors + + public InterfaceFieldAttribute(Type interfaceType) + { + // set properties + InterfaceType = interfaceType; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/InterfaceFieldAttribute.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/InterfaceFieldAttribute.cs.meta new file mode 100644 index 00000000..1491ed1b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/InterfaceFieldAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 31f63c1f822124d4bb5ea7f9c49cbfd0 +timeCreated: 1577514104 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ReadOnlyAttribute.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ReadOnlyAttribute.cs new file mode 100644 index 00000000..1a28ddd4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ReadOnlyAttribute.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class ReadOnlyAttribute : PropertyAttribute + { + public string Message + { + get; + private set; + } + + + /// + /// Marks field to be read-only in the inspector. + /// + public ReadOnlyAttribute(string message = null) + { + Message = message; + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ReadOnlyAttribute.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ReadOnlyAttribute.cs.meta new file mode 100644 index 00000000..723dea85 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/ReadOnlyAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c19cb0d4b4f745b18fbe9734b0fd057 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/StringPopupAttribute.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/StringPopupAttribute.cs new file mode 100644 index 00000000..2ce4a0ec --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/StringPopupAttribute.cs @@ -0,0 +1,58 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + /// + /// Base class to create custom string popup field in the inspector. + /// + [IncludeInDocs] + public class StringPopupAttribute : PropertyAttribute + { + #region Static fields + + private static readonly string[] s_emptyOptions = new string[0]; + + #endregion + + #region Fields + + private readonly string[] m_fixedOptions; + + private readonly bool m_usesFixedOptions; + + #endregion + + #region Properties + + public string PreferencePropertyName { get; private set; } + + public bool PreferencePropertyValue { get; private set; } + + public string[] Options => m_usesFixedOptions ? m_fixedOptions : GetDynamicOptions(); + + #endregion + + #region Constructors + + public StringPopupAttribute(string preferencePropertyName = null, + bool preferencePropertyValue = true, + params string[] fixedOptions) + { + // set properties + PreferencePropertyName = preferencePropertyName; + PreferencePropertyValue = preferencePropertyValue; + m_fixedOptions = fixedOptions; + m_usesFixedOptions = !fixedOptions.IsNullOrEmpty(); + } + + #endregion + + #region Private methods + + protected virtual string[] GetDynamicOptions() => s_emptyOptions; + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/StringPopupAttribute.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/StringPopupAttribute.cs.meta new file mode 100644 index 00000000..b06ef8b6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Attributes/StringPopupAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d8e2dda3cd19542bf98c1644cce52d81 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components.meta new file mode 100644 index 00000000..e6bd52be --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2e638ac5554f2457688cc94da0c82081 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ActionTriggerComponent.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ActionTriggerComponent.cs new file mode 100644 index 00000000..d514ebc8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ActionTriggerComponent.cs @@ -0,0 +1,158 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public abstract class ActionTriggerComponent : MonoBehaviour + { + #region Fields + + [SerializeField] + private ActionTriggerType m_triggerOn; + + #endregion + + #region Properties + + public bool IsDone { get; protected set; } + + #endregion + + #region Abstract members + + public abstract void ExecuteAction(); + + #endregion + + #region Unity methods + + private void Start() + { + TryExecuteAction(triggerType: ActionTriggerType.Start); + } + + private void OnEnable() + { + TryExecuteAction(triggerType: ActionTriggerType.OnEnable); + } + + private void OnDisable() + { + TryExecuteAction(triggerType: ActionTriggerType.OnDisable); + } + + private void OnDestroy() + { + TryExecuteAction(triggerType: ActionTriggerType.Destroy); + } + + private void Update() + { + if (!IsDone) + { + TryExecuteAction(triggerType: ActionTriggerType.Update); + } + } + + private void OnTriggerEnter(Collider other) + { + TryExecuteAction(triggerType: ActionTriggerType.TriggerEnter); + } + + private void OnTriggerExit(Collider other) + { + TryExecuteAction(triggerType: ActionTriggerType.TriggerExit); + } + + private void OnCollisionEnter(Collision collision) + { + TryExecuteAction(triggerType: ActionTriggerType.CollisionEnter); + } + + private void OnCollisionExit(Collision collision) + { + TryExecuteAction(triggerType: ActionTriggerType.CollisionExit); + } + + private void OnTriggerEnter2D(Collider2D collision) + { + TryExecuteAction(triggerType: ActionTriggerType.TriggerEnter2D); + } + + private void OnTriggerExit2D(Collider2D collision) + { + TryExecuteAction(triggerType: ActionTriggerType.TriggerExit2D); + } + + private void OnCollisionEnter2D(Collision2D collision) + { + TryExecuteAction(triggerType: ActionTriggerType.CollisionEnter2D); + } + + private void OnCollisionExit2D(Collision2D collision) + { + TryExecuteAction(triggerType: ActionTriggerType.CollisionExit2D); + } + + #endregion + + #region Public methods + + public virtual void Reset() + { + IsDone = false; + } + + #endregion + + #region Private methods + + private bool TryExecuteAction(ActionTriggerType triggerType) + { + if (!IsDone && (triggerType == m_triggerOn)) + { + ExecuteAction(); + return true; + } + return false; + } + + #endregion + + #region Nested types + + public enum ActionTriggerType + { + Start = 1, + + Destroy, + + OnEnable, + + OnDisable, + + Update, + + TriggerEnter, + + TriggerExit, + + CollisionEnter, + + CollisionExit, + + TriggerEnter2D, + + TriggerExit2D, + + CollisionEnter2D, + + CollisionExit2D, + + Custom, + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ActionTriggerComponent.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ActionTriggerComponent.cs.meta new file mode 100644 index 00000000..8f8ef73a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ActionTriggerComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cafe526d8f7d4487a8c51c21c2d036be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/CallbackDispatcher.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/CallbackDispatcher.cs new file mode 100644 index 00000000..96088808 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/CallbackDispatcher.cs @@ -0,0 +1,228 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + /// + /// Generic callback definition for operations. + /// + public delegate void Callback(); + + /// + /// Generic callback definition for events. + /// + public delegate void Callback(TArg arg); + + /// + /// Generic callback definition for events. + /// + public delegate void SuccessCallback(TResult result); + + /// + /// Generic callback definition for operations. + /// + public delegate void ErrorCallback(Error error); + + /// + /// Generic callback definition for operations. + /// + public delegate void CompletionCallback(bool success, Error error); + + /// + /// Generic callback definition for events. + /// + public delegate void CompletionCallback(TResult result, Error error); + + /// + /// Generic callback definition for operations. + /// + public delegate void EventCallback(TResult result, Error error); + + public class CallbackDispatcher : PrivateSingletonBehaviour + { + #region Fields + + private Queue m_queue; + private readonly object queueLock = new object(); + + #endregion + + #region Static methods + + public static CallbackDispatcher Initialize() + { + return GetSingleton(); + } + + public static void InvokeOnMainThread(Callback callback) + { + // validate arguments + if (callback == null) + { + //DebugLogger.LogWarning("Callback is null."); + return; + } + + // add request to queue + var manager = GetSingleton(); + if (manager) + { + manager.AddAction(action: () => callback.Invoke()); + } + } + + public static void InvokeOnMainThread(Callback callback, TArg arg) + { + // validate arguments + if (callback == null) + { + //DebugLogger.LogWarning("Callback is null."); + return; + } + + // add request to queue + var manager = GetSingleton(); + if (manager) + { + manager.AddAction(() => callback.Invoke(arg)); + } + } + + public static void InvokeOnMainThread(SuccessCallback callback, TResult result) + { + // validate arguments + if (callback == null) + { + //DebugLogger.LogWarning("Callback is null."); + return; + } + + // add request to queue + var manager = GetSingleton(); + if (manager) + { + manager.AddAction(() => callback.Invoke(result)); + } + } + + public static void InvokeOnMainThread(ErrorCallback callback, Error error) + { + // validate arguments + if (callback == null) + { + //DebugLogger.LogWarning("Callback is null."); + return; + } + + // add request to queue + var manager = GetSingleton(); + if (manager) + { + manager.AddAction(() => callback.Invoke(error)); + } + } + + public static void InvokeOnMainThread(CompletionCallback callback, bool success, Error error) + { + // validate arguments + if (callback == null) + { + //DebugLogger.LogWarning("Callback is null."); + return; + } + + // add request to queue + var manager = GetSingleton(); + if (manager) + { + manager.AddAction(action: () => callback.Invoke(success, error)); + } + } + + public static void InvokeOnMainThread(CompletionCallback callback, TResult result, Error error) + { + // validate arguments + if (callback == null) + { + //DebugLogger.LogWarning("Callback is null."); + return; + } + + // add request to queue + var manager = GetSingleton(); + if (manager) + { + manager.AddAction(() => callback.Invoke(result, error)); + } + } + + public static void InvokeOnMainThread(EventCallback callback, IOperationResultContainer resultContainer) + { + InvokeOnMainThread(callback, resultContainer.GetResult(), resultContainer.GetError()); + } + + public static void InvokeOnMainThread(EventCallback callback, TResult result, Error error) + { + // validate arguments + if (callback == null) + { + //DebugLogger.LogWarning("Callback is null."); + return; + } + + // add request to queue + var manager = GetSingleton(); + if (manager) + { + manager.AddAction(() => callback.Invoke(result, error)); + } + } + + #endregion + + #region Unity methods + + protected override void OnSingletonAwake() + { + base.OnSingletonAwake(); + + // Set properties + m_queue = new Queue(capacity: 16); + } + + private void LateUpdate() + { + try + { + lock(queueLock) + { + // execute pending actions + while (m_queue.Count > 0) + { + var action = m_queue.Dequeue(); + action(); + } + } + } + catch (Exception expection) + { + DebugLogger.LogException(CoreLibraryDomain.Default, expection); + } + } + + #endregion + + #region Private methods + + private void AddAction(Action action) + { + lock(queueLock) + { + m_queue.Enqueue(action); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/CallbackDispatcher.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/CallbackDispatcher.cs.meta new file mode 100644 index 00000000..a8a9519c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/CallbackDispatcher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9db01c621d5964115aa41c1003a45c6c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/EditorScheduler.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/EditorScheduler.cs new file mode 100644 index 00000000..9e8a8fb6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/EditorScheduler.cs @@ -0,0 +1,91 @@ +#if UNITY_EDITOR +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + internal class EditorScheduler : IScheduler + { + #region Fields + + private List m_activeCoroutines; + + #endregion + + #region Constructors + + public EditorScheduler() + { + // Set properties + m_activeCoroutines = new List(); + + // Register for callback + UnityEditor.EditorApplication.update += EditorUpdate; + } + + ~EditorScheduler() + { + // Unregister from callback + UnityEditor.EditorApplication.update -= EditorUpdate; + } + + #endregion + + #region Private methods + + private void EditorUpdate() + { + UpdateCoroutines(); + SendUpdateEvent(); + } + + private void UpdateCoroutines() + { + for (int iter = 0; iter < m_activeCoroutines.Count; iter++) + { + var routine = m_activeCoroutines[iter]; + if (routine == null) continue; + + if (!routine.MoveNext()) + { + m_activeCoroutines.RemoveAt(iter); + iter--; + } + } + } + + private void SendUpdateEvent() + { + Update?.Invoke(); + } + + #endregion + + #region IScheduler implementation + + public event Callback Update; + + public void StartCoroutine(IEnumerator routine) + { + if (routine == null) return; + + m_activeCoroutines.AddUnique(routine); + } + + public void StopCoroutine(IEnumerator routine) + { + if (routine == null) return; + + m_activeCoroutines.Remove(routine); + } + + public void StopAllCoroutines() + { + m_activeCoroutines.Clear(); + } + + #endregion + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/EditorScheduler.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/EditorScheduler.cs.meta new file mode 100644 index 00000000..dc5a2272 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/EditorScheduler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01c2a792f31c94b71bdb94f2a2eb2c8c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IOperationResultContainer.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IOperationResultContainer.cs new file mode 100644 index 00000000..44c6fa74 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IOperationResultContainer.cs @@ -0,0 +1,17 @@ +namespace VoxelBusters.CoreLibrary +{ + public interface IOperationResultContainer + { + #region Methods + + bool IsError(); + + Error GetError(); + + TData GetResult(); + + string GetResultAsText(); + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IOperationResultContainer.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IOperationResultContainer.cs.meta new file mode 100644 index 00000000..622ecc06 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IOperationResultContainer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4b40772b73da541d68f2a099bb788cd9 +timeCreated: 1575981659 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IScheduler.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IScheduler.cs new file mode 100644 index 00000000..4cec3ab8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IScheduler.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public interface IScheduler + { + #region Events + + event Callback Update; + + #endregion + + #region Methods + + void StartCoroutine(IEnumerator routine); + + void StopCoroutine(IEnumerator routine); + + void StopAllCoroutines(); + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IScheduler.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IScheduler.cs.meta new file mode 100644 index 00000000..01acdb37 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/IScheduler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05eb539b685444e3185b32e65e8a3d2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ISchedulerUpdateHandler.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ISchedulerUpdateHandler.cs new file mode 100644 index 00000000..4138c041 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ISchedulerUpdateHandler.cs @@ -0,0 +1,15 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public interface ISchedulerUpdateHandler + { + #region Methods + + void Update(); + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ISchedulerUpdateHandler.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ISchedulerUpdateHandler.cs.meta new file mode 100644 index 00000000..65e87997 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/ISchedulerUpdateHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bae940cc7f1a54e49b4b9122a76974be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/MonoBehaviourZ.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/MonoBehaviourZ.cs new file mode 100644 index 00000000..2074568f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/MonoBehaviourZ.cs @@ -0,0 +1,52 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class MonoBehaviourZ : MonoBehaviour + { + #region Fields + + private bool m_isInitialisedInternal = false; + + #endregion + + #region Unity methods + + private void Awake() + { + EnsureInitialised(); + } + + protected virtual void Start() + { } + + protected virtual void OnEnable() + { } + + protected virtual void OnDisable() + { } + + protected virtual void OnDestroy() + { } + + #endregion + + #region Private methods + + protected void EnsureInitialised() + { + if (m_isInitialisedInternal) return; + + m_isInitialisedInternal = true; + + Init(); + } + + protected virtual void Init() + { } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/MonoBehaviourZ.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/MonoBehaviourZ.cs.meta new file mode 100644 index 00000000..d4da1397 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/MonoBehaviourZ.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 808f0313735c64ec5989f9ad2564abf1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/PersistentObject.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/PersistentObject.cs new file mode 100644 index 00000000..ce62aaf9 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/PersistentObject.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class PersistentObject : MonoBehaviour + { + #region Unity methods + + private void Awake() + { + DontDestroyOnLoad(gameObject); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/PersistentObject.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/PersistentObject.cs.meta new file mode 100644 index 00000000..5df2583c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/PersistentObject.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c89bacc55c95b410bbe311261e447720 +timeCreated: 1576350560 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/RuntimeScheduler.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/RuntimeScheduler.cs new file mode 100644 index 00000000..1a9ccaa6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/RuntimeScheduler.cs @@ -0,0 +1,67 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace VoxelBusters.CoreLibrary +{ + internal class RuntimeScheduler : PrivateSingletonBehaviour, IScheduler + { + #region Fields + + private event Callback UpdateEvent; + + #endregion + + #region Static methods + + public static RuntimeScheduler Initialize() + { + return GetSingleton(); + } + + #endregion + + #region Unity methods + + private void Update() + { + SendUpdateEvent(); + } + + #endregion + + #region Private methods + + private void SendUpdateEvent() + { + UpdateEvent?.Invoke(); + } + + #endregion + + #region IScheduler implementation + + event Callback IScheduler.Update + { + add { UpdateEvent += value; } + remove { UpdateEvent -= value; } + } + + void IScheduler.StartCoroutine(IEnumerator routine) + { + StartCoroutine(routine); + } + + void IScheduler.StopCoroutine(IEnumerator routine) + { + StopCoroutine(routine); + } + + void IScheduler.StopAllCoroutines() + { + StopAllCoroutines(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/RuntimeScheduler.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/RuntimeScheduler.cs.meta new file mode 100644 index 00000000..5e0b801b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/RuntimeScheduler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c8805e4e754ad4c4cbe890a68d47b559 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/Scheduler.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/Scheduler.cs new file mode 100644 index 00000000..bb917394 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/Scheduler.cs @@ -0,0 +1,75 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class Scheduler + { + #region Static fields + + [ClearOnReload] + private static IScheduler s_scheduler; + + #endregion + + #region Static events + + public static event Callback Update + { + add + { + EnsureInitialised(); + s_scheduler.Update += value; + } + remove + { + EnsureInitialised(); + s_scheduler.Update -= value; + } + } + + #endregion + + #region Static methods + + public static void StartCoroutine(IEnumerator routine) + { + EnsureInitialised(); + + s_scheduler.StartCoroutine(routine); + } + + public static void StopCoroutine(IEnumerator routine) + { + EnsureInitialised(); + + s_scheduler.StopCoroutine(routine); + } + + public static void StopAllCoroutines() + { + EnsureInitialised(); + + s_scheduler.StopAllCoroutines(); + } + + private static void EnsureInitialised() + { + if (s_scheduler != null) return; + + #if UNITY_EDITOR + if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode) + { + s_scheduler = new EditorScheduler(); + } + else + #endif + { + s_scheduler = RuntimeScheduler.Initialize(); //Need to find out why RuntimeScheduler when using Singleton base class not working with domain reload, but PrivateSingleton do work. + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/Scheduler.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/Scheduler.cs.meta new file mode 100644 index 00000000..74a7598a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/Scheduler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a8fbb53372594131b4ac644c3492130 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/SurrogateCoroutine.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/SurrogateCoroutine.cs new file mode 100644 index 00000000..3af2a795 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/SurrogateCoroutine.cs @@ -0,0 +1,80 @@ +using System.Collections; +using System; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class SurrogateCoroutine + { + #region Static methods + + public static void StartCoroutine(IEnumerator routine) + { + Scheduler.StartCoroutine(routine); + } + + public static void StopCoroutine(IEnumerator routine) + { + Scheduler.StopCoroutine(routine); + } + + public static void WaitUntilAndInvoke(Func predicate, Action action) + { + Scheduler.StartCoroutine(WaitUntilAndInvokeInternal(predicate, action)); + } + + public static void WaitUntilAndInvoke(IEnumerator coroutine, Action action) + { + Scheduler.StartCoroutine(WaitUntilAndInvokeInternal(coroutine, action)); + } + + public static void WaitUntilAndInvoke(YieldInstruction instruction, Action action) + { + Scheduler.StartCoroutine(WaitUntilAndInvokeInternal(instruction, action)); + } + + public static void WaitForEndOfFrameAndInvoke(Action action) + { + Scheduler.StartCoroutine(WaitUntilAndInvokeInternal(new WaitForEndOfFrame(), action)); + } + + public static void Invoke(Action action, float delay) + { + Scheduler.StartCoroutine(WaitUntilAndInvokeInternal(new WaitForSeconds(delay), action)); + } + + #endregion + + #region Private static methods + + private static IEnumerator WaitUntilAndInvokeInternal(Func predicate, Action action) + { + yield return new WaitUntil(predicate); + + action(); + } + + private static IEnumerator WaitUntilAndInvokeInternal(IEnumerator coroutine, Action action) + { + yield return coroutine; + + action(); + } + + private static IEnumerator WaitUntilAndInvokeInternal(YieldInstruction instruction, Action action) + { + yield return instruction; + + action(); + } + + private static IEnumerator InvokeInternal(Action action, float delay) + { + yield return new WaitForSeconds(delay); + + action(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/SurrogateCoroutine.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/SurrogateCoroutine.cs.meta new file mode 100644 index 00000000..bfb4f7fa --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Components/SurrogateCoroutine.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1538ec2986b674b359f11e25b2defd03 +timeCreated: 1575981659 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants.meta new file mode 100644 index 00000000..62a097fb --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 443366c8b588841c4884161095ccb277 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ConsentStatus.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ConsentStatus.cs new file mode 100644 index 00000000..4a25ba1a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ConsentStatus.cs @@ -0,0 +1,15 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public enum ConsentStatus + { + NotDetermined = 0, + + Denied, + + Authorized, + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ConsentStatus.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ConsentStatus.cs.meta new file mode 100644 index 00000000..08a7a0f9 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ConsentStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79a1e0121158d489eb9d02bbd798418d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ContentRating.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ContentRating.cs new file mode 100644 index 00000000..b22ae4b3 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ContentRating.cs @@ -0,0 +1,28 @@ +using UnityEngine; +using System.Collections; + +namespace VoxelBusters.CoreLibrary +{ + /// + /// Enum specifying the level of content maturity for an app. + /// + /// + /// This enum is used to specify the level of content maturity for an app. + /// + public enum ContentRating + { + Unspecified = 0, + + /// Content suitable for general audiences, including families. + GeneralAudience, + + /// Content suitable only for mature audiences. + MatureAudience, + + /// Content suitable for most audiences with parental guidance. + ParentalGuidance, + + /// Content suitable for teen and older audiences. + TeensAndOlder, + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ContentRating.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ContentRating.cs.meta new file mode 100644 index 00000000..8653f388 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/ContentRating.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc7d3d7d0b03e464abf742058c6ac9b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/CoreLibraryDomain.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/CoreLibraryDomain.cs new file mode 100644 index 00000000..68face05 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/CoreLibraryDomain.cs @@ -0,0 +1,13 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class CoreLibraryDomain + { + public static string Default => "VoxelBusters.CoreLibrary"; + + public static string NativePlugins => "VoxelBusters.CoreLibrary.NativePlugins"; + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/CoreLibraryDomain.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/CoreLibraryDomain.cs.meta new file mode 100644 index 00000000..b3022fc7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/CoreLibraryDomain.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38ad3155306284d48b2aa55aed6bdec5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/MimeType.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/MimeType.cs new file mode 100644 index 00000000..36cdf886 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/MimeType.cs @@ -0,0 +1,153 @@ +using System.Collections; +using System.Collections.Generic; +using System; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + /// + /// The MimeType class is a collection of most commonly used MIME types. + /// + /// + /// MIME types enable apps to recognize the filetype of a file. + /// + public static class MimeType + { + #region Constants + + /// The MIME value used to determine any file. (Readonly) + public const string kAny = "*/*"; + + /// The MIME value used to determine plain text file. (Readonly) + public const string kPlainText = "text/plain"; + + /// The MIME value used to determine normal web pages. (Readonly) + public const string kHtmlText = "text/html"; + + /// The MIME value used to determine javascript content. (Readonly) + public const string kJavaScriptText = "text/javascript"; + + /// The MIME value used to determine all image files. (Readonly) + public const string kAllImages = "image/*"; + + /// The MIME value used to determine jpg image file. (Readonly) + public const string kJPGImage = "image/jpeg"; + + /// The MIME value used to determine png image file. (Readonly) + public const string kPNGImage = "image/png"; + + /// The MIME value used to determine gif image file. (Readonly) + public const string kGIFImage = "image/gif"; + + /// The MIME value used to determine Adobe® PDF documents. (Readonly) + public const string kPDF = "application/pdf"; + + + /// The MIME value used to determine all video files. (Readonly) + public const string kAllVideos = "video/*"; + + /// The MIME value used to determine mp4 video. (Readonly) + public const string kMP4Video = "video/mp4"; + + /// The MIME value used to determine all audio files. (Readonly) + public const string kAllAudio = "audio/*"; + + #endregion + + #region Static methods + + public static string GetTypeForExtension(string extension) + { + extension = extension.TrimStart('.'); + if (string.Equals(extension, "txt", StringComparison.InvariantCultureIgnoreCase)) + { + return kPlainText; + } + else if (string.Equals(extension, "html", StringComparison.InvariantCultureIgnoreCase)) + { + return kHtmlText; + } + else if (string.Equals(extension, "js", StringComparison.InvariantCultureIgnoreCase)) + { + return kJavaScriptText; + } + else if (string.Equals(extension, "jpg", StringComparison.InvariantCultureIgnoreCase) || + string.Equals(extension, "jpeg", StringComparison.InvariantCultureIgnoreCase)) + { + return kJPGImage; + } + else if (string.Equals(extension, "png", StringComparison.InvariantCultureIgnoreCase)) + { + return kPNGImage; + } + else if (string.Equals(extension, "gif", StringComparison.InvariantCultureIgnoreCase)) + { + return kGIFImage; + } + else if (string.Equals(extension, "pdf", StringComparison.InvariantCultureIgnoreCase)) + { + return kPDF; + } + else if (string.Equals(extension, "mp4", StringComparison.InvariantCultureIgnoreCase)) + { + return kMP4Video; + } + + DebugLogger.LogWarning(CoreLibraryDomain.Default, $"Unknown MIME type for extension: {extension}"); + return kPlainText; + } + + public static string GetExtensionForType(string mimeType) + { + if (string.Equals(mimeType, kPlainText, StringComparison.InvariantCultureIgnoreCase)) + { + return "txt"; + } + else if (string.Equals(mimeType, kHtmlText, StringComparison.InvariantCultureIgnoreCase)) + { + return "html"; + } + else if (string.Equals(mimeType, kJavaScriptText, StringComparison.InvariantCultureIgnoreCase)) + { + return "js"; + } + else if (string.Equals(mimeType, kJPGImage, StringComparison.InvariantCultureIgnoreCase)) + { + return "jpg"; + } + else if (string.Equals(mimeType, kPNGImage, StringComparison.InvariantCultureIgnoreCase)) + { + return "png"; + } + else if (string.Equals(mimeType, kGIFImage, StringComparison.InvariantCultureIgnoreCase)) + { + return "gif"; + } + else if (string.Equals(mimeType, kPDF, StringComparison.InvariantCultureIgnoreCase)) + { + return "pdf"; + } + else if (string.Equals(mimeType, kMP4Video, StringComparison.InvariantCultureIgnoreCase)) + { + return "mp4"; + } + else if (string.Equals(mimeType, kAllImages, StringComparison.InvariantCultureIgnoreCase)) //Defaults to png + { + return "png"; + } + else if (string.Equals(mimeType, kAllVideos, StringComparison.InvariantCultureIgnoreCase)) //Defaults to mp4 + { + return "mp4"; + } + else if (string.Equals(mimeType, kAllAudio, StringComparison.InvariantCultureIgnoreCase)) //Defaults to wav + { + return "wav"; + } + + DebugLogger.LogWarning(CoreLibraryDomain.Default, $"Unknown extension for MIME type : {mimeType}"); + return kPlainText; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/MimeType.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/MimeType.cs.meta new file mode 100644 index 00000000..376002b6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/MimeType.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d68885bd49dd540488b1c06ecfb83cf6 +timeCreated: 1576146562 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextEncodingFormat.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextEncodingFormat.cs new file mode 100644 index 00000000..f8428932 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextEncodingFormat.cs @@ -0,0 +1,22 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class TextEncodingFormat + { + #region Constants + + /// Encodes characters using the UTF-8 encoding. (Readonly) + public const string kUTF8 = "utf8"; + + /// Encodes characters using the UTF-16 encoding. (Readonly) + public const string kUTF16 = "utf16"; + + /// Encodes characters using the UTF-32 encoding. (Readonly) + public const string kUTF32 = "utf32"; + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextEncodingFormat.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextEncodingFormat.cs.meta new file mode 100644 index 00000000..d7654f94 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextEncodingFormat.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c0728fce467ac4c4aa2450ac0ebb6bd9 +timeCreated: 1576146562 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextureEncodingFormat.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextureEncodingFormat.cs new file mode 100644 index 00000000..009cf467 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextureEncodingFormat.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + /// + /// This enum is used to define the texture encoding technique to be used by the plugin. + /// + public enum TextureEncodingFormat + { + /// Encodes the given texture into PNG format. + PNG, + + /// Encodes the given texture into JPEG format. + JPG, + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextureEncodingFormat.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextureEncodingFormat.cs.meta new file mode 100644 index 00000000..083df586 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Constants/TextureEncodingFormat.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f3a28b85765d945bdb9550927d1fdde9 +timeCreated: 1576146562 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels.meta new file mode 100644 index 00000000..7e23fbf6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 60ac130d5072a4f95908150f5ad4d242 +folderAsset: yes +timeCreated: 1576063243 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationPrivacyConfiguration.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationPrivacyConfiguration.cs new file mode 100644 index 00000000..eb131a58 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationPrivacyConfiguration.cs @@ -0,0 +1,48 @@ +using UnityEngine; +using System.Collections; + +namespace VoxelBusters.CoreLibrary +{ + public class ApplicationPrivacyConfiguration + { + #region Properties + + public ConsentStatus UsageConsent { get; private set; } + + public bool? IsAgeRestrictedUser { get; private set; } + + public ContentRating? PreferredContentRating { get; private set; } + + public string Version { get; private set; } + + #endregion + + #region Constructors + + public ApplicationPrivacyConfiguration(ConsentStatus usageConsent, + bool? isAgeRestrictedUser = null, + ContentRating? preferredContentRating = null, + string version = null) + { + // Set properties + UsageConsent = usageConsent; + IsAgeRestrictedUser = isAgeRestrictedUser; + PreferredContentRating = preferredContentRating; + Version = version; + } + + #endregion + + #region Public methods + + public bool? IsCoppaApplicable() + { + if (IsAgeRestrictedUser == null) return null; + + return (IsAgeRestrictedUser.Value == true) || (UsageConsent != ConsentStatus.Authorized); + } + + #endregion + + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationPrivacyConfiguration.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationPrivacyConfiguration.cs.meta new file mode 100644 index 00000000..a4aaccd7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationPrivacyConfiguration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71301b2b0cd8345c9a4613989e8bdba8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationUser.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationUser.cs new file mode 100644 index 00000000..0e62b558 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationUser.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class User + { + #region Properties + + public string UserId { get; private set; } + + public string Email { get; private set; } + + public string FirstName { get; private set; } + + public string LastName { get; private set; } + + public UserGender Gender { get; private set; } + + public DateTime? DateOfBirth { get; private set; } + + public int? Age + { + get + { + if (DateOfBirth.HasValue) + { + var today = DateTime.Today; + var bday = DateOfBirth.Value; + int age = today.Year - bday.Year; + if (bday > today.AddYears(-age)) + { + age--; + } + return age; + } + return null; + } + } + + public bool IsGuest { get; private set; } + + #endregion + + #region Constructors + + public User(string userId, string email = null, + string firstName = null, string lastName = null, + UserGender gender = UserGender.Undefined, DateTime? dob = null, + bool isGuest = false) + { + // set properties + UserId = userId; + Email = email; + FirstName = firstName; + LastName = lastName; + DateOfBirth = dob; + Gender = gender; + IsGuest = isGuest; + } + + #endregion + + #region Nested types + + public enum UserGender + { + Undefined = 0, + + Male, + + Female, + + Others, + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationUser.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationUser.cs.meta new file mode 100644 index 00000000..c3b8e4a4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ApplicationUser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67da540a5aeda4477a763979cda8e7a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Asset.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Asset.cs new file mode 100644 index 00000000..69bb80f0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Asset.cs @@ -0,0 +1,61 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + [System.Serializable] + public class Asset + { + #region Properties + + public byte[] Data { get; private set; } + + public string MimeType { get; private set; } + + public string Name { get; private set; } + + #endregion + + #region Constructors + + public Asset(byte[] data, string mimeType, string name) + { + // set properties + Data = data; + MimeType = mimeType; + Name = name; + } + + #endregion + + #region Create methods + + public static Asset CreatePNGAsset(byte[] data, string name) + { + return new Asset(data, CoreLibrary.MimeType.kPNGImage, name); + } + + public static Asset CreateJPGAsset(byte[] data, string name) + { + return new Asset(data, CoreLibrary.MimeType.kJPGImage, name); + } + + public static Asset CreateMP4Asset(byte[] data, string name) + { + return new Asset(data, CoreLibrary.MimeType.kMP4Video, name); + } + + public static Asset CreatePDFAsset(byte[] data, string name) + { + return new Asset(data, CoreLibrary.MimeType.kPDF, name); + } + + public static Asset CreateTextAsset(byte[] data, string name) + { + return new Asset(data, CoreLibrary.MimeType.kPlainText, name); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Asset.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Asset.cs.meta new file mode 100644 index 00000000..1108af39 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Asset.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b981393de27a540ad9ddbc3361a51776 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Error.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Error.cs new file mode 100644 index 00000000..8f85dd97 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Error.cs @@ -0,0 +1,68 @@ +using System; + +namespace VoxelBusters.CoreLibrary +{ + public class Error + { + #region Properties + + /// + /// A description of the error occured (read-only). + /// + /// The description of the error. + public string Domain { get; private set; } + + /// + /// A value indicating the type of error occured (read-only). + /// + /// The error code. + public int Code { get; private set; } + + /// + /// A description of the error occured (read-only). + /// + /// The description of the error. + public string Description { get; private set; } + + #endregion + + #region Constructors + + public Error(string description) + : this(domain: null, code: 0, description: description) + { } + + public Error(string domain, int code, string description) + { + // set properties + Domain = domain; + Code = code; + Description = description; + } + + #endregion + + #region Static methods + + public static Error CreateNullableError(string description) + { + if (description == null) + { + return null; + } + + return new Error(description); + } + + #endregion + + #region Base class methods + + public override string ToString() + { + return string.Format("Error Domain: {0} Code: {1} Description: {2}", Domain, Code, Description); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Error.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Error.cs.meta new file mode 100644 index 00000000..49c95d18 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/Error.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 88d065ed06b734f9485e7024314b6843 +timeCreated: 1596311572 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/KeyValueDataStore.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/KeyValueDataStore.cs new file mode 100644 index 00000000..3841da0a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/KeyValueDataStore.cs @@ -0,0 +1,226 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary +{ + /// + /// Object represents a container to store key-value pairs. + /// + public class KeyValueDataStore + { + #region Fields + + private Dictionary m_dataCollection; + + private string m_savePath; + + #endregion + + #region Constructors + + /// + /// Create a new instance. + /// + /// The file path to save contents. + public KeyValueDataStore(string savePath) + { + // set properties + m_dataCollection = LoadDataFromPath(savePath) ?? new Dictionary(); + m_savePath = savePath; + } + + #endregion + + #region Get value methods + + /// + /// Returns the boolean value associated with the specified key. + /// + /// A string used to identify the value stored in the data store. + /// Default value. + /// + public bool GetBool(string key, bool defaultValue = default) + { + if (m_dataCollection.TryGetValue(key, out object value)) + { + return bool.Parse(value.ToString()); + } + return defaultValue; + } + + /// + /// Returns the long value associated with the specified key. + /// + /// A string used to identify the value stored in the data store. + /// Default value. + /// + public long GetLong(string key, long defaultValue = default) + { + if (m_dataCollection.TryGetValue(key, out object value)) + { + return long.Parse(value.ToString()); + } + return defaultValue; + } + + /// + /// Returns the double value associated with the specified key. + /// + /// A string used to identify the value stored in the data store. + /// Default value. + /// + public double GetDouble(string key, double defaultValue = default) + { + if (m_dataCollection.TryGetValue(key, out object value)) + { + return double.Parse(value.ToString()); + } + return defaultValue; + } + + /// + /// Returns the string value associated with the specified key. + /// + /// A string used to identify the value stored in the data store. + /// Default value. + /// + public string GetString(string key, string defaultValue = default) + { + if (m_dataCollection.TryGetValue(key, out object value)) + { + return value.ToString(); + } + return defaultValue; + } + + /// + /// Returns the byte array object associated with the specified key. + /// + /// A string used to identify the value stored in the data store. + /// Default value. + /// + public byte[] GetByteArray(string key, byte[] defaultValue = default) + { + if (m_dataCollection.TryGetValue(key, out object value)) + { + return System.Convert.FromBase64String(value.ToString()); + } + return defaultValue; + } + + /// + /// Returns the complete snapshot of data. + /// + /// Returns IDictionary with snapshot data + public IDictionary GetSnapshot() + { + return m_dataCollection; + } + + #endregion + + #region Set value methods + + /// + /// Sets a boolean value for the specified key in the data store. + /// + /// The key under which to store the value. + /// The boolean value to store. + public void SetBool(string key, bool value) + { + // save value + m_dataCollection[key] = value.ToString(); + } + + /// + /// Sets a long value for the specified key in the data store. + /// + /// The key under which to store the value. + /// The long value to store. + public void SetLong(string key, long value) + { + // save value + m_dataCollection[key] = value.ToString(); + } + + /// + /// Sets a double value for the specified key in the data store. + /// + /// The key under which to store the value. + /// The double value to store. + public void SetDouble(string key, double value) + { + // save value + m_dataCollection[key] = value.ToString(); + } + + /// + /// Sets a string value for the specified key in the data store. + /// + /// The key under which to store the value. + /// The string value to store. + public void SetString(string key, string value) + { + // save value + m_dataCollection[key] = value; + } + + /// + /// Sets a byte array value for the specified key in the data store. + /// + /// The key under which to store the value. + /// The long value to store. + public void SetByteArray(string key, byte[] value) + { + // save value + m_dataCollection[key] = System.Convert.ToBase64String(value); + } + + #endregion + + #region Misc methods + + /// + /// Explicitly synchronizes in-memory data with those stored on disk. + /// + public void Synchronize() + { + string jsonContent = ExternalServiceProvider.JsonServiceProvider.ToJson(m_dataCollection); + IOServices.CreateFile(m_savePath, jsonContent); + } + + /// + /// Removes all the entries from the data store. + /// + public void Clear() + { + m_dataCollection.Clear(); + Synchronize(); + } + + /// + /// Removes the value associated with the specified key from the data store. + /// + /// The key corresponding to the value you want to remove. + public bool RemoveKey(string key) + { + return m_dataCollection.Remove(key); + } + + #endregion + + #region Private methods + + private Dictionary LoadDataFromPath(string path) + { + if (!IOServices.FileExists(path)) return null; + + var jsonContent = IOServices.ReadFile(path); + return ExternalServiceProvider.JsonServiceProvider.FromJson(jsonContent) as Dictionary; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/KeyValueDataStore.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/KeyValueDataStore.cs.meta new file mode 100644 index 00000000..c239b7bf --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/KeyValueDataStore.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dbc1c5c10cdf245869b8f63107d3b39f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ReadableId.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ReadableId.cs new file mode 100644 index 00000000..9a5e504f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ReadableId.cs @@ -0,0 +1,39 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + [System.Serializable] + public class ReadableId + { + #region Fields + + [SerializeField] + private string m_name; + + [SerializeField] + private string m_id; + + #endregion + + #region Properties + + public string Name => m_name; + + public string Id => m_id; + + #endregion + + #region Constructors + + public ReadableId(string name, string id) + { + // set properties + m_name = name; + m_id = id; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ReadableId.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ReadableId.cs.meta new file mode 100644 index 00000000..7e0aa319 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ReadableId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 75dea0c9d6fd74981bc4bc02a408bde7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstant.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstant.cs new file mode 100644 index 00000000..9f8354a6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstant.cs @@ -0,0 +1,115 @@ +using System; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + /// + /// Object represents an immutable, read-only object that combines a string value with a platform. + /// + [Serializable] + public class RuntimePlatformConstant + { + #region Fields + + [SerializeField] + private RuntimePlatform m_platform; + + [SerializeField] + private string m_value = string.Empty; + + #endregion + + #region Properties + + /// + /// Gets the runtime platform associated with string value. + /// + /// The enum value indicates the platform to which string value belongs. + public RuntimePlatform Platform => m_platform; + + /// + /// Gets the string value. + /// + /// The string value. + public string Value => m_value; + + #endregion + + #region Constructors + + public RuntimePlatformConstant(RuntimePlatform platform, string value) + { + // set properties + m_platform = platform; + m_value = value; + } + + #endregion + + #region Static methods + + /// + /// Returns a new instance of , containing a string value functional only on iOS platform. + /// + /// The instance of . + /// The string value associated with iOS platform. + public static RuntimePlatformConstant iOS(string value) + { + return new RuntimePlatformConstant(RuntimePlatform.IPhonePlayer, value); + } + + /// + /// Returns a new instance of , containing a string value functional only on tvOS platform. + /// + /// The instance of . + /// The string value associated with tvOS platform. + public static RuntimePlatformConstant tvOS(string value) + { + return new RuntimePlatformConstant(RuntimePlatform.tvOS, value); + } + + /// + /// Returns a new instance of , containing a string value functional only on Android platform. + /// + /// The instance of . + /// The string value associated with Android platform. + public static RuntimePlatformConstant Android(string value) + { + return new RuntimePlatformConstant(RuntimePlatform.Android, value); + } + + /// + /// Returns a new instance of , containing a string value associated with active platform. + /// + /// The instance of . + /// The string value associated with active platform. + public static RuntimePlatformConstant Current(string value) + { + var currentPlatform = ApplicationServices.GetActiveOrSimulationPlatform(); + return new RuntimePlatformConstant(currentPlatform, value); + } + + #endregion + + #region Public methods + + public bool IsEqualToPlatform(RuntimePlatform other) + { + if (other == m_platform) return true; + + // Special case for Editor + return other.IsEditor() && m_platform.IsEditor(); + } + + #endregion + + #region Base class methods + + public override string ToString() + { + return m_value; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstant.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstant.cs.meta new file mode 100644 index 00000000..652dc668 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstant.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a656b13371a454661b01a2100b68c285 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstantSet.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstantSet.cs new file mode 100644 index 00000000..350baa86 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstantSet.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + [Serializable] + public class RuntimePlatformConstantSet + { + #region Fields + + [SerializeField] + private string m_ios; + + [SerializeField] + private string m_tvos; + + [SerializeField] + private string m_android; + + #endregion + + #region Constructors + + public RuntimePlatformConstantSet(string ios = null, string tvos = null, string android = null) + { + // set properties + m_ios = ios?.Trim(); + m_tvos = tvos?.Trim(); + m_android = android?.Trim(); + } + + #endregion + + #region Public methods + + public string GetConstantForActivePlatform(string defaultValue = null) + { + var platform = ApplicationServices.GetActivePlatform(); + return GetConstantForPlatform(platform, defaultValue); + } + + public string GetConstantForActiveOrSimulationPlatform(string defaultValue = null)//Why this is not used? + { + var platform = ApplicationServices.GetActiveOrSimulationPlatform(); + return GetConstantForPlatform(platform, defaultValue); + } + + public string GetConstantForPlatform(RuntimePlatform platform, string defaultValue = null) + { + string targetValue; + switch (platform) + { + case RuntimePlatform.IPhonePlayer: + targetValue = m_ios; + break; + + case RuntimePlatform.tvOS: + targetValue = m_tvos; + break; + + case RuntimePlatform.Android: + targetValue = m_android; + break; + + default: + targetValue = defaultValue; + break; + } + + return string.IsNullOrEmpty(targetValue) ? defaultValue : targetValue; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstantSet.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstantSet.cs.meta new file mode 100644 index 00000000..b6b4d48e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/RuntimePlatformConstantSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eef8c656560ba4996ba11c3f8a327d5a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/SerializableKeyValuePair.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/SerializableKeyValuePair.cs new file mode 100644 index 00000000..4cb1e029 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/SerializableKeyValuePair.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + [Serializable] + public class SerializableKeyValuePair : IEquatable> + { + #region Fields + + [SerializeField] + private TKey m_key; + + [SerializeField] + private TValue m_value; + + #endregion + + #region Properties + + public TKey Key + { + get => m_key; + set => m_key = value; + } + + public TValue Value + { + get => m_value; + set => m_value = value; + } + + #endregion + + #region Constructors + + protected SerializableKeyValuePair(TKey key = default(TKey), TValue value = default(TValue)) + { + // set properties + m_key = key; + m_value = value; + } + + #endregion + + #region IEquatable implementation + + bool IEquatable>.Equals(SerializableKeyValuePair other) + { + if (other == null) return false; + + return EqualityComparer.Default.Equals(Key, other.Key) && + EqualityComparer.Default.Equals(Value, other.Value); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/SerializableKeyValuePair.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/SerializableKeyValuePair.cs.meta new file mode 100644 index 00000000..4025c75d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/SerializableKeyValuePair.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 019f38b07624b4d45a787002d72c43cc +timeCreated: 1575981659 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/StringKeyValuePair.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/StringKeyValuePair.cs new file mode 100644 index 00000000..ff1b45fa --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/StringKeyValuePair.cs @@ -0,0 +1,16 @@ +using System; + +namespace VoxelBusters.CoreLibrary +{ + [Serializable] + public class StringKeyValuePair : SerializableKeyValuePair + { + #region Constructors + + public StringKeyValuePair(string key = null, string value = null) + : base(key, value) + { } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/StringKeyValuePair.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/StringKeyValuePair.cs.meta new file mode 100644 index 00000000..842751db --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/StringKeyValuePair.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: df95b47cf01434be8b102b93aa72ea33 +timeCreated: 1575981659 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/TextureData.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/TextureData.cs new file mode 100644 index 00000000..2b77038a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/TextureData.cs @@ -0,0 +1,83 @@ +using System; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class TextureData + { + #region Fields + + private byte[] m_rawData; + + private Texture2D m_texture; + + #endregion + + #region Constructors + + public TextureData(byte[] rawData) + { + // set properties + m_rawData = rawData; + m_texture = null; + } + + public TextureData(Texture2D texture) + { + // set properties + m_rawData = null; + m_texture = texture; + } + + #endregion + + #region Public methods + + public byte[] GetBytes(TextureEncodingFormat format) + { + if (m_rawData != null) + { + return m_rawData; + } + else if (m_texture != null) + { + switch (format) + { + case TextureEncodingFormat.JPG: + return m_texture.EncodeToJPG(); + + default: + return m_texture.EncodeToPNG(); + } + } + + throw new VBException("Unknown error"); + } + + public Texture2D GetTexture() + { + if (m_texture != null) + { + return m_texture; + } + else if (m_rawData != null) + { + m_texture = CreateTexture(m_rawData); + return m_texture; + } + + throw new VBException("Unknown error"); + } + + private Texture2D CreateTexture(byte[] data) + { + var newTexture = new Texture2D(4, 4); + newTexture.LoadImage(data); + newTexture.Apply(); + + return newTexture; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/TextureData.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/TextureData.cs.meta new file mode 100644 index 00000000..ccec60b2 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/TextureData.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9d502c99a53b34565aa536c6d09642cb +timeCreated: 1575981659 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/URLString.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/URLString.cs new file mode 100644 index 00000000..4defe078 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/URLString.cs @@ -0,0 +1,95 @@ +using System.Collections; +using System.Collections.Generic; +using System; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + /// + /// Struct value to represent the location of a resource, such as an item on a remote server or the path to a local file. + /// + public struct URLString + { + #region Fields + + private string m_value; + + #endregion + + #region Properties + + /// + /// Gets a value indicating whether this is valid. + /// + /// true if is valid; otherwise, false. + public bool IsValid { get; private set; } + + public bool IsFilePath { get; private set; } + + #endregion + + #region Static methods + + /// + /// Returns a newly created object as a http URL with specified path. + /// + /// The path should be a valid web URL path. + public static URLString URLWithPath(string path) + { + // validate arguments + Assert.IsNotNullOrEmpty(path, "path"); + Assert.IsFalse(path.StartsWith("file"), "Input value is not http path."); + + // format value if required + if (false == path.StartsWith("http")) + { + path = string.Concat("http://", path); + } + + return new URLString() { m_value = path, IsValid = true }; + } + + /// + /// Returns a newly created object as a file URL with a specified path. + /// + /// The path should be a valid system path. + public static URLString FileURLWithPath(string path) + { + // validate arguments + Assert.IsNotNullOrEmpty(path, "path"); + Assert.IsFalse(path.StartsWith("http"), "Input value is not local file path."); + + // format value if required + if (false == path.StartsWith("file") +#if UNITY_ANDROID + && false == path.StartsWith("jar:file") +#endif + ) + { + path = string.Concat("file://", path); + } + + return new URLString() { m_value = path, IsValid = true, IsFilePath = true, }; + } + + #endregion + + #region Public methods + + /// + /// Returns the URL representation in string format. This value is null, if given URL is invalid. + /// + /// The URL string. + public override string ToString() + { + if (IsValid) + { + return m_value; + } + + return null; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/URLString.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/URLString.cs.meta new file mode 100644 index 00000000..9cef0493 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/URLString.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3db1a4e89276140efb55332ad4b03434 +timeCreated: 1576157288 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/UnityPackageDefinition.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/UnityPackageDefinition.cs new file mode 100644 index 00000000..0d540c0f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/UnityPackageDefinition.cs @@ -0,0 +1,92 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + [System.Serializable] + public class UnityPackageDefinition + { + #region Fields + + private string m_persistentDataRelativePath; + + #endregion + + #region Properties + + public string Name { get; private set; } + + public string DisplayName { get; private set; } + + public string Version { get; private set; } + + public string DefaultInstallPath { get; private set; } + + public string UpmInstallPath { get; private set; } + + public string MutableResourcesPath { get; private set; } + + public string MutableResourcesRelativePath { get; private set; } + + public string PersistentDataRelativePath + { + get + { + EnsurePersistentDataPathExists(); + return m_persistentDataRelativePath; + } + } + + public string PersistentDataPath + { + get + { + EnsurePersistentDataPathExists(); + return GetPersistentDataPathInternal(); + } + } + + public UnityPackageDefinition[] Dependencies { get; private set; } + + #endregion + + #region Constructors + + public UnityPackageDefinition(string name, string displayName, + string version, string defaultInstallPath = null, + string mutableResourcesPath = "Assets/Resources", string persistentDataRelativePath = null, + params UnityPackageDefinition[] dependencies) + { + // Set properties + Name = name; + DisplayName = displayName; + Version = version; + DefaultInstallPath = defaultInstallPath ?? $"Assets/{Name}"; + UpmInstallPath = $"Packages/{Name}"; + MutableResourcesPath = mutableResourcesPath; + Dependencies = dependencies; + + // Derived properties + MutableResourcesRelativePath = mutableResourcesPath.Replace("Assets/Resources", "").TrimStart('/'); + m_persistentDataRelativePath = persistentDataRelativePath ?? $"VoxelBusters/{string.Join("", displayName.Split(' '))}"; + } + + #endregion + + #region Private methods + + private void EnsurePersistentDataPathExists() + { + var fullPath = GetPersistentDataPathInternal(); + IOServices.CreateDirectory(fullPath, overwrite: false); + } + + private string GetPersistentDataPathInternal() + { + return IOServices.CombinePath(Application.persistentDataPath, m_persistentDataRelativePath); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/UnityPackageDefinition.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/UnityPackageDefinition.cs.meta new file mode 100644 index 00000000..6e4a6200 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/UnityPackageDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 82b361b76bebe4d0a903cecf540fb732 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/VBException.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/VBException.cs new file mode 100644 index 00000000..30ca8a72 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/VBException.cs @@ -0,0 +1,59 @@ +using System; + +namespace VoxelBusters.CoreLibrary +{ + public class VBException : Exception + { + #region Properties + + public string Domain { get; private set; } + + public int ErrorCode { get; private set; } + + #endregion + + #region Constructors + + public VBException(string message, int errorCode = -1, Exception innerException = null) + : base(message, innerException) + { + // set properties + ErrorCode = errorCode; + } + + public VBException(string message, Exception innerException) + : this(message, -1, innerException) + { } + + #endregion + + #region Create methods + + public static VBException NotImplemented(string messsage = "Not implemented.") + { + return new VBException(messsage); + } + + public static VBException NotSupported(string messsage = "Not supported.") + { + return new VBException(messsage); + } + + public static VBException InvalidOperation(string messsage = "Invalid operation.") + { + return new VBException(messsage); + } + + public static VBException ArgumentNull(string property) + { + return new VBException(string.Format("{0} is null.", property)); + } + + public static VBException SwitchCaseNotImplemented(object value) + { + return new VBException(string.Format("Switch case for {0} is not implemented.", value)); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/VBException.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/VBException.cs.meta new file mode 100644 index 00000000..144b510f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/VBException.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 996d9b17d37854d94ae153f0efe8a652 +timeCreated: 1596314726 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ValidationResult.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ValidationResult.cs new file mode 100644 index 00000000..b2a3e3c1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ValidationResult.cs @@ -0,0 +1,67 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class ValidationResult + { + #region Static properties + + public static ValidationResult Success { get; private set;} + + #endregion + + #region Properties + + public bool IsValid { get; private set; } + + public Error Error { get; private set; } + + #endregion + + #region Constructors + + static ValidationResult() + { + // set static property values + Success = new ValidationResult(isValid: true, error: null); + } + + private ValidationResult(bool isValid, Error error = null) + { + // set properties + IsValid = isValid; + Error = error; + } + + #endregion + + #region Create methods + + public static ValidationResult CreateError(Error error) + { + return new ValidationResult( + isValid: false, + error: error); + } + + public static ValidationResult CreateError(string domain = null, int code = -1, string description = "") + { + return new ValidationResult( + isValid: false, + error: new Error(domain, code, description)); + } + + #endregion + + #region Base class methods + + public override string ToString() + { + return $"(IsValid: {IsValid} Error: {Error})"; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ValidationResult.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ValidationResult.cs.meta new file mode 100644 index 00000000..5affe975 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DataModels/ValidationResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 464bc3697d6e443e79eba11ae189f5af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns.meta new file mode 100644 index 00000000..a882615e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8a3bcee99b5cf4b2288bfe0ffd59b4ec +folderAsset: yes +timeCreated: 1547778314 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/PrivateSingletonBehaviour.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/PrivateSingletonBehaviour.cs new file mode 100644 index 00000000..a6f2c444 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/PrivateSingletonBehaviour.cs @@ -0,0 +1,197 @@ +using System; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public abstract class PrivateSingletonBehaviour : MonoBehaviour where T : MonoBehaviour + { + #region Static fields + + [ClearOnReload] + private static T s_sharedInstance = null; + + [ClearOnReload(ClearOnReloadOption.Default)] + private static readonly object s_objectLock = new object(); + + [ClearOnReload(customValue: false)] + private static bool s_isDestroyed = false; + + #endregion + + #region Fields + + [SerializeField] + private bool m_isPersistent = true; + + private bool m_isInitialised = false; + + private bool m_forcedDestroy = false; + + #endregion + + #region Static properties + + public static bool IsSingletonActive => (s_sharedInstance != null); + + #endregion + + #region Static methods + + protected static T GetSingleton() + { + var objectType = typeof(T); + if (s_isDestroyed) + { + DebugLogger.LogWarning(CoreLibraryDomain.Default, $"{objectType} instance is already destroyed."); + return null; + } + + lock (s_objectLock) + { + if (s_sharedInstance == null) + { + // find all the instances that exist in the screen + var sceneInstances = FindObjectsByType(objectType, FindObjectsSortMode.None) as T[]; + if (sceneInstances.Length > 0) + { + // save first element and remove others + s_sharedInstance = sceneInstances[0]; + for (int iter = 1; iter < sceneInstances.Length; iter++) + { + Destroy(sceneInstances[iter].gameObject); + } + } + // create new instance + else if (s_sharedInstance == null) + { + string singletonName = objectType.Name; + s_sharedInstance = new GameObject(singletonName).AddComponent(); + } + } + } + + // make sure object passed is initialised + var instance = (PrivateSingletonBehaviour)(object)s_sharedInstance; + if (!instance.m_isInitialised) + { + instance.Init(); + } + + return s_sharedInstance; + } + + protected static bool TryGetSingleton(out T singleton) + { + singleton = GetSingleton(); + + return (singleton != null); + } + + #endregion + + #region Unity methods + + private void Awake() + { + if (!m_isInitialised) + { + Init(); + } + } + + private void Start() + { + if (s_sharedInstance == this) + { + OnSingletonStart(); + } + } + + private void OnDestroy() + { + if (s_sharedInstance == this) + { + s_sharedInstance = null; + s_isDestroyed = !m_forcedDestroy; + OnSingletonDestroy(); + } + } + + #endregion + + #region Lifecycle methods + + protected virtual void OnSingletonAwake() + { } + + protected virtual void OnSingletonStart() + { } + + protected virtual void OnSingletonDestroy() + { } + + #endregion + + #region Private methods + + private void Init() + { + // update flag indicating that instance is initialised + m_isInitialised = true; + + // resolve singleton reference + if (s_sharedInstance == null) + { + s_sharedInstance = this as T; + } + else if (s_sharedInstance != this) + { + Destroy(gameObject); + return; + } + + // invoke internal awake method + OnSingletonAwake(); + + // mark object as persistent, if specified + if (m_isPersistent) + { + DontDestroyOnLoad(gameObject); + } + } + + #endregion + + #region ISingletonBehaviour implementation + + public bool IsPersistent + { + get + { + return m_isPersistent; + } + set + { + m_isPersistent = value; + } + } + + public void DestorySingleton(bool immediate = true) + { + if (s_sharedInstance == this) + { + m_forcedDestroy = true; + if (immediate) + { + DestroyImmediate(gameObject); + } + else + { + Destroy(gameObject); + } + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/PrivateSingletonBehaviour.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/PrivateSingletonBehaviour.cs.meta new file mode 100644 index 00000000..083b42a6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/PrivateSingletonBehaviour.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4b9151ffe47f14def86de74a01351995 +timeCreated: 1575981659 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonBehaviour.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonBehaviour.cs new file mode 100644 index 00000000..b4abb748 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonBehaviour.cs @@ -0,0 +1,17 @@ +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public abstract class SingletonBehaviour : PrivateSingletonBehaviour where T : MonoBehaviour + { + #region Static properties + + /// + /// Returns the singleton instance. + /// + /// The instance. + public static T Instance => GetSingleton(); + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonBehaviour.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonBehaviour.cs.meta new file mode 100644 index 00000000..92dd2484 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonBehaviour.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 86bc6b7ce122a492fa170d576be4fef2 +timeCreated: 1575981659 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonObject.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonObject.cs new file mode 100644 index 00000000..d4004788 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonObject.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class SingletonObject where T : class + { + #region Static fields + + [ClearOnReload] + private static T s_sharedInstance = null; + + #endregion + + #region Static properties + + public static T Instance => ObjectHelper.CreateInstanceIfNull( + ref s_sharedInstance, + CreateInstance); + + #endregion + + #region Private static methods + + private static T CreateInstance() + { + // get non-public constructors + var ctors = typeof(T).GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic); + if (!Array.Exists(ctors, (ci) => ci.GetParameters().Length == 0)) + { + throw new VBException("Non-public ctor() note found."); + } + + // get reference to default non-public constructor. + var ctor = Array.Find(ctors, (ci) => ci.GetParameters().Length == 0); + + // invoke constructor and return resulting object. + return ctor.Invoke(new object[] {}) as T; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonObject.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonObject.cs.meta new file mode 100644 index 00000000..7d4da54a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/DesignPatterns/SingletonObject.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6fd5341cccf6d4932ab66c7d464d434a +timeCreated: 1576677030 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events.meta new file mode 100644 index 00000000..70327585 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c351d0072c38447938ecc73f29085f7c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/EventHandlerCollection.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/EventHandlerCollection.cs new file mode 100644 index 00000000..6806fa99 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/EventHandlerCollection.cs @@ -0,0 +1,147 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class EventHandlerCollection where T : IEventHandler + { + #region Fields + + private List m_handlers = new List(); + + #endregion + + #region Delegates + + public delegate void EventFunction(T item); + + #endregion + + #region Public methods + + public int IndexOf(T obj) + { + // precondition + Assert.IsArgNotNull(obj, nameof(obj)); + + for (int iter = 0; iter < m_handlers.Count; iter++) + { + if (EqualityComparer.Default.Equals(m_handlers[iter], obj)) + { + return iter; + } + } + return -1; + } + + public bool Contains(T obj) + { + return (-1 != IndexOf(obj)); + } + + public bool Add(T obj) + { + // precondition + Assert.IsArgNotNull(obj, nameof(obj)); + + // add object + if (!Contains(obj)) + { + int index = m_handlers.BinarySearch(obj); + if (index < 0) + { + m_handlers.Insert(~index, obj); + } + else + { + m_handlers.Insert(index, obj); + } + + return true; + } + + return false; + } + + public bool Remove(T handler) + { + // precondition + Assert.IsArgNotNull(handler, nameof(handler)); + + // remove object + int index = IndexOf(handler); + if (index != -1) + { + m_handlers.RemoveAt(index); + return true; + } + return false; + } + + public void SendEvent(EventFunction function) + { + // precondition + Assert.IsArgNotNull(function, nameof(function)); + + // invoke action on every compatible object + var array = m_handlers.ToArray(); + int count = m_handlers.Count; + for (int iter = 0; iter < count; iter++) + { + try + { + var current = array[iter]; + if (current != null) + { + function(current); + } + } + catch (Exception exception) + { + DebugLogger.LogException(CoreLibraryDomain.Default, exception); + } + } + } + + #endregion + + #region Nested types + + private class EventHandlerComparer : IComparer + { + #region IComparer implementation + + public int Compare(T x, T y) + { + if (x == null) + { + if (y == null) + { + return 0; + } + else + { + return -1; + } + } + else + { + if (y == null) + { + return 1; + } + else + { + return x.CallbackOrder.CompareTo(y.CallbackOrder); + } + } + } + + #endregion + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/EventHandlerCollection.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/EventHandlerCollection.cs.meta new file mode 100644 index 00000000..73840a2d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/EventHandlerCollection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d9f68cb6c25ca4a26842648e93568575 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/IEventHandler.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/IEventHandler.cs new file mode 100644 index 00000000..73995703 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/IEventHandler.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + /// + /// Base interface that all event handlers inherit from. + /// + [IncludeInDocs] + public interface IEventHandler + { + int CallbackOrder { get; } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/IEventHandler.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/IEventHandler.cs.meta new file mode 100644 index 00000000..e2a9a380 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Events/IEventHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6326ebca5027d4ee7b2e168a41b01535 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces.meta new file mode 100644 index 00000000..9981d7b0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6d09b55026caf4dc586cc604917a643b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ExternalServiceProvider.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ExternalServiceProvider.cs new file mode 100644 index 00000000..742cd05e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ExternalServiceProvider.cs @@ -0,0 +1,82 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + /// + /// Provides an interface to connect external services used by the plugin. + /// + public static class ExternalServiceProvider + { + #region Static properties + + private static IJsonServiceProvider s_jsonServiceProvider; + + private static ISaveServiceProvider s_saveServiceProvider; + + private static ILocalisationServiceProvider s_localisationServiceProvider; + + #endregion + + #region Static fields + + /// + /// Gets or sets the JSON service provider. + /// + /// The JSON service provider. + public static IJsonServiceProvider JsonServiceProvider + { + get + { + return s_jsonServiceProvider; + } + set + { + // validate property + Assert.IsPropertyNotNull(value, "value"); + + // set value + s_jsonServiceProvider = value; + } + } + + /// + /// Gets or sets the save service provider. + /// + /// The save service provider. + public static ISaveServiceProvider SaveServiceProvider + { + get + { + return s_saveServiceProvider; + } + set + { + // validate property + Assert.IsPropertyNotNull(value, "value"); + + // set value + s_saveServiceProvider = value; + } + } + + public static ILocalisationServiceProvider LocalisationServiceProvider + { + get + { + return s_localisationServiceProvider; + } + set + { + // validate property + Assert.IsPropertyNotNull(value, "value"); + + // set value + s_localisationServiceProvider = value; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ExternalServiceProvider.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ExternalServiceProvider.cs.meta new file mode 100644 index 00000000..a92309dd --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ExternalServiceProvider.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: add81dcba5652491caa73048e9bee1b1 +timeCreated: 1550517833 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IJsonServiceProvider.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IJsonServiceProvider.cs new file mode 100644 index 00000000..83431196 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IJsonServiceProvider.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + /// + /// Adapter interface for supporting json conversion compatible with the plugin. + /// + public interface IJsonServiceProvider + { + #region Methods + + /// + /// Generate a JSON representation of the given object. + /// + /// The json. + /// Object. + string ToJson(object obj); + + /// + /// Create an object from specified JSON representation. + /// + /// The object. + /// Json string. + object FromJson(string jsonString); + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IJsonServiceProvider.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IJsonServiceProvider.cs.meta new file mode 100644 index 00000000..bc3f515f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IJsonServiceProvider.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c3225614eed7647a3a416754ef6ea830 +timeCreated: 1550517846 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ILocalisationServiceProvider.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ILocalisationServiceProvider.cs new file mode 100644 index 00000000..a39f8a9d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ILocalisationServiceProvider.cs @@ -0,0 +1,11 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public interface ILocalisationServiceProvider + { + string GetLocalisedString(string key, string defaultValue); + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ILocalisationServiceProvider.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ILocalisationServiceProvider.cs.meta new file mode 100644 index 00000000..fd708f0c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ILocalisationServiceProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f3d4b29cb44b49d7ade649008c9e4de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ISaveServiceProvider.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ISaveServiceProvider.cs new file mode 100644 index 00000000..c1520f9a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ISaveServiceProvider.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + /// + /// Adapter interface for supporting save service compatible with the plugin. + /// + public interface ISaveServiceProvider + { + #region Methods + + int GetInt(string key, int defaultValue = 0); + + float GetFloat(string key, float defaultValue = 0f); + + string GetString(string key, string defaultValue = null); + + string[] GetStringArray(string key, string[] defaultValue = null); + + void SetInt(string key, int value); + + void SetFloat(string key, float value); + + void SetString(string key, string value); + + void SetStringArray(string key, string[] value); + + void RemoveKey(string key); + + void Save(); + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ISaveServiceProvider.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ISaveServiceProvider.cs.meta new file mode 100644 index 00000000..8f8d548b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/ISaveServiceProvider.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 292e03e286b8d4a2c80cece8fa14ff54 +timeCreated: 1552894294 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IValidator.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IValidator.cs new file mode 100644 index 00000000..f6a97583 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IValidator.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public interface IValidator + { + #region Methods + + /// + /// Validate this instance. + /// + /// The validation result. + ValidationResult Validate(); + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IValidator.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IValidator.cs.meta new file mode 100644 index 00000000..c2651fab --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Interfaces/IValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b04d72e3421d643078c6df509e6ce27b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers.meta new file mode 100644 index 00000000..edadc7f7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 84927570c65be4c65807cabdb839d13e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/CommandProcessor.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/CommandProcessor.cs new file mode 100644 index 00000000..7952dcaf --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/CommandProcessor.cs @@ -0,0 +1,159 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace VoxelBusters.CoreLibrary +{ + public class CommandProcessor + { + #region Fields + + private List m_inprogressCommands; + + private List m_pendingCommands; + + #endregion + + #region Properties + + public CommandExecutionOrder ExecutionOrder { get; private set; } + + #endregion + + #region Events + + public event Callback OnCompletion; + + #endregion + + #region Constructors + + public CommandProcessor(CommandExecutionOrder order) + { + // set properties + m_inprogressCommands = new List(); + m_pendingCommands = new List(); + ExecutionOrder = order; + } + + #endregion + + #region Command methods + + public void AddCommand(ICommand command) + { + Assert.IsArgNotNull(command, nameof(command)); + + if (CommandExecutionOrder.None == ExecutionOrder) + { + ProcessCommandInternal(command); + } + else if (CommandExecutionOrder.Sequential == ExecutionOrder) + { + // add command to queue + m_pendingCommands.Add(command); + } + } + + public void InvalidateAll() + { + m_pendingCommands.Clear(); + } + + #endregion + + #region Public methods + + public void Update() + { + if (CommandExecutionOrder.None == ExecutionOrder) + { + ProcessInprogressCommands(); + } + else if (CommandExecutionOrder.Sequential == ExecutionOrder) + { + ProcessCommandsInSequentialOrder(); + } + } + + #endregion + + #region Private methods + + private void ProcessCommandInternal(ICommand command) + { + // add item to the tracker + m_inprogressCommands.Add(command); + + // execute action associated with the command + command.Execute(); + } + + private void ProcessInprogressCommands() + { + // parse through the inprogress commands and remove the completed ones + for (int iter = 0; iter < m_inprogressCommands.Count; iter++) + { + var command = m_inprogressCommands[iter]; + if (command.IsDone) + { + m_inprogressCommands.RemoveAt(iter); + iter--; + + // send completion event + PostCommandCompleteEvent(command); + } + } + } + + private void ProcessCommandsInSequentialOrder() + { + // check whether active command is processed + if (m_inprogressCommands.Count > 0) + { + var command = m_inprogressCommands[0]; + if (!command.IsDone) + { + return; + } + + // notify that command is completed + m_inprogressCommands.RemoveAt(0); + PostCommandCompleteEvent(command); + } + + // execute command available in the pool + if (m_pendingCommands.Count > 0) + { + var newCommand = m_pendingCommands[0]; + m_pendingCommands.RemoveAt(0); + + ProcessCommandInternal(newCommand); + } + } + + private void PostCommandCompleteEvent(ICommand command) + { + OnCompletion?.Invoke(command); + } + + #endregion + + #region Nested types + + [Serializable] + public class CommandEvent : UnityEvent + { } + + public enum CommandExecutionOrder + { + None, + + Sequential, + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/CommandProcessor.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/CommandProcessor.cs.meta new file mode 100644 index 00000000..91e839ac --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/CommandProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 705d21dd94a3a4304998c44f34fab18a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/ICommand.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/ICommand.cs new file mode 100644 index 00000000..be3b8c6b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/ICommand.cs @@ -0,0 +1,23 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public interface ICommand + { + #region Properties + + bool IsDone { get; } + + Error Error { get; } + + #endregion + + #region Methods + + void Execute(); + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/ICommand.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/ICommand.cs.meta new file mode 100644 index 00000000..ab3dd534 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Managers/ICommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee1b33b1e7223438bad27e46264abad6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc.meta new file mode 100644 index 00000000..2b0ce3ce --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8e208fb9bf46b403cbbe6846c27b1438 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/Assert.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/Assert.cs new file mode 100644 index 00000000..b39cc219 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/Assert.cs @@ -0,0 +1,107 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class Assert + { + #region Static methods + + public static void IsNotNull(object obj, string message) + { + if (obj == null) + { + throw new VBException(message); + } + } + + public static void IsNull(object obj, string message) + { + if (obj != null) + { + throw new VBException(message); + } + } + + public static void IsPropertyNotNull(object obj, string property) + { + if (obj == null) + { + throw new VBException(string.Format("{0} is null.", property)); + } + } + + public static void IsArgNotNull(object obj, string argName) + { + if (obj == null) + { + throw new VBException(string.Format("Arg {0} is null.", argName)); + } + } + + public static void AreNotEqual(object obj1, object obj2, string message) + { + if (obj1 == obj2) + { + throw new VBException(message); + } + } + + public static void AreNotEqual(T value, T target, string message) + { + if (EqualityComparer.Default.Equals(value, target)) + { + throw new VBException(message); + } + } + + public static void AreEqual(T value, T target, string message) + { + if (!EqualityComparer.Default.Equals(value, target)) + { + throw new VBException(message); + } + } + + public static void IsTrue(bool status, string message) + { + if (!status) + { + throw new VBException(message); + } + } + + public static void IsFalse(bool status, string message) + { + if (status) + { + throw new VBException(message); + } + } + + public static void IsNotZero(int value, string message) + { + AreNotEqual(value, 0, message); + } + + public static void IsNotNullOrEmpty(string value, string message) + { + IsFalse(string.IsNullOrEmpty(value), message); + } + + public static void IsNotNullOrEmpty(T[] array, string name) + { + if (array == null) + { + throw new VBException(string.Format("{0} is null.", name)); + } + if (0 == array.Length) + { + throw new VBException(string.Format("{0} is empty.", name)); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/Assert.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/Assert.cs.meta new file mode 100644 index 00000000..07ca9d24 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/Assert.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e783dcfe5edcf4e0db2dd73c5f7c5f9e +timeCreated: 1596367778 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/DebugLogger.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/DebugLogger.cs new file mode 100644 index 00000000..ef698630 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/DebugLogger.cs @@ -0,0 +1,194 @@ +using System.Collections.Generic; +using UnityEngine; + +using Exception = System.Exception; + +namespace VoxelBusters.CoreLibrary +{ + public static class DebugLogger + { + #region Constants + + private const string kDefaultTag = "VoxelBusters"; + + #endregion + + #region Static properties + + private static Dictionary TagLevelMap { get; set; } + + private static LogLevel DefaultLogLevel { get; set; } + + #endregion + + #region Constructors + + static DebugLogger() + { + // Set properties + TagLevelMap = new Dictionary(); + DefaultLogLevel = LogLevel.Critical; + } + + #endregion + + #region Static methods + + public static void SetLogLevel(LogLevel value, params string[] tags) + { + // Set value + if (tags.IsNullOrEmpty()) + { + DefaultLogLevel = value; + return; + } + + // Update tag based settings + foreach (var tag in tags) + { + TagLevelMap[tag] = value; + } + } + + #endregion + + #region Log methods + + public static void Log(string message, Object context = null) + { + Log(kDefaultTag, message, context); + } + + public static void Log(string tag, string message, Object context = null) + { + // Check whether the specified request is allowed + if (IgnoreLog(LogLevel.Info, tag)) return; + + Debug.Log($"[{tag}] {message}", context); + } + + public static void LogWarning(string message, Object context = null) + { + LogWarning(kDefaultTag, message, context); + } + + public static void LogWarning(string tag, string message, Object context = null) + { + // Check whether the specified request is allowed + if (IgnoreLog(LogLevel.Warning, tag)) return; + + Debug.LogWarning($"[{tag}] {message}", context); + } + + public static void LogError(string message, Object context = null) + { + LogError(kDefaultTag, message, context); + } + + public static void LogError(string tag, string message, Object context = null) + { + // Check whether the specified request is allowed + if (IgnoreLog(LogLevel.Error, tag)) return; + + Debug.LogError($"[{tag}] {message}", context); + } + + public static void LogException(Exception exception, Object context = null) + { + LogException(kDefaultTag, exception, context); + } + + public static void LogException(string tag, Exception exception, Object context = null) + { + // Check whether the specified request is allowed + if (IgnoreLog(LogLevel.Critical, tag)) return; + + Debug.LogError($"[{tag}] {exception}", context); + } + + #endregion + + #region Obsolete methods + + [System.Obsolete("This method is deprecated. Use Log instead.", false)] + public static void LogFormat(string format, params object[] arguments) + { + LogFormat(null, format, kDefaultTag, arguments); + } + + [System.Obsolete("This method is deprecated. Use Log instead.", false)] + public static void LogFormat(Object context, string format, params object[] arguments) + { + // Check whether logging is required + if (IgnoreLog(LogLevel.Info)) return; + + var formattedMessage = $"[VoxelBusters] {string.Format(format, arguments)}"; + Debug.Log(formattedMessage, context); + } + + [System.Obsolete("This method is deprecated. Use LogWarning instead.", false)] + public static void LogWarningFormat(string format, params object[] arguments) + { + LogWarningFormat(null, format, arguments); + } + + [System.Obsolete("This method is deprecated. Use LogWarning instead.", false)] + public static void LogWarningFormat(Object context, string format, params object[] arguments) + { + // Check whether logging is required + if (IgnoreLog(LogLevel.Warning)) return; + + var formattedMessage = "[VoxelBusters] " + string.Format(format, arguments); + Debug.LogWarning(formattedMessage, context); + } + + [System.Obsolete("This method is deprecated. Use LogError instead.", false)] + public static void LogErrorFormat(string format, params object[] arguments) + { + LogErrorFormat(null, format, arguments); + } + + [System.Obsolete("This method is deprecated. Use LogError instead.", false)] + public static void LogErrorFormat(Object context, string format, params object[] arguments) + { + // Check whether logging is required + if (IgnoreLog(LogLevel.Error)) return; + + var formattedMessage = "[VoxelBusters] " + string.Format(format, arguments); + Debug.LogError(formattedMessage, context); + } + + #endregion + + #region Private static methods + + private static bool IgnoreLog(LogLevel level, string tag = null) + { + if ((tag == null) || !TagLevelMap.TryGetValue(tag, out LogLevel allowedLogLevel)) + { + allowedLogLevel = DefaultLogLevel; + } + + return (level < allowedLogLevel); + } + + #endregion + + #region Nested types + + public enum LogLevel + { + Info = 0, + + Warning, + + Error, + + Critical, + + None + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/DebugLogger.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/DebugLogger.cs.meta new file mode 100644 index 00000000..d4037219 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/DebugLogger.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b418785d5aa4a4bc7bc51eb1078e6799 +timeCreated: 1575981659 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ListPool{T}.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ListPool{T}.cs new file mode 100644 index 00000000..976667d1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ListPool{T}.cs @@ -0,0 +1,57 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class ListPool + { + #region Static fields + + private static ObjectPool> s_listObjectPool; + + #endregion + + #region Static methods + + public static List Get() + { + EnsureInitialized(); + + return s_listObjectPool.Get(); + } + + public static void Release(List obj) + { + EnsureInitialized(); + + s_listObjectPool.Add(obj); + } + + #endregion + + #region Private static methods + + private static void EnsureInitialized() + { + if (s_listObjectPool != null) return; + + s_listObjectPool = new ObjectPool>( + createFunc: OnCreateItem, + actionOnGet: null, + actionOnAdd: OnReleaseItem); + } + + private static List OnCreateItem() + { + return new List(capacity: 8); + } + + private static void OnReleaseItem(List item) + { + item.Clear(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ListPool{T}.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ListPool{T}.cs.meta new file mode 100644 index 00000000..af228166 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ListPool{T}.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d202487821edb44b8b3c334e1f4d02a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ObjectPool{T}.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ObjectPool{T}.cs new file mode 100644 index 00000000..babaf57b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ObjectPool{T}.cs @@ -0,0 +1,96 @@ +// credits: https://bitbucket.org/Unity-Technologies/ui/src/31cbc456efd5ed74cba398ec1a101a31f66716db/UnityEngine.UI/UI/Core/Utility/ObjectPool.cs +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class ObjectPool where T : class + { + #region Fields + + private readonly Stack m_stack; + + private readonly System.Func m_createFunc; + + private readonly Callback m_actionOnGet; + + private readonly Callback m_actionOnAdd; + + private readonly Callback m_actionOnRelease; + + #endregion + + #region Properties + + public int CountAll { get; private set; } + + public int CountActive { get { return CountAll - CountInactive; } } + + public int CountInactive { get { return m_stack.Count; } } + + #endregion + + #region Constructors + + public ObjectPool(System.Func createFunc, Callback actionOnGet = null, + Callback actionOnAdd = null, Callback actionOnRelease = null) + { + m_stack = new Stack(capacity: 16); + m_createFunc = createFunc; + m_actionOnGet = actionOnGet; + m_actionOnAdd = actionOnAdd; + m_actionOnRelease = actionOnRelease; + } + + #endregion + + #region Public methods + + public T Get() + { + // remove item + T element; + if (m_stack.Count == 0) + { + element = m_createFunc(); + CountAll++; + } + else + { + element = m_stack.Pop(); + } + + // send event + m_actionOnGet?.Invoke(element); + + return element; + } + + public void Add(T element) + { + if (m_stack.Count > 0 && ReferenceEquals(m_stack.Peek(), element)) + { + Debug.LogError("Internal error. Trying to destroy object that is already released to pool."); + } + + // send event + m_actionOnAdd?.Invoke(element); + + // add item + m_stack.Push(element); + } + + public void Reset() + { + CountAll = 0; + while (m_stack.Count > 0) + { + var item = m_stack.Pop(); + m_actionOnRelease?.Invoke(item); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ObjectPool{T}.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ObjectPool{T}.cs.meta new file mode 100644 index 00000000..655d7045 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Misc/ObjectPool{T}.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a1033bddacd44cb48c1fc9292cc984a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Networking.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Networking.meta new file mode 100644 index 00000000..be3afee0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Networking.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4dc3bbb6c530d4fc687fc6dc1f1c7ba3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Networking/RestClient.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Networking/RestClient.cs new file mode 100644 index 00000000..0c48e485 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Networking/RestClient.cs @@ -0,0 +1,82 @@ +using System.Collections; +using System.Collections.Generic; +using Newtonsoft.Json; +using UnityEngine; +using UnityEngine.Networking; + +namespace VoxelBusters.CoreLibrary +{ + internal class RestClient + { + #region Static fields + + [ClearOnReload] + private static RestClient s_sharedInstance; + + #endregion + + #region Static properties + + public static RestClient SharedInstance => ObjectHelper.CreateInstanceIfNull( + ref s_sharedInstance, + () => new RestClient()); + + #endregion + + #region Constructors + + public RestClient() + { + var settings = new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore, + Formatting = Formatting.None, + MissingMemberHandling = MissingMemberHandling.Ignore, + }; + JsonConvert.DefaultSettings = () => settings; + } + + #endregion + + #region Static methods + + public static string EscapeUrl(string url) + { + return System.Uri.EscapeUriString(url); + } + + #endregion + + #region Public methods + + public void StartWebRequest(UnityWebRequest request, System.Action onSuccess, + System.Action onError) + { + DebugLogger.Log(CoreLibraryDomain.Default, $"Starting web request: {request.url}."); + request.SendWebRequest().completed += (obj) => + { + // Parse response + if ((request.responseCode >= 200) && (request.responseCode <= 301)) + { + DebugLogger.Log(CoreLibraryDomain.Default, $"Status: {request.responseCode} Result: {request.downloadHandler.text}."); + var result = JsonConvert.DeserializeObject(request.downloadHandler.text); + onSuccess(result); + } + else + { + var error = request.downloadHandler.text; + DebugLogger.LogError(CoreLibraryDomain.Default, $"Status: {request.responseCode} Error: {error}."); + onError(error); + } + }; + } + + public byte[] ConvertObjectToBytes(TData data) + { + var jsonStr = JsonConvert.SerializeObject(data); + return System.Text.Encoding.UTF8.GetBytes(jsonStr); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Networking/RestClient.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Networking/RestClient.cs.meta new file mode 100644 index 00000000..85176e0a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Networking/RestClient.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a15ecf7c2e0a54e5b9b99ab8d4db67f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup.meta new file mode 100644 index 00000000..75912317 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9991300776ae94a94a300daff99f90c7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/CoreLibrarySettings.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/CoreLibrarySettings.cs new file mode 100644 index 00000000..17b233f1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/CoreLibrarySettings.cs @@ -0,0 +1,39 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// A common library for all Voxel Busters's plugins. +/// +namespace VoxelBusters.CoreLibrary +{ + public class CoreLibrarySettings + { + #region Static fields + + private static UnityPackageDefinition s_package; + + #endregion + + #region Static properties + + internal static UnityPackageDefinition Package => ObjectHelper.CreateInstanceIfNull( + ref s_package, + () => + { + return new UnityPackageDefinition( + name: "com.voxelbusters.corelibrary", + displayName: "Core Library", + version: "1.0.0", + defaultInstallPath: $"Assets/Plugins/VoxelBusters/CoreLibrary"); + }); + + public static string Name => Package.Name; + + public static string DisplayName => Package.DisplayName; + + public static string Version => Package.Version; + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/CoreLibrarySettings.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/CoreLibrarySettings.cs.meta new file mode 100644 index 00000000..6251b561 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/CoreLibrarySettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f69cc138576446bdb236b719f3a744c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsObject.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsObject.cs new file mode 100644 index 00000000..edaf7686 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsObject.cs @@ -0,0 +1,34 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class SettingsObject : ScriptableObject + { + #region Events + + public event Callback OnSettingsUpdated; + + #endregion + + #region Base methods + + protected virtual void OnValidate() + { + OnSettingsUpdated?.Invoke(); + } + + #endregion + + #region Private methods + + protected virtual void UpdateLoggerSettings() { } + + internal virtual void OnEditorReload() + { + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsObject.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsObject.cs.meta new file mode 100644 index 00000000..00f147be --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab434722b943d44019b2e12eb1e64e18 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsPropertyGroup.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsPropertyGroup.cs new file mode 100644 index 00000000..228dd5a2 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsPropertyGroup.cs @@ -0,0 +1,47 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + [SerializeField] + public abstract class SettingsPropertyGroup + { + #region Fields + + [SerializeField] + [HideInInspector] + private bool m_isEnabled = true; + + #endregion + + #region Properties + + public bool IsEnabled + { + get + { + return m_isEnabled; + } + set + { + m_isEnabled = value; + } + } + + public string Name { get; private set; } + + #endregion + + #region Constructors + + protected SettingsPropertyGroup(string name, bool isEnabled = true) + { + // set properties + m_isEnabled = isEnabled; + Name = name; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsPropertyGroup.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsPropertyGroup.cs.meta new file mode 100644 index 00000000..0c4a56ac --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Setup/SettingsPropertyGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88b33b3a6141c4b25a5b29bdc48f93a6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities.meta new file mode 100644 index 00000000..913eccc4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6981b02092dc848a489e2800c0cd4e90 +folderAsset: yes +timeCreated: 1562583572 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationLifecycleObserver.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationLifecycleObserver.cs new file mode 100644 index 00000000..3c751ef1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationLifecycleObserver.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class ApplicationLifecycleObserver : SingletonBehaviour + { + [ClearOnReload(ClearOnReloadOption.Default)] + List m_listeners = new List(); + + #region Public methods + + public static ApplicationLifecycleObserver Initialize() + { + return GetSingleton(); + } + + public void AddListener(IApplicationLifecycleListener listener) + { + m_listeners.Add(listener); + } + + public void RemoveListener(IApplicationLifecycleListener listener) + { + m_listeners.Remove(listener); + } + #endregion + + private void OnApplicationFocus(bool hasFocus) + { + foreach(var listener in m_listeners) + { + listener.OnApplicationFocus(hasFocus); + } + } + + private void OnApplicationPause(bool pauseStatus) + { + foreach(var listener in m_listeners) + { + listener.OnApplicationPause(pauseStatus); + } + } + + private void OnApplicationQuit() + { + foreach(var listener in m_listeners) + { + listener.OnApplicationQuit(); + } + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationLifecycleObserver.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationLifecycleObserver.cs.meta new file mode 100644 index 00000000..ddbd9a37 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationLifecycleObserver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 267b9d3c66a104583ab37cbc4e6e3a8c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationServices.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationServices.cs new file mode 100644 index 00000000..3bab9af7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationServices.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class ApplicationServices + { + #region Static fields + + //public static float OriginalTimeScale { get; set; } + private static float s_originalTimeScale; + + #endregion + + #region Constructors + + static ApplicationServices() + { + Initialize(); + } + + #endregion + + #region Static methods + + [ExecuteOnReload] + private static void Initialize() + { + //OriginalTimeScale = Time.timeScale; + } + + public static void SetApplicationPaused(bool pause) + { + if (pause) + { + // cache original value + //OriginalTimeScale = Time.timeScale; + s_originalTimeScale = Time.timeScale; + + // set new value + Time.timeScale = 0f; + } + else + { + //Time.timeScale = OriginalTimeScale; + Time.timeScale = s_originalTimeScale; + } + } + + public static RuntimePlatform GetActivePlatform() + { + return Application.platform; + } + + public static RuntimePlatform GetActiveOrSimulationPlatform() + { +#if UNITY_EDITOR + return ConvertBuildTargetToRuntimePlatform(UnityEditor.EditorUserBuildSettings.activeBuildTarget); +#else + return Application.platform; +#endif + } + + public static bool IsPlayingOrSimulatingMobilePlatform() + { +#if UNITY_EDITOR + var platform = GetActiveOrSimulationPlatform(); + return (platform == RuntimePlatform.Android) || (platform == RuntimePlatform.IPhonePlayer); +#else + return Application.isMobilePlatform; +#endif + } + +#if UNITY_EDITOR + public static RuntimePlatform ConvertBuildTargetToRuntimePlatform(UnityEditor.BuildTarget buildTarget) + { + switch (buildTarget) + { + case UnityEditor.BuildTarget.iOS: + return RuntimePlatform.IPhonePlayer; + + case UnityEditor.BuildTarget.tvOS: + return RuntimePlatform.tvOS; + + case UnityEditor.BuildTarget.Android: + return RuntimePlatform.Android; + + case UnityEditor.BuildTarget.StandaloneOSX: + return RuntimePlatform.OSXPlayer; + + case UnityEditor.BuildTarget.StandaloneWindows: + case UnityEditor.BuildTarget.StandaloneWindows64: + return RuntimePlatform.WindowsPlayer; + + case UnityEditor.BuildTarget.WebGL: + return RuntimePlatform.WebGLPlayer; + + default: + return Application.platform; + } + } +#endif + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationServices.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationServices.cs.meta new file mode 100644 index 00000000..1321a447 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ApplicationServices.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d504bedbd29942489d9921a68180697 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/CollectionUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/CollectionUtility.cs new file mode 100644 index 00000000..5fcccc5e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/CollectionUtility.cs @@ -0,0 +1,252 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class CollectionUtility + { + #region Extension methods + + public static bool IsNullOrEmpty(this IList list) + { + return (list == null) || (list.Count == 0); + } + + public static bool AddUnique(this IList list, T item) + { + if (null == list) return false; + + if (!list.Contains(item)) + { + list.Add(item); + return true; + } + return false; + } + + public static IList Add(this IList list, System.Func condition, System.Func getItem) + { + if ((list != null) && condition()) + { + list.Add(getItem()); + } + return list; + } + + public static void AddOrReplace(this List list, T item, System.Predicate match) + { + int replaceIndex = list.FindIndex(match); + if (-1 == replaceIndex) + { + list.Add(item); + } + else + { + list[replaceIndex] = item; + } + } + + public static bool Remove(this List list, System.Predicate match) + { + int targetIndex = list.FindIndex(match); + if (targetIndex != -1) + { + list.RemoveAt(targetIndex); + return true; + } + return false; + } + + public static T GetItemAt(this IList list, int index, bool throwError = true) + { + // Check whether item is within bounds + if (throwError || ((index >= 0) && (index < list.Count))) + { + return list[index]; + } + return default(T); + } + + public static void AddFirst(this IList list, T item) + { + list.Insert(0, item); + } + + public static void AddLast(this IList list, T item) + { + list.Add(item); + } + + public static T PopFirst(this IList list) + { + var item = list[0]; + list.RemoveAt(0); + + return item; + } + + public static T PopLast(this IList list) + { + int lastIndex = list.Count - 1; + var item = list[lastIndex]; + list.RemoveAt(lastIndex); + + return item; + } + + public static void ForEach(this IList list, System.Action action) + { + foreach (var item in list) + { + action(item); + } + } + + public static TOutput[] ConvertAll(this IList source, System.Converter converter, System.Predicate match = null) + { + var newList = new List(source.Count); + foreach (var item in source) + { + if ((match != null) && !match(item)) continue; + + var convertedItem = converter(item); + newList.Add(convertedItem); + } + return newList.ToArray(); + } + + #endregion + + #region IDictionary methods + + public static bool IsNullOrEmpty(this IDictionary dict) + { + return (dict == null) || (dict.Count == 0); + } + + public static bool ContainsKeyPath(this IDictionary dictionary, string keyPath) + { + if (string.IsNullOrEmpty(keyPath)) return false; + + try + { + var pathComponents = keyPath.Split('/'); + int count = pathComponents.Length; + var currentDict = dictionary; + + for (int pIter = 0; pIter < count; pIter++) + { + string key = pathComponents[pIter]; + if (currentDict == null || !currentDict.Contains(key)) + { + return false; + } + + // Update reference to object at current key path + currentDict = currentDict[key] as IDictionary; + } + return true; + } + catch (System.Exception exception) + { + Debug.LogWarning($"[CoreLibrary] {exception.Message}"); + return false; + } + } + + public static T GetIfAvailable(this IDictionary dictionary, string key, T defaultValue = default(T)) + { + if (key == null || !dictionary.Contains(key)) return defaultValue; + + object value = dictionary[key]; + var targetType = typeof(T); + + if (value == null) + { + return defaultValue; + } + if (targetType.IsInstanceOfType(value)) + { + return (T)value; + } + +#if !NETFX_CORE + if (targetType.IsEnum) +#else + if (targetType.GetTypeInfo().IsEnum) +#endif + { + return (T)System.Enum.ToObject(targetType, value); + } + else + { + return (T)System.Convert.ChangeType(value, targetType); + } + } + + public static T GetIfAvailable(this IDictionary dictionary, string key, string path) + { + // Trim path at start + if (path != null) + { + // Trim start and end slash if exists. + path = path.TrimStart('/').TrimEnd('/'); + } + + if (!string.IsNullOrEmpty(key)) + { + if (string.IsNullOrEmpty(path)) + { + return dictionary.GetIfAvailable(key); + } + else + { + var pathComponents = path.Split('/'); + var currentDict = dictionary; + + // Here traverse to the path + foreach (string each in pathComponents) + { + if (currentDict.Contains(each)) + { + currentDict = currentDict[each] as IDictionary; + } + else + { + Debug.LogError($"[CoreLibrary]Path not found. Path={path}"); + return default(T); + } + } + return currentDict.GetIfAvailable(key); + } + } + else + { + return default(T); + } + } + + public static string GetKey(this IDictionary dictionary, T value) + { + string key = null; + if (value != null) + { + var keys = dictionary.Keys; + foreach (string eachKey in keys) + { + var eachValue = dictionary[eachKey] as object; + if (eachValue != null && eachValue.Equals(value)) + { + key = eachKey; + break; + } + } + } + + return key; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/CollectionUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/CollectionUtility.cs.meta new file mode 100644 index 00000000..d41802ed --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/CollectionUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 087f3ca9621e347e29c8666e1db6f153 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ComponentUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ComponentUtility.cs new file mode 100644 index 00000000..aed8393b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ComponentUtility.cs @@ -0,0 +1,88 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class ComponentUtility + { + #region Static methods + + public static T AddComponentIfNotFound(this GameObject gameObject) where T : Component + { + var component = gameObject.GetComponent(); + if (null == component) + { + component = gameObject.AddComponent(); + } + return component; + } + + public static TBase AddUniqueComponent(this GameObject gameObject, System.Type type) where TBase : Component + { + // remove components except the specified type + var components = gameObject.GetComponents(); + var targetComponent = default(TBase); + foreach (var item in components) + { + if (item.GetType() == type) + { + targetComponent = item; + continue; + } + Object.DestroyImmediate(item); + } + + // create a new instance if component does not exist + if (type != null) + { + return (targetComponent != null) + ? targetComponent + : gameObject.AddComponent(type) as TBase; + } + else + { + return null; + } + } + + public static T GetComponentInPredecessor(this MonoBehaviour monoBehaviour) where T : Component + { + var parentTransform = monoBehaviour.transform.parent; + while (parentTransform) + { + var targetComponent = parentTransform.GetComponent(); + if (targetComponent) + { + return targetComponent; + } + parentTransform = parentTransform.parent; + } + + return null; + } + + public static T[] GetComponentsInChildren(this Component component, bool includeParent, bool includeInactive) where T : Component + { + var components = component.GetComponentsInChildren(includeInactive); + if (includeParent) + { + return components; + } + else + { + var childComponents = new List(); + foreach (var item in components) + { + if (item.transform != component.transform) + { + childComponents.Add(item); + } + } + + return childComponents.ToArray(); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ComponentUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ComponentUtility.cs.meta new file mode 100644 index 00000000..de73f58b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ComponentUtility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ca1ad03ecec0340abaec203005bb94f4 +timeCreated: 1575981712 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/EnumUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/EnumUtility.cs new file mode 100644 index 00000000..207a5174 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/EnumUtility.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class EnumUtility + { + #region Static methods + + public static string[] GetEnumNames(Type enumType, bool ignoreDefault = false) + { + var list = new List(); + foreach (var item in Enum.GetValues(enumType)) + { + list.Add(item.ToString()); + } + if (ignoreDefault) + { + list.RemoveAt(0); + } + return list.ToArray(); + } + + public static T[] GetEnumValues(bool ignoreDefault = false) + { + var list = new List(); + foreach (var item in Enum.GetValues(typeof(T))) + { + list.Add((T)item); + } + if (ignoreDefault) + { + list.RemoveAt(0); + } + return list.ToArray(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/EnumUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/EnumUtility.cs.meta new file mode 100644 index 00000000..df9778c5 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/EnumUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e1abfa1e0b07f48619b6beabe63b3c83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/GameObjectUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/GameObjectUtility.cs new file mode 100644 index 00000000..a4d8ef90 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/GameObjectUtility.cs @@ -0,0 +1,109 @@ +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class GameObjectUtility + { + #region Static methods + + public static GameObject Instantiate(GameObject prefab, Transform parent = null) + { + var newGO = Object.Instantiate(prefab, parent: parent); + newGO.name = prefab.name; + + return newGO; + } + + public static GameObject Instantiate(GameObject prefab, System.Action onBeforeAwake) + { + var tempGO = new GameObject("Temp"); + tempGO.SetActive(false); + + var newInstance = Object.Instantiate(prefab, tempGO.transform); + newInstance.name = prefab.name; + + try + { + // call the onBeforeAwake method + onBeforeAwake(newInstance); + + return newInstance; + } + finally + { + // reset gameobject state + newInstance.transform.SetParent(null); + + // destroy temp object + Object.Destroy(tempGO); + } + } + + public static GameObject CreateChild(string childName, Transform parent) + { + return CreateChild(childName, Vector3.zero, Quaternion.identity, Vector3.one, parent); + } + + public static GameObject CreateChild(string childName, Vector3 localPosition, Quaternion localRotation, Vector3 localScale, Transform parent) + { + var containerGO = (parent is RectTransform) ? new GameObject(childName, typeof(RectTransform)) : new GameObject(childName); + + // set transform properties + var containerTrans = containerGO.transform; + containerTrans.SetParent(parent); + containerTrans.localPosition = localPosition; + containerTrans.localRotation = localRotation; + containerTrans.localScale = localScale; + + return containerGO; + } + + public static GameObject CreateGameObject(string name, System.Action onBeforeActive = null) + { + var gameObject = new GameObject(name); + try + { + if (onBeforeActive != null) + { + gameObject.SetActive(false); + onBeforeActive(gameObject); + } + } + finally + { + if (!gameObject.activeSelf) + { + gameObject.SetActive(true); + } + } + return gameObject; + } + + public static T CreateGameObjectWithComponent(string name, System.Action onBeforeAwake = null) where T : Component + { + var gameObject = new GameObject(name); + T component = default; + try + { + gameObject.SetActive(false); + component = gameObject.AddComponent(); + onBeforeAwake?.Invoke(component); + } + finally + { + gameObject.SetActive(true); + } + return component; + } + + public static void SetActive(this GameObject[] gameObjects, bool value) + { + for (int iter = 0; iter < gameObjects.Length; iter++) + { + gameObjects[iter].SetActive(value); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/GameObjectUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/GameObjectUtility.cs.meta new file mode 100644 index 00000000..c6c6294b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/GameObjectUtility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d162b9a2bfab04c2781ef252b67ef848 +timeCreated: 1575981712 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IApplicationLifecycleListener.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IApplicationLifecycleListener.cs new file mode 100644 index 00000000..b438e614 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IApplicationLifecycleListener.cs @@ -0,0 +1,9 @@ +namespace VoxelBusters.CoreLibrary +{ + public interface IApplicationLifecycleListener + { + void OnApplicationFocus(bool hasFocus); + void OnApplicationPause(bool pauseStatus); + void OnApplicationQuit(); + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IApplicationLifecycleListener.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IApplicationLifecycleListener.cs.meta new file mode 100644 index 00000000..4c0ff0a6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IApplicationLifecycleListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0025684c1ed374fe59ae77c0f232db24 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IOServices.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IOServices.cs new file mode 100644 index 00000000..8b5ccaa5 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IOServices.cs @@ -0,0 +1,279 @@ +using System; +using System.IO; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class IOServices + { + #region Static methods + + public static string CombinePath(params string[] paths) + { + return Path.Combine(paths); + } + + public static string GetAbsolutePath(string path) + { + if (string.IsNullOrEmpty(path)) + { + return Environment.CurrentDirectory; + } + + return Path.GetFullPath(path); + } + + public static string GetRelativePath(string referencePath, string path) + { + // folders must end in a slash + string directorySeparatorChar = Path.DirectorySeparatorChar.ToString(); + if (!referencePath.EndsWith(directorySeparatorChar)) + { + referencePath += Path.DirectorySeparatorChar; + // hack to stop getting unusual results + if (referencePath.StartsWith(directorySeparatorChar)) + { + referencePath += "a.tmp"; + } + } + + var referenceUri = new Uri(referencePath); + var pathUri = new Uri(path); + var relativeUri = referenceUri.MakeRelativeUri(pathUri); + return Uri.UnescapeDataString(relativeUri.ToString().Replace('/', Path.DirectorySeparatorChar)); + } + + #endregion + + #region Directory operations + + public static bool IsDirectory(string path) + { + var attr = File.GetAttributes(path); + return ((attr & FileAttributes.Directory) == FileAttributes.Directory); + } + + public static bool CreateDirectory(string path, bool overwrite = false) + { + if (DirectoryExists(path)) + { + if (!overwrite) + { + return false; + } + + DeleteDirectory(path, true); + } + + Directory.CreateDirectory(path); + return true; + } + + public static void DeleteDirectory(string path, bool recursive = true, bool throwError = false) + { + var directoryInfo = new DirectoryInfo(path); + if (!directoryInfo.Exists) + { + if (throwError) + { + throw new FileNotFoundException(); + } + return; + } + + directoryInfo.Delete(recursive); + } + + public static void ClearDirectory(string path) + { + var directoryInfo = new DirectoryInfo(path); + if (directoryInfo.Exists) + { + foreach (var file in directoryInfo.GetFiles()) + { + file.Delete(); + } + foreach (var dir in directoryInfo.GetDirectories()) + { + dir.Delete(true); + } + } + } + + public static string GetDirectoryName(string path) + { + return Path.GetDirectoryName(path); + } + + public static void CopyDirectory(string root, string dest, bool recursive, string filePattern = null) + { + // create sub folders + if (recursive) + { + foreach (var directory in Directory.GetDirectories(root)) + { + string dirName = Path.GetFileName(directory); + if (!Directory.Exists(Path.Combine(dest, dirName))) + { + Directory.CreateDirectory(Path.Combine(dest, dirName)); + } + CopyDirectory(directory, Path.Combine(dest, dirName), recursive, filePattern); + } + } + + // copy files + var files = (filePattern == null) ? Directory.GetFiles(root) : Directory.GetFiles(root, filePattern); + foreach (var file in files) + { + File.Copy(file, Path.Combine(dest, Path.GetFileName(file))); + } + } + + public static void MoveDirectory(string source, string destination) + { + try + { + var parent = Directory.GetParent(destination); + CreateDirectory(parent.FullName); + + Directory.Move(source, destination); + } + catch (Exception e) + { + Debug.LogException(e); + } + } + + public static bool DirectoryExists(string path) + { + return Directory.Exists(path); + } + + public static bool IsSubDirectory(string parent, string path) + { + var parentUri = new Uri(GetUriSafePath(parent)); + var childUri = new Uri(GetUriSafePath(Path.GetDirectoryName(path))); + return (parentUri != childUri) && parentUri.IsBaseOf(childUri); + } + + private static string GetUriSafePath(string path) + { + if(IsDirectory(path)) + { + return Path.Combine(path, $"{Path.PathSeparator}"); + } + + return path; + } + + public static string GetUniquePath(string path) + { + string uniquePath = path; + int tryCount = 0; + while (Directory.Exists(uniquePath)) + { + uniquePath = string.Format("{0}{1}", path, ++tryCount); + } + + return uniquePath; + } + + public static string GenerateFileName(string prefix, string extension) + { + return $"{prefix}_{DateTime.Now:yyyyMMddHHmmssfff}.{extension}"; + } + + #endregion + + #region File operations + + public static bool FileExists(string path) + { + return File.Exists(path); + } + + public static string GetFileName(string path) + { + return Path.GetFileName(path); + } + + public static void CreateFile(string path, string contents) + { + File.WriteAllText(path, contents); + } + + public static void CreateFile(string path, byte[] contents) + { + File.WriteAllBytes(path, contents); + } + + public static string ReadFile(string path) + { + return File.ReadAllText(path); + } + + public static byte[] ReadFileData(string path) + { + return File.ReadAllBytes(path); + } + + public static void CopyFile(string source, string destination, bool overwrite = true) + { + File.Copy(source, destination, overwrite); + } + + public static void MoveFile(string source, string destination) + { + if(File.Exists(source)) + { + File.Move(source, destination); + } + } + + public static void DeleteFile(string path, bool throwError = false) + { + if (!FileExists(path)) + { + if (throwError) + { + throw new FileNotFoundException(); + } + return; + } + + File.Delete(path); + } + + #endregion + + #region Hybrid methods + + public static void DeleteFileOrDirectory(string path, bool throwError = false) + { + var fileInfo = new FileInfo(path); + if (fileInfo.Exists) + { + if ((fileInfo.Attributes & FileAttributes.Directory) != 0) + { + DeleteDirectory(path, true, throwError); + } + else + { + DeleteFile(path, throwError); + } + } + } + + public static string GetFileNameWithoutExtension(string path) + { + return Path.GetFileNameWithoutExtension(path); + } + + public static string GetExtension(string path) + { + return Path.GetExtension(path); + } + + #endregion + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IOServices.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IOServices.cs.meta new file mode 100644 index 00000000..a5c69b1d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/IOServices.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f03251a97128b4f1c95bc72d0e6c0ca2 +timeCreated: 1595269876 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ObjectHelper.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ObjectHelper.cs new file mode 100644 index 00000000..4dec775e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ObjectHelper.cs @@ -0,0 +1,22 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class ObjectHelper + { + #region Static methods + + public static T CreateInstanceIfNull(ref T reference, System.Func createFunc) where T : class + { + if (reference == null) + { + reference = createFunc(); + } + return reference; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ObjectHelper.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ObjectHelper.cs.meta new file mode 100644 index 00000000..7017ce8a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ObjectHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01a41eaf37cf94688b89e33c036289dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/PropertyHelper.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/PropertyHelper.cs new file mode 100644 index 00000000..7d3620cd --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/PropertyHelper.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq.Expressions; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class PropertyHelper + { + #region Static methods + + public static string GetValueOrDefault(string value, string defaultValue = default) + { + if (string.IsNullOrEmpty(value)) return defaultValue; + + return value; + } + + public static string GetValueOrDefault(TInstance instance, Expression> fieldAccess, string value) + { + if (!string.IsNullOrEmpty(value)) return value; + + // Find default value using reflection + var fieldName = ReflectionUtility.GetFieldName(fieldAccess); + var fieldInfo = ReflectionUtility.GetField(typeof(TInstance), fieldName); + var attribute = ReflectionUtility.GetAttribute(fieldInfo); + return attribute.StringValue; + } + + public static TValue GetValueOrDefault(TInstance instance, Expression> fieldAccess, Nullable value) where TValue : struct + { + if (value != null) return value.GetValueOrDefault(); + + // Find default value using reflection + var fieldName = ReflectionUtility.GetFieldName(fieldAccess); + var fieldInfo = ReflectionUtility.GetField(typeof(TInstance), fieldName); + var attribute = ReflectionUtility.GetAttribute(fieldInfo); + return attribute.GetValue(); + } + + public static int GetConstrainedValue(TInstance instance, Expression> fieldAccess, int value) + { + var fieldName = ReflectionUtility.GetFieldName(fieldAccess); + var fieldInfo = ReflectionUtility.GetField(typeof(TInstance), fieldName); + var attribute = ReflectionUtility.GetAttribute(fieldInfo); + return Mathf.Clamp(value, (int)attribute.min, (int)attribute.max); + } + + public static float GetConstrainedValue(TInstance instance, Expression> fieldAccess, float value) + { + var fieldName = ReflectionUtility.GetFieldName(fieldAccess); + var fieldInfo = ReflectionUtility.GetField(typeof(TInstance), fieldName); + var attribute = ReflectionUtility.GetAttribute(fieldInfo); + return Mathf.Clamp(value, attribute.min, attribute.max); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/PropertyHelper.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/PropertyHelper.cs.meta new file mode 100644 index 00000000..a375eedc --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/PropertyHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 153ea3dabf0e645058dbce17fc67436e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ReflectionUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ReflectionUtility.cs new file mode 100644 index 00000000..2e6e4aff --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ReflectionUtility.cs @@ -0,0 +1,298 @@ +using System; +using System.Collections.Generic; +using System.Linq.Expressions; +using System.Reflection; +using UnityEngine; +using System.Linq; + +namespace VoxelBusters.CoreLibrary +{ + public static class SystemAssemblyName + { + public const string kCSharpFirstPass = "Assembly-CSharp-firstpass"; + public const string kCSharp = "Assembly-CSharp"; + } + + public static class ReflectionUtility + { + #region Type methods + + [System.Obsolete("Use method GetTypeFromAssemblyCSharp instead.", false)] + public static Type GetTypeFromCSharpAssembly(string typeName) + { + return GetType(SystemAssemblyName.kCSharp, typeName); + } + + [System.Obsolete("Use method GetTypeFromAssemblyCSharp instead.", false)] + public static Type GetTypeFromCSharpFirstPassAssembly(string typeName) + { + return GetType(SystemAssemblyName.kCSharpFirstPass, typeName); + } + + public static Type GetTypeFromAssemblyCSharp(string typeName, bool includeFirstPass = false) + { + Type targetType = null; + if (includeFirstPass) + { + targetType = GetType(SystemAssemblyName.kCSharpFirstPass, typeName); + }; + if (targetType == null) + { + targetType = GetType(SystemAssemblyName.kCSharp, typeName); + } + return targetType; + } + + public static Type GetType(string assemblyName, string typeName) + { + var targetAssembly = FindAssemblyWithName(assemblyName); + if (targetAssembly != null) + { + return targetAssembly.GetType(typeName, false); + } + + return null; + } + + public static Assembly FindAssemblyWithName(string assemblyName) + { + return Array.Find(AppDomain.CurrentDomain.GetAssemblies(), (item) => + { + return string.Equals(item.GetName().Name, assemblyName); + }); + } + + public static Type[] FindAllTypes(Predicate predicate = null) + { + var typeList = new List(); + foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) + { + foreach (var type in GetLoadableTypes(assembly)) + { + if ((predicate == null) || predicate(type)) + { + typeList.Add(type); + } + } + } + return typeList.ToArray(); + } + + public static bool TryGetCustomAttriute(this MethodInfo methodInfo, + Type attributeType, + out Attribute attribute, + bool inherit = false) + { + // Set default value + attribute = null; + + // Find custom attributes + var attributes = methodInfo.GetCustomAttributes(attributeType, inherit); + if (attributes.Length > 0) + { + attribute = attributes[0] as Attribute; + return true; + } + return false; + } + + public static bool TryGetCustomAttriute(this MethodInfo methodInfo, + out TAttribute attribute, + bool inherit = false) where TAttribute : Attribute + { + bool value = TryGetCustomAttriute(methodInfo: methodInfo, + attributeType: typeof(TAttribute), + attribute: out Attribute genericAttr, + inherit: inherit); + attribute = genericAttr as TAttribute; + return value; + } + + #endregion + + #region Create instance methods + + public static object CreateInstance(Type type, bool nonPublic = true) + { + return Activator.CreateInstance(type, nonPublic); + } + + public static object CreateInstance(Type type, params object[] args) + { + return Activator.CreateInstance(type, args); + } + + #endregion + + #region Attribute methods + + public static Dictionary FindTypesWithAttribute(Type attributeType, bool inherit = false) + { + var collection = new Dictionary(); + foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) + { + foreach (var type in GetLoadableTypes(assembly)) + { + if (type.IsClass == false) continue; + + var customAttributes = type.GetCustomAttributes(attributeType, inherit); + if (customAttributes.Length == 0) continue; + + collection.Add(type, Array.ConvertAll(customAttributes, (item) => item as Attribute)); + } + } + return collection; + } + + /* + public static Type[] FindTypesWithAttributes(Type attributeType, System.Func typeFilter = null, + System.Func methodFilter = null) + { + var targetTypes = new List(); + foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) + { + foreach (var type in assembly.GetTypes()) + { + if ((typeFilter != null) && !typeFilter(type)) continue; + + foreach (var method in type.GetRuntimeMethods()) + { + + } + + } + } + + return targetTypes.ToArray(); + } + */ + + #endregion + + #region Invoke methods + + public static object InvokeStaticMethod(this Type type, string method, params object[] parameters) + { + return type.GetMethod(method, BindingFlags.Public | BindingFlags.Static).Invoke(null, parameters); + } + + public static T InvokeStaticMethod(this Type type, string method, params object[] parameters) + { + return (T)InvokeStaticMethod(type, method, parameters); + } + + #endregion + + #region Modifier methods + + public static void SetPropertyValue(this object obj, string name, object value) + { + var type = obj.GetType(); + var bindingAttr = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; + var property = type.GetProperty(name, bindingAttr); + if (property != null) + { + if (property.DeclaringType != type) + { + property.DeclaringType.GetProperty(name, bindingAttr).SetValue(obj, value); + } + else + { + property.SetValue(obj, value); + } + } + } + + #endregion + + #region Constraints methods + + // Credits: Thomas Hourdel + public static string GetFieldName(Expression> fieldAccess) + { + var memberExpression = fieldAccess.Body as MemberExpression; + if (memberExpression != null) + { + return memberExpression.Member.Name; + } + throw new InvalidOperationException("Member expression expected"); + } + + public static FieldInfo GetField(Type type, string fieldName) + { + return type.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance); + } + + public static TAttribute GetAttribute(FieldInfo field) where TAttribute : Attribute + { + return (TAttribute)Attribute.GetCustomAttribute(field, typeof(TAttribute)); + } + + // MinAttribute + public static void ConstrainMin(TInstance instance, Expression> fieldAccess, float value) + { + var fieldName = GetFieldName(fieldAccess); + var fieldInfo = GetField(typeof(TInstance), fieldName); + fieldInfo.SetValue(instance, Mathf.Max(value, GetAttribute(fieldInfo).min)); + } + + public static void ConstrainMin(TInstance instance, Expression> fieldAccess, int value) + { + var fieldName = GetFieldName(fieldAccess); + var fieldInfo = GetField(typeof(TInstance), fieldName); + fieldInfo.SetValue(instance, (int)Mathf.Max(value, GetAttribute(fieldInfo).min)); + } + + // RangeAttribute + public static void ConstrainRange(TInstance instance, Expression> fieldAccess, float value) + { + var fieldName = GetFieldName(fieldAccess); + var fieldInfo = GetField(typeof(TInstance), fieldName); + var attribute = GetAttribute(fieldInfo); + fieldInfo.SetValue(instance, Mathf.Clamp(value, attribute.min, attribute.max)); + } + + public static void ConstrainRange(TInstance instance, Expression> fieldAccess, int value) + { + var fieldName = GetFieldName(fieldAccess); + var fieldInfo = GetField(typeof(TInstance), fieldName); + var attribute = GetAttribute(fieldInfo); + fieldInfo.SetValue(instance, (int)Mathf.Clamp(value, attribute.min, attribute.max)); + } + + public static void ConstrainDefault(TInstance instance, Expression> fieldAccess, Func condition = null) + { + if ((condition != null) && !condition()) return; + + var fieldName = GetFieldName(fieldAccess); + var fieldInfo = GetField(typeof(TInstance), fieldName); + var attribute = GetAttribute(fieldInfo); + if (attribute != null) + { + fieldInfo.SetValue(instance, attribute.GetValue(fieldInfo.FieldType)); + } + } + + public static void ConstrainDefault(TInstance instance, Expression> fieldAccess, string value) + { + if (!string.IsNullOrEmpty(value)) return; + + ConstrainDefault(instance, fieldAccess); + } + + #endregion + + #region Private methods + + private static IEnumerable GetLoadableTypes(Assembly assembly) { + if (assembly == null) throw new ArgumentNullException("assembly"); + try { + return assembly.GetTypes(); + } catch (ReflectionTypeLoadException e) { + return e.Types.Where(t => t != null); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ReflectionUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ReflectionUtility.cs.meta new file mode 100644 index 00000000..cbdbb0c4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ReflectionUtility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3b8e3dad17bea4adba258ad4293b2ed6 +timeCreated: 1576213852 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ResourcesUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ResourcesUtility.cs new file mode 100644 index 00000000..bc18f5a4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ResourcesUtility.cs @@ -0,0 +1,24 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class ResourcesUtility + { + #region Static methods + + public static T LoadBuiltinAsset(string name) where T : Object + { + return Resources.Load(name); + } + + public static T LoadAsset(this UnityPackageDefinition package, string name) where T : Object + { + string path = $"{package.GetMutableResourcesPath()}/{name}"; + return Resources.Load(path); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ResourcesUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ResourcesUtility.cs.meta new file mode 100644 index 00000000..72e37338 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ResourcesUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a946811916dd488ba03ca679c9eaeff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformConstantUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformConstantUtility.cs new file mode 100644 index 00000000..b03ecb51 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformConstantUtility.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class RuntimePlatformConstantUtility + { + #region Static methods + + public static RuntimePlatformConstant FindConstantForActivePlatform(RuntimePlatformConstant[] array) + { + var activePlatform = ApplicationServices.GetActiveOrSimulationPlatform(); + return FindConstantForPlatform(array, activePlatform); + } + + public static RuntimePlatformConstant FindConstantForPlatform(RuntimePlatformConstant[] array, RuntimePlatform platform) + { + if (array != null) + { + return Array.Find(array, (item) => item.IsEqualToPlatform(platform)); + } + + return null; + } + + public static string GetConstantValueForActivePlatform(RuntimePlatformConstant[] array) + { + var targetConstant = FindConstantForActivePlatform(array); + return targetConstant?.Value; + } + + public static string GetConstantValueForPlatform(RuntimePlatformConstant[] array, RuntimePlatform platform) + { + var targetConstant = FindConstantForPlatform(array, platform); + return targetConstant?.Value; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformConstantUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformConstantUtility.cs.meta new file mode 100644 index 00000000..ec46103a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformConstantUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62434b2c5f2a4444582f820fe7c72d12 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformUtility.cs new file mode 100644 index 00000000..1c2d1558 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformUtility.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class RuntimePlatformUtility + { + public static bool IsEditor(this RuntimePlatform other) + { + return (other == RuntimePlatform.OSXEditor) || + (other == RuntimePlatform.WindowsEditor) || + (other == RuntimePlatform.OSXEditor); + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformUtility.cs.meta new file mode 100644 index 00000000..1497c8ec --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/RuntimePlatformUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4e40aaa960ac24750b85b0b753d4aa61 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ScreenUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ScreenUtility.cs new file mode 100644 index 00000000..9b3a4103 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ScreenUtility.cs @@ -0,0 +1,54 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public class ScreenUtility : PrivateSingletonBehaviour + { + #region Fields + + private bool m_captureFrame = false; + + private Callback m_callback = null; + + #endregion + + #region Static methods + + public static void CaptureFrame(Callback callback) + { + var instance = GetSingleton(); + instance.m_captureFrame = true; + instance.m_callback += callback; + } + + #endregion + + #region Unity methods + + private void LateUpdate() + { + if (m_captureFrame) + { + m_captureFrame = false; + StartCoroutine(CaptureFrameRoutine()); + } + } + + private IEnumerator CaptureFrameRoutine() + { + yield return new WaitForEndOfFrame(); + var texture = ScreenCapture.CaptureScreenshotAsTexture(); + + // send data + m_callback?.Invoke(texture); + + // cleanup + m_callback = null; + Object.Destroy(texture); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ScreenUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ScreenUtility.cs.meta new file mode 100644 index 00000000..919f6733 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/ScreenUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3bab61dc3fccd4c749247992476003d1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/SystemUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/SystemUtility.cs new file mode 100644 index 00000000..0a86c7c1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/SystemUtility.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using UnityEngine; +using UnityEngine.Networking; + +namespace VoxelBusters.CoreLibrary +{ + public static class SystemUtility + { + #region String methods + + public static string EscapeString(string value) + { + return UnityWebRequest.EscapeURL(value).Replace("+", "%20"); + } + + #endregion + + #region List methods + + public static object[] ConvertListToArray(IList list) + { + int count = list.Count; + var array = new object[count]; + for (int iter = 0; iter < count; iter++) + { + array[iter] = list[iter]; + } + + return array; + } + + public static TOutput[] ConvertEnumeratorItems(IEnumerator enumerator, Converter converter, bool includeNullObjects) + { + Assert.IsNotNull(enumerator, "Enumerator is null."); + + // create original data array from native data + var outputObjects = new List(capacity: 8); + while (enumerator.MoveNext()) + { + var inputObject = enumerator.Current; + var outputObject = converter(inputObject); + if (EqualityComparer.Default.Equals(outputObject, default(TOutput)) && !includeNullObjects) + { + DebugLogger.LogWarning(CoreLibraryDomain.Default, $"Failed to convert object with data {inputObject}."); + continue; + } + + // add object to list + outputObjects.Add(outputObject); + } + + return outputObjects.ToArray(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/SystemUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/SystemUtility.cs.meta new file mode 100644 index 00000000..301cf889 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/SystemUtility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e186d5a1769064da6b38b8014df4f562 +timeCreated: 1576146223 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TextureUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TextureUtility.cs new file mode 100644 index 00000000..0f25b185 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TextureUtility.cs @@ -0,0 +1,126 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class TextureUtility + { + #region Encode methods + + public static string GetMimeType(TextureEncodingFormat encodeFormat) + { + switch (encodeFormat) + { + case TextureEncodingFormat.JPG: + return MimeType.kJPGImage; + + case TextureEncodingFormat.PNG: + return MimeType.kPNGImage; + + default: + throw VBException.SwitchCaseNotImplemented(encodeFormat); + } + } + + public static byte[] Encode(this Texture2D texture) + { + string mimeType; + return Encode(texture, out mimeType); + } + + public static byte[] Encode(this Texture2D texture, out string mimeType) + { + switch (texture.format) + { + case TextureFormat.Alpha8: + case TextureFormat.ARGB32: + case TextureFormat.ARGB4444: + case TextureFormat.RGBA32: + case TextureFormat.RGBA4444: + case TextureFormat.BGRA32: + case TextureFormat.RGBAHalf: + case TextureFormat.RGBAFloat: + case TextureFormat.PVRTC_RGBA2: + case TextureFormat.PVRTC_RGBA4: + mimeType = MimeType.kPNGImage; + return texture.EncodeToPNG(); + + default: + mimeType = MimeType.kJPGImage; + return texture.EncodeToJPG(); + } + } + + public static byte[] Encode(this Texture2D texture, TextureEncodingFormat encodeFormat) + { + switch (encodeFormat) + { + case TextureEncodingFormat.JPG: + return ImageConversion.EncodeToJPG(texture); + + case TextureEncodingFormat.PNG: + return ImageConversion.EncodeToPNG(texture); + + default: + throw VBException.SwitchCaseNotImplemented(encodeFormat); + } + } + + public static byte[] Encode(this Texture2D texture, TextureEncodingFormat encodeFormat, out string mimeType) + { + string textEncodingName; + return Encode(texture, encodeFormat, out mimeType, out textEncodingName); + } + + public static byte[] Encode(this Texture2D texture, TextureEncodingFormat encodeFormat, out string mimeType, out string textEncodingName) + { + // set default values + mimeType = null; + textEncodingName = TextEncodingFormat.kUTF8; + + // convert to specified format + byte[] data = null; + switch (encodeFormat) + { + case TextureEncodingFormat.PNG: + data = texture.EncodeToPNG(); + mimeType = MimeType.kPNGImage; + break; + + case TextureEncodingFormat.JPG: + data = texture.EncodeToJPG(); + mimeType = MimeType.kJPGImage; + break; + } + + return data; + } + + #endregion + + #region Static methods + + public static string TakeScreenshot(string fileName) + { + return TakeScreenshot(Application.persistentDataPath, fileName); + } + + public static string TakeScreenshot(string directory, string fileName) + { + string filePath = directory + "/" + fileName; + + IOServices.CreateDirectory(directory); + + // delete existing file + IOServices.DeleteFileOrDirectory(filePath); + + // start Capturing + ScreenCapture.CaptureScreenshot(fileName); + + return filePath; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TextureUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TextureUtility.cs.meta new file mode 100644 index 00000000..c3516fa7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TextureUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e04b39855b3f04773a15f0de7df8ec9d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TransformUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TransformUtility.cs new file mode 100644 index 00000000..217c1d5e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TransformUtility.cs @@ -0,0 +1,49 @@ +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class TransformUtility + { + #region Extension methods + + public static Transform[] GetImmediateChildren(Transform transform) + { + int childCount = transform.childCount; + var children = new Transform[childCount]; + for (int iter = 0; iter < childCount; iter++) + { + children[iter] = transform.GetChild(iter); + } + return children; + } + + public static T FindComponentInChildren(GameObject gameObject, string name) + { + return gameObject.transform.Find(name).GetComponent(); + } + + public static void RemoveAllChilds(this Transform parent) + { + RemoveChildren(parent); + } + + public static void RemoveChildren(this Transform parent) + { + var children = GetImmediateChildren(parent); + for (int iter = 0; iter < children.Length; iter++) + { + Object.Destroy(children[iter].gameObject); + } + } + + public static bool RemoveChild(this Transform parent, int index) + { + if ((index < 0) || (index >= parent.childCount)) return false; + + Object.Destroy(parent.GetChild(index).gameObject); + return true; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TransformUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TransformUtility.cs.meta new file mode 100644 index 00000000..8a7c2a5c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/TransformUtility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 229d7d1e6da8f438c928f26c2380c443 +timeCreated: 1575981712 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityEngineUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityEngineUtility.cs new file mode 100644 index 00000000..b43d1d22 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityEngineUtility.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary +{ + public static class UnityEngineUtility + { + #region Screen methods + + public static Vector2 InvertScreenPosition(Vector2 position, bool invertX = true, bool invertY = true) + { + if (invertX) + { + position.x = Screen.width - position.x; + } + if (invertY) + { + position.y = Screen.height - position.y; + } + + return position; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityEngineUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityEngineUtility.cs.meta new file mode 100644 index 00000000..1021a442 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityEngineUtility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 10c0b5322ab5d4fa4911a13be90cf142 +timeCreated: 1576146571 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityPackagePathResolver.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityPackagePathResolver.cs new file mode 100644 index 00000000..04d0ccbd --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityPackagePathResolver.cs @@ -0,0 +1,102 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace VoxelBusters.CoreLibrary +{ + public static class UnityPackagePathResolver + { + #region Static methods + + public static bool IsInstalledWithinAssets(this UnityPackageDefinition package) + { + return IOServices.DirectoryExists(package.DefaultInstallPath) && + IOServices.FileExists($"{package.DefaultInstallPath}/package.json"); + } + + public static string GetInstallPath(this UnityPackageDefinition package) + { + if (IsSupported()) + { + return IsInstalledWithinAssets(package) ? package.DefaultInstallPath : package.UpmInstallPath; + } + return null; + } + + public static string GetRuntimeScriptsPath(this UnityPackageDefinition package) + { + return CombinePath(pathA: GetInstallPath(package), pathB: "Runtime"); + } + + public static string GetEditorScriptsPath(this UnityPackageDefinition package) + { + return CombinePath(pathA: GetInstallPath(package), pathB: "Editor"); + } + + public static string GetEditorResourcesPath(this UnityPackageDefinition package) + { + return CombinePath(pathA: GetInstallPath(package), pathB: "EditorResources"); + } + + public static string GetMutableResourcesPath(this UnityPackageDefinition package) + { + return package.MutableResourcesPath; + } + + public static string GetImmutableResourcesPath(this UnityPackageDefinition package) + { + return CombinePath(pathA: GetInstallPath(package), pathB: "Resources"); + } + + public static string GetPackageResourcesPath(this UnityPackageDefinition package) + { + return CombinePath(pathA: GetInstallPath(package), pathB: "PackageResources"); + } + + public static string GetFullPath(this UnityPackageDefinition package, string relativePath) + { + return CombinePath(pathA: GetInstallPath(package), pathB: relativePath); + } + + public static string GetMutableResourceRelativePath(this UnityPackageDefinition package, string name) + { + return CombinePath(pathA: package.MutableResourcesRelativePath, pathB: name); + } + + public static string GetExtrasPath(this UnityPackageDefinition package) + { + return CombinePath(pathA: package.DefaultInstallPath, pathB: "Extras"); + } + + public static string GetEssentialsPath(this UnityPackageDefinition package) + { + return CombinePath(pathA: package.DefaultInstallPath, pathB: "Essentials"); + } + + public static string GetGeneratedPath(this UnityPackageDefinition package) + { + return CombinePath(pathA: package.DefaultInstallPath, pathB: "Generated"); + } + + private static bool IsSupported() => Application.isEditor; + + private static string CombinePath(string pathA, string pathB) + { + if (pathA == null) + { + return null; + } + else if (pathA == "") + { + return pathB; + } + else + { + return $"{pathA}/{pathB}"; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityPackagePathResolver.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityPackagePathResolver.cs.meta new file mode 100644 index 00000000..6cddbc5c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/Utilities/UnityPackagePathResolver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 94536336db51e46a1a20ed360ccd155f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/VoxelBusters.CoreLibrary.asmdef b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/VoxelBusters.CoreLibrary.asmdef new file mode 100644 index 00000000..788137c1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/VoxelBusters.CoreLibrary.asmdef @@ -0,0 +1,12 @@ +{ + "name": "VoxelBusters.CoreLibrary", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/VoxelBusters.CoreLibrary.asmdef.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/VoxelBusters.CoreLibrary.asmdef.meta new file mode 100644 index 00000000..075e2436 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/CoreLibrary/VoxelBusters.CoreLibrary.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 46ee17e5fcc7f436f9df354a1efda6a4 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins.meta new file mode 100644 index 00000000..70c07ee0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 88f0438e9840c4f628aff17d6eb40019 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android.meta new file mode 100644 index 00000000..b3ebcea6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c0c933458bcaa4dfb865d7680c1741c7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common.meta new file mode 100644 index 00000000..babaeae6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 43a4fb87f52614e0e86314e33e590c42 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/JNIUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/JNIUtility.cs new file mode 100644 index 00000000..1f52bf01 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/JNIUtility.cs @@ -0,0 +1,90 @@ +#if UNITY_ANDROID +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public static class JNIUtility + { + public delegate T NativeJavaObjectConverter(AndroidJavaObject nativeObject); + + public static List GetList(this AndroidJavaObject nativeObject, NativeJavaObjectConverter converter) + { + if (nativeObject == null) + return null; + + int size = nativeObject.Call("size"); + + List list = new List(); + for (int eachIndex = 0; eachIndex < size; eachIndex++) + { + AndroidJNI.PushLocalFrame(128); + using (AndroidJavaObject eachNativeObject = nativeObject.Call("get", eachIndex)) + { + T newObject = converter(eachNativeObject); + list.Add(newObject); + } + AndroidJNI.PopLocalFrame(IntPtr.Zero); + } + + return list; + } + + + public static List GetList(this AndroidJavaObject nativeObject) + { + if (nativeObject == null) + return null; + + T[] array = AndroidJNIHelper.ConvertFromJNIArray(nativeObject.GetRawObject()); + return new List(array); + } + + public static string GetString(this AndroidJavaObject javaObject) + { + if (javaObject == null) + return null; + + return javaObject.Call("toString"); + } + + public static T Get(this AndroidJavaObject nativeObject, string getterName) + { + if (nativeObject == null) + return default(T); + + T value = nativeObject.Call(getterName); + return value; + } + + public static T GetArray(this AndroidJavaObject nativeObject) + { + + if (nativeObject == null) + return default(T); + + T value = AndroidJNIHelper.ConvertFromJNIArray(nativeObject.GetRawObject()); + return value; + } + + public static T GetEnum(this AndroidJavaObject nativeObject) where T:struct + { + int value = nativeObject.Call("ordinal"); + return (T)(object)value; + } + + public static Color GetColor(this AndroidJavaObject nativeObject) + { + float red = nativeObject.Call("getRed") / 255; + float green = nativeObject.Call("getRed") / 255; + float blue = nativeObject.Call("getRed") / 255; + float alpha = nativeObject.Call("alpha") / 255.0f; + + return new Color(red, green, blue, alpha); + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/JNIUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/JNIUtility.cs.meta new file mode 100644 index 00000000..f3d94587 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/JNIUtility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 16d56bee7bda84a7c87d48ad8d648586 +timeCreated: 1547729646 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeActivity.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeActivity.cs new file mode 100644 index 00000000..b301bb00 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeActivity.cs @@ -0,0 +1,27 @@ +#if UNITY_ANDROID +using System; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeActivity : NativeAndroidJavaObjectWrapper + { + public NativeActivity(AndroidJavaObject javaObject) : base("android.app.Activity", javaObject) + { + } + public NativeActivity(NativeAndroidJavaObjectWrapper wrapper) : base(wrapper) + { + } + + public void RunOnUiThread(Action action) + { + m_nativeObject.Call("runOnUiThread", new AndroidJavaRunnable(() => + { + action(); + })); + } + + + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeActivity.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeActivity.cs.meta new file mode 100644 index 00000000..034d4a6f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeActivity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf0150c256d0841d39afa0fe600952ab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeAndroidJavaObjectWrapper.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeAndroidJavaObjectWrapper.cs new file mode 100644 index 00000000..9664e30e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeAndroidJavaObjectWrapper.cs @@ -0,0 +1,116 @@ +#if UNITY_ANDROID +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public abstract class NativeAndroidJavaObjectWrapper + { + protected AndroidJavaObject m_nativeObject; + protected string m_className; + + public AndroidJavaObject NativeObject + { + get + { + return m_nativeObject; + } + } + + public NativeAndroidJavaObjectWrapper(string className, params object[] args) + { +#if NATIVE_PLUGINS_DEBUG_ENABLED + DebugLogger.Log(string.Format("Creating {0}", this.GetType())); +#endif + m_className = className; + m_nativeObject = new AndroidJavaObject(className, args); + } + + public NativeAndroidJavaObjectWrapper(string className, AndroidJavaObject androidJavaObject) + { +#if NATIVE_PLUGINS_DEBUG_ENABLED + DebugLogger.Log(string.Format("Creating from AndroidJavaObject : {0}", this.GetType())); +#endif + m_className = className; + m_nativeObject = androidJavaObject; + } + + public NativeAndroidJavaObjectWrapper(NativeAndroidJavaObjectWrapper wrapper) + { +#if NATIVE_PLUGINS_DEBUG_ENABLED + DebugLogger.Log(string.Format("Creating from wrapper : {0}", this.GetType())); +#endif + m_className = wrapper.GetClassName(); + m_nativeObject = wrapper.NativeObject; + } + +#if NATIVE_PLUGINS_DEBUG_ENABLED + ~NativeAndroidJavaObjectWrapper() + { + //DebugLogger.Log("Destructor for " + this.GetType()); + } +#endif + + public static AndroidJavaObject CreateFromStatic(string className, string methodName, params object[] args) + { + AndroidJavaClass cls = new AndroidJavaClass(className); + AndroidJavaObject androidJavaObject = cls.CallStatic(methodName, args); + return androidJavaObject; + } + + public bool IsNull() + { + return m_nativeObject == null; + } + + protected T Get(string fieldName) + { + return m_nativeObject.Get(fieldName); + } + + protected void Set(string fieldName, T val) + { + m_nativeObject.Set(fieldName, val); + } + + protected void Call(string methodName, params object[] args) + { + if(!IsNull()) + { +#if NATIVE_PLUGINS_DEBUG_ENABLED + Debug.Log(string.Format("[Class : {0}] [Method : {1}]", this.GetType(), methodName)); +#endif + m_nativeObject.Call(methodName, args); + } + else + { +#if NATIVE_PLUGINS_DEBUG_ENABLED + Debug.Log(string.Format("Null Call [Class : {0}] [Method : {1}]", this.GetType(), methodName)); +#endif + } + } + + protected T Call(string methodName, params object[] args) + { + if(!IsNull()) + { +#if NATIVE_PLUGINS_DEBUG_ENABLED + Debug.Log(string.Format("[Class : {0}] [Method : {1}]", this.GetType(), methodName)); +#endif + return m_nativeObject.Call(methodName, args); + } + else + { +#if NATIVE_PLUGINS_DEBUG_ENABLED + Debug.Log(string.Format("Null Call [Class : {0}] [Method : {1}]", this.GetType(), methodName)); +#endif + return default(T); + } + } + + protected string GetClassName() + { + return m_className; + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeAndroidJavaObjectWrapper.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeAndroidJavaObjectWrapper.cs.meta new file mode 100644 index 00000000..069147ee --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeAndroidJavaObjectWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aee0d2c592981459e851b12ada679d40 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeArrayBuffer.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeArrayBuffer.cs new file mode 100644 index 00000000..1bef615d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeArrayBuffer.cs @@ -0,0 +1,73 @@ +#if UNITY_ANDROID +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeArrayBuffer : NativeAndroidJavaObjectWrapper + { + public NativeArrayBuffer(AndroidJavaObject androidJavaObject) : base("com.voxelbusters.android.essentialkit.common.ArrayBuffer", androidJavaObject) + { + } + + public int Size() + { + return m_nativeObject.Call("size"); + } + + public T Get(int index) + { + if (m_nativeObject == null) + return default(T); + + T instance; + if(IsStringOrPrimitive(typeof(T))) + { + instance = Call("get", index); + } + else + { + AndroidJavaObject androidJavaObject = Call("get", index); + instance = (T)Activator.CreateInstance(typeof(T), new object[] { androidJavaObject }); + } + + return instance; + } + + public T[] GetArray() + { + if (NativeObject == null) + return default(T[]); + + List list = new List(); + int size = Size(); + for (int i = 0; i < size; i++) + { + T each = Get(i); + list.Add(each); + } + + return list.ToArray(); + } + + private static bool IsStringOrPrimitive(Type type) + { + // Check if the type is string + if (type == typeof(string)) + { + return true; + } + + // Check if the type is a primitive type + if (type.IsPrimitive) + { + return true; + } + + return false; + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeArrayBuffer.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeArrayBuffer.cs.meta new file mode 100644 index 00000000..b71d38f8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeArrayBuffer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a52488425b5bc4c80b4bb039aadb50c0 +timeCreated: 1581450433 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeByteBuffer.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeByteBuffer.cs new file mode 100644 index 00000000..62c2d716 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeByteBuffer.cs @@ -0,0 +1,68 @@ +#if UNITY_ANDROID +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeByteBuffer : NativeAndroidJavaObjectWrapper + { +#region Fields + + private const string kClassName = "java.nio.ByteBuffer"; + private byte[] m_cachedBytes; + +#endregion + + public NativeByteBuffer(AndroidJavaObject androidJavaObject) : base(kClassName, androidJavaObject) + { +#if NATIVE_PLUGINS_DEBUG_ENABLED + DebugLogger.Log("Creating from android native object : " + androidJavaObject.GetRawObject()); +#endif + } + + public static NativeByteBuffer Wrap(byte[] array) + { + if(array == null) + return null; + + return Wrap(array.ToSBytes()); + } + + public static NativeByteBuffer Wrap(sbyte[] data) + { + if(data == null) + return null; + + NativeByteBuffer nativeByteBuffer = new NativeByteBuffer(CreateFromStatic(kClassName, "wrap", data)); + return nativeByteBuffer; + } + + public byte[] GetBytes() + { + if (m_nativeObject == null) + return default(byte[]); + + if(m_cachedBytes == null) + { + sbyte[] sbyteArray = Call("array"); + m_cachedBytes = sbyteArray.ToBytes(); + } + + return m_cachedBytes; + } + + public int size() + { + byte[] bytes = GetBytes(); + + if(bytes == null) + return 0; + + return bytes.Length; + } + + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeByteBuffer.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeByteBuffer.cs.meta new file mode 100644 index 00000000..8cae680a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeByteBuffer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: af135a033c56e42e0a1b65e9c17e7f25 +timeCreated: 1581450433 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeContext.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeContext.cs new file mode 100644 index 00000000..3b5b2d38 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeContext.cs @@ -0,0 +1,13 @@ +#if UNITY_ANDROID +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeContext : NativeAndroidJavaObjectWrapper + { + public NativeContext(AndroidJavaObject javaObject) : base("android.content.Context", javaObject) + { + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeContext.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeContext.cs.meta new file mode 100644 index 00000000..8436f86e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeContext.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fba83798072dc401eb1572b0d0202645 +timeCreated: 1581450433 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeDate.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeDate.cs new file mode 100644 index 00000000..e6e831d6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeDate.cs @@ -0,0 +1,43 @@ +#if UNITY_ANDROID +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeDate : NativeAndroidJavaObjectWrapper + { + private const string kClassName = "java.util.Date"; + public NativeDate() : base(kClassName) + { + m_nativeObject = new AndroidJavaObject(kClassName); + } + public NativeDate(AndroidJavaObject nativeObject) : base(kClassName, nativeObject) + { + } + + public void SetDateTime(DateTime dateTime) + { + DateTime epochReference = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + long epoch = Convert.ToInt64((dateTime - epochReference).TotalMilliseconds); + m_nativeObject.Call("setTime", epoch); + } + + public DateTime GetDateTime() + { + long epoch = m_nativeObject.Call("getTime")/1000; + DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + return dateTime.AddSeconds(epoch); + } + + public DateTime? GetDateTimeOptional(DateTime? defaultValue = null) + { + if(IsNull()) + return defaultValue; + + return GetDateTime(); + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeDate.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeDate.cs.meta new file mode 100644 index 00000000..79be8150 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeDate.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7ef75fbaca24c45aeb9babf47794f6c3 +timeCreated: 1581450433 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfo.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfo.cs new file mode 100644 index 00000000..683d7c40 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfo.cs @@ -0,0 +1,78 @@ +#if UNITY_ANDROID +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeErrorInfo : NativeAndroidJavaObjectWrapper + { + #region Static properties + + private static AndroidJavaClass m_nativeClass; + + #endregion + #region Constructor + + // Default constructor + public NativeErrorInfo(AndroidJavaObject androidJavaObject) : base(Native.kClassName, androidJavaObject) + { + } + public NativeErrorInfo(NativeAndroidJavaObjectWrapper wrapper) : base(wrapper) + { + } + public NativeErrorInfo(int code, string description) : base(Native.kClassName ,code, description) + { + } + public NativeErrorInfo(string description) : base(Native.kClassName ,description) + { + } + +#if NATIVE_PLUGINS_DEBUG_ENABLED + ~NativeErrorInfo() + { + DebugLogger.Log("Disposing NativeErrorInfo"); + } +#endif + #endregion + #region Static methods + private static AndroidJavaClass GetClass() + { + if (m_nativeClass == null) + { + m_nativeClass = new AndroidJavaClass(Native.kClassName); + } + return m_nativeClass; + } + + #endregion + #region Public methods + + public int GetCode() + { + return Call(Native.Method.kGetCode); + } + public string GetDescription() + { + return Call(Native.Method.kGetDescription); + } + public override string ToString() + { + return Call(Native.Method.kToString); + } + + #endregion + + internal class Native + { + internal const string kClassName = "com.voxelbusters.essentialkit.utilities.common.ErrorInfo"; + + internal class Method + { + internal const string kToString = "toString"; + internal const string kGetCode = "getCode"; + internal const string kGetDescription = "getDescription"; + } + + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfo.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfo.cs.meta new file mode 100644 index 00000000..6fe9bafd --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e539da62bb21417e9d35885ea7a66e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfoExtensions.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfoExtensions.cs new file mode 100644 index 00000000..88092706 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfoExtensions.cs @@ -0,0 +1,14 @@ +#if UNITY_ANDROID +using System; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public static class NativeErrorInfoExtensions + { + public static Error Convert(this NativeErrorInfo nativeError, string domain = null) + { + return new Error(domain, nativeError.GetCode(), nativeError.GetDescription()); + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfoExtensions.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfoExtensions.cs.meta new file mode 100644 index 00000000..79b4ca32 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeErrorInfoExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 91d2713f2f415490881b49d41d2374bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeException.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeException.cs new file mode 100644 index 00000000..229ffb87 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeException.cs @@ -0,0 +1,26 @@ +#if UNITY_ANDROID +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeException : NativeAndroidJavaObjectWrapper + { + public NativeException(AndroidJavaObject androidJavaObject) : base("java.lang.Exception", androidJavaObject) + { + } + + public string GetMessage() + { + return m_nativeObject.Call("getMessage"); + } + + public void PrintStackTrace() + { + m_nativeObject.Call("printStackTrace"); + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeException.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeException.cs.meta new file mode 100644 index 00000000..3aaac7aa --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49493f240600d4811af386b86122d57b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeFloat.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeFloat.cs new file mode 100644 index 00000000..e0c45de8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeFloat.cs @@ -0,0 +1,19 @@ +#if UNITY_ANDROID +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeFloat : NativeAndroidJavaObjectWrapper + { + public NativeFloat(AndroidJavaObject javaObject) : base("android.lang.Float", javaObject) + { + } + + public float GetFloatValue() + { + float value = m_nativeObject.Call("floatValue"); + return value; + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeFloat.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeFloat.cs.meta new file mode 100644 index 00000000..7001fe7e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeFloat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e2f8dead3fff848ab9c31b0fbe8e9505 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeInteger.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeInteger.cs new file mode 100644 index 00000000..43a7c234 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeInteger.cs @@ -0,0 +1,19 @@ +#if UNITY_ANDROID +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeInteger : NativeAndroidJavaObjectWrapper + { + public NativeInteger(AndroidJavaObject javaObject) : base("android.lang.Integer", javaObject) + { + } + + public int GetIntValue() + { + int value = m_nativeObject.Call("intValue"); + return value; + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeInteger.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeInteger.cs.meta new file mode 100644 index 00000000..cf5eb66f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeInteger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3f53da493eaf45c79617b8967119d3b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeJSONObject.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeJSONObject.cs new file mode 100644 index 00000000..99c98922 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeJSONObject.cs @@ -0,0 +1,20 @@ +#if UNITY_ANDROID +using System; +using UnityEngine; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeJSONObject : NativeAndroidJavaObjectWrapper + { + public NativeJSONObject(AndroidJavaObject androidJavaObject) : base("org.json.JSONObject", androidJavaObject) + { + } + + public override string ToString() + { + return m_nativeObject.Call("toString"); + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeJSONObject.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeJSONObject.cs.meta new file mode 100644 index 00000000..8cc93277 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeJSONObject.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fc00b0292cce342b290bdd6496e360ca +timeCreated: 1547810936 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeList.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeList.cs new file mode 100644 index 00000000..7c2fe13c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeList.cs @@ -0,0 +1,37 @@ +#if UNITY_ANDROID +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeList : NativeAndroidJavaObjectWrapper + { + public NativeList(AndroidJavaObject androidJavaObject) : base("java.util.List", androidJavaObject) + { + } + + public int Size() + { + return m_nativeObject.Call("size"); + } + + public List Get() + { + int size = Size(); + List list = new List(); + for (int eachIndex = 0; eachIndex < size; eachIndex++) + { + AndroidJNI.PushLocalFrame(128); + AndroidJavaObject eachNativeObject = m_nativeObject.Call("get", eachIndex); + var instance = (T)Activator.CreateInstance(typeof(T), new object[] { eachNativeObject }); + list.Add(instance); + AndroidJNI.PopLocalFrame(IntPtr.Zero); + } + + return list; + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeList.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeList.cs.meta new file mode 100644 index 00000000..34b0653d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeList.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 98ed585e287844fabbbf2de65a052029 +timeCreated: 1581450433 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeObject.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeObject.cs new file mode 100644 index 00000000..b946a8e3 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeObject.cs @@ -0,0 +1,13 @@ +#if UNITY_ANDROID +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeObject : NativeAndroidJavaObjectWrapper + { + public NativeObject(AndroidJavaObject javaObject) : base("android.lang.Object", javaObject) + { + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeObject.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeObject.cs.meta new file mode 100644 index 00000000..58eced72 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: afd3edefd056c4b6d8d745b6a97dee1e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeParcel.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeParcel.cs new file mode 100644 index 00000000..25e9d6c0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeParcel.cs @@ -0,0 +1,13 @@ +#if UNITY_ANDROID +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeParcel : NativeAndroidJavaObjectWrapper + { + public NativeParcel(AndroidJavaObject javaObject) : base("android.os.Parcel", javaObject) + { + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeParcel.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeParcel.cs.meta new file mode 100644 index 00000000..3f3178e0 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeParcel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0785fa9caa0d44034a62ff5fb58ad1a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePoint.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePoint.cs new file mode 100644 index 00000000..b7e53d08 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePoint.cs @@ -0,0 +1,134 @@ +#if UNITY_ANDROID +using UnityEngine; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativePoint : NativeAndroidJavaObjectWrapper + { + #region Static properties + + private static AndroidJavaClass m_nativeClass; + + #endregion + #region Public properties + + public int X + { + get + { + return Get("x"); + } + + set + { + Set("x", value); + } + } + + + public int Y + { + get + { + return Get("y"); + } + + set + { + Set("y", value); + } + } + + + public const int CONTENTS_FILE_DESCRIPTOR = 1; + + public const int PARCELABLE_WRITE_RETURN_VALUE = 1; + + #endregion + + #region Constructor + + // Wrapper constructors + public NativePoint(AndroidJavaObject androidJavaObject) : base(Native.kClassName, androidJavaObject) + { + } + + public NativePoint(NativeAndroidJavaObjectWrapper wrapper) : base(wrapper) + { + } + + public NativePoint() : base(Native.kClassName) + { + } + +#if NATIVE_PLUGINS_DEBUG_ENABLED + ~NativePoint() + { + DebugLogger.Log("Disposing NativePoint"); + } +#endif + #endregion + #region Static methods + private static AndroidJavaClass GetClass() + { + if (m_nativeClass == null) + { + m_nativeClass = new AndroidJavaClass(Native.kClassName); + } + return m_nativeClass; + } + + #endregion + #region Public methods + + public int DescribeContents() + { + return Call(Native.Method.kDescribeContents); + } + public bool Equals(NativeObject arg0) + { + return Call(Native.Method.kEquals, arg0.NativeObject); + } + public int HashCode() + { + return Call(Native.Method.kHashCode); + } + public void ReadFromParcel(NativeParcel arg0) + { + Call(Native.Method.kReadFromParcel, arg0.NativeObject); + } + public void Set(int arg0, int arg1) + { + Call(Native.Method.kSet, arg0, arg1); + } + public new string ToString() + { + return Call(Native.Method.kToString); + } + public void WriteToParcel(NativeParcel arg0, int arg1) + { + Call(Native.Method.kWriteToParcel, arg0.NativeObject, arg1); + } + + #endregion + + internal class Native + { + internal const string kClassName = "android.graphics.Point"; + + internal class Method + { + internal const string kToString = "toString"; + internal const string kHashCode = "hashCode"; + internal const string kWriteToParcel = "writeToParcel"; + internal const string kReadFromParcel = "readFromParcel"; + internal const string kEquals = "equals"; + internal const string kDescribeContents = "describeContents"; + internal const string kSet = "set"; + } + + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePoint.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePoint.cs.meta new file mode 100644 index 00000000..ac833463 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db32d3ddeecf34f5ea9b94f4b917a45c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePointF.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePointF.cs new file mode 100644 index 00000000..d7bcfba5 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePointF.cs @@ -0,0 +1,134 @@ +#if UNITY_ANDROID +using UnityEngine; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativePointF : NativeAndroidJavaObjectWrapper + { + #region Static properties + + private static AndroidJavaClass m_nativeClass; + + #endregion + #region Public properties + + public float X + { + get + { + return Get("x"); + } + + set + { + Set("x", value); + } + } + + + public float Y + { + get + { + return Get("y"); + } + + set + { + Set("y", value); + } + } + + + public const int CONTENTS_FILE_DESCRIPTOR = 1; + + public const int PARCELABLE_WRITE_RETURN_VALUE = 1; + + #endregion + + #region Constructor + + // Wrapper constructors + public NativePointF(AndroidJavaObject androidJavaObject) : base(Native.kClassName, androidJavaObject) + { + } + + public NativePointF(NativeAndroidJavaObjectWrapper wrapper) : base(wrapper) + { + } + + public NativePointF() : base(Native.kClassName) + { + } + +#if NATIVE_PLUGINS_DEBUG_ENABLED + ~NativePointF() + { + DebugLogger.Log("Disposing NativePointF"); + } +#endif + #endregion + #region Static methods + private static AndroidJavaClass GetClass() + { + if (m_nativeClass == null) + { + m_nativeClass = new AndroidJavaClass(Native.kClassName); + } + return m_nativeClass; + } + public static float Length(float arg0, float arg1) + { + return GetClass().CallStatic(Native.Method.kLength, arg0, arg1); + } + + #endregion + #region Public methods + + public int DescribeContents() + { + return Call(Native.Method.kDescribeContents); + } + public bool Equals(NativeObject arg0) + { + return Call(Native.Method.kEquals, arg0.NativeObject); + } + public int HashCode() + { + return Call(Native.Method.kHashCode); + } + public void ReadFromParcel(NativeParcel arg0) + { + Call(Native.Method.kReadFromParcel, arg0.NativeObject); + } + public new string ToString() + { + return Call(Native.Method.kToString); + } + public void WriteToParcel(NativeParcel arg0, int arg1) + { + Call(Native.Method.kWriteToParcel, arg0.NativeObject, arg1); + } + + #endregion + + internal class Native + { + internal const string kClassName = "android.graphics.PointF"; + + internal class Method + { + internal const string kToString = "toString"; + internal const string kHashCode = "hashCode"; + internal const string kWriteToParcel = "writeToParcel"; + internal const string kReadFromParcel = "readFromParcel"; + internal const string kLength = "length"; + internal const string kEquals = "equals"; + internal const string kDescribeContents = "describeContents"; + } + + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePointF.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePointF.cs.meta new file mode 100644 index 00000000..fd4549af --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativePointF.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13fbbbdbad7ee4ed1985df4da7241a58 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeProxy.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeProxy.cs new file mode 100644 index 00000000..86c5288e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeProxy.cs @@ -0,0 +1,31 @@ +#if UNITY_ANDROID +using System; +using UnityEngine; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public abstract class NativeProxyBase : AndroidJavaProxy + { + public NativeProxyBase(string interfaceName) : base(interfaceName) + { + } + + protected void DispatchOnMainThread(Callback action) + { + // Dispatch on Unity Thread + CallbackDispatcher.InvokeOnMainThread(action); + } + } + + public class NativeProxy : NativeProxyBase + { + protected T m_callback; + + public NativeProxy(T m_callback, string interfaceName) : base(interfaceName) + { + this.m_callback = m_callback; + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeProxy.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeProxy.cs.meta new file mode 100644 index 00000000..af1623e3 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeProxy.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d05d6febe7ca94928964d47f5efe9c13 +timeCreated: 1547810936 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRect.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRect.cs new file mode 100644 index 00000000..f24c9d25 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRect.cs @@ -0,0 +1,299 @@ +#if UNITY_ANDROID +using UnityEngine; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeRect : NativeAndroidJavaObjectWrapper + { + #region Static properties + + private static AndroidJavaClass m_nativeClass; + + #endregion + #region Public properties + + public int Bottom + { + get + { + return Get("bottom"); + } + + set + { + Set("bottom", value); + } + } + + + public int Left + { + get + { + return Get("left"); + } + + set + { + Set("left", value); + } + } + + + public int Right + { + get + { + return Get("right"); + } + + set + { + Set("right", value); + } + } + + + public int Top + { + get + { + return Get("top"); + } + + set + { + Set("top", value); + } + } + + + public const int CONTENTS_FILE_DESCRIPTOR = 1; + + public const int PARCELABLE_WRITE_RETURN_VALUE = 1; + + #endregion + + #region Constructor + + // Wrapper constructors + public NativeRect(AndroidJavaObject androidJavaObject) : base(Native.kClassName, androidJavaObject) + { + } + + public NativeRect(NativeAndroidJavaObjectWrapper wrapper) : base(wrapper) + { + } + + public NativeRect() : base(Native.kClassName) + { + } + +#if NATIVE_PLUGINS_DEBUG_ENABLED + ~NativeRect() + { + DebugLogger.Log("Disposing NativeRect"); + } +#endif + #endregion + #region Static methods + private static AndroidJavaClass GetClass() + { + if (m_nativeClass == null) + { + m_nativeClass = new AndroidJavaClass(Native.kClassName); + } + return m_nativeClass; + } + public static bool Intersects(NativeRect arg0, NativeRect arg1) + { + return GetClass().CallStatic(Native.Method.kIntersects, arg0.NativeObject, arg1.NativeObject); + } + public static NativeRect UnflattenFromString(string arg0) + { + AndroidJavaObject nativeObj = GetClass().CallStatic(Native.Method.kUnflattenFromString, arg0); + if(nativeObj != null) + { + NativeRect data = new NativeRect(nativeObj); + return data; + } + else + { + return default(NativeRect); + } + } + + #endregion + #region Public methods + + public int CenterX() + { + return Call(Native.Method.kCenterX); + } + public int CenterY() + { + return Call(Native.Method.kCenterY); + } + public bool Contains(int arg0, int arg1) + { + return Call(Native.Method.kContains, arg0, arg1); + } + public bool Contains(int arg0, int arg1, int arg2, int arg3) + { + return Call(Native.Method.kContains, arg0, arg1, arg2, arg3); + } + public bool Contains(NativeRect arg0) + { + return Call(Native.Method.kContains, arg0.NativeObject); + } + public int DescribeContents() + { + return Call(Native.Method.kDescribeContents); + } + public bool Equals(NativeObject arg0) + { + return Call(Native.Method.kEquals, arg0.NativeObject); + } + public float ExactCenterX() + { + return Call(Native.Method.kExactCenterX); + } + public float ExactCenterY() + { + return Call(Native.Method.kExactCenterY); + } + public string FlattenToString() + { + return Call(Native.Method.kFlattenToString); + } + public int HashCode() + { + return Call(Native.Method.kHashCode); + } + public int Height() + { + return Call(Native.Method.kHeight); + } + public void Inset(int arg0, int arg1) + { + Call(Native.Method.kInset, arg0, arg1); + } + public bool Intersect(NativeRect arg0) + { + return Call(Native.Method.kIntersect, arg0.NativeObject); + } + public bool Intersect(int arg0, int arg1, int arg2, int arg3) + { + return Call(Native.Method.kIntersect, arg0, arg1, arg2, arg3); + } + public bool Intersects(int arg0, int arg1, int arg2, int arg3) + { + return Call(Native.Method.kIntersects, arg0, arg1, arg2, arg3); + } + public bool IsEmpty() + { + return Call(Native.Method.kIsEmpty); + } + public void Offset(int arg0, int arg1) + { + Call(Native.Method.kOffset, arg0, arg1); + } + public void OffsetTo(int arg0, int arg1) + { + Call(Native.Method.kOffsetTo, arg0, arg1); + } + public void ReadFromParcel(NativeParcel arg0) + { + Call(Native.Method.kReadFromParcel, arg0.NativeObject); + } + public void Set(int arg0, int arg1, int arg2, int arg3) + { + Call(Native.Method.kSet, arg0, arg1, arg2, arg3); + } + public void Set(NativeRect arg0) + { + Call(Native.Method.kSet, arg0.NativeObject); + } + public void SetEmpty() + { + Call(Native.Method.kSetEmpty); + } + public bool SetIntersect(NativeRect arg0, NativeRect arg1) + { + return Call(Native.Method.kSetIntersect, arg0.NativeObject, arg1.NativeObject); + } + public void Sort() + { + Call(Native.Method.kSort); + } + public string ToShortString() + { + return Call(Native.Method.kToShortString); + } + public new string ToString() + { + return Call(Native.Method.kToString); + } + public void Union(int arg0, int arg1, int arg2, int arg3) + { + Call(Native.Method.kUnion, arg0, arg1, arg2, arg3); + } + public void Union(NativeRect arg0) + { + Call(Native.Method.kUnion, arg0.NativeObject); + } + public void Union(int arg0, int arg1) + { + Call(Native.Method.kUnion, arg0, arg1); + } + public int Width() + { + return Call(Native.Method.kWidth); + } + public void WriteToParcel(NativeParcel arg0, int arg1) + { + Call(Native.Method.kWriteToParcel, arg0.NativeObject, arg1); + } + + #endregion + + internal class Native + { + internal const string kClassName = "android.graphics.Rect"; + + internal class Method + { + internal const string kToString = "toString"; + internal const string kContains = "contains"; + internal const string kHashCode = "hashCode"; + internal const string kSetEmpty = "setEmpty"; + internal const string kOffsetTo = "offsetTo"; + internal const string kExactCenterX = "exactCenterX"; + internal const string kExactCenterY = "exactCenterY"; + internal const string kSetIntersect = "setIntersect"; + internal const string kWriteToParcel = "writeToParcel"; + internal const string kToShortString = "toShortString"; + internal const string kUnflattenFromString = "unflattenFromString"; + internal const string kIsEmpty = "isEmpty"; + internal const string kCenterX = "centerX"; + internal const string kCenterY = "centerY"; + internal const string kIntersects = "intersects"; + internal const string kIntersect = "intersect"; + internal const string kReadFromParcel = "readFromParcel"; + internal const string kFlattenToString = "flattenToString"; + internal const string kHeight = "height"; + internal const string kOffset = "offset"; + internal const string kEquals = "equals"; + internal const string kDescribeContents = "describeContents"; + internal const string kWidth = "width"; + internal const string kUnion = "union"; + internal const string kInset = "inset"; + internal const string kSort = "sort"; + internal const string kSet = "set"; + } + + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRect.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRect.cs.meta new file mode 100644 index 00000000..390c3821 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRect.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a6ff68bdc3ecd4704a99099727d6678a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRectF.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRectF.cs new file mode 100644 index 00000000..c6e02272 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRectF.cs @@ -0,0 +1,260 @@ +#if UNITY_ANDROID +using UnityEngine; +using VoxelBusters.CoreLibrary; +using VoxelBusters.CoreLibrary.NativePlugins.Android; + +namespace VoxelBusters.EasyMLKit.NativePlugins.Android +{ + public class NativeRectF : NativeAndroidJavaObjectWrapper + { + #region Static properties + + private static AndroidJavaClass m_nativeClass; + + #endregion + #region Public properties + + public float Bottom + { + get + { + return Get("bottom"); + } + + set + { + Set("bottom", value); + } + } + + + public float Left + { + get + { + return Get("left"); + } + + set + { + Set("left", value); + } + } + + + public float Right + { + get + { + return Get("right"); + } + + set + { + Set("right", value); + } + } + + + public float Top + { + get + { + return Get("top"); + } + + set + { + Set("top", value); + } + } + + + public const int CONTENTS_FILE_DESCRIPTOR = 1; + + public const int PARCELABLE_WRITE_RETURN_VALUE = 1; + + #endregion + + #region Constructor + + // Wrapper constructors + public NativeRectF(AndroidJavaObject androidJavaObject) : base(Native.kClassName, androidJavaObject) + { + } + + public NativeRectF(NativeAndroidJavaObjectWrapper wrapper) : base(wrapper) + { + } + + public NativeRectF() : base(Native.kClassName) + { + } + +#if NATIVE_PLUGINS_DEBUG + ~NativeRectF() + { + DebugLogger.Log("Disposing NativeRectF"); + } +#endif + #endregion + #region Static methods + private static AndroidJavaClass GetClass() + { + if (m_nativeClass == null) + { + m_nativeClass = new AndroidJavaClass(Native.kClassName); + } + return m_nativeClass; + } + public static bool Intersects(NativeRectF arg0, NativeRectF arg1) + { + return GetClass().CallStatic(Native.Method.kIntersects, arg0.NativeObject, arg1.NativeObject); + } + + #endregion + #region Public methods + + public bool Contains(NativeRectF arg0) + { + return Call(Native.Method.kContains, arg0.NativeObject); + } + public bool Contains(float arg0, float arg1) + { + return Call(Native.Method.kContains, arg0, arg1); + } + public bool Contains(float arg0, float arg1, float arg2, float arg3) + { + return Call(Native.Method.kContains, arg0, arg1, arg2, arg3); + } + public int DescribeContents() + { + return Call(Native.Method.kDescribeContents); + } + public bool Equals(NativeObject arg0) + { + return Call(Native.Method.kEquals, arg0.NativeObject); + } + public int HashCode() + { + return Call(Native.Method.kHashCode); + } + public void Inset(float arg0, float arg1) + { + Call(Native.Method.kInset, arg0, arg1); + } + public bool Intersect(float arg0, float arg1, float arg2, float arg3) + { + return Call(Native.Method.kIntersect, arg0, arg1, arg2, arg3); + } + public bool Intersect(NativeRectF arg0) + { + return Call(Native.Method.kIntersect, arg0.NativeObject); + } + public bool Intersects(float arg0, float arg1, float arg2, float arg3) + { + return Call(Native.Method.kIntersects, arg0, arg1, arg2, arg3); + } + public void Offset(float arg0, float arg1) + { + Call(Native.Method.kOffset, arg0, arg1); + } + public void OffsetTo(float arg0, float arg1) + { + Call(Native.Method.kOffsetTo, arg0, arg1); + } + public void ReadFromParcel(NativeParcel arg0) + { + Call(Native.Method.kReadFromParcel, arg0.NativeObject); + } + public void Round(NativeRect arg0) + { + Call(Native.Method.kRound, arg0.NativeObject); + } + public void RoundOut(NativeRect arg0) + { + Call(Native.Method.kRoundOut, arg0.NativeObject); + } + public void Set(NativeRectF arg0) + { + Call(Native.Method.kSet, arg0.NativeObject); + } + public void Set(NativeRect arg0) + { + Call(Native.Method.kSet, arg0.NativeObject); + } + public void Set(float arg0, float arg1, float arg2, float arg3) + { + Call(Native.Method.kSet, arg0, arg1, arg2, arg3); + } + public void SetEmpty() + { + Call(Native.Method.kSetEmpty); + } + public bool SetIntersect(NativeRectF arg0, NativeRectF arg1) + { + return Call(Native.Method.kSetIntersect, arg0.NativeObject, arg1.NativeObject); + } + public void Sort() + { + Call(Native.Method.kSort); + } + public string ToShortString() + { + return Call(Native.Method.kToShortString); + } + public new string ToString() + { + return Call(Native.Method.kToString); + } + public void Union(float arg0, float arg1, float arg2, float arg3) + { + Call(Native.Method.kUnion, arg0, arg1, arg2, arg3); + } + public void Union(float arg0, float arg1) + { + Call(Native.Method.kUnion, arg0, arg1); + } + public void Union(NativeRectF arg0) + { + Call(Native.Method.kUnion, arg0.NativeObject); + } + public void WriteToParcel(NativeParcel arg0, int arg1) + { + Call(Native.Method.kWriteToParcel, arg0.NativeObject, arg1); + } + + #endregion + + internal class Native + { + internal const string kClassName = "android.graphics.RectF"; + + internal class Method + { + internal const string kToString = "toString"; + internal const string kContains = "contains"; + internal const string kHashCode = "hashCode"; + internal const string kRoundOut = "roundOut"; + internal const string kSetEmpty = "setEmpty"; + internal const string kOffsetTo = "offsetTo"; + internal const string kSetIntersect = "setIntersect"; + internal const string kWriteToParcel = "writeToParcel"; + internal const string kToShortString = "toShortString"; + internal const string kIntersects = "intersects"; + internal const string kIntersect = "intersect"; + internal const string kReadFromParcel = "readFromParcel"; + internal const string kOffset = "offset"; + internal const string kEquals = "equals"; + internal const string kDescribeContents = "describeContents"; + internal const string kRound = "round"; + internal const string kUnion = "union"; + internal const string kInset = "inset"; + internal const string kSort = "sort"; + internal const string kSet = "set"; + } + + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRectF.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRectF.cs.meta new file mode 100644 index 00000000..3804e726 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeRectF.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f34ff82721d3e4f89be31b14ff23c1d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeUnityPluginUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeUnityPluginUtility.cs new file mode 100644 index 00000000..d3c6a74c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeUnityPluginUtility.cs @@ -0,0 +1,72 @@ +#if UNITY_ANDROID +using UnityEngine; +using System.Collections.Generic; +using System; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeUnityPluginUtility + { + private static AndroidJavaObject s_context = null; + private static NativeContext s_nativeContext = null; + private static NativeActivity s_nativeActivity = null; + private static NativeViewGroup s_decorRootView = null; + + public static NativeActivity GetActivity() + { + if(s_nativeActivity == null) + { + s_nativeActivity = new NativeActivity(GetUnityActivity()); + } + return s_nativeActivity; + } + + public static NativeContext GetContext() + { + if (s_nativeContext == null) + { + s_nativeContext = new NativeContext(GetUnityActivity()); + } + return s_nativeContext; + } + + public static To[] Map(List fromList) + { + List list = new List(); + foreach (From each in fromList) + { + list.Add((To)Activator.CreateInstance(typeof(To), new object[] { each })); + } + + return list.ToArray(); + } + + public static NativeViewGroup GetDecorRootView() + { + if(s_decorRootView == null) + { + AndroidJavaObject activity = GetUnityActivity(); + AndroidJavaObject window = activity.Call("getWindow"); + AndroidJavaObject decorView = window.Call("getDecorView"); + AndroidJavaObject rootView = decorView.Call("getRootView"); + s_decorRootView = new NativeViewGroup(rootView); + } + + return s_decorRootView; + } + + private static AndroidJavaObject GetUnityActivity() + { + if (s_context == null) + { + AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); + s_context = jc.GetStatic("currentActivity"); + } + return s_context; + } + + //Get root view group + } +} +#endif + \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeUnityPluginUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeUnityPluginUtility.cs.meta new file mode 100644 index 00000000..34894f7d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeUnityPluginUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20cb40962cc9d49309f241198d4206a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeViewGroup.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeViewGroup.cs new file mode 100644 index 00000000..52f3ca0c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeViewGroup.cs @@ -0,0 +1,13 @@ +#if UNITY_ANDROID +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public class NativeViewGroup : NativeAndroidJavaObjectWrapper + { + public NativeViewGroup(AndroidJavaObject javaObject) : base("android.view.ViewGroup", javaObject) + { + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeViewGroup.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeViewGroup.cs.meta new file mode 100644 index 00000000..505dc080 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/NativeViewGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 25053421ab095450496f748113f49af3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/Utility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/Utility.cs new file mode 100644 index 00000000..1ffa27f4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/Utility.cs @@ -0,0 +1,50 @@ +#if UNITY_ANDROID +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins.Android +{ + public static class Utility + { + public static sbyte[] ToSBytes(this byte[] from) + { + if (from == null) + return null; + + return (sbyte[])(Array)from; + } + + public static byte[] ToBytes(this sbyte[] from) + { + if (from == null) + return null; + + return (byte[])(Array)from; + } + + public static Color GetColor(this AndroidJavaObject nativeObject) + { + float red = nativeObject.Call("getRed") / 255; + float green = nativeObject.Call("getRed") / 255; + float blue = nativeObject.Call("getRed") / 255; + float alpha = nativeObject.Call("alpha") / 255.0f; + + return new Color(red, green, blue, alpha); + } + + public static void TakeScreenshot(Action callback) + { + SurrogateCoroutine.WaitForEndOfFrameAndInvoke(() => + { + Texture2D texture = ScreenCapture.CaptureScreenshotAsTexture(); + string mimeType; + byte[] data = texture.Encode(TextureEncodingFormat.JPG, out mimeType); + callback(data, mimeType); + }); + } + } +} +#endif \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/Utility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/Utility.cs.meta new file mode 100644 index 00000000..a9de1549 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/Common/Utility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a199715aa7deb4eadb5522575b05e8ff +timeCreated: 1547729646 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/VoxelBusters.CoreLibrary.NativePlugins.AndroidModule.asmdef b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/VoxelBusters.CoreLibrary.NativePlugins.AndroidModule.asmdef new file mode 100644 index 00000000..7027d274 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/VoxelBusters.CoreLibrary.NativePlugins.AndroidModule.asmdef @@ -0,0 +1,18 @@ +{ + "name": "VoxelBusters.CoreLibrary.NativePlugins.AndroidModule", + "references": [ + "VoxelBusters.CoreLibrary", + "VoxelBusters.CoreLibrary.NativePlugins" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Android", + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/VoxelBusters.CoreLibrary.NativePlugins.AndroidModule.asmdef.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/VoxelBusters.CoreLibrary.NativePlugins.AndroidModule.asmdef.meta new file mode 100644 index 00000000..71ad17bc --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Android/VoxelBusters.CoreLibrary.NativePlugins.AndroidModule.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 347661ae03c1d4bb2a47971c48c56a6c +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/AssemblyInfo.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/AssemblyInfo.cs new file mode 100644 index 00000000..32027a9c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/AssemblyInfo.cs @@ -0,0 +1,20 @@ +using System.Runtime.CompilerServices; + +// make it visible for internal modules +[assembly: InternalsVisibleTo("VoxelBusters.CoreLibrary.NativePlugins.iOSModule")] +[assembly: InternalsVisibleTo("VoxelBusters.CoreLibrary.Editor.NativePlugins")] + +[assembly: InternalsVisibleTo("VoxelBusters.EssentialKit")] +[assembly: InternalsVisibleTo("VoxelBusters.EssentialKit.Editor")] +[assembly: InternalsVisibleTo("VoxelBusters.EssentialKit.iOSModule")] +[assembly: InternalsVisibleTo("VoxelBusters.EssentialKit.AndroidModule")] +[assembly: InternalsVisibleTo("VoxelBusters.EssentialKit.SimulatorModule")] + +[assembly: InternalsVisibleTo("VoxelBusters.ScreenRecorderKit")] +[assembly: InternalsVisibleTo("VoxelBusters.ScreenRecorderKit.Editor")] +[assembly: InternalsVisibleTo("VoxelBusters.ScreenRecorderKit.iOSModule")] +[assembly: InternalsVisibleTo("VoxelBusters.ScreenRecorderKit.AndroidModule")] + + +[assembly: InternalsVisibleTo("VoxelBusters.EasyMLKit")] +[assembly: InternalsVisibleTo("VoxelBusters.EasyMLKit.Editor")] \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/AssemblyInfo.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/AssemblyInfo.cs.meta new file mode 100644 index 00000000..c3de40b2 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0cb462a3026a542da8abdc2eaa87b069 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core.meta new file mode 100644 index 00000000..fff3883d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0c7936da04c2c44be8c241463590eeec +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base.meta new file mode 100644 index 00000000..2201394c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2362ac1fb376448ec8ba7dd5f704b848 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureActivator.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureActivator.cs new file mode 100644 index 00000000..7e26b14a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureActivator.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public static class NativeFeatureActivator + { + #region Static properties + + public static INativeFeatureInterfaceProvider InterfaceProvider { get; set; } + + #endregion + + #region Static methods + + public static TFeatureInterface CreateInterface(NativeFeatureRuntimeConfiguration runtimeConfiguration, bool isAvailable, params object[] args) where TFeatureInterface : INativeFeatureInterface + { + Assert.IsArgNotNull(runtimeConfiguration, "packageConfiguration"); + + object interfaceObject = null; + if (isAvailable) + { + var currentPlatform = Application.platform; + + // try creating interface object using custom interface provider + if (InterfaceProvider != null) + { + interfaceObject = InterfaceProvider.CreateInterface(typeof(TFeatureInterface), currentPlatform); + } + + // incase if no implementation is found, system retracts to default activation methods + if (interfaceObject == null) + { + var packageType = runtimeConfiguration.GetPackageForPlatform(currentPlatform); + if (packageType != null) + { + interfaceObject = CreateInstance(packageType.Assembly, packageType.NativeInterfaceType, args); + } + } + } + + // fallback case, create default type object incase if specified type is not found + if (interfaceObject == null) + { + var packageType = runtimeConfiguration.FallbackPackage; + interfaceObject = CreateInstance(packageType.Assembly, packageType.NativeInterfaceType, args); + } + + DebugLogger.Log(CoreLibraryDomain.NativePlugins, $"Created native interface of type: {interfaceObject}"); + return (TFeatureInterface)interfaceObject; + } + + public static TFeatureInterface CreateNativeInterfaceComponent(this GameObject gameObject, NativeFeatureRuntimeConfiguration runtimeConfiguration, bool isEnabled) where TFeatureInterface : INativeFeatureInterface + { + object interfaceObject = null; + if (isEnabled) + { + var targetPackage = runtimeConfiguration.GetPackageForPlatform(Application.platform); + var targetType = ReflectionUtility.GetType(assemblyName: targetPackage.Assembly, typeName: targetPackage.NativeInterfaceType); + interfaceObject = gameObject.AddComponent(targetType); + } + + // fallback case, create default type object incase if specified type is not found + if (interfaceObject == null) + { + var fallbackPackage = runtimeConfiguration.FallbackPackage; + var fallbackType = ReflectionUtility.GetType(assemblyName: fallbackPackage.Assembly, typeName: fallbackPackage.NativeInterfaceType); + interfaceObject = gameObject.AddComponent(fallbackType); + } + + return (TFeatureInterface)interfaceObject; + } + + #endregion + + #region Private static methods + + private static object CreateInstance(string assemblyName, string typeName, object[] arguments) + { + Type targetType = null; + try + { + targetType = ReflectionUtility.GetType(assemblyName, typeName); + if (targetType == null) + { + targetType = ReflectionUtility.GetTypeFromAssemblyCSharp(typeName, includeFirstPass: true); + } + + if (arguments == null) + { + return ReflectionUtility.CreateInstance(targetType); + } + else + { + return ReflectionUtility.CreateInstance(targetType, arguments); + } + } + catch (Exception e) + { + DebugLogger.LogError(CoreLibraryDomain.NativePlugins, $"Failed when creating instance. Assembly: {assemblyName} Type: {typeName} TargetType: {targetType} Error: {e.InnerException?.Message ?? e.Message}"); + return null; + } + } + + #endregion + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureActivator.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureActivator.cs.meta new file mode 100644 index 00000000..dd6886b9 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureActivator.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b3904366438314c5fb0a7422a5622022 +timeCreated: 1582637352 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureBehaviour.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureBehaviour.cs new file mode 100644 index 00000000..c603047a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureBehaviour.cs @@ -0,0 +1,86 @@ +using System; +using System.Reflection; +using System.Collections.Generic; +using UnityEngine; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public abstract class NativeFeatureBehaviour : MonoBehaviour + { + #region Fields + + private bool m_isInitialised = false; + + #endregion + + #region Abstract methods + + public abstract bool IsAvailable(); + + protected abstract string GetFeatureName(); + + #endregion + + #region Static methods + + public static T CreateInstance(string name = "GameObject") where T : NativeFeatureBehaviour + { + return CreateInstanceInternal(name, null); + } + + protected static T CreateInstanceInternal(string name, params object[] args) where T : NativeFeatureBehaviour + { + T instance = new GameObject(name).AddComponent(); + instance.AwakeInternal(args); + + return instance; + } + + #endregion + + #region Unity methods + + private void Awake() + { } + + private void Start() + { + // check feature availablity + if (!IsAvailable()) + { + Diagnostics.LogNotSupported(featureName: GetFeatureName()); + return; + } + + StartInternal(); + } + + protected void OnDestroy() + { + DebugLogger.Log(CoreLibraryDomain.NativePlugins, $"Destroying native feature behaviour: {name}."); + DestroyInternal(); + } + + #endregion + + #region Lifecycle methods + + protected virtual void AwakeInternal(object[] args) + { + // check component status + Assert.IsFalse(m_isInitialised, "Initialisation error"); + + // update state + m_isInitialised = true; + } + + protected virtual void StartInternal() + { } + + protected virtual void DestroyInternal() + { } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureBehaviour.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureBehaviour.cs.meta new file mode 100644 index 00000000..b68492e5 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureBehaviour.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 767f56cafb4a049cf86968c934f05dde +timeCreated: 1576506889 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureInterfaceBase.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureInterfaceBase.cs new file mode 100644 index 00000000..a99d3884 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureInterfaceBase.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public abstract class NativeFeatureInterfaceBase : NativeObjectBase, INativeFeatureInterface + { + #region Constructors + + protected NativeFeatureInterfaceBase(bool isAvailable, NativeObjectRef nativeObjectRef = null) + : base(nativeObjectRef) + { + // set properties + IsAvailable = isAvailable; + } + + ~NativeFeatureInterfaceBase() + { + Dispose(false); + } + + #endregion + + #region INativeFeatureInterface implementation + + public bool IsAvailable + { + get; + private set; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureInterfaceBase.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureInterfaceBase.cs.meta new file mode 100644 index 00000000..374dad2f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureInterfaceBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4668d85eaef144adaa92aee7bc630781 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimeConfiguration.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimeConfiguration.cs new file mode 100644 index 00000000..d4332659 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimeConfiguration.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public class NativeFeatureRuntimeConfiguration + { + #region Properties + + public NativeFeatureRuntimePackage[] Packages { get; private set; } + + public NativeFeatureRuntimePackage SimulatorPackage { get; private set; } + + public NativeFeatureRuntimePackage FallbackPackage { get; private set; } + + #endregion + + #region Constructors + + public NativeFeatureRuntimeConfiguration(NativeFeatureRuntimePackage[] packages, NativeFeatureRuntimePackage simulatorPackage = null, + NativeFeatureRuntimePackage fallbackPackage = null) + { + // Set properties + Packages = packages; + SimulatorPackage = simulatorPackage; + FallbackPackage = fallbackPackage; + } + + #endregion + + #region Public methods + + public NativeFeatureRuntimePackage GetPackageForPlatform(RuntimePlatform platform) + { + switch (platform) + { + case RuntimePlatform.OSXEditor: + case RuntimePlatform.WindowsEditor: + case RuntimePlatform.LinuxEditor: + return SimulatorPackage; + + default: + return Array.Find(Packages, (item) => item.SupportsPlatform(platform)); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimeConfiguration.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimeConfiguration.cs.meta new file mode 100644 index 00000000..1d762377 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimeConfiguration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f7b35262a6654f8793a5bc9ddee1a22 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimePackage.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimePackage.cs new file mode 100644 index 00000000..baafad29 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimePackage.cs @@ -0,0 +1,153 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + [System.Serializable] + public class NativeFeatureRuntimePackage + { + #region Fields + + private readonly RuntimePlatform[] m_platforms; + + private readonly string m_custom; + + #endregion + + #region Properties + + public string Assembly { get; private set; } + + public string Namespace { get; private set; } + + public string NativeInterfaceType { get; private set; } + + public string[] BindingTypes { get; private set; } + + #endregion + + #region Constructors + + private NativeFeatureRuntimePackage(string assembly, string ns, + string nativeInterfaceType, string[] bindingTypes = null, + string custom = null, params RuntimePlatform[] platforms) + { + // Set properties + m_platforms = platforms; + m_custom = custom; + Assembly = assembly; + Namespace = ns; + NativeInterfaceType = GetTypeFullName(ns, nativeInterfaceType); + BindingTypes = (bindingTypes != null) + ? System.Array.ConvertAll(bindingTypes, (type) => GetTypeFullName(ns, type)) + : new string[0]; + } + + #endregion + + #region Static methods + + public static NativeFeatureRuntimePackage Generic(string assembly, string ns, + string nativeInterfaceType, string[] bindingTypes = null) + { + return new NativeFeatureRuntimePackage( + assembly: assembly, + ns: ns, + nativeInterfaceType: nativeInterfaceType, + bindingTypes: bindingTypes); + } + + public static NativeFeatureRuntimePackage Android(string assembly, string ns, + string nativeInterfaceType, string[] bindingTypes = null) + { + return new NativeFeatureRuntimePackage( + assembly: assembly, + ns: ns, + nativeInterfaceType: nativeInterfaceType, + bindingTypes: bindingTypes, + platforms: RuntimePlatform.Android); + } + + public static NativeFeatureRuntimePackage IPhonePlayer(string assembly, string ns, + string nativeInterfaceType, string[] bindingTypes = null) + { + return new NativeFeatureRuntimePackage( + assembly: assembly, + ns: ns, + nativeInterfaceType: nativeInterfaceType, + bindingTypes: bindingTypes, + platforms: RuntimePlatform.IPhonePlayer); + } + + public static NativeFeatureRuntimePackage TvOS(string assembly, string ns, + string nativeInterfaceType, string[] bindingTypes = null) + { + return new NativeFeatureRuntimePackage( + assembly: assembly, + ns: ns, + nativeInterfaceType: nativeInterfaceType, + bindingTypes: bindingTypes, + platforms: RuntimePlatform.tvOS); + } + + public static NativeFeatureRuntimePackage iOS(string assembly, string ns, + string nativeInterfaceType, string[] bindingTypes = null) + { + return new NativeFeatureRuntimePackage( + assembly: assembly, + ns: ns, + nativeInterfaceType: nativeInterfaceType, + bindingTypes: bindingTypes, + platforms: new RuntimePlatform[] { RuntimePlatform.IPhonePlayer, RuntimePlatform.tvOS }); + } + + public static NativeFeatureRuntimePackage Custom(string custom, string assembly, + string ns, string nativeInterfaceType, + string[] bindingTypes = null) + { + return new NativeFeatureRuntimePackage( + assembly: assembly, + ns: ns, + nativeInterfaceType: nativeInterfaceType, + bindingTypes: bindingTypes, + custom: custom); + } + + private static string GetTypeFullName(string ns, string type) => $"{ns}.{type}"; + + #endregion + + #region Public methods + + public System.Type[] GetBindingTypeReferences() + { + var assembly = ReflectionUtility.FindAssemblyWithName(Assembly); + return System.Array.ConvertAll(BindingTypes, (item) => + { + System.Type type = assembly.GetType(item); + if(type == null) + { + DebugLogger.LogError($"Expected type missing for {item}. Contact developer."); + } + return type; + }); + } + + public bool IsMatch(RuntimePlatform platform, string custom) + { + if ((custom != null) && string.Equals(m_custom, custom)) + { + return true; + } + return SupportsPlatform(platform); + } + + public bool SupportsPlatform(RuntimePlatform platform) + { + return (m_platforms == null) || System.Array.Exists(m_platforms, (value) => (value == platform)); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimePackage.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimePackage.cs.meta new file mode 100644 index 00000000..5e7cb1af --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureRuntimePackage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5da41611b7e7b47fdbf18a8ec6cb3c0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionDefinition.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionDefinition.cs new file mode 100644 index 00000000..743846de --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionDefinition.cs @@ -0,0 +1,78 @@ +using System.Collections; +using System.Collections.Generic; +using System; +using UnityEngine; +using UnityEngine.Serialization; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + [Serializable] + public class NativeFeatureUsagePermissionDefinition + { + #region Fields + + [SerializeField] + private string m_description; + + [SerializeField] + private RuntimePlatformConstantSet m_descriptionOverrides; + + #endregion + + #region Constructors + + public NativeFeatureUsagePermissionDefinition(string description = null, RuntimePlatformConstantSet descriptionOverrides = null) + { + // set properties + m_description = description; + m_descriptionOverrides = descriptionOverrides ?? new RuntimePlatformConstantSet(); + } + + #endregion + + #region Public methods + + public string GetDescriptionForActivePlatform() + { + return GetDescription(ApplicationServices.GetActiveOrSimulationPlatform()); + } + + public string GetDescription(RuntimePlatform platform) + { + // check whether overrides are available + string targetValue = m_descriptionOverrides.GetConstantForPlatform(platform, m_description); + if (targetValue == null) + { + DebugLogger.LogError(CoreLibraryDomain.NativePlugins, "Permission is not defined."); + return null; + } + else + { + return FormatDescription(targetValue, platform); + } + } + + #endregion + + #region Private methods + + private string FormatDescription(string description, RuntimePlatform targetPlatform) + { + switch (targetPlatform) + { + case RuntimePlatform.IPhonePlayer: + case RuntimePlatform.tvOS: + return description.Replace("$productName", "$(PRODUCT_NAME)"); + + case RuntimePlatform.Android: + return description.Replace("$productName", "%app_name%"); + + default: + return description; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionDefinition.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionDefinition.cs.meta new file mode 100644 index 00000000..8cb65b96 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5fc6140c0d697442c811e30d35b4be13 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionHandler.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionHandler.cs new file mode 100644 index 00000000..0ff7e090 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionHandler.cs @@ -0,0 +1,15 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public static class NativeFeatureUsagePermissionHandler + { + #region Staic properties + + public static INativeFeatureUsagePermissionHandler Default { get; set; } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionHandler.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionHandler.cs.meta new file mode 100644 index 00000000..c3adbb07 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeFeatureUsagePermissionHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b98aa52511283458daebda671fe88c4e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectBase.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectBase.cs new file mode 100644 index 00000000..d179a532 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectBase.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public abstract class NativeObjectBase : INativeObject + { + #region Properties + + protected bool IsDisposed { get; private set; } + + #endregion + + #region Constructors + + protected NativeObjectBase(NativeObjectRef nativeObjectRef = null) + { + // set properties + NativeObjectRef = nativeObjectRef; + IsDisposed = false; + } + + ~NativeObjectBase() + { + Dispose(false); + } + + #endregion + + #region INativeInterface implementation + + public NativeObjectRef NativeObjectRef { get; protected set; } + + public IntPtr AddrOfNativeObject() + { + return (NativeObjectRef == null) ? IntPtr.Zero : NativeObjectRef.Pointer; + } + + #endregion + + #region IDisposable implementation + + public void Dispose() + { + Dispose(true); + } + + protected virtual void Dispose(bool disposing) + { + // check object state + if (IsDisposed) + { + return; + } + +#if NATIVE_PLUGINS_DEBUG && !UNITY_ANDROID + DebugLogger.Log(CoreLibraryDomain.NativePlugins, $"Disposing native object: {GetType()}."); +#endif + + if (disposing) + { + // dispose managed state (managed objects) + } + + // free unmanaged resources (unmanaged objects) + if (NativeObjectRef != null) + { + NativeObjectRef.Dispose(); + } + + // mark that object is released + IsDisposed = true; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectBase.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectBase.cs.meta new file mode 100644 index 00000000..9cda49da --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c26198a4c0c74137b309cbbfc92d5c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectRef.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectRef.cs new file mode 100644 index 00000000..0ea63c41 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectRef.cs @@ -0,0 +1,89 @@ +using System; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public class NativeObjectRef : IDisposable + { + #region Fields + + private bool m_disposed; + + #endregion + + #region Properties + + public IntPtr Pointer { get; private set; } + + #endregion + + #region Constructors + + public NativeObjectRef(IntPtr ptr, bool autoRetain) + { + // check argument valuie + Assert.IsFalse(ptr == IntPtr.Zero, "Ptr is null."); + + // set properties + Pointer = ptr; + m_disposed = false; + + if (autoRetain) + { + Retain(); + } + } + + ~NativeObjectRef() + { + Dispose(false); + } + + #endregion + + #region Memory management methods + + private void Retain() + { + RetainInternal(Pointer); + } + + private void Release() + { + ReleaseInternal(Pointer); + } + + protected virtual void RetainInternal(IntPtr ptr) + { } + + protected virtual void ReleaseInternal(IntPtr ptr) + { } + + #endregion + + #region IDisposable implementation + + public void Dispose() + { + Dispose(true); + } + + private void Dispose(bool disposing) + { + if (!m_disposed) + { + DebugLogger.Log(CoreLibraryDomain.NativePlugins, "Disposing native object."); + if (disposing) + { + // dispose managed state (managed objects). + } + + // free unmanaged resources (unmanaged objects) + Release(); + m_disposed = true; + } + } + + #endregion + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectRef.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectRef.cs.meta new file mode 100644 index 00000000..cc679d3a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Base/NativeObjectRef.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0e7f9350b37144545b727770b965bdb4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants.meta new file mode 100644 index 00000000..e549fd3a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 49b3df04feaa34d0489f9ae385445504 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/Calendar.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/Calendar.cs new file mode 100644 index 00000000..632077ea --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/Calendar.cs @@ -0,0 +1,60 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + /// + /// An enumeration for the available calendars. + /// + public enum Calendar + { + // Identifier for the Buddhist calendar. + Buddhist = 1, + + // Identifier for the Chinese calendar. + Chinese, + + // Identifier for the Coptic calendar. + Coptic, + + // Identifier for the Ethiopic (Amete Alem) calendar. + EthiopicAmeteAlem, + + // Identifier for the Ethiopic (Amete Mihret) calendar. + EthiopicAmeteMihret, + + // Identifier for the Gregorian calendar. + Gregorian, + + // Identifier for the Hebrew calendar. + Hebrew, + + // Identifier for the Indian calendar. + Indian, + + // Identifier for the Islamic calendar. + Islamic, + + // Identifier for the Islamic civil calendar. + IslamicCivil, + + // Identifier for the tabular Islamic calendar. + IslamicTabular, + + // Identifier for the Islamic Umm al-Qura calendar, as used in Saudi Arabia. + IslamicUmmAlQura, + + // Identifier for the ISO8601 calendar. + Iso8601, + + // Identifier for the Japanese calendar. + Japanese, + + // Identifier for the Persian calendar. + Persian, + + // Identifier for the Republic of China (Taiwan) calendar. + RepublicOfChina, + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/Calendar.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/Calendar.cs.meta new file mode 100644 index 00000000..ec13643b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/Calendar.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4aca1aa19e3a84647bf445e172fe5b77 +timeCreated: 1576157724 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/NativePlatform.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/NativePlatform.cs new file mode 100644 index 00000000..21b286b1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/NativePlatform.cs @@ -0,0 +1,25 @@ +using System; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + /// + /// The enum is used to indicate the platform application is running. + /// + [Flags] + public enum NativePlatform + { + /// The runtime platform could not be determined. + Unknown = 0, + + /// The runtime platform is iOS. + iOS = 1 << 0, + + /// The runtime platform is tvOS. + tvOS = 1 << 1, + + /// The runtime platform is Android. + Android = 1 << 2, + + All = iOS | tvOS | Android, + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/NativePlatform.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/NativePlatform.cs.meta new file mode 100644 index 00000000..dfe85d3a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Constants/NativePlatform.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ff7dcb4297b74826a7416f29c3334e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Controllers.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Controllers.meta new file mode 100644 index 00000000..6654a466 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Controllers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f0a18063511f747ac803092d817acb1e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Controllers/TouchScreenKeyboardController.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Controllers/TouchScreenKeyboardController.cs new file mode 100644 index 00000000..4b27d34e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Controllers/TouchScreenKeyboardController.cs @@ -0,0 +1,172 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using UnityTouchScreenKeyboard = UnityEngine.TouchScreenKeyboard; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public class TouchScreenKeyboardController : MonoBehaviour + { + #region Static fields + + [ClearOnReload] + private static TouchScreenKeyboardController s_sharedInstance = null; + + #endregion + + #region Fields + +#if UNITY_EDITOR + private bool m_simulateInEditor = false; + private float m_editorKeyboardHeightRatio = 0.4f; +#endif + + #endregion + + #region Static properties + + public static bool IsSupported => UnityTouchScreenKeyboard.isSupported; + + public static bool IsVisible { get; private set; } + + #endregion + + #region Static events + + [ClearOnReload] + public static event Callback OnKeyboardDidShow = null; + + [ClearOnReload] + public static event Callback OnKeyboardWillHide = null; + + #endregion + + #region Static methods + + public static int GetKeyboardHeight(bool includeInput) + { +#if UNITY_EDITOR + return (s_sharedInstance && s_sharedInstance.m_simulateInEditor) ? (int)(Screen.height * s_sharedInstance.m_editorKeyboardHeightRatio) : 0; +#elif UNITY_IOS + return (int)TouchScreenKeyboard.area.height; +#elif UNITY_ANDROID + using (AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) + { + AndroidJavaObject unityPlayer = unityClass.GetStatic("currentActivity").Get("mUnityPlayer"); + AndroidJavaObject view = unityPlayer.Call("getView"); + AndroidJavaObject dialog = unityPlayer.Get("mSoftInputDialog"); + if (view == null || dialog == null) + return 0; + var decorHeight = 0; + if (includeInput) + { + AndroidJavaObject decorView = dialog.Call("getWindow").Call("getDecorView"); + if (decorView != null) + decorHeight = decorView.Call("getHeight"); + } + using (AndroidJavaObject rect = new AndroidJavaObject("android.graphics.Rect")) + { + view.Call("getWindowVisibleDisplayFrame", rect); + return Screen.height - rect.Call("height") + decorHeight; + } + } +#else + return 0; +#endif + } + + private static bool IsKeyboardVisibleInternal() + { +#if UNITY_EDITOR + return (s_sharedInstance != null) && s_sharedInstance.m_simulateInEditor; +#elif UNITY_IOS || UNITY_ANDROID + return UnityTouchScreenKeyboard.visible; +#else + return false; +#endif + } + + private static bool IsKeyboardActiveInternal() + { + if (Application.platform == RuntimePlatform.IPhonePlayer) + { + return GetKeyboardHeight(includeInput: false) > 0; + } + + return IsKeyboardVisibleInternal(); + } + + #endregion + + #region Unity methods + + private void Awake() + { + // set shared instance + s_sharedInstance = this; +#if UNITY_EDITOR + IsVisible = (Application.isEditor && m_simulateInEditor); +#endif + } + + private void Start() + { + // check whether this feature is supported + if (!IsSupported) + { + enabled = false; + } + } + + private void Update() + { + if (IsKeyboardVisibleInternal()) + { + if (!IsVisible && IsKeyboardActiveInternal()) + { + IsVisible = true; + + SendKeyboardDidShow(); + } + } + else if (IsVisible) + { + IsVisible = false; + + SendKeyboardWillHide(); + } + } + + private void OnDestroy() + { + // reset shared instance + if (s_sharedInstance == this) + { + s_sharedInstance = null; + } + } + + #endregion + + #region Private methods + + private void SendKeyboardDidShow() + { + if (OnKeyboardDidShow != null) + { + OnKeyboardDidShow.Invoke(); + } + } + + private void SendKeyboardWillHide() + { + if (OnKeyboardWillHide != null) + { + OnKeyboardWillHide.Invoke(); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Controllers/TouchScreenKeyboardController.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Controllers/TouchScreenKeyboardController.cs.meta new file mode 100644 index 00000000..1f23bf74 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Controllers/TouchScreenKeyboardController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 867485d1ec0ad48129d30cf6cb2e276b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels.meta new file mode 100644 index 00000000..1c8fd09d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3480eb129209e4b8db3f89becd938afc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/CircularRegion.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/CircularRegion.cs new file mode 100644 index 00000000..10e20584 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/CircularRegion.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + /// + /// A circular geographic region, specified as a center point and radius. + /// + [Serializable] + public struct CircularRegion + { + #region Fields + + [SerializeField] + private LocationCoordinate m_center; + + [SerializeField] + private float m_radius; + + [SerializeField] + private string m_regionId; + + #endregion + + #region Properties + + /// + /// The center point of the geographic region to monitor. + /// + public LocationCoordinate Center + { + get => m_center; + set => m_center = value; + } + + /// + /// The distance (measured in meters) from the center point of the geographic region to the edge of the circular boundary. + /// + public float Radius + { + get => m_radius; + set => m_radius = value; + } + + /// + /// The identifier for the region object. + /// + public string RegionId + { + get => m_regionId; + set => m_regionId = value; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/CircularRegion.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/CircularRegion.cs.meta new file mode 100644 index 00000000..594ad67e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/CircularRegion.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d2a6ea98fae6a4ba8bde124af2b661f4 +timeCreated: 1576157288 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/DateComponents.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/DateComponents.cs new file mode 100644 index 00000000..c0959848 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/DateComponents.cs @@ -0,0 +1,214 @@ +using System; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + /// + /// A date or time specified in terms of units (such as year, month, day, hour, and minute) to be evaluated in a calendar system and time zone. + /// + [Serializable] + public class DateComponents + { + #region Fields + + [SerializeField] + private Calendar m_calendar; + + [SerializeField] + private int m_year; + + [SerializeField] + private int m_month; + + [SerializeField] + private int m_day; + + [SerializeField] + private int m_hour; + + [SerializeField] + private int m_minute; + + [SerializeField] + private int m_second; + + [SerializeField] + private int m_nanosecond; + + [SerializeField] + private int m_weekday; + + [SerializeField] + private int m_weekOfMonth; + + [SerializeField] + private int m_weekOfYear; + + #endregion + + #region Properties + + /// + /// Gets or sets the calendar. + /// + /// The calendar. + public Calendar Calendar + { + get => m_calendar; + set => m_calendar = value; + } + + /// + /// Gets or sets the year. + /// + /// The year. + public int Year + { + get => m_year; + set => m_year = value; + } + + /// + /// Gets or sets the month. + /// + /// The month. + public int Month + { + get => m_month; + set => m_month = value; + } + + /// + /// Gets or sets the day. + /// + /// The day. + public int Day + { + get => m_day; + set => m_day = value; + } + + /// + /// Gets or sets the hour. + /// + /// The hour. + public int Hour + { + get => m_hour; + set => m_hour = value; + } + + /// + /// Gets or sets the minute. + /// + /// The minute. + public int Minute + { + get => m_minute; + set => m_minute = value; + } + + /// + /// Gets or sets the second. + /// + /// The second. + public int Second + { + get => m_second; + set => m_second = value; + } + + /// + /// Gets or sets the nanosecond. + /// + /// The nanosecond. + public int Nanosecond + { + get => m_nanosecond; + set => m_nanosecond = value; + } + + /// + /// Gets or sets the weekday. + /// Note: Weekday starts from Monday(1) to Sunday(7) - As per ISO 8601 standard + /// + /// The weekday. + [Obsolete("Use DayOfWeek property instead", true)] + public int Weekday + { + get => m_weekday; + + set + { + if(value == 0) + { + DebugLogger.LogError(CoreLibraryDomain.NativePlugins, "Weekday cannot be 0. Weekday starts from Monday(1) to Sunday(7)"); + } + + m_weekday = value; + } + } + + /// + /// Gets or sets the weekday. + /// Note: DayOfWeek starts from Monday(1) to Sunday(7) - As per ISO 8601 standard + /// + /// The day of the week. + public int DayOfWeek + { + get => m_weekday; + + set + { + if(value == 0) + { + DebugLogger.LogError(CoreLibraryDomain.NativePlugins, "DayOfWeek cannot be 0. DayOfWeek starts from Monday(1) to Sunday(7) (ISO 8601 standard)"); + } + + m_weekday = value; + } + } + + /// + /// Gets or sets the week of month. + /// + /// The week of month. + public int WeekOfMonth + { + get => m_weekOfMonth; + set => m_weekOfMonth = value; + } + + /// + /// Gets or sets the week of year. + /// + /// The week of year. + public int WeekOfYear + { + get => m_weekOfYear; + set => m_weekOfYear = value; + } + + #endregion + + #region Constructors + + public DateComponents() + { + // set default values + m_calendar = (Calendar)0; + m_year = -1; + m_month = -1; + m_day = -1; + m_hour = -1; + m_minute = -1; + m_second = -1; + m_nanosecond = -1; + m_weekday = -1; + m_weekOfMonth = -1; + m_weekOfYear = -1; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/DateComponents.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/DateComponents.cs.meta new file mode 100644 index 00000000..c0e343a6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/DateComponents.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7c9275e3d5c9040bd81845e9659841bc +timeCreated: 1576157288 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/LocationCoordinate.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/LocationCoordinate.cs new file mode 100644 index 00000000..748d80c7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/LocationCoordinate.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + [Serializable] + public struct LocationCoordinate + { + #region Fields + + [SerializeField] + private double m_latitude; + + [SerializeField] + private double m_longitude; + + #endregion + + #region Properties + + /// + /// The latitude in degrees. + /// + public double Latitude + { + get => m_latitude; + set => m_latitude = value; + } + + /// + /// The longitude in degrees. + /// + public double Longitude + { + get => m_longitude; + set => m_longitude = value; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/LocationCoordinate.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/LocationCoordinate.cs.meta new file mode 100644 index 00000000..e14c500f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/LocationCoordinate.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 776bfa20243a0448b8e0b6f8679945f5 +timeCreated: 1576157288 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/NativePlatformConstantSet.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/NativePlatformConstantSet.cs new file mode 100644 index 00000000..746087f3 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/NativePlatformConstantSet.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + [Serializable, Obsolete("This class is deprecated. Instead use RuntimePlatformConstantSet.", true)] + public class NativePlatformConstantSet + { + #region Fields + + [SerializeField] + private string m_ios; + + [SerializeField] + private string m_tvos; + + [SerializeField] + private string m_android; + + #endregion + + #region Constructors + + public NativePlatformConstantSet(string ios = null, string tvos = null, string android = null) + { + // set properties + m_ios = ios; + m_tvos = tvos; + m_android = android; + } + + #endregion + + #region Public methods + + public string GetConstantForActivePlatform(string defaultValue = null) + { + var platform = PlatformMappingServices.GetActivePlatform(); + return GetConstantForPlatform(platform, defaultValue); + } + + public string GetConstantForPlatform(NativePlatform platform, string defaultValue = null) + { + string targetValue = null; + switch (platform) + { + case NativePlatform.iOS: + targetValue = m_ios; + break; + + case NativePlatform.tvOS: + targetValue = m_tvos; + break; + + case NativePlatform.Android: + targetValue = m_android; + break; + + default: + throw VBException.SwitchCaseNotImplemented(platform); + } + + return string.IsNullOrEmpty(targetValue) ? defaultValue : targetValue; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/NativePlatformConstantSet.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/NativePlatformConstantSet.cs.meta new file mode 100644 index 00000000..a1ad76c3 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/NativePlatformConstantSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 41ed7eccdda15444aa9e0a6e413bbfca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/PlatformConstant.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/PlatformConstant.cs new file mode 100644 index 00000000..555f1ac6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/PlatformConstant.cs @@ -0,0 +1,130 @@ +using System; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + /// + /// Object represents an immutable, read-only object that combines a string value with a platform. + /// + [Serializable, Obsolete("This class is deprecated. Instead use RuntimePlatformConstant.", true)] + public class PlatformConstant + { + #region Fields + + [SerializeField] + private NativePlatform m_platform = NativePlatform.Unknown; + + [SerializeField] + private string m_value = string.Empty; + + #endregion + + #region Properties + + /// + /// Gets the runtime platform associated with string value. + /// + /// The enum value indicates the platform to which string value belongs. + public NativePlatform Platform + { + get => m_platform; + private set => m_platform = value; + } + + /// + /// Gets the string value. + /// + /// The string value. + public string Value + { + get => m_value; + private set => m_value = value; + } + + #endregion + + #region Constructors + + public PlatformConstant(NativePlatform platform, string value) + { + // set properties + m_platform = platform; + m_value = value; + } + + #endregion + + #region Static methods + + /// + /// Returns a new instance of , containing a string value functional only on iOS platform. + /// + /// The instance of . + /// The string value associated with iOS platform. + public static PlatformConstant iOS(string value) + { + return new PlatformConstant(NativePlatform.iOS, value); + } + + /// + /// Returns a new instance of , containing a string value functional only on tvOS platform. + /// + /// The instance of . + /// The string value associated with tvOS platform. + public static PlatformConstant tvOS(string value) + { + return new PlatformConstant(NativePlatform.tvOS, value); + } + + /// + /// Returns a new instance of , containing a string value functional only on Android platform. + /// + /// The instance of . + /// The string value associated with Android platform. + public static PlatformConstant Android(string value) + { + return new PlatformConstant(NativePlatform.Android, value); + } + + /// + /// Returns a new instance of , containing a string value functional on all supported platform. + /// + /// The instance of . + /// The string value associated with all supported platforms. + public static PlatformConstant All(string value) + { + return new PlatformConstant(NativePlatform.All, value); + } + + /// + /// Returns a new instance of , containing a string value associated with active platform. + /// + /// The instance of . + /// The string value associated with active platform. + public static PlatformConstant Current(string value) + { + var currentPlatform = PlatformMappingServices.GetActivePlatform(); + return new PlatformConstant(currentPlatform, value); + } + + #endregion + + #region Public methods + + public bool IsEqualToPlatform(NativePlatform other) + { + return ((other & m_platform) != 0); + } + + #endregion + + #region Base class methods + + public override string ToString() + { + return m_value; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/PlatformConstant.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/PlatformConstant.cs.meta new file mode 100644 index 00000000..fd0daa1b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/DataModels/PlatformConstant.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 41d8b8d5e6d154b8483e8852a1576cd8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces.meta new file mode 100644 index 00000000..1299137c --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6446a8969499a4ddbbe44b75c2b1efbb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterface.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterface.cs new file mode 100644 index 00000000..fb9bb47d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterface.cs @@ -0,0 +1,15 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public interface INativeFeatureInterface : INativeObject + { + #region Properties + + bool IsAvailable { get; } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterface.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterface.cs.meta new file mode 100644 index 00000000..9c7f3217 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterface.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c94273cdd69cf45f79888beedf3d4ef7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterfaceProvider.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterfaceProvider.cs new file mode 100644 index 00000000..00bbfda8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterfaceProvider.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public interface INativeFeatureInterfaceProvider + { + INativeFeatureInterface CreateInterface(Type interfaceType, RuntimePlatform platform); + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterfaceProvider.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterfaceProvider.cs.meta new file mode 100644 index 00000000..bc82741d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureInterfaceProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35b1f5a2d9a8645a0ae651a699f3a594 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureUsagePermissionHandler.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureUsagePermissionHandler.cs new file mode 100644 index 00000000..0fffe22a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureUsagePermissionHandler.cs @@ -0,0 +1,12 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public interface INativeFeatureUsagePermissionHandler + { + void ShowPrepermissionDialog(string permissionType, Callback onAllowCallback, Callback onDenyCallback); + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureUsagePermissionHandler.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureUsagePermissionHandler.cs.meta new file mode 100644 index 00000000..90ae0641 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeFeatureUsagePermissionHandler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 27e6f057169d34e1e93b6ade55a7eb7d +timeCreated: 1590818662 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeObject.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeObject.cs new file mode 100644 index 00000000..a5f08f5b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeObject.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public interface INativeObject : IDisposable + { + #region Properties + + NativeObjectRef NativeObjectRef { get; } + + #endregion + + #region Methods + + IntPtr AddrOfNativeObject(); + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeObject.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeObject.cs.meta new file mode 100644 index 00000000..b3c27776 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Interfaces/INativeObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88e8c8b8bb8644860be7a19fff49ee9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc.meta new file mode 100644 index 00000000..687e3267 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1fe5ec3cda7e342b6b71849ff61e3099 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/Diagnostics.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/Diagnostics.cs new file mode 100644 index 00000000..f5087bc6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/Diagnostics.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public static class Diagnostics + { + #region Constants + + public static readonly Error kFeatureNotSupported = new Error(description: "The requested operation could not be completed because this feature is not supported on current platform."); + + public const string kCreateNativeObjectError = "Failed to create native object."; + + #endregion + + #region Exception methods + + public static VBException PluginNotConfiguredException(string name = "Native") + { + return new VBException($"Please configure {name} plugin, before you start using it in your project."); + } + + #endregion + + #region Log methods + + public static void LogNotSupportedInEditor(string featureName = "This") + { + DebugLogger.LogWarning(CoreLibraryDomain.NativePlugins, $"{featureName} feature is not supported by simulator."); + } + + public static void LogNotSupported(string featureName = "This") + { + DebugLogger.LogWarning(CoreLibraryDomain.NativePlugins, $"{featureName} feature is not supported."); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/Diagnostics.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/Diagnostics.cs.meta new file mode 100644 index 00000000..10f8969e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/Diagnostics.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d39da2d9f38df4eea8716af130b9bb33 +timeCreated: 1596368684 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/ManagedObjectReferencePool.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/ManagedObjectReferencePool.cs new file mode 100644 index 00000000..bcec4cd7 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/ManagedObjectReferencePool.cs @@ -0,0 +1,50 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.EssentialKit +{ + internal static class ManagedObjectReferencePool + { + #region Static fields + + [ClearOnReload] + private static List s_objectList; + + #endregion + + #region Static methods + + public static void Retain(object obj) + { + // Validate arguments + Assert.IsArgNotNull(obj, "obj"); + + EnsureInitialized(); + s_objectList.Add(obj); + } + + public static void Release(object obj) + { + // Validate arguments + Assert.IsArgNotNull(obj, "obj"); + + EnsureInitialized(); + s_objectList.Remove(obj); + } + + #endregion + + #region Private static methods + + private static void EnsureInitialized() + { + if (s_objectList != null) return; + + s_objectList = new List(capacity: 8); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/ManagedObjectReferencePool.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/ManagedObjectReferencePool.cs.meta new file mode 100644 index 00000000..7f6c3df2 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Misc/ManagedObjectReferencePool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 07e137e50cc514c1589bc07411d60d9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged.meta new file mode 100644 index 00000000..930084ac --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: af612c1e8ec284a528a1c4baa7a8bbb0 +folderAsset: yes +timeCreated: 1576156074 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeArray.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeArray.cs new file mode 100644 index 00000000..8cb6e0a8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeArray.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + [StructLayout(LayoutKind.Sequential)] + public struct NativeArray + { + #region Properties + + public IntPtr Pointer { get; set; } + + public int Length { get; set; } + + #endregion + + #region Public methods + + public T[] GetStructArray() where T : struct + { + if (Pointer == IntPtr.Zero) + { + return null; + } + + T[] structArray = new T[Length]; + + // copy data to managed array + var managedArray = new IntPtr[Length]; + Marshal.Copy(Pointer, managedArray, 0, Length); + + for (int i = 0; i < Length; i++) + { + structArray[i] = MarshalUtility.PtrToStructure(managedArray[i]); + } + return structArray; + } + + public string[] GetStringArray() + { + // Marshal ptr to array + return MarshalUtility.CreateStringArray(Pointer, Length); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeArray.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeArray.cs.meta new file mode 100644 index 00000000..c6bb0727 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeArray.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1dee3e63646dc48399a88782207714e8 +timeCreated: 1578652458 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeError.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeError.cs new file mode 100644 index 00000000..fab5c922 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeError.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + [StructLayout(LayoutKind.Sequential)] + public struct NativeError + { + #region Properties + + public int Code { get; set; } + + public IntPtr DescriptionPtr { get; set; } + + #endregion + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeError.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeError.cs.meta new file mode 100644 index 00000000..1113a3f6 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeError.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c238f39ac276047e2b72c8a2cff60d38 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeErrorExtensions.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeErrorExtensions.cs new file mode 100644 index 00000000..04d6df65 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeErrorExtensions.cs @@ -0,0 +1,17 @@ +using System; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public static class NativeErrorExtensions + { + public static Error Convert(this NativeError nativeError, string domain = null) + { + if(nativeError.DescriptionPtr == IntPtr.Zero) + { + return null; + } + + return new Error(domain, nativeError.Code, nativeError.DescriptionPtr.AsString()); + } + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeErrorExtensions.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeErrorExtensions.cs.meta new file mode 100644 index 00000000..431b5d5f --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeErrorExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 613ef4643e3ea4946ae9c26c065198e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeInstanceMap.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeInstanceMap.cs new file mode 100644 index 00000000..10365cc1 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeInstanceMap.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public static class NativeInstanceMap + { + #region Static fields + + [ClearOnReload] + private static Dictionary s_instanceMap; + + #endregion + + #region Constructors + + static NativeInstanceMap() + { + Initialize(); + } + + #endregion + + #region Static methods + + public static void AddInstance(IntPtr nativePtr, object owner) + { + s_instanceMap.Add(nativePtr, owner); + } + + public static bool RemoveInstance(IntPtr nativePtr) + { + return s_instanceMap.Remove(nativePtr); + } + + public static T GetOwner(IntPtr nativePtr) where T : class + { + s_instanceMap.TryGetValue(nativePtr, out object owner); + + return owner as T; + } + + #endregion + + #region Private static methods + + [ExecuteOnReload] + private static void Initialize() + { + // Set properties + s_instanceMap = new Dictionary(capacity: 4); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeInstanceMap.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeInstanceMap.cs.meta new file mode 100644 index 00000000..01b52ca3 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeInstanceMap.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cf1da258f945f4d67afd6d8cb6483c37 +timeCreated: 1554526179 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeSize.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeSize.cs new file mode 100644 index 00000000..fee11bc8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeSize.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + [StructLayout(LayoutKind.Sequential)] + public struct NativeSize + { + #region Properties + + public float Width { get; set; } + + public float Height { get; set; } + + #endregion + + #region Constructors + + public NativeSize(float width, float height) + { + Width = width; + Height = height; + } + + #endregion + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeSize.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeSize.cs.meta new file mode 100644 index 00000000..4d8fd369 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/NativeSize.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44b8264bf69004a9bb6827fb203f9a27 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityAttachment.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityAttachment.cs new file mode 100644 index 00000000..7e58b9a8 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityAttachment.cs @@ -0,0 +1,23 @@ +using System.Collections; +using System.Collections.Generic; +using System; +using System.Runtime.InteropServices; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + [StructLayout(LayoutKind.Sequential)] + public struct UnityAttachment + { + #region Properties + + public int DataArrayLength { get; set; } + + public IntPtr DataArrayPtr { get; set; } + + public IntPtr MimeTypePtr { get; set; } + + public IntPtr FileNamePtr { get; set; } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityAttachment.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityAttachment.cs.meta new file mode 100644 index 00000000..3c43d04d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityAttachment.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e80263f11eaf5435cbe9e5a12216fbc3 +timeCreated: 1576157288 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityCircularRegion.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityCircularRegion.cs new file mode 100644 index 00000000..a1508a07 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityCircularRegion.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + [StructLayout(LayoutKind.Sequential)] + public struct UnityCircularRegion + { + #region Properties + + public double Latitude { get; set; } + + public double Longitude { get; set; } + + public float Radius { get; set; } + + public IntPtr RegionIdPtr { get; set; } + + #endregion + + #region Operator methods + + public static implicit operator UnityCircularRegion(CircularRegion circularRegion) + { + return new UnityCircularRegion() + { + Latitude = circularRegion.Center.Latitude, + Longitude = circularRegion.Center.Longitude, + Radius = circularRegion.Radius, + RegionIdPtr = circularRegion.RegionId == null ? IntPtr.Zero : Marshal.StringToHGlobalAuto(circularRegion.RegionId), + }; + } + + public static implicit operator CircularRegion(UnityCircularRegion circularRegion) + { + return new CircularRegion() + { + Center = new LocationCoordinate() { Latitude = circularRegion.Latitude, Longitude = circularRegion.Longitude }, + Radius = circularRegion.Radius, + RegionId = MarshalUtility.ToString(circularRegion.RegionIdPtr), + }; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityCircularRegion.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityCircularRegion.cs.meta new file mode 100644 index 00000000..5cf78cce --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityCircularRegion.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 608db460057f2437495e09818bd1f88d +timeCreated: 1576157288 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityColor.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityColor.cs new file mode 100644 index 00000000..b3155441 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityColor.cs @@ -0,0 +1,43 @@ +using System.Collections; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + [StructLayout(LayoutKind.Sequential)] + public struct UnityColor + { + #region Properties + + public float Red { get; set; } + + public float Green { get; set; } + + public float Blue { get; set; } + + public float Alpha { get; set; } + + #endregion + + #region Operators + + public static implicit operator Color(UnityColor nativeColor) + { + return new Color(nativeColor.Red, nativeColor.Green, nativeColor.Blue, nativeColor.Alpha); + } + + public static explicit operator UnityColor(Color color) + { + return new UnityColor() + { + Red = color.r, + Green = color.g, + Blue = color.b, + Alpha = color.a, + }; + } + + #endregion + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityColor.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityColor.cs.meta new file mode 100644 index 00000000..708d53b4 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityColor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f16ac326669ac4f82a08e4aaf35122ce +timeCreated: 1576157288 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityDateComponent.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityDateComponent.cs new file mode 100644 index 00000000..ed7b0097 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityDateComponent.cs @@ -0,0 +1,78 @@ +using System.Collections; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + [StructLayout(LayoutKind.Sequential)] + public struct UnityDateComponents + { + #region Properties + + public Calendar Calendar { get; set; } + + public long Year { get; set; } + + public long Month { get; set; } + + public long Day { get; set; } + + public long Hour { get; set; } + + public long Minute { get; set; } + + public long Second { get; set; } + + public long Nanosecond { get; set; } + + public long DayOfWeek { get; set; } + + public long WeekOfMonth { get; set; } + + public long WeekOfYear { get; set; } + + #endregion + + #region Operator methods + + public static implicit operator UnityDateComponents(DateComponents dateComponents) + { + return new UnityDateComponents() + { + Calendar = dateComponents.Calendar, + Year = dateComponents.Year, + Month = dateComponents.Month, + Day = dateComponents.Day, + Hour = dateComponents.Hour, + Minute = dateComponents.Minute, + Second = dateComponents.Second, + Nanosecond = dateComponents.Nanosecond, + DayOfWeek = dateComponents.DayOfWeek, + WeekOfMonth = dateComponents.WeekOfMonth, + WeekOfYear = dateComponents.WeekOfYear, + }; + } + + public static implicit operator DateComponents(UnityDateComponents dateComponents) + { + return new DateComponents() + { + Calendar = dateComponents.Calendar, + Year = (int)dateComponents.Year, + Month = (int)dateComponents.Month, + Day = (int)dateComponents.Day, + Hour = (int)dateComponents.Hour, + Minute = (int)dateComponents.Minute, + Second = (int)dateComponents.Second, + Nanosecond = (int)dateComponents.Nanosecond, + DayOfWeek = (int)dateComponents.DayOfWeek, + WeekOfMonth = (int)dateComponents.WeekOfMonth, + WeekOfYear = (int)dateComponents.WeekOfYear, + }; + } + + #endregion + + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityDateComponent.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityDateComponent.cs.meta new file mode 100644 index 00000000..c1a554bc --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityDateComponent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8c2328e7413e9460b95a51b3f3d8b645 +timeCreated: 1576157288 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityRect.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityRect.cs new file mode 100644 index 00000000..48d8f788 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityRect.cs @@ -0,0 +1,43 @@ +using System.Collections; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + [StructLayout(LayoutKind.Sequential)] + public struct UnityRect + { + #region Properties + + public float X { get; set; } + + public float Y { get; set; } + + public float Width { get; set; } + + public float Height { get; set; } + + #endregion + + #region Operators + + public static implicit operator Rect(UnityRect nativeRect) + { + return new Rect(nativeRect.X, nativeRect.Y, nativeRect.Width, nativeRect.Height); + } + + public static explicit operator UnityRect(Rect rect) + { + return new UnityRect() + { + X = rect.x, + Y = rect.y, + Width = rect.width, + Height = rect.height, + }; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityRect.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityRect.cs.meta new file mode 100644 index 00000000..da665fcf --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Unmanaged/UnityRect.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 497b88e3e95064649b6f4f73c7b48907 +timeCreated: 1576157288 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities.meta new file mode 100644 index 00000000..1a938d3a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fda0bc5760ce84e3b9fd93c18bbc3eeb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/IntPtrUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/IntPtrUtility.cs new file mode 100644 index 00000000..ccbc04d9 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/IntPtrUtility.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Runtime.InteropServices; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public static class IntPtrUtility + { + private const string kZuluFormat = "yyyy-MM-dd HH:mm:ss zzz"; + + public static string AsString(this IntPtr ptr) + { + return MarshalUtility.ToString(ptr); + } + + public static DateTime AsDateTime(this IntPtr ptr) + { + var value = ptr.AsString(); + + if (value != null) + { + return DateTime.ParseExact(value, kZuluFormat, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).ToUniversalTime(); + } + + return default; + } + + public static DateTime? AsOptionalDateTime(this IntPtr ptr) + { + if(ptr == IntPtr.Zero) + return null; + + return AsDateTime(ptr); + } + + public static T AsStruct(this IntPtr ptr) where T : struct + { + return MarshalUtility.PtrToStructure(ptr); + } + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/IntPtrUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/IntPtrUtility.cs.meta new file mode 100644 index 00000000..777f17df --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/IntPtrUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 187b0939526b04e8abbd980d291bb1c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/MarshalUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/MarshalUtility.cs new file mode 100644 index 00000000..2d5fe258 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/MarshalUtility.cs @@ -0,0 +1,177 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public static class MarshalUtility + { + #region Marshalling methods + + public static string ToString(IntPtr stringPtr) + { + if (IntPtr.Zero == stringPtr) + { + return null; + } + + return Marshal.PtrToStringAuto(stringPtr); + } + + public static IntPtr GetIntPtr(object value) + { + if (null == value) + { + return IntPtr.Zero; + } + + return GCHandle.ToIntPtr(value: GCHandle.Alloc(value)); + } + + public static void FreeUnmanagedStringArray(IntPtr unmanagedArrayPtr, int count) + { + DebugLogger.Log(CoreLibraryDomain.NativePlugins, $"Releasing unmanaged array: {unmanagedArrayPtr}."); + + // release each strings allocated in unmanaged space + var unmanagedArrayHandle = GCHandle.FromIntPtr(unmanagedArrayPtr); + var dataArray = (IntPtr[])unmanagedArrayHandle.Target; + for (int iter = 0; iter < count; iter++) + { + Marshal.FreeHGlobal(dataArray[iter]); + } + + // release handle + unmanagedArrayHandle.Free(); + } + + public static IntPtr CreateUnmanagedArray(IntPtr[] managedArray) + { + int arrayLength = managedArray.Length; + int size = Marshal.SizeOf(managedArray[0]) * arrayLength; + var unmanagedPtr = Marshal.AllocHGlobal(size); + + // copy + Marshal.Copy(managedArray, 0, unmanagedPtr, arrayLength); + + return unmanagedPtr; + } + + public static void ReleaseUnmanagedArray(IntPtr unmanagedArrayPtr) + { + Marshal.FreeHGlobal(unmanagedArrayPtr); + } + + public static IntPtr[] CreateManagedArray(IntPtr arrayPtr, int length) + { + // check whether array is valid + if (length == -1) //Not checking arrayPtr is zero or not - as it's possible to have an array with no elements too. If null needs to be created, length needs to be -1. + { + return null; + } + + // copy data to managed array + var managedArray = new IntPtr[length]; + Marshal.Copy(arrayPtr, managedArray, 0, length); + + return managedArray; + } + + public static string[] CreateStringArray(IntPtr arrayPtr, int length) + { + if (length == -1) //Not checking arrayPtr is zero or not - as it's possible to have an array with no elements too. If null needs to be created, length needs to be -1. + { + return null; + } + + // create array + var managedArray = new IntPtr[length]; + Marshal.Copy(arrayPtr, managedArray, 0, length); + + var stringArray = new string[length]; + for (int iter = 0; iter < length; iter++) + { + stringArray[iter] = ToString(managedArray[iter]); + } + + return stringArray; + } + + #endregion + + #region Structures + + public static T PtrToStructure(IntPtr ptr) where T : struct + { + return (T)Marshal.PtrToStructure(ptr, typeof(T)); + } + + public static TOutput[] ConvertNativeArrayItems(IntPtr arrayPtr, int length, Converter converter, bool includeNullObjects) + where TInput : struct + where TOutput : class + { + if (IntPtr.Zero == arrayPtr) + { + return null; + } + + // create original data array from native data + var outputObjects = new List(length); + int sizeOfInputObject = Marshal.SizeOf(typeof(TInput)); + long arrayPtrAddr = arrayPtr.ToInt64(); + int offset = 0; + for (int iter = 0; iter < length; iter++) + { + var inputObject = PtrToStructure(new IntPtr(arrayPtrAddr + offset)); + var outputObject = converter(inputObject); + if (EqualityComparer.Default.Equals(outputObject, default(TOutput)) && !includeNullObjects) + { + DebugLogger.LogWarning(CoreLibraryDomain.NativePlugins, $"Failed to convert object with data {inputObject}."); + continue; + } + + // add object to list + outputObjects.Add(outputObject); + + // update pointer + offset += sizeOfInputObject; + } + + return outputObjects.ToArray(); + } + + public static TOutput[] ConvertNativeArrayItems(IntPtr arrayPtr, int length, Converter converter, bool includeNullObjects) + where TOutput : class + { + // check whether array is valid + if (arrayPtr == IntPtr.Zero) + { + return null; + } + + // copy data to managed array + var managedArray = new IntPtr[length]; + Marshal.Copy(arrayPtr, managedArray, 0, length); + + // convert items to specified type using converter method + var outputObjects = new List(length); + for (int iter = 0; iter < length; iter++) + { + var nativePtr = managedArray[iter]; + var outputObject = converter(nativePtr); + if (EqualityComparer.Default.Equals(outputObject, default(TOutput)) && !includeNullObjects) + { + DebugLogger.LogWarning(CoreLibraryDomain.NativePlugins, $"Failed to convert object with data {nativePtr}."); + continue; + } + + // add object to list + outputObjects.Add(outputObject); + } + + return outputObjects.ToArray(); + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/MarshalUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/MarshalUtility.cs.meta new file mode 100644 index 00000000..bb727907 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/MarshalUtility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ef4d5675c6e30431484773e937db4147 +timeCreated: 1550585821 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformConstantUtility.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformConstantUtility.cs new file mode 100644 index 00000000..d696e657 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformConstantUtility.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + [Obsolete("This class is deprecated. Instead use RuntimePlatformConstantUtility.", true)] + public static class PlatformConstantUtility + { + #region Static methods + + public static PlatformConstant FindConstantForActivePlatform(PlatformConstant[] array) + { + var activePlatform = PlatformMappingServices.GetActivePlatform(); + return FindConstantForPlatform(array, activePlatform); + } + + public static PlatformConstant FindConstantForPlatform(PlatformConstant[] array, NativePlatform platform) + { + if (array != null) + { + return Array.Find(array, (item) => item.IsEqualToPlatform(platform)); + } + + return null; + } + + public static string GetActivePlatformConstantValue(PlatformConstant[] array) + { + var targetConstant = FindConstantForActivePlatform(array); + return (targetConstant != null) ? targetConstant.Value : null; + } + + public static string GetPlatformConstantValue(PlatformConstant[] array, NativePlatform platform) + { + var targetConstant = FindConstantForPlatform(array, platform); + return (targetConstant != null) ? targetConstant.Value : null; + } + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformConstantUtility.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformConstantUtility.cs.meta new file mode 100644 index 00000000..73b3352e --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformConstantUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f529ce1b5ec1e4834a33da7f8e53fdab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformMappingServices.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformMappingServices.cs new file mode 100644 index 00000000..fadca70a --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformMappingServices.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace VoxelBusters.CoreLibrary.NativePlugins +{ + public static class PlatformMappingServices + { + #region Platform methods + + public static NativePlatform GetActivePlatform() + { + return ConvertRuntimePlatformToNativePlatform(Application.platform); + } + + public static NativePlatform ConvertRuntimePlatformToNativePlatform(RuntimePlatform platform) + { + switch (platform) + { +#if UNITY_EDITOR + case RuntimePlatform.OSXEditor: + case RuntimePlatform.WindowsEditor: + case RuntimePlatform.LinuxEditor: + return ConvertBuildTargetToNativePlatform(EditorUserBuildSettings.activeBuildTarget); +#endif + case RuntimePlatform.IPhonePlayer: + return NativePlatform.iOS; + + case RuntimePlatform.tvOS: + return NativePlatform.tvOS; + + case RuntimePlatform.Android: + return NativePlatform.Android; + + default: + return NativePlatform.Unknown; + } + } + + #endregion + + #region Editor methods + +#if UNITY_EDITOR + public static NativePlatform ConvertBuildTargetToNativePlatform(BuildTarget buildTarget) + { + switch (buildTarget) + { + case BuildTarget.iOS: + return NativePlatform.iOS; + + case BuildTarget.tvOS: + return NativePlatform.tvOS; + + case BuildTarget.Android: + return NativePlatform.Android; + + default: + return NativePlatform.Unknown; + } + } +#endif + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformMappingServices.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformMappingServices.cs.meta new file mode 100644 index 00000000..ab4d7826 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/Core/Utilities/PlatformMappingServices.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c8eede7cc82e45cd9e8b7ff46a26463 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit.meta new file mode 100644 index 00000000..8271ada5 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2807845595d714aafab40c3bc2bb2cfd +folderAsset: yes +timeCreated: 1576851380 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/ConsoleRect.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/ConsoleRect.cs new file mode 100644 index 00000000..bd44ae3d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/ConsoleRect.cs @@ -0,0 +1,73 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace VoxelBusters.CoreLibrary.NativePlugins.DemoKit +{ + public class ConsoleRect : MonoBehaviour + { + #region Constants + private const int MAX_LENGTH = 10000; + + #endregion + + #region Properties + + [SerializeField] + private Text m_text = null; + + [SerializeField] + private ScrollRect m_textScroller = null; + + #endregion + + #region Unity methods + + private void Awake() + { + Reset(); + } + + #endregion + + #region Public methods + + public void Log(string message, bool append) + { + if (append && m_text.text.Length < MAX_LENGTH) + { + m_text.text = m_text.text + "\n---------------\n" + message; + } + else + { + m_text.text = message; + } + + StartCoroutine(MoveScrollerToBottom()); + } + + #endregion + + #region Private methods + + private IEnumerator MoveScrollerToBottom() + { + yield return null; + + // set position + m_textScroller.verticalNormalizedPosition = 0; + } + + private void Reset() + { + if (m_text) + { + m_text.text = "Console"; + } + } + + #endregion + } + +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/ConsoleRect.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/ConsoleRect.cs.meta new file mode 100644 index 00000000..297f04a3 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/ConsoleRect.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 030d6e213de734b1ab4bfb8f6a416dc9 +timeCreated: 1549317823 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionBehaviour.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionBehaviour.cs new file mode 100644 index 00000000..7b66bc9b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionBehaviour.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.UI; +using UnityEngine.Serialization; + +namespace VoxelBusters.CoreLibrary.NativePlugins.DemoKit +{ + public class DemoActionBehaviour : MonoBehaviour where TActionType : struct, IConvertible + { + #region Fields + + [SerializeField] + private TActionType m_actionType = default(TActionType); + + #endregion + + #region Properties + + public Selectable Selectable + { + get; + private set; + } + + public TActionType ActionType + { + get + { + return m_actionType; + } + } + + #endregion + + #region Events + + [SerializeField, FormerlySerializedAs("onSelect")] + private SelectEvent m_onSelect = new SelectEvent(); + public SelectEvent OnSelect + { + get + { + return m_onSelect; + } + } + + #endregion + + #region Unity methods + + private void Awake() + { + // cache components + Selectable = GetComponent(); + + RegisterForCallback(Selectable); + } + + #endregion + + #region Private methods + + private void RegisterForCallback(Selectable selectable) + { + // cache component + if (selectable is Button) + { + ((Button)selectable).onClick.AddListener(OnSelectInternal); + } + if (selectable is Toggle) + { + ((Toggle)selectable).onValueChanged.AddListener((value) => OnSelectInternal()); + } + if (selectable is Dropdown) + { + ((Dropdown)selectable).onValueChanged.AddListener((value) => OnSelectInternal()); + } + } + + private void OnSelectInternal() + { + // send event + if (m_onSelect != null) + { + m_onSelect.Invoke(Selectable); + } + } + + #endregion + + #region Nested types + + [Serializable] + public class SelectEvent : UnityEvent + { } + + #endregion + } +} diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionBehaviour.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionBehaviour.cs.meta new file mode 100644 index 00000000..83d224cd --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionBehaviour.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2753d359fc4064fa5ad1bdc2c1d95d9a +timeCreated: 1562570180 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionPanelBase{TAction,TActionType}.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionPanelBase{TAction,TActionType}.cs new file mode 100644 index 00000000..ef7a5418 --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionPanelBase{TAction,TActionType}.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; +using VoxelBusters.CoreLibrary; + +namespace VoxelBusters.CoreLibrary.NativePlugins.DemoKit +{ + public abstract class DemoActionPanelBase : DemoPanel where TAction : DemoActionBehaviour where TActionType : struct, System.IConvertible + { + #region Constants + + private const string kLogCreateInstance = "Create instance by calling {0})"; + + #endregion + + #region Fields + + private ConsoleRect m_consoleRect = null; + + private TAction[] m_actions = null; + + #endregion + + #region Unity methods + + protected virtual void Awake() + { + // set properties + m_consoleRect = GetComponentInChildren(); + m_actions = GetComponentsInChildren(); + + // init + SetActionCallbacks(); + } + + protected virtual void Start() + { } + + protected virtual void OnEnable() + { } + + protected virtual void OnDisable() + { } + + #endregion + + #region Base methods + + public override void Rebuild() + { + SetActionCallbacks(); + } + + #endregion + + #region Private methods + + protected virtual string GetCreateInstanceCodeSnippet() + { + throw VBException.NotImplemented(); + } + + protected TAction FindActionOfType(TActionType actionType) + { + return Array.Find(m_actions, (item) => EqualityComparer.Default.Equals(actionType, item.ActionType)); + } + + protected void Log(string message, bool append = true) + { + #if NATIVE_PLUGINS_DEBUG + Debug.Log(message); + #endif + m_consoleRect.Log(message, append); + } + + protected void LogMissingInstance(bool append = true) + { + m_consoleRect.Log(string.Format(kLogCreateInstance, GetCreateInstanceCodeSnippet()), append); + } + + protected bool AssertPropertyIsValid(string property, string value) + { + return AssertPropertyIsValid(property, () => string.IsNullOrEmpty(value)); + } + + protected bool AssertPropertyIsValid(string property, Func condition) + { + if (condition()) + { + m_consoleRect.Log($"Property \"{property}\" value is invalid.", append: true); + return false; + } + return true; + } + + private void SetActionCallbacks() + { + // set button property + foreach (TAction actionButton in m_actions) + { + var selectEvent = actionButton.OnSelect; + selectEvent.RemoveAllListeners(); + selectEvent.AddListener(OnActionSelect); + } + } + + #endregion + + #region UI callback methods + + public void OnActionSelect(Selectable selectable) + { + TAction selectedAction = Array.Find(m_actions, (item) => selectable == item.Selectable); + if (selectedAction) + { + OnActionSelectInternal(selectedAction); + } + } + + protected virtual void OnActionSelectInternal(TAction selectedAction) + {} + + #endregion + } +} \ No newline at end of file diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionPanelBase{TAction,TActionType}.cs.meta b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionPanelBase{TAction,TActionType}.cs.meta new file mode 100644 index 00000000..75f2f86d --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoActionPanelBase{TAction,TActionType}.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad5a6450a250245f288f781b63435f20 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoBackButton.cs b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoBackButton.cs new file mode 100644 index 00000000..55f7038b --- /dev/null +++ b/EintooAR/Assets/Plugins/VoxelBusters/CoreLibrary/Runtime/NativePlugins/DemoKit/DemoBackButton.cs @@ -0,0 +1,22 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; +using UnityEngine.SceneManagement; + +namespace VoxelBusters.CoreLibrary.NativePlugins.DemoKit +{ + [RequireComponent(typeof(Button))] + public class DemoBackButton : MonoBehaviour + { + #region Unity methods + + private void Awake() + { + // set button + GetComponent